diff options
| author | Cory Fields <[email protected]> | 2015-03-20 00:49:13 -0400 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2016-05-13 10:23:03 +0200 |
| commit | 27a212dcb4fe842ead77d01b98f2c1a58ecca609 (patch) | |
| tree | 4f1afa080592b352e84fc52d5871034cac5b5cf8 /src/crypto/aes.h | |
| parent | Add ctaes-based constant time AES implementation (diff) | |
| download | discoin-27a212dcb4fe842ead77d01b98f2c1a58ecca609.tar.xz discoin-27a212dcb4fe842ead77d01b98f2c1a58ecca609.zip | |
crypto: add AES 128/256 CBC classes
The output should always match openssl's, even for failed operations. Even for
a decrypt with broken padding, the output is always deterministic (and attemtps
to be constant-time).
Diffstat (limited to 'src/crypto/aes.h')
| -rw-r--r-- | src/crypto/aes.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/crypto/aes.h b/src/crypto/aes.h index 4bf17a33e..8cae357c1 100644 --- a/src/crypto/aes.h +++ b/src/crypto/aes.h @@ -63,4 +63,56 @@ public: 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]; +}; + +class AES128CBCEncrypt +{ +public: + AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); + ~AES128CBCEncrypt(); + int Encrypt(const unsigned char* data, int size, unsigned char* out) const; + +private: + const AES128Encrypt enc; + const bool pad; + unsigned char iv[AES_BLOCKSIZE]; +}; + +class AES128CBCDecrypt +{ +public: + AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); + ~AES128CBCDecrypt(); + int Decrypt(const unsigned char* data, int size, unsigned char* out) const; + +private: + const AES128Decrypt dec; + const bool pad; + unsigned char iv[AES_BLOCKSIZE]; +}; + #endif // BITCOIN_CRYPTO_AES_H |