Guest User

Untitled

a guest
Dec 10th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. # only work on python3 and install python-ecdsa.
  2. from ecdsa.ellipticcurve import CurveFp, Point
  3. from binascii import hexlify
  4. from random import randint
  5.  
  6. class ECDH:
  7. #defined value for P-256 curve (FIPS 186-3)
  8. p = 115792089210356248762697446949407573530086143415290314195533631308867097853951
  9. n = 115792089210356248762697446949407573529996955224135760342422259061068512044369
  10. a = -3
  11. b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b
  12. c = 0x7efba1662985be9403cb055c75d4f7e0ce8d84a9c5114abcaf3177680104fa0d
  13. gx = 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
  14. gy = 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
  15.  
  16. c256 = CurveFp(p, a, b)
  17. p256 = Point(c256, gx, gy, n)
  18.  
  19. def generate_public_key(self,ska):
  20. d = int.from_bytes(ska,"big")
  21. q = d * self.p256
  22. return q.x().to_bytes(32,"big"),q.y().to_bytes(32,"big")
  23.  
  24. def generate_dhkey(self,sk,pkx,pky):
  25. d = int.from_bytes(sk,"big")
  26. coordinates = Point(self.c256,int.from_bytes(pkx,"big"),int.from_bytes(pky,"big"),self.n)
  27. dhk = d * coordinates
  28. return dhk.x().to_bytes(32,"big"), dhk.y().to_bytes(32,"big")
  29.  
  30. if __name__ == '__main__':
  31.  
  32. ecdh = ECDH()
  33. #Secret Key
  34. ska = randint(1,ecdh.n-1).to_bytes(32,"big")
  35. skb = randint(1,ecdh.n-1).to_bytes(32,"big")
  36.  
  37. #Public Key A B for certain coordinate
  38. pkax,pkay = ecdh.generate_public_key(ska)
  39. pkbx,pkby = ecdh.generate_public_key(skb)
  40.  
  41. print("Secret Key A : %s" % hexlify(ska).decode())
  42. print("Secret Key B : %s\n" % hexlify(skb).decode())
  43. print("Public Key A-X : %s" % hexlify(pkax).decode())
  44. print("Public Key A-Y : %s" % hexlify(pkay).decode())
  45. print("Public Key B-X : %s" % hexlify(pkbx).decode())
  46. print("Public Key B-Y : %s\n" % hexlify(pkby).decode())
  47.  
  48. dhkax, dhkay = ecdh.generate_dhkey(ska,pkbx,pkby)
  49. dhkbx, dhkby = ecdh.generate_dhkey(skb,pkax,pkay)
  50.  
  51. print("P256(Secret-Key A, Public Key B-X, B-Y) :\nDH-Key (X) : %s\n" % hexlify(dhkax).decode())
  52. print("P256(Secret-Key B, Public Key A-X, A-Y) :\nDH-Key (X) : %s\n\n" % hexlify(dhkbx).decode())
  53. print("P256(Secret-Key A, Public Key B-X, B-Y) :\nDH-Key (Y) : %s\n" % hexlify(dhkay).decode())
  54. 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