Use MakeUnique<Db>(...)
[bitcoinplatinum.git] / src / crypto / aes.h
bloba7b63b19dfbc6318684d85d2aa514bfe99d1961c
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.
4 //
5 // C++ wrapper around ctaes, a constant-time AES implementation
7 #ifndef BITCOIN_CRYPTO_AES_H
8 #define BITCOIN_CRYPTO_AES_H
10 extern "C" {
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. */
19 class AES128Encrypt
21 private:
22 AES128_ctx ctx;
24 public:
25 explicit AES128Encrypt(const unsigned char key[16]);
26 ~AES128Encrypt();
27 void Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const;
30 /** A decryption class for AES-128. */
31 class AES128Decrypt
33 private:
34 AES128_ctx ctx;
36 public:
37 explicit AES128Decrypt(const unsigned char key[16]);
38 ~AES128Decrypt();
39 void Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const;
42 /** An encryption class for AES-256. */
43 class AES256Encrypt
45 private:
46 AES256_ctx ctx;
48 public:
49 explicit AES256Encrypt(const unsigned char key[32]);
50 ~AES256Encrypt();
51 void Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const;
54 /** A decryption class for AES-256. */
55 class AES256Decrypt
57 private:
58 AES256_ctx ctx;
60 public:
61 explicit AES256Decrypt(const unsigned char key[32]);
62 ~AES256Decrypt();
63 void Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const;
66 class AES256CBCEncrypt
68 public:
69 AES256CBCEncrypt(const unsigned char key[AES256_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
70 ~AES256CBCEncrypt();
71 int Encrypt(const unsigned char* data, int size, unsigned char* out) const;
73 private:
74 const AES256Encrypt enc;
75 const bool pad;
76 unsigned char iv[AES_BLOCKSIZE];
79 class AES256CBCDecrypt
81 public:
82 AES256CBCDecrypt(const unsigned char key[AES256_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
83 ~AES256CBCDecrypt();
84 int Decrypt(const unsigned char* data, int size, unsigned char* out) const;
86 private:
87 const AES256Decrypt dec;
88 const bool pad;
89 unsigned char iv[AES_BLOCKSIZE];
92 class AES128CBCEncrypt
94 public:
95 AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
96 ~AES128CBCEncrypt();
97 int Encrypt(const unsigned char* data, int size, unsigned char* out) const;
99 private:
100 const AES128Encrypt enc;
101 const bool pad;
102 unsigned char iv[AES_BLOCKSIZE];
105 class AES128CBCDecrypt
107 public:
108 AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
109 ~AES128CBCDecrypt();
110 int Decrypt(const unsigned char* data, int size, unsigned char* out) const;
112 private:
113 const AES128Decrypt dec;
114 const bool pad;
115 unsigned char iv[AES_BLOCKSIZE];
118 #endif // BITCOIN_CRYPTO_AES_H