1 // Copyright (c) 2015-2016 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 // C++ wrapper around ctaes, a constant-time AES implementation
7 #ifndef BITCOIN_CRYPTO_AES_H
8 #define BITCOIN_CRYPTO_AES_H
11 #include <crypto/ctaes/ctaes.h>
14 static const int AES_BLOCKSIZE
= 16;
15 static const int AES128_KEYSIZE
= 16;
16 static const int AES256_KEYSIZE
= 32;
18 /** An encryption class for AES-128. */
25 explicit AES128Encrypt(const unsigned char key
[16]);
27 void Encrypt(unsigned char ciphertext
[16], const unsigned char plaintext
[16]) const;
30 /** A decryption class for AES-128. */
37 explicit AES128Decrypt(const unsigned char key
[16]);
39 void Decrypt(unsigned char plaintext
[16], const unsigned char ciphertext
[16]) const;
42 /** An encryption class for AES-256. */
49 explicit AES256Encrypt(const unsigned char key
[32]);
51 void Encrypt(unsigned char ciphertext
[16], const unsigned char plaintext
[16]) const;
54 /** A decryption class for AES-256. */
61 explicit AES256Decrypt(const unsigned char key
[32]);
63 void Decrypt(unsigned char plaintext
[16], const unsigned char ciphertext
[16]) const;
66 class AES256CBCEncrypt
69 AES256CBCEncrypt(const unsigned char key
[AES256_KEYSIZE
], const unsigned char ivIn
[AES_BLOCKSIZE
], bool padIn
);
71 int Encrypt(const unsigned char* data
, int size
, unsigned char* out
) const;
74 const AES256Encrypt enc
;
76 unsigned char iv
[AES_BLOCKSIZE
];
79 class AES256CBCDecrypt
82 AES256CBCDecrypt(const unsigned char key
[AES256_KEYSIZE
], const unsigned char ivIn
[AES_BLOCKSIZE
], bool padIn
);
84 int Decrypt(const unsigned char* data
, int size
, unsigned char* out
) const;
87 const AES256Decrypt dec
;
89 unsigned char iv
[AES_BLOCKSIZE
];
92 class AES128CBCEncrypt
95 AES128CBCEncrypt(const unsigned char key
[AES128_KEYSIZE
], const unsigned char ivIn
[AES_BLOCKSIZE
], bool padIn
);
97 int Encrypt(const unsigned char* data
, int size
, unsigned char* out
) const;
100 const AES128Encrypt enc
;
102 unsigned char iv
[AES_BLOCKSIZE
];
105 class AES128CBCDecrypt
108 AES128CBCDecrypt(const unsigned char key
[AES128_KEYSIZE
], const unsigned char ivIn
[AES_BLOCKSIZE
], bool padIn
);
110 int Decrypt(const unsigned char* data
, int size
, unsigned char* out
) const;
113 const AES128Decrypt dec
;
115 unsigned char iv
[AES_BLOCKSIZE
];
118 #endif // BITCOIN_CRYPTO_AES_H