Advertisement
Guest User

bip38 testing

a guest
Aug 15th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. intermediateCodeHex, isValid = base58decode(intermediateCode,1,0)
  2. if (isValid == False) or (len(intermediateCodeHex) != 98):
  3.     raiseError("bip0038encrypt intermediate code base58 checksum mis-match or length error","655")
  4. lotsequencebyte = intermediateCodeHex[:-82][14:]
  5. if lotsequencebyte == "53":
  6.     useLotAndSequence = False
  7. elif lotsequencebyte == "51":
  8.     useLotAndSequence = True
  9. else:
  10.     raiseError("bip0038encrypt intermediate code error","656")
  11.  
  12. magicBytes = intermediateCodeHex[:-82]
  13. ownerentropy = intermediateCodeHex[:-66][16:]
  14. passpoint = intermediateCodeHex[32:]
  15.  
  16. if useLotAndSequence == True:
  17.     lotsequence = ownerentropy[8:]
  18.     ownersalt = ownerentropy[:-8]
  19.     flagByte = flagByte + int("04",16)
  20. else:
  21.     ownersalt = ownerentropy
  22.  
  23. flagByte = hexX(flagByte)
  24. if len(flagByte) != 2:
  25.     raiseError("FlagByte length error","656b")
  26. seedb = hexX(random256bit())[:-16]
  27.  
  28. if len(seedb) > 48:
  29.     for i in range(len(seedb) - 48):
  30.         seedb = seedb[:-1]
  31. elif len(seedb) < 48:
  32.     for i in range(48 - len(seedb)):
  33.         seedb = "0" + seedb
  34.  
  35. factorb = sha256hexstring(sha256hexstring(seedb))
  36. factorbint = intfromhexstring(factorb)
  37.  
  38. passpointUncompressed = uncompresspubkey(passpoint)
  39.  
  40. passpointX, passpointY = intfromhexstring(passpointUncompressed[2:][:-64]), intfromhexstring(passpointUncompressed[66:])
  41.  
  42. generatedaddressKeyX, generatedaddressKeyY = EccMultiply(passpointX,passpointY,factorbint)
  43.  
  44. generatedaddressKeyUncompressed = str("04") + hexX(generatedaddressKeyX) + hexX(generatedaddressKeyY)
  45.  
  46. if isPubCompressed == True:
  47.     generatedaddress = pubKeytoBitcoinAddress(compresspubkey(generatedaddressKeyUncompressed))
  48. else:
  49.     generatedaddress = pubKeytoBitcoinAddress(generatedaddressKeyUncompressed)
  50.  
  51. addresshash = sha256hexstring(sha256strtext(generatedaddress))[:-56]
  52.  
  53. passphrase = binascii.unhexlify(passpoint)
  54.  
  55. scryptSalt = addresshash + ownerentropy
  56. scryptSalt = binascii.unhexlify(scryptSalt)
  57.  
  58. scryptHash = hexX(scrypt.hash(passphrase,scryptSalt,1024,1,1,64))
  59.  
  60. derivedHalf1 = scryptHash[:-64]
  61. derivedHalf2 = scryptHash[64:]
  62. derivedHalf1FirstHalf = derivedHalf1[:-32]
  63. derivedHalf1SecondHalf = derivedHalf1[32:]
  64.  
  65. seedbFirstTwoThirds = seedb[:-16]
  66. seedbLastThird = seedb[32:]
  67.  
  68. encryption1KeyHexStr = derivedHalf2
  69. messageToEncrypt1InHexStr = xorhexstrs(seedbFirstTwoThirds,derivedHalf1FirstHalf)
  70.  
  71. encryptedHalf1 = aes_Encrypt(messageToEncrypt1InHexStr,encryption1KeyHexStr)
  72.  
  73. encryptedHalf1FirstHalf = encryptedHalf1[:-16]
  74. encryptedHalf1SecondHalf = encryptedHalf1[16:]
  75. encryptedHalf1SecondHalfCATseedbLastThird = encryptedHalf1SecondHalf + seedbLastThird
  76.  
  77. messageToEncrypt2InHexStr = xorhexstrs(encryptedHalf1SecondHalfCATseedbLastThird,derivedHalf1SecondHalf)
  78. encryption2KeyHexStr = derivedHalf2
  79.  
  80. encryptedHalf2 = aes_Encrypt(messageToEncrypt2InHexStr,encryption2KeyHexStr)
  81.  
  82. finalHexString = prefix1 + flagByte + addresshash + ownerentropy + encryptedHalf1FirstHalf + encryptedHalf2
  83. # End address creation, now we are deriving the confirmation code
  84.  
  85. pointb = privtopub(factorb)
  86.  
  87. pointbPreXORprefox = pointb[:-64]
  88. derivedHalf2LastByte = derivedHalf2[62:]
  89. prexorprefix = bitwiseandhexstrs(derivedHalf2LastByte,"01")
  90.  
  91. pointbprefix = xorhexstrs(prexorprefix,pointbPreXORprefox)
  92.  
  93. pointbFirstHalf = pointb[2:][:-32]
  94. pointbSecondHalf = pointb[34:]
  95.  
  96. confirmEncryption1KeyHexStr = derivedHalf2
  97. confirmMessageToEncrypt1InHexStr = xorhexstrs(pointbFirstHalf,derivedHalf1FirstHalf)
  98.  
  99. pointbx1 = aes_Encrypt(confirmMessageToEncrypt1InHexStr,confirmEncryption1KeyHexStr)
  100.  
  101. confirmEncryption2KeyHexStr = derivedHalf2
  102. confirmMessageToEncrypt2InHexStr = xorhexstrs(pointbSecondHalf,derivedHalf1SecondHalf)
  103.  
  104. pointbx2 = aes_Encrypt(confirmMessageToEncrypt2InHexStr,confirmEncryption2KeyHexStr)
  105.  
  106. encryptedpointb = pointbprefix + pointbx1 + pointbx2
  107.  
  108. confirmFinalHexString = str("643bf6a89a") + flagByte + addresshash + ownerentropy + encryptedpointb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement