Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # only work on python3 and install python-ecdsa.
- from ecdsa.ellipticcurve import CurveFp, Point
- from binascii import hexlify
- from random import randint
- class ECDH:
- #defined value for P-256 curve (FIPS 186-3)
- p = 115792089210356248762697446949407573530086143415290314195533631308867097853951
- n = 115792089210356248762697446949407573529996955224135760342422259061068512044369
- a = -3
- b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b
- c = 0x7efba1662985be9403cb055c75d4f7e0ce8d84a9c5114abcaf3177680104fa0d
- gx = 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
- gy = 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
- c256 = CurveFp(p, a, b)
- p256 = Point(c256, gx, gy, n)
- def generate_public_key(self,ska):
- d = int.from_bytes(ska,"big")
- q = d * self.p256
- return q.x().to_bytes(32,"big"),q.y().to_bytes(32,"big")
- def generate_dhkey(self,sk,pkx,pky):
- d = int.from_bytes(sk,"big")
- coordinates = Point(self.c256,int.from_bytes(pkx,"big"),int.from_bytes(pky,"big"),self.n)
- dhk = d * coordinates
- return dhk.x().to_bytes(32,"big"), dhk.y().to_bytes(32,"big")
- if __name__ == '__main__':
- ecdh = ECDH()
- #Secret Key
- ska = randint(1,ecdh.n-1).to_bytes(32,"big")
- skb = randint(1,ecdh.n-1).to_bytes(32,"big")
- #Public Key A B for certain coordinate
- pkax,pkay = ecdh.generate_public_key(ska)
- pkbx,pkby = ecdh.generate_public_key(skb)
- print("Secret Key A : %s" % hexlify(ska).decode())
- print("Secret Key B : %s\n" % hexlify(skb).decode())
- print("Public Key A-X : %s" % hexlify(pkax).decode())
- print("Public Key A-Y : %s" % hexlify(pkay).decode())
- print("Public Key B-X : %s" % hexlify(pkbx).decode())
- print("Public Key B-Y : %s\n" % hexlify(pkby).decode())
- dhkax, dhkay = ecdh.generate_dhkey(ska,pkbx,pkby)
- dhkbx, dhkby = ecdh.generate_dhkey(skb,pkax,pkay)
- print("P256(Secret-Key A, Public Key B-X, B-Y) :\nDH-Key (X) : %s\n" % hexlify(dhkax).decode())
- print("P256(Secret-Key B, Public Key A-X, A-Y) :\nDH-Key (X) : %s\n\n" % hexlify(dhkbx).decode())
- print("P256(Secret-Key A, Public Key B-X, B-Y) :\nDH-Key (Y) : %s\n" % hexlify(dhkay).decode())
- print("P256(Secret-Key B, Public Key A-X, A-Y) :\nDH-Key (Y) : %s\n" % hexlify(dhkby).decode())
Add Comment
Please, Sign In to add comment