]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/crypto.cc
4 #include "gtest/gtest.h"
5 #include "include/types.h"
6 #include "auth/Crypto.h"
7 #include "common/Clock.h"
8 #include "common/ceph_crypto.h"
9 #include "common/ceph_context.h"
10 #include "global/global_context.h"
12 class CryptoEnvironment
: public ::testing::Environment
{
14 void SetUp() override
{
15 ceph::crypto::init(g_ceph_context
);
19 TEST(AES
, ValidateSecret
) {
20 CryptoHandler
*h
= g_ceph_context
->get_crypto_handler(CEPH_CRYPTO_AES
);
23 for (l
=0; l
<16; l
++) {
26 err
= h
->validate_secret(bp
);
27 EXPECT_EQ(-EINVAL
, err
);
30 for (l
=16; l
<50; l
++) {
33 err
= h
->validate_secret(bp
);
39 CryptoHandler
*h
= g_ceph_context
->get_crypto_handler(CEPH_CRYPTO_AES
);
41 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
42 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
44 bufferptr
secret(secret_s
, sizeof(secret_s
));
46 unsigned char plaintext_s
[] = {
47 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
48 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
51 plaintext
.append((char *)plaintext_s
, sizeof(plaintext_s
));
55 CryptoKeyHandler
*kh
= h
->get_key_handler(secret
, error
);
56 int r
= kh
->encrypt(plaintext
, cipher
, &error
);
60 unsigned char want_cipher
[] = {
61 0xb3, 0x8f, 0x5b, 0xc9, 0x35, 0x4c, 0xf8, 0xc6,
62 0x13, 0x15, 0x66, 0x6f, 0x37, 0xd7, 0x79, 0x3a,
63 0x11, 0x90, 0x7b, 0xe9, 0xd8, 0x3c, 0x35, 0x70,
64 0x58, 0x7b, 0x97, 0x9b, 0x03, 0xd2, 0xa5, 0x01,
66 char cipher_s
[sizeof(want_cipher
)];
68 ASSERT_EQ(sizeof(cipher_s
), cipher
.length());
69 cipher
.copy(0, sizeof(cipher_s
), &cipher_s
[0]);
72 err
= memcmp(cipher_s
, want_cipher
, sizeof(want_cipher
));
79 CryptoHandler
*h
= g_ceph_context
->get_crypto_handler(CEPH_CRYPTO_AES
);
81 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
82 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
84 bufferptr
secret(secret_s
, sizeof(secret_s
));
86 unsigned char cipher_s
[] = {
87 0xb3, 0x8f, 0x5b, 0xc9, 0x35, 0x4c, 0xf8, 0xc6,
88 0x13, 0x15, 0x66, 0x6f, 0x37, 0xd7, 0x79, 0x3a,
89 0x11, 0x90, 0x7b, 0xe9, 0xd8, 0x3c, 0x35, 0x70,
90 0x58, 0x7b, 0x97, 0x9b, 0x03, 0xd2, 0xa5, 0x01,
93 cipher
.append((char *)cipher_s
, sizeof(cipher_s
));
95 unsigned char want_plaintext
[] = {
96 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
97 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
99 char plaintext_s
[sizeof(want_plaintext
)];
102 bufferlist plaintext
;
103 CryptoKeyHandler
*kh
= h
->get_key_handler(secret
, error
);
104 int r
= kh
->decrypt(cipher
, plaintext
, &error
);
106 ASSERT_EQ(error
, "");
108 ASSERT_EQ(sizeof(plaintext_s
), plaintext
.length());
109 plaintext
.copy(0, sizeof(plaintext_s
), &plaintext_s
[0]);
112 err
= memcmp(plaintext_s
, want_plaintext
, sizeof(want_plaintext
));
122 err
= get_random_bytes(secret_s
, sizeof(secret_s
));
124 bufferptr
secret(secret_s
, sizeof(secret_s
));
126 char orig_plaintext_s
[1024];
127 err
= get_random_bytes(orig_plaintext_s
, sizeof(orig_plaintext_s
));
130 bufferlist plaintext
;
131 plaintext
.append(orig_plaintext_s
, sizeof(orig_plaintext_s
));
133 for (int i
=0; i
<10000; i
++) {
136 CryptoHandler
*h
= g_ceph_context
->get_crypto_handler(CEPH_CRYPTO_AES
);
139 CryptoKeyHandler
*kh
= h
->get_key_handler(secret
, error
);
140 int r
= kh
->encrypt(plaintext
, cipher
, &error
);
142 ASSERT_EQ(error
, "");
149 CryptoHandler
*h
= g_ceph_context
->get_crypto_handler(CEPH_CRYPTO_AES
);
151 CryptoKeyHandler
*ckh
= h
->get_key_handler(secret
, error
);
152 int r
= ckh
->decrypt(cipher
, plaintext
, &error
);
154 ASSERT_EQ(error
, "");
160 char plaintext_s
[sizeof(orig_plaintext_s
)];
161 plaintext
.copy(0, sizeof(plaintext_s
), &plaintext_s
[0]);
162 err
= memcmp(plaintext_s
, orig_plaintext_s
, sizeof(orig_plaintext_s
));
168 get_random_bytes(k
.c_str(), k
.length());
169 CryptoKey
key(CEPH_CRYPTO_AES
, ceph_clock_now(), k
);
173 get_random_bytes(r
.c_str(), r
.length());
176 utime_t start
= ceph_clock_now();
179 for (int i
=0; i
<n
; ++i
) {
182 int r
= key
.encrypt(g_ceph_context
, data
, encoded
, &error
);
186 utime_t end
= ceph_clock_now();
187 utime_t dur
= end
- start
;
188 cout
<< n
<< " encoded in " << dur
<< std::endl
;