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)
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, ))
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:])
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)
def __init__(self): raise Error('Unimplemented')