2023-11-15 15:11:36 +00:00
|
|
|
# Source: nimcrypto/examples/cfb.nim
|
|
|
|
|
|
|
|
import nimcrypto
|
|
|
|
|
|
|
|
proc cfbEncode*(key: string, iv: string, data: string): seq[byte] =
|
|
|
|
var context: CFB[aes256]
|
|
|
|
var pKey: array[aes256.sizeKey, byte]
|
|
|
|
var pIv: array[aes256.sizeBlock, byte]
|
|
|
|
var pData = newSeq[byte](len(data))
|
|
|
|
var encodedData = newSeq[byte](len(data))
|
|
|
|
|
|
|
|
copyMem(addr pData[0], unsafeAddr data[0], len(data))
|
|
|
|
# WARNING! Do not use 0 byte padding in applications, this is done as example.
|
|
|
|
copyMem(addr pKey[0], unsafeAddr key[0], len(key))
|
|
|
|
copyMem(addr pIv[0], unsafeAddr iv[0], len(iv))
|
|
|
|
|
|
|
|
# Initialization of CFB[aes256] context with encryption key
|
|
|
|
context.init(pKey, pIv)
|
|
|
|
# Encryption process
|
|
|
|
context.encrypt(pData, encodedData)
|
|
|
|
# Clear context of CFB[aes256]
|
|
|
|
context.clear()
|
|
|
|
|
|
|
|
return encodedData
|
|
|
|
|
|
|
|
proc cfbDecode*(key: string, iv: string, encodedData: seq[byte]): seq[byte] =
|
|
|
|
var context: CFB[aes256]
|
|
|
|
var pKey: array[aes256.sizeKey, byte]
|
|
|
|
var pIv: array[aes256.sizeBlock, byte]
|
|
|
|
var decodedData = newSeq[byte](len(encodedData))
|
|
|
|
|
|
|
|
# copyMem(addr _data[0], addr data[0], len(data))
|
|
|
|
# WARNING! Do not use 0 byte padding in applications, this is done as example.
|
|
|
|
copyMem(addr pKey[0], unsafeAddr key[0], len(key))
|
|
|
|
copyMem(addr pIv[0], unsafeAddr iv[0], len(iv))
|
|
|
|
|
|
|
|
# Initialization of CFB[aes256] context with encryption key
|
|
|
|
context.init(pKey, pIv)
|
|
|
|
# Decryption process
|
|
|
|
context.decrypt(encodedData, decodedData)
|
|
|
|
# Clear context of CFB[aes256]
|
|
|
|
context.clear()
|
2024-03-15 23:08:47 +00:00
|
|
|
|
2023-11-15 15:11:36 +00:00
|
|
|
return decodedData
|