/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AES.hpp Date: 2021-6-11 Author: Reece ***/ #pragma once namespace Aurora::Crypto::AES { AUKN_SYM AuUInt GetSafeCipherPadding(const Memory::MemoryViewRead &plainText); // Remember: AES works in chunks of 128 bits // IVS are 16 bytes long // Chunks are 16 bytes long // Keys are 16, 24, or 32 bytes long // Initialization vectors must never be constant // Initialization vectors should be determined by a handshaake // It is not the end of the world if an IV is made public by design // Keys must be random // Initialization vectors could be derived from SHA1, Tiger, or SHA2 digests AUKN_SYM bool Encrypt(const Memory::MemoryViewRead &plainText, const Memory::MemoryViewRead &inIv, const Memory::MemoryViewWrite &outIv, const Memory::MemoryViewRead &inKey, Memory::ByteBuffer &out, bool auCoolCodePadding); AUKN_SYM bool Decrypt(const Memory::MemoryViewRead &cipherText, const Memory::MemoryViewRead &inIv, const Memory::MemoryViewWrite &outIv, const Memory::MemoryViewRead &inKey, Memory::ByteBuffer &plainText, bool auCoolCodePadding); }