26 lines
801 B
Python
26 lines
801 B
Python
import x25519
|
|
|
|
basepoint = b'\x09' + b'\x00' * 31
|
|
|
|
def derive_pubkey(seckey):
|
|
return x25519.x25519(seckey, basepoint)
|
|
|
|
def ecdh(pubkey, seckey):
|
|
shared_secret = x25519.x25519(seckey, pubkey)
|
|
ored = 0
|
|
for i in shared_secret:
|
|
ored |= i
|
|
if ored == 0:
|
|
raise ValueError
|
|
else:
|
|
return shared_secret
|
|
|
|
if __name__ == '__main__':
|
|
alice_sk = bytes.fromhex('77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a')
|
|
alice_pk = derive_pubkey(alice_sk)
|
|
bob_sk = bytes.fromhex('5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb')
|
|
bob_pk = derive_pubkey(bob_sk)
|
|
|
|
print(ecdh(alice_pk, bob_sk).hex() == '4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742')
|
|
print(ecdh(bob_pk, alice_sk).hex() == '4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742')
|