recover_pk selftests: show curve & hash

This commit is contained in:
Philippe Teuwen 2024-12-14 00:51:58 +01:00
commit 93639e16a5

View file

@ -133,10 +133,10 @@ def selftests():
"12817C48", "3351979A3449CACD9EE113A75B862917F03EFAE68DA399C06342BF8583C88DFE769DF49754A96F7C28B57189FB05B9C10E2305D41423A6EB"], # noqa: E501 "12817C48", "3351979A3449CACD9EE113A75B862917F03EFAE68DA399C06342BF8583C88DFE769DF49754A96F7C28B57189FB05B9C10E2305D41423A6EB"], # noqa: E501
'pk': "044409ADC42F91A8394066BA83D872FB1D16803734E911170412DDF8BAD1A4DADFD0416291AFE1C748253925DA39A5F39A1C557FFACD34C62E"}, # noqa: E501 'pk': "044409ADC42F91A8394066BA83D872FB1D16803734E911170412DDF8BAD1A4DADFD0416291AFE1C748253925DA39A5F39A1C557FFACD34C62E"}, # noqa: E501
{'name': "NTAG413DNA", {'name': "NTAG413DNA, DESFire EV1",
'samples': ["042468222F5C80", "B9211E320F321BD1D0E158E10FF15109B389638BAE15D9909D7725BF1250ED236D66F1AF75C94D60330E4E92535F5E6997675281A5687173", # noqa: E501 'samples': ["042468222F5C80", "B9211E320F321BD1D0E158E10FF15109B389638BAE15D9909D7725BF1250ED236D66F1AF75C94D60330E4E92535F5E6997675281A5687173", # noqa: E501
"042938222F5C80", "18B642797D1FD71806146A7A6EC778D3FDD04F39C4A3B36A592BD1A114DC44E5528380FA766C0B7EA32B284AFBE84300B620369F0686D8CC"], # noqa: E501 "042938222F5C80", "18B642797D1FD71806146A7A6EC778D3FDD04F39C4A3B36A592BD1A114DC44E5528380FA766C0B7EA32B284AFBE84300B620369F0686D8CC"], # noqa: E501
'pk': "04bb5d514f7050025c7d0f397310360eec91eaf792e96fc7e0f496cb4e669d414f877b7b27901fe67c2e3b33cd39d1c797715189ac951c2add"}, # noqa: E501 'pk': "04BB5D514F7050025C7D0F397310360EEC91EAF792E96FC7E0F496CB4E669D414F877B7B27901FE67C2E3B33CD39D1C797715189AC951C2ADD"}, # noqa: E501
{'name': "NTAG424DNA", {'name': "NTAG424DNA",
'samples': ["0463474AA26A80", "27E9A50E6CA4BA9037C02F7D20A80D0284D0C1D83C67F5A5AC1D8A4EF86C9508417E4E9C6F85AA7920F0ABDED984CAF20467D66EA54BBF08", # noqa: E501 'samples': ["0463474AA26A80", "27E9A50E6CA4BA9037C02F7D20A80D0284D0C1D83C67F5A5AC1D8A4EF86C9508417E4E9C6F85AA7920F0ABDED984CAF20467D66EA54BBF08", # noqa: E501
@ -208,35 +208,39 @@ def selftests():
succeeded = True succeeded = True
for t in tests: for t in tests:
print("Testing %-38s" % (t['name']+":"), end="") print("Testing %-40s" % (t['name']+":"), end="")
curvenames = guess_curvename(t['samples'][1]) curvenames = guess_curvename(t['samples'][1])
recovered = set() recovered = set()
for c in curvenames: for c in curvenames:
for h in [None, "md5", "sha1", "sha256", "sha512"]: for h in [None, "md5", "sha1", "sha256", "sha512"]:
recovered |= recover_multiple(t['samples'][::2], t['samples'][1::2], c, alghash=h) recovered |= set([(c, h, pk) for pk in
recover_multiple(t['samples'][::2], t['samples'][1::2], c, alghash=h)])
if (len(recovered) == 1): if (len(recovered) == 1):
pk = recovered.pop() c, h, pk = recovered.pop()
pk = binascii.hexlify(pk).decode('utf8') pk = binascii.hexlify(pk).decode('utf8')
if pk.lower() == t['pk'].lower(): if pk.lower() == t['pk'].lower():
print("( %s )" % color('ok', fg='green')) print("%15s/%-8s ( %s )" % (c, h, color('ok', fg='green')))
else: else:
succeeded = False succeeded = False
print("( FAIL ) got %s" % pk.lower()) print("%15s/%-8s ( %s ) got %s" % (c, h, color('fail', fg='red'), pk.lower()))
elif len(t['samples'])//2 == 1: elif len(t['samples'])//2 == 1:
pks = [binascii.hexlify(pk).decode('utf8').lower() for pk in list(recovered)] recovereds = [(c, h) for c, h, pk in list(recovered)
if t['pk'].lower() in pks: if t['pk'].lower() == binascii.hexlify(pk).decode('utf8').lower()]
print("( %s ) partial" % color('ok', fg='green')) if len(recovereds) > 0:
print("%15s/%-8s ( %s ) partial" % (c, h, color('ok', fg='green')))
else: else:
succeeded = False succeeded = False
print("( %s ), got %s" % color('fail', fg='red'), pks) print(" ( %s ), got" % color('fail', fg='red'))
for c, h, pk in list(recovered):
print(c, h, binascii.hexlify(pk).decode('utf8').lower())
else: else:
print(" ( %s )" % color('fail', fg='red')) print(" ( %s )" % color('fail', fg='red'))
succeeded = False succeeded = False
print("=====================================================") print("===============================================================================")
fail = color('fail', fg='red') fail = color('fail', fg='red')
ok = color('ok', fg='green') ok = color('ok', fg='green')
print("Tests: ( %s )" % [fail, ok][succeeded]) print("Tests: ( %s )" % [fail, ok][succeeded])