1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include "tests.h"
#include <botan/libstate.h>
#include <botan/hex.h>
#if defined(BOTAN_HAS_RFC3394_KEYWRAP)
#include <botan/rfc3394.h>
#endif
#include <iostream>
using namespace Botan;
namespace {
size_t keywrap_test(const char* key_str,
const char* expected_str,
const char* kek_str)
{
size_t fail = 0;
#if defined(BOTAN_HAS_RFC3394_KEYWRAP)
try
{
SymmetricKey key(key_str);
SymmetricKey expected(expected_str);
SymmetricKey kek(kek_str);
Algorithm_Factory& af = global_state().algorithm_factory();
secure_vector<byte> enc = rfc3394_keywrap(key.bits_of(), kek, af);
if(enc != expected.bits_of())
{
std::cout << "NIST key wrap encryption failure: "
<< hex_encode(enc) << " != " << hex_encode(expected.bits_of()) << "\n";
fail++;
}
secure_vector<byte> dec = rfc3394_keyunwrap(expected.bits_of(), kek, af);
if(dec != key.bits_of())
{
std::cout << "NIST key wrap decryption failure: "
<< hex_encode(dec) << " != " << hex_encode(key.bits_of()) << "\n";
fail++;
}
}
catch(std::exception& e)
{
std::cout << e.what() << "\n";
fail++;
}
#endif
return fail;
}
}
size_t test_keywrap()
{
size_t fails = 0;
fails += keywrap_test("00112233445566778899AABBCCDDEEFF",
"1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5",
"000102030405060708090A0B0C0D0E0F");
fails += keywrap_test("00112233445566778899AABBCCDDEEFF",
"96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D",
"000102030405060708090A0B0C0D0E0F1011121314151617");
fails += keywrap_test("00112233445566778899AABBCCDDEEFF",
"64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7",
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F");
fails += keywrap_test("00112233445566778899AABBCCDDEEFF0001020304050607",
"031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2",
"000102030405060708090A0B0C0D0E0F1011121314151617");
fails += keywrap_test("00112233445566778899AABBCCDDEEFF0001020304050607",
"A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1",
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F");
fails += keywrap_test("00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F",
"28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21",
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F");
return fails;
}
|