Esempio n. 1
0
def _decode_pub_compressed(bytes):
    if bytes[0] not in ['\x02', '\x03']:
        raise Error('first byte not x02 or \x03')
    x = decode_bigint(bytes[1:])
    alpha = (x * x * x + curve_secp256k1.a() * x +
             curve_secp256k1.b()) % curve_secp256k1.p()
    beta = msqr.modular_sqrt(alpha, curve_secp256k1.p())
    y = beta if (beta - ord(bytes[0])) % 2 == 0 else curve_secp256k1.p() - beta
    return ecdsa.ellipticcurve.Point(curve_secp256k1, x, y, secp256k1.order)
Esempio n. 2
0
def encode_varint(i):
    if i < 0xfd:
        return struct.pack('<B', i)
    elif i <= 0xffff:
        return struct.pack('<BH', 0xfd, i)
    elif i <= 0xffffffff:
        return struct.pack('<BI', 0xfe, i)
    elif i <= 0xffffffffffffffff:
        return struct.pack('<BQ', 0xff, i)
    else:
        raise Error('int too big for varint: %r' % (i, ))
Esempio n. 3
0
def decode_privkey(priv):
    raw = base58_decode_checksum(priv)
    version = raw[0]
    if version != '\x80':
        raise Error('Version (%r) != \x80' % (version, ))
    return decode_bigint(raw[1:])
Esempio n. 4
0
def _decode_pub(bytes):
    if bytes[0] != '\x04':
        raise Error('byte 0 should be 0x04')
    x = decode_bigint(bytes[1:BIGINT_BYTES + 1])
    y = decode_bigint(bytes[BIGINT_BYTES + 1:])
    return ecdsa.ellipticcurve.Point(curve_secp256k1, x, y, secp256k1.order)
Esempio n. 5
0
 def __init__(self):
     raise Error('Unimplemented')