Hi all, I have only recently started working with NIM and I am loving it but I have hit a little stumbling block. I am trying to get some simple AES encryption working and for the life of me I can't seem to be able to do it. I have no doubt some AES experts on here will spot my mistake instantly.
Any chance you could have a go at running this code to see why I can't decrypt the input please? The important bits are: 1. The key is KEYDEFGHIHKLOMNA 2. The IV is IVCDEFGHIHKLOMNA 3. The encrypted intput in AES CBC 128 is D9C69ED09EACB9A874FCBEB3DC054522 which is just my name davidkennedy encrypted on this site: devglan.com/online-tools/aes-encryption-decryption I have added some echo outputs to see what I think should be coming out the other side but I never seem to be able to even get the hex version of my name visible! I am using byte sequences to store the IV and Key as in my eventual code that is what I will need to use. Thanks Here is the basic code: import winim import nimcrypto import std/base64 ## Converts a string to the corresponding byte sequence. proc toByteSeq*(str: string): seq[byte] {.inline.} = @(str.toOpenArrayByte(0, str.high)) func toString*(bytes: openArray[byte]): string {.inline.} = ## Converts a byte sequence to the corresponding string. let length = bytes.len if length > 0: result = newString(length) copyMem(result.cstring, bytes[0].unsafeAddr, length) proc decrypt(encryptedInput: string, key: seq[byte], iv: seq[byte]): seq[byte] = # some var definitions for decrypting let cryptedInput = toByteSeq(encryptedInput) var encodedPay = newSeq[byte](len(cryptedInput)) decodedPay = newSeq[byte](len(cryptedInput)) encodedPay = cryptedInput # Decrypt the encrypted bytes of the main payload var test: CBC[aes128] test.init(key, iv) test.decrypt(encodedPay, decodedPay) test.clear() echo "IV : ", toHex(iv) echo "PLAIN TEXT HEX : ", toHex(encodedPay) #echo "PLAIN TEXT: ", plaintext echo "DECODED TEXT HEX: ", toHex(decodedPay) echo "SHOULD BE HEX : 64617669646b656e6e656479" #Decrypted AES CBC128 of davidkennedy echo "DECODED TEXT B64: ", encode(decodedPay) echo "SHOULD BE B64 : ZGF2aWRrZW5uZWR5" #echo "DECODED TEXT: ", decText echo "String :", decodedPay.toString() # convert tranformed text to string when isMainModule: let key: seq[byte] = toByteSeq("KEYDEFGHIHKLOMNA") let iv: seq[byte] = toByteSeq("IVCDEFGHIHKLOMNA") var encryptedInput = "D9C69ED09EACB9A874FCBEB3DC054522" #AES CBC128 encryption of davidkennedy in HEX var code = decrypt(encryptedInput,key,iv) Run