git / moonbite-core / src/crypto/aes.h · raw
// Copyright (c) 2015-2019 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.//// C++ wrapper around ctaes, a constant-time AES implementation#ifndef BITCOIN_CRYPTO_AES_H#define BITCOIN_CRYPTO_AES_Hextern "C" {#include <crypto/ctaes/ctaes.h>}static const int AES_BLOCKSIZE = 16;static const int AES256_KEYSIZE = 32;/** An encryption class for AES-256. */class AES256Encrypt{private: AES256_ctx ctx;public: explicit AES256Encrypt(const unsigned char key[32]); ~AES256Encrypt(); void Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const;};/** A decryption class for AES-256. */class AES256Decrypt{private: AES256_ctx ctx;public: explicit AES256Decrypt(const unsigned char key[32]); ~AES256Decrypt(); void Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const;};class AES256CBCEncrypt{public: AES256CBCEncrypt(const unsigned char key[AES256_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); ~AES256CBCEncrypt(); int Encrypt(const unsigned char* data, int size, unsigned char* out) const;private: const AES256Encrypt enc; const bool pad; unsigned char iv[AES_BLOCKSIZE];};class AES256CBCDecrypt{public: AES256CBCDecrypt(const unsigned char key[AES256_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); ~AES256CBCDecrypt(); int Decrypt(const unsigned char* data, int size, unsigned char* out) const;private: const AES256Decrypt dec; const bool pad; unsigned char iv[AES_BLOCKSIZE];};#endif // BITCOIN_CRYPTO_AES_H