mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 13:00:42 -07:00
recover_pk: seach with and without sha256
This commit is contained in:
parent
55224eed75
commit
56c99d223c
1 changed files with 28 additions and 21 deletions
|
@ -8,11 +8,8 @@ import sys
|
||||||
|
|
||||||
debug = False
|
debug = False
|
||||||
|
|
||||||
def recover(data, signature):
|
def recover(data, signature, alghash=None):
|
||||||
recovered = set()
|
recovered = set()
|
||||||
# Some, like Vivokey Spark1, are doing a SHA256
|
|
||||||
# alghash = "sha256"
|
|
||||||
alghash = None
|
|
||||||
if len(signature) == 32:
|
if len(signature) == 32:
|
||||||
curve = sslcrypto.ecc.get_curve("secp128r1")
|
curve = sslcrypto.ecc.get_curve("secp128r1")
|
||||||
recoverable = False
|
recoverable = False
|
||||||
|
@ -50,28 +47,38 @@ def recover(data, signature):
|
||||||
pass
|
pass
|
||||||
return recovered
|
return recovered
|
||||||
|
|
||||||
if len(sys.argv) < 3 or len(sys.argv) % 2 == 0:
|
def recover_multiple(uids, sigs, alghash=None):
|
||||||
print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0])
|
recovered = set()
|
||||||
print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0])
|
assert len(uids) == len(sigs)
|
||||||
exit(1)
|
for i in range(len(uids)):
|
||||||
|
data = binascii.unhexlify(uids[i])
|
||||||
recovered = set()
|
|
||||||
for i in range(1, len(sys.argv), 2):
|
|
||||||
data = binascii.unhexlify(sys.argv[i])
|
|
||||||
if debug:
|
if debug:
|
||||||
print("UID (%2i): " % len(data), binascii.hexlify(data))
|
print("UID (%2i): " % len(data), binascii.hexlify(data))
|
||||||
signature = binascii.unhexlify(sys.argv[i+1])
|
signature = binascii.unhexlify(sigs[i])
|
||||||
if debug:
|
if debug:
|
||||||
print("Signature (%2i): " % len(signature), binascii.hexlify(signature))
|
print("Signature (%2i): " % len(signature), binascii.hexlify(signature))
|
||||||
recovered_tmp = recover(data, signature)
|
recovered_tmp = recover(data, signature, alghash)
|
||||||
if i == 1:
|
if i == 0:
|
||||||
if recovered_tmp == set():
|
if recovered_tmp == set():
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
recovered = recovered_tmp
|
recovered = recovered_tmp
|
||||||
else:
|
else:
|
||||||
recovered &= recovered_tmp
|
recovered &= recovered_tmp
|
||||||
|
return recovered
|
||||||
|
|
||||||
|
if len(sys.argv) < 3 or len(sys.argv) % 2 == 0:
|
||||||
|
print("Usage: \n%s UID SIGN [UID SIGN] [...]" % sys.argv[0])
|
||||||
|
print("Example: \n%s 04ee45daa34084 ebb6102bff74b087d18a57a54bc375159a04ea9bc61080b7f4a85afe1587d73b" % sys.argv[0])
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
print("Assuming no hash was used in the signature generation:")
|
||||||
|
recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2])
|
||||||
|
print("Possible uncompressed Pk(s):")
|
||||||
|
for pk in list(recovered):
|
||||||
|
print(binascii.hexlify(pk).decode('utf8'))
|
||||||
|
print("Assuming SHA-256 was used in the signature generation:")
|
||||||
|
recovered = recover_multiple(sys.argv[1:][::2], sys.argv[1:][1::2], alghash="sha256")
|
||||||
print("Possible uncompressed Pk(s):")
|
print("Possible uncompressed Pk(s):")
|
||||||
for pk in list(recovered):
|
for pk in list(recovered):
|
||||||
print(binascii.hexlify(pk).decode('utf8'))
|
print(binascii.hexlify(pk).decode('utf8'))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue