Guest User

Untitled

a guest
Mar 21st, 2022
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 2.61 KB | None | 0 0
  1. # Encryption.nim
  2. import nimcrypto
  3. import nimcrypto/sysrand
  4.  
  5.  
  6. var buf: array[8, byte] = [byte  0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41]
  7.  
  8. when isMainModule:
  9.     var
  10.         data = buf
  11.         envkey: string = "RANDOMKEY"
  12.  
  13.         ectx, dctx: CTR[aes256]
  14.         key: array[aes256.sizeKey, byte]
  15.         iv: array[aes256.sizeBlock, byte]
  16.         plaintext = newSeq[byte](len(data))
  17.         enctext = newSeq[byte](len(data))
  18.         dectext = newSeq[byte](len(data))
  19.  
  20.     # create random iv
  21.     discard randomBytes(addr iv[0], 16)
  22.  
  23.     # do not need to pad data, CTR mode works byte by byte
  24.     copyMem(addr plaintext[0], addr data[0], len(data))
  25.  
  26.     # expand key to 32 bytes using sha256 as the kdf
  27.     var expandedKey = sha256.digest(envkey)
  28.     copyMem(addr key[0], addr expandedKey.data[0], len(expandedKey.data))
  29.  
  30.     # create encryption context
  31.     ectx.init(key, iv)
  32.     ectx.encrypt(plaintext, enctext)
  33.     ectx.clear()
  34.  
  35.     dctx.init(key, iv)
  36.     dctx.decrypt(enctext, dectext)
  37.     dctx.clear()
  38.  
  39.     echo "IV: ", iv
  40.     echo "KEY: ", key
  41.     echo "ENCRYPTED TEXT: ", enctext
  42.     echo "DECRYPTED TEXT: ", dectext
  43.  
  44. # OUTPUT:
  45. IV: [231, 153, 185, 13, 155, 130, 79, 45, 19, 111, 11, 28, 250, 5, 52, 252]
  46. KEY: [246, 215, 109, 82, 228, 30, 121, 45, 105, 211, 137, 142, 245, 112, 196, 97, 55, 90, 240, 2, 53, 192, 167, 177, 149, 204, 89, 124, 45, 145, 200, 91]
  47. ENCRYPTED TEXT: @[130, 65, 75, 33, 31, 237, 85, 32]
  48. DECRYPTED TEXT: @[65, 65, 65, 65, 65, 65, 65, 65]
  49.  
  50. # Decryption.nim
  51. when isMainModule:
  52.     var data = [130, 65, 75, 33, 31, 237, 85, 32]
  53.     var key = [246, 215, 109, 82, 228, 30, 121, 45, 105, 211, 137, 142, 245, 112, 196, 97, 55, 90, 240, 2, 53, 192, 167, 177, 149, 204, 89, 124, 45, 145, 200, 91]
  54.     var iv = [231, 153, 185, 13, 155, 130, 79, 45, 19, 111, 11, 28, 250, 5, 52, 252]
  55.  
  56.     var
  57.         ectx, dctx: CTR[aes256]
  58.         enctext = newSeq[byte](len(data))
  59.         dectext = newSeq[byte](len(data))
  60.  
  61.     # copy data to enctext
  62.     copyMem(addr enctext[0], addr data[0], len(data))
  63.    
  64.     # convert key int array to byte array
  65.     var keyB: array[key.len, byte]
  66.     for i in low(key) .. high(key):
  67.         keyB[i] = key[i].byte
  68.  
  69.     # convert iv int array to byte array
  70.     var ivB: array[iv.len, byte]
  71.     for i in low(iv) .. high(iv):
  72.         ivB[i] = iv[i].byte
  73.    
  74.     ectx.init(keyB, ivB)
  75.     ectx.clear()
  76.  
  77.     dctx.init(keyB, ivB)
  78.     dctx.decrypt(enctext, dectext)
  79.     dctx.clear()
  80.  
  81.     var out: array[data.len, byte]
  82.     for i in low(dectext) .. high(dectext):
  83.         sc[i] = dectext[i].byte
  84.  
  85.     echo out
  86.  
  87. # OUTPUT
  88. [65, 0, 10, 96, 94, 172, 20, 97]
Advertisement
Add Comment
Please, Sign In to add comment