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')