mirror of
https://github.com/jangko/nimAES
synced 2026-01-15 08:01:47 +00:00
No description
| .github/workflows | ||
| docs | ||
| tests | ||
| .appveyor.yml | ||
| .gitattributes | ||
| .gitignore | ||
| .travis.yml | ||
| nimAES.nim | ||
| nimAES.nimble | ||
| readme.md | ||
nimAES
Advanced Encryption Standard
Rinjdael Algorithm written in Nim
initially this was part of nimPDF project, then I decided to release it separately
example:
var aes = initAES()
let input = "0123456789ABCDEF"
let key = "FEDCBA9876543210"
if aes.setEncodeKey(key):
let encrypted = aes.encryptECB(input)
if aes.setDecodeKey(key):
let decrypted = aes.decryptECB(encrypted)
assert decrypted == input
both setEncodeKey and setDecodeKey accept 128, 192, and 256 bits key length
supported mode:
| MODE | Codec Pair | IV 16 bytes | IO | EncKey | DecKey |
|---|---|---|---|---|---|
| ECB | yes | no | 1 block | yes | yes |
| CBC | yes | yes | n x blocks | yes | yes |
| CFB128 | yes | yes | n x blocks | yes | no |
| CFB8 | yes | yes | n x blocks | yes | no |
| CTR | no | yes | stream | yes | no |
| OFB | no | yes | n x blocks | yes | no |
output length always same with input length
1 block equal to 16 bytes
CTR mode accept arbitrary input length
IV = Initialization Vector
Codec Pair:
- yes: have encrypt and decrypt
- no: only one function both for encrypt and decrypt