Esempio n. 1
0
def op_checkmultisig(stack, z):
    if len(stack) < 1:
        return False
    n = decode_num(stack.pop())
    if len(stack) < n + 1:
        return False
    sec_pubkeys = []
    for _ in range(n):
        sec_pubkeys.append(stack.pop())
    m = decode_num(stack.pop())
    if len(stack) < m + 1:
        return False
    der_signatures = []
    for _ in range(m):
        der_signatures.append(stack.pop()[:-1])
    stack.pop()
    try:
        points = [S256Point.parse(sec) for sec in sec_pubkeys]
        sigs = [Signature.parse(der) for der in der_signatures]
        for sig in sigs:
            if len(points) == 0:
                print("signatures no good or not in right order")
                return False
            while points:
                point = points.pop(0)
                if point.verify(z, sig):
                    break
        stack.append(encode_num(1))
    except (ValueError, SyntaxError):
        return False
    return True
 def test_op_checksig(self):
     z = 0x7c076ff316692a3d7eb3c3bb0f8b1488cf72e1afcd929e29307032997a838a3d
     sec = bytes.fromhex(
         '04887387e452b8eacc4acfde10d9aaf7f6d9a0f975aabb10d006e4da568744d06c61de6d95231cd89026e286df3b6ae4a894a3378e393e93a0f45b666329a0ae34'
     )
     sig = bytes.fromhex(
         '3045022000eff69ef2b1bd93a66ed5219add4fb51e11a840f404876325a1e8ffe0529a2c022100c7207fee197d27c618aea621406f6bf5ef6fca38681d82b2f06fddbdce6feab601'
     )
     stack = [sig, sec]
     self.assertTrue(op_checksig(stack, z))
     self.assertEqual(decode_num(stack[0]), 1)
 def test_op_checkmultisig(self):
     z = 0xe71bfa115715d6fd33796948126f40a8cdd39f187e4afb03896795189fe1423c
     sig1 = bytes.fromhex(
         '3045022100dc92655fe37036f47756db8102e0d7d5e28b3beb83a8fef4f5dc0559bddfb94e02205a36d4e4e6c7fcd16658c50783e00c341609977aed3ad00937bf4ee942a8993701'
     )
     sig2 = bytes.fromhex(
         '3045022100da6bee3c93766232079a01639d07fa869598749729ae323eab8eef53577d611b02207bef15429dcadce2121ea07f233115c6f09034c0be68db99980b9a6c5e75402201'
     )
     sec1 = bytes.fromhex(
         '022626e955ea6ea6d98850c994f9107b036b1334f18ca8830bfff1295d21cfdb70'
     )
     sec2 = bytes.fromhex(
         '03b287eaf122eea69030a0e9feed096bed8045c8b98bec453e1ffac7fbdbd4bb71'
     )
     stack = [b'', sig1, sig2, b'\x02', sec1, sec2, b'\x02']
     self.assertTrue(op_checkmultisig(stack, z))
     self.assertEqual(decode_num(stack[0]), 1)
Esempio n. 4
0
import op

n = 65
e = op.encode_num(n)
print(e)

d = op.decode_num(e)
print(d)