Compare commits
10 Commits
cf0cf4e585
...
c3bf4673ee
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3bf4673ee | ||
|
|
c2618ecae2 | ||
|
|
63aa8bd89e | ||
|
|
251e5d0fd2 | ||
|
|
3bc81164a1 | ||
|
|
33318b12e0 | ||
|
|
40005dc00d | ||
|
|
b017301f84 | ||
|
|
2ade42f356 | ||
|
|
bba986c608 |
@ -454,7 +454,7 @@ def SignOutputRaw(json):
|
||||
req = rpc_pb2.SignOutputRawRequest()
|
||||
json_format.Parse(json, req)
|
||||
|
||||
assert len(req.signDesc.pubKey) in [33, 0]
|
||||
#assert len(req.signDesc.pubKey) in [33, 0]
|
||||
assert len(req.signDesc.doubleTweak) in [32, 0]
|
||||
assert len(req.signDesc.sigHashes.hashPrevOuts) == 64
|
||||
assert len(req.signDesc.sigHashes.hashSequence) == 64
|
||||
@ -469,11 +469,8 @@ def SignOutputRaw(json):
|
||||
|
||||
|
||||
def signOutputRaw(tx, signDesc):
|
||||
adr = None
|
||||
if len(signDesc.pubKey) != 0:
|
||||
adr = bitcoin.pubkey_to_address('p2wpkh', binascii.hexlify(
|
||||
signDesc.keyDescriptor.pubKey).decode("utf-8")) # Because this is all NewAddress supports
|
||||
pri = fetchPrivKey(adr, signDesc.keyDescriptor.keyLocator.family, signDesc.keyDescriptor.keyLocator.index)
|
||||
pri = derivePrivKey(signDesc.keyDescriptor)
|
||||
assert pri is not None
|
||||
pri2 = maybeTweakPrivKey(signDesc, pri)
|
||||
sig = rawTxInWitnessSignature(tx, signDesc.sigHashes, signDesc.inputIndex,
|
||||
signDesc.output.value, signDesc.witnessScript, sigHashAll, pri2)
|
||||
@ -523,35 +520,30 @@ def ComputeInputScript(json):
|
||||
return msg
|
||||
|
||||
|
||||
def fetchPrivKey(str_address, keyLocatorFamily, keyLocatorIndex, privKey=None):
|
||||
def fetchPrivKey(str_address, keyLocatorFamily, keyLocatorIndex):
|
||||
pri = None
|
||||
|
||||
if str_address is not None:
|
||||
assert privKey is None
|
||||
pri, redeem_script = WALLET.export_private_key(str_address, None)
|
||||
|
||||
if redeem_script:
|
||||
print("ignoring redeem script", redeem_script)
|
||||
|
||||
typ, pri, compressed = bitcoin.deserialize_privkey(pri)
|
||||
if keyLocatorFamily == 0 and keyLocatorIndex == 0: return EC_KEY(pri)
|
||||
|
||||
ks = keystore.BIP32_KeyStore({})
|
||||
der = "m/0'/"
|
||||
xtype = 'p2wpkh'
|
||||
ks.add_xprv_from_seed(int.from_bytes(pri, "big"), xtype, der)
|
||||
elif privKey is not None:
|
||||
ks = keystore.BIP32_KeyStore({})
|
||||
der = "m/0'/"
|
||||
xtype = 'p2wpkh'
|
||||
ks.add_xprv_from_seed(privKey.secret.to_bytes(32, 'big'), xtype, der)
|
||||
ks.add_xprv_from_seed(pri, xtype, der)
|
||||
else:
|
||||
ks = WALLET.keystore
|
||||
|
||||
if keyLocatorFamily is not None or keyLocatorIndex is not None:
|
||||
if keyLocatorFamily != 0 or keyLocatorIndex != 0:
|
||||
pri = ks.get_private_key([1017, keyLocatorFamily, keyLocatorIndex], password=None)[0]
|
||||
pri = EC_KEY(pri)
|
||||
else:
|
||||
pri = privKey
|
||||
|
||||
assert pri is not None
|
||||
|
||||
return pri
|
||||
|
||||
@ -801,6 +793,7 @@ async def readReqAndReply(obj, writer):
|
||||
await writer.drain()
|
||||
|
||||
def privKeyForPubKey(pubKey):
|
||||
global globalIdx
|
||||
priv_keys = WALLET.storage.get("lightning_extra_keys", [])
|
||||
for i in priv_keys:
|
||||
candidate = EC_KEY(i.to_bytes(32, "big"))
|
||||
@ -822,21 +815,20 @@ def privKeyForPubKey(pubKey):
|
||||
print("ignoring redeem script", redeem_script)
|
||||
|
||||
typ, pri, compressed = bitcoin.deserialize_privkey(pri)
|
||||
return EC_KEY(pri.to_bytes(32, "big"))
|
||||
return EC_KEY(pri)
|
||||
|
||||
#assert False, "could not find private key for pubkey {} hex={}".format(pubKey, binascii.hexlify(pubKey).decode("ascii"))
|
||||
|
||||
def derivePrivKey(keyDesc):
|
||||
global globalIdx
|
||||
keyDescFam = keyDesc.keyLocator.family
|
||||
keyDescIdx = keyDesc.keyLocator.index
|
||||
keyDescPubKey = keyDesc.pubKey
|
||||
privKey = None
|
||||
|
||||
if len(keyDescPubKey) != 0:
|
||||
privKey = privKeyForPubKey(keyDescPubKey)
|
||||
return privKeyForPubKey(keyDescPubKey)
|
||||
|
||||
return fetchPrivKey(None, keyDescFam, keyDescIdx, privKey)
|
||||
return fetchPrivKey(None, keyDescFam, keyDescIdx)
|
||||
|
||||
def DerivePrivKey(json):
|
||||
req = rpc_pb2.DerivePrivKeyRequest()
|
||||
@ -911,7 +903,7 @@ def ScalarMult(json):
|
||||
|
||||
m = rpc_pb2.ScalarMultResponse()
|
||||
|
||||
m.pubKey = pubkFromECKEY(EC_KEY(c.digest()))
|
||||
m.hashResult = c.digest()
|
||||
|
||||
msg = json_format.MessageToJson(m)
|
||||
return msg
|
||||
|
||||
Loading…
Reference in New Issue
Block a user