Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
crypto
ctaes
test.c
Go to the documentation of this file.
1
/*********************************************************************
2
* Copyright (c) 2016 Pieter Wuille *
3
* Distributed under the MIT software license, see the accompanying *
4
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
5
**********************************************************************/
6
7
#include "
ctaes.h
"
8
9
#include <stdio.h>
10
#include <
string.h
>
11
#include <assert.h>
12
13
typedef
struct
{
14
int
keysize
;
15
const
char
*
key
;
16
const
char
*
plain
;
17
const
char
*
cipher
;
18
}
ctaes_test
;
19
20
static
const
ctaes_test
ctaes_tests
[] = {
21
/* AES test vectors from FIPS 197. */
22
{128,
"000102030405060708090a0b0c0d0e0f"
,
"00112233445566778899aabbccddeeff"
,
"69c4e0d86a7b0430d8cdb78070b4c55a"
},
23
{192,
"000102030405060708090a0b0c0d0e0f1011121314151617"
,
"00112233445566778899aabbccddeeff"
,
"dda97ca4864cdfe06eaf70a0ec0d7191"
},
24
{256,
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
,
"00112233445566778899aabbccddeeff"
,
"8ea2b7ca516745bfeafc49904b496089"
},
25
26
/* AES-ECB test vectors from NIST sp800-38a. */
27
{128,
"2b7e151628aed2a6abf7158809cf4f3c"
,
"6bc1bee22e409f96e93d7e117393172a"
,
"3ad77bb40d7a3660a89ecaf32466ef97"
},
28
{128,
"2b7e151628aed2a6abf7158809cf4f3c"
,
"ae2d8a571e03ac9c9eb76fac45af8e51"
,
"f5d3d58503b9699de785895a96fdbaaf"
},
29
{128,
"2b7e151628aed2a6abf7158809cf4f3c"
,
"30c81c46a35ce411e5fbc1191a0a52ef"
,
"43b1cd7f598ece23881b00e3ed030688"
},
30
{128,
"2b7e151628aed2a6abf7158809cf4f3c"
,
"f69f2445df4f9b17ad2b417be66c3710"
,
"7b0c785e27e8ad3f8223207104725dd4"
},
31
{192,
"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
,
"6bc1bee22e409f96e93d7e117393172a"
,
"bd334f1d6e45f25ff712a214571fa5cc"
},
32
{192,
"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
,
"ae2d8a571e03ac9c9eb76fac45af8e51"
,
"974104846d0ad3ad7734ecb3ecee4eef"
},
33
{192,
"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
,
"30c81c46a35ce411e5fbc1191a0a52ef"
,
"ef7afd2270e2e60adce0ba2face6444e"
},
34
{192,
"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
,
"f69f2445df4f9b17ad2b417be66c3710"
,
"9a4b41ba738d6c72fb16691603c18e0e"
},
35
{256,
"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
,
"6bc1bee22e409f96e93d7e117393172a"
,
"f3eed1bdb5d2a03c064b5a7e3db181f8"
},
36
{256,
"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
,
"ae2d8a571e03ac9c9eb76fac45af8e51"
,
"591ccb10d410ed26dc5ba74a31362870"
},
37
{256,
"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
,
"30c81c46a35ce411e5fbc1191a0a52ef"
,
"b6ed21b99ca6f4f9f153e7b1beafed1d"
},
38
{256,
"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
,
"f69f2445df4f9b17ad2b417be66c3710"
,
"23304b7a39f9f3ff067d8d8f9e24ecc7"
}
39
};
40
41
static
void
from_hex
(
unsigned
char
* data,
int
len,
const
char
* hex) {
42
int
p;
43
for
(p = 0; p < len; p++) {
44
int
v = 0;
45
int
n;
46
for
(n = 0; n < 2; n++) {
47
assert
((*hex >=
'0'
&& *hex <=
'9'
) || (*hex >=
'a'
&& *hex <=
'f'
));
48
if
(*hex >=
'0'
&& *hex <=
'9'
) {
49
v |= (*hex -
'0'
) << (4 * (1 - n));
50
}
else
{
51
v |= (*hex -
'a'
+ 10) << (4 * (1 - n));
52
}
53
hex++;
54
}
55
*(data++) = v;
56
}
57
assert
(*hex == 0);
58
}
59
60
int
main
(
void
) {
61
int
i;
62
int
fail = 0;
63
for
(i = 0; i <
sizeof
(
ctaes_tests
) /
sizeof
(
ctaes_tests
[0]); i++) {
64
unsigned
char
key[32], plain[16], cipher[16], ciphered[16], deciphered[16];
65
const
ctaes_test
* test = &
ctaes_tests
[i];
66
assert
(test->
keysize
== 128 || test->
keysize
== 192 || test->
keysize
== 256);
67
from_hex
(plain, 16, test->
plain
);
68
from_hex
(cipher, 16, test->
cipher
);
69
switch
(test->
keysize
) {
70
case
128: {
71
AES128_ctx
ctx;
72
from_hex
(key, 16, test->
key
);
73
AES128_init
(&ctx, key);
74
AES128_encrypt
(&ctx, 1, ciphered, plain);
75
AES128_decrypt
(&ctx, 1, deciphered, cipher);
76
break
;
77
}
78
case
192: {
79
AES192_ctx
ctx;
80
from_hex
(key, 24, test->
key
);
81
AES192_init
(&ctx, key);
82
AES192_encrypt
(&ctx, 1, ciphered, plain);
83
AES192_decrypt
(&ctx, 1, deciphered, cipher);
84
break
;
85
}
86
case
256: {
87
AES256_ctx
ctx;
88
from_hex
(key, 32, test->
key
);
89
AES256_init
(&ctx, key);
90
AES256_encrypt
(&ctx, 1, ciphered, plain);
91
AES256_decrypt
(&ctx, 1, deciphered, cipher);
92
break
;
93
}
94
}
95
if
(memcmp(cipher, ciphered, 16)) {
96
fprintf(stderr,
"E(key=\"%s\", plain=\"%s\") != \"%s\"\n"
, test->
key
, test->
plain
, test->
cipher
);
97
fail++;
98
}
99
if
(memcmp(plain, deciphered, 16)) {
100
fprintf(stderr,
"D(key=\"%s\", cipher=\"%s\") != \"%s\"\n"
, test->
key
, test->
cipher
, test->
plain
);
101
fail++;
102
}
103
}
104
if
(fail == 0) {
105
fprintf(stderr,
"All tests successful\n"
);
106
}
else
{
107
fprintf(stderr,
"%i tests failed\n"
, fail);
108
}
109
return
(fail != 0);
110
}
AES128_encrypt
void AES128_encrypt(const AES128_ctx *ctx, size_t blocks, unsigned char *cipher16, const unsigned char *plain16)
Definition
ctaes.c:501
AES256_encrypt
void AES256_encrypt(const AES256_ctx *ctx, size_t blocks, unsigned char *cipher16, const unsigned char *plain16)
Definition
ctaes.c:542
AES192_decrypt
void AES192_decrypt(const AES192_ctx *ctx, size_t blocks, unsigned char *plain16, const unsigned char *cipher16)
Definition
ctaes.c:530
AES256_init
void AES256_init(AES256_ctx *ctx, const unsigned char *key32)
Definition
ctaes.c:538
AES256_decrypt
void AES256_decrypt(const AES256_ctx *ctx, size_t blocks, unsigned char *plain16, const unsigned char *cipher16)
Definition
ctaes.c:550
AES192_encrypt
void AES192_encrypt(const AES192_ctx *ctx, size_t blocks, unsigned char *cipher16, const unsigned char *plain16)
Definition
ctaes.c:521
AES128_decrypt
void AES128_decrypt(const AES128_ctx *ctx, size_t blocks, unsigned char *plain16, const unsigned char *cipher16)
Definition
ctaes.c:509
AES128_init
void AES128_init(AES128_ctx *ctx, const unsigned char *key16)
Definition
ctaes.c:497
AES192_init
void AES192_init(AES192_ctx *ctx, const unsigned char *key24)
Definition
ctaes.c:517
ctaes.h
string.h
AES128_ctx
Definition
ctaes.h:17
AES192_ctx
Definition
ctaes.h:21
AES256_ctx
Definition
ctaes.h:25
ctaes_test
Definition
test.c:13
ctaes_test::cipher
const char * cipher
Definition
test.c:17
ctaes_test::plain
const char * plain
Definition
test.c:16
ctaes_test::keysize
int keysize
Definition
test.c:14
ctaes_test::key
const char * key
Definition
test.c:15
ctaes_tests
static const ctaes_test ctaes_tests[]
Definition
test.c:20
main
int main(void)
Definition
test.c:60
from_hex
static void from_hex(unsigned char *data, int len, const char *hex)
Definition
test.c:41
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.17.0