Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_ecdsa.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2013 Martin Willi
3: * Copyright (C) 2013 revosec AG
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: #include "test_suite.h"
17:
18: #include <plugins/plugin_feature.h>
19:
20: /**
21: * Signature schemes to test
22: */
23: static struct {
24: /* key size for scheme, 0 for any */
25: int key_size;
26: signature_scheme_t scheme;
27: } schemes[] = {
28: { 0, SIGN_ECDSA_WITH_SHA1_DER },
29: { 0, SIGN_ECDSA_WITH_SHA256_DER },
30: { 0, SIGN_ECDSA_WITH_SHA384_DER },
31: { 0, SIGN_ECDSA_WITH_SHA512_DER },
32: { 0, SIGN_ECDSA_WITH_NULL },
33: { 256, SIGN_ECDSA_256 },
34: { 384, SIGN_ECDSA_384 },
35: { 521, SIGN_ECDSA_521 },
36: };
37:
38: /**
39: * Perform a signature verification "good" test having a key pair
40: */
41: static void test_good_sig(private_key_t *privkey, public_key_t *pubkey)
42: {
43: chunk_t sig, data = chunk_from_chars(0x01,0x02,0x03,0xFD,0xFE,0xFF);
44: int i;
45:
46: for (i = 0; i < countof(schemes); i++)
47: {
48: if (!lib->plugins->has_feature(lib->plugins,
49: PLUGIN_PROVIDE(PUBKEY_VERIFY, schemes[i].scheme)) ||
50: !lib->plugins->has_feature(lib->plugins,
51: PLUGIN_PROVIDE(PRIVKEY_SIGN, schemes[i].scheme)))
52: {
53: continue;
54: }
55: if (schemes[i].key_size != 0 &&
56: schemes[i].key_size != privkey->get_keysize(privkey))
57: {
58: continue;
59: }
60: fail_unless(privkey->sign(privkey, schemes[i].scheme, NULL, data, &sig),
61: "sign %N", signature_scheme_names, schemes[i].scheme);
62: fail_unless(pubkey->verify(pubkey, schemes[i].scheme, NULL, data, sig),
63: "verify %N", signature_scheme_names, schemes[i].scheme);
64: free(sig.ptr);
65: }
66: }
67:
68: /**
69: * Some special signatures that should never validate successfully
70: */
71: static chunk_t invalid_sigs[] = {
72: chunk_from_chars(),
73: chunk_from_chars(0x00),
74: chunk_from_chars(0x00,0x00),
75: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
76: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
77: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
78: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
79: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
80: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
81: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
82: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
83: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
84: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
85: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
86: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
87: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
88: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
89: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
90: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
91: chunk_from_chars(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
92: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
93: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
94: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
95: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
96: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
97: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
98: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
99: };
100:
101: /**
102: * Check public key that it properly fails against some crafted sigs
103: */
104: static void test_bad_sigs(public_key_t *pubkey)
105: {
106: chunk_t data = chunk_from_chars(0x01,0x02,0x03,0xFD,0xFE,0xFF);
107: int s, i;
108:
109: for (s = 0; s < countof(schemes); s++)
110: {
111: if (schemes[s].key_size != 0 &&
112: schemes[s].key_size != pubkey->get_keysize(pubkey))
113: {
114: continue;
115: }
116: if (!lib->plugins->has_feature(lib->plugins,
117: PLUGIN_PROVIDE(PUBKEY_VERIFY, schemes[s].scheme)))
118: {
119: continue;
120: }
121: for (i = 0; i < countof(invalid_sigs); i++)
122: {
123: fail_if(
124: pubkey->verify(pubkey, schemes[s].scheme, NULL, data,
125: invalid_sigs[i]),
126: "bad %N sig accepted %B",
127: signature_scheme_names, schemes[s].scheme,
128: &invalid_sigs[i]);
129: }
130: }
131: }
132:
133: /**
134: * ECDSA key sizes to test
135: */
136: static int key_sizes[] = {
137: 256, 384, 521,
138: };
139:
140: START_TEST(test_gen)
141: {
142: private_key_t *privkey;
143: public_key_t *pubkey;
144:
145: privkey = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ECDSA,
146: BUILD_KEY_SIZE, key_sizes[_i], BUILD_END);
147: ck_assert(privkey != NULL);
148: pubkey = privkey->get_public_key(privkey);
149: ck_assert(pubkey != NULL);
150:
151: test_good_sig(privkey, pubkey);
152:
153: test_bad_sigs(pubkey);
154:
155: pubkey->destroy(pubkey);
156: privkey->destroy(privkey);
157: }
158: END_TEST
159:
160: /**
161: * Private keys to load
162: */
163: static struct {
164: chunk_t key;
165: chunk_t pkcs8;
166: chunk_t pub;
167: chunk_t fp_pk;
168: chunk_t fp_spki;
169: } keys[] = {
170: { chunk_from_chars( /* ECDSA-256 */
171: 0x30,0x77,0x02,0x01,0x01,0x04,0x20,0x42,0xc6,0x8c,0xff,0x2b,0x8b,0x87,0xa1,0xfb,
172: 0x50,0xf6,0xfe,0xd6,0x88,0xb3,0x0a,0x48,0xb2,0xc5,0x8f,0x50,0xe0,0xcf,0x40,0xfa,
173: 0x57,0xd1,0xc6,0x6c,0x20,0x64,0xc5,0xa0,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,
174: 0x03,0x01,0x07,0xa1,0x44,0x03,0x42,0x00,0x04,0x9c,0xb2,0x52,0xcb,0xc0,0x5c,0xcf,
175: 0x97,0xdd,0xd6,0xe7,0x49,0x32,0x47,0x0c,0x8e,0xdb,0x6d,0xbf,0xc8,0x1a,0x0a,0x01,
176: 0xe8,0x5e,0x3f,0x8e,0x64,0x33,0xb4,0x15,0xbb,0x1b,0xa5,0xed,0xf9,0x4b,0xa7,0xe8,
177: 0x5e,0x6f,0x49,0x24,0xf7,0x32,0xf4,0x9b,0x4c,0x47,0xdc,0xf1,0x28,0x44,0x1c,0x37,
178: 0xdb,0xee,0xfb,0xd8,0xbd,0x4e,0x5c,0xeb,0x07),
179: chunk_from_chars(
180: 0x30,0x81,0x87,0x02,0x01,0x00,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,
181: 0x01,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x04,0x6d,0x30,0x6b,0x02,
182: 0x01,0x01,0x04,0x20,0x42,0xc6,0x8c,0xff,0x2b,0x8b,0x87,0xa1,0xfb,0x50,0xf6,0xfe,
183: 0xd6,0x88,0xb3,0x0a,0x48,0xb2,0xc5,0x8f,0x50,0xe0,0xcf,0x40,0xfa,0x57,0xd1,0xc6,
184: 0x6c,0x20,0x64,0xc5,0xa1,0x44,0x03,0x42,0x00,0x04,0x9c,0xb2,0x52,0xcb,0xc0,0x5c,
185: 0xcf,0x97,0xdd,0xd6,0xe7,0x49,0x32,0x47,0x0c,0x8e,0xdb,0x6d,0xbf,0xc8,0x1a,0x0a,
186: 0x01,0xe8,0x5e,0x3f,0x8e,0x64,0x33,0xb4,0x15,0xbb,0x1b,0xa5,0xed,0xf9,0x4b,0xa7,
187: 0xe8,0x5e,0x6f,0x49,0x24,0xf7,0x32,0xf4,0x9b,0x4c,0x47,0xdc,0xf1,0x28,0x44,0x1c,
188: 0x37,0xdb,0xee,0xfb,0xd8,0xbd,0x4e,0x5c,0xeb,0x07),
189: chunk_from_chars(
190: 0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,
191: 0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00,0x04,0x9c,0xb2,0x52,0xcb,0xc0,
192: 0x5c,0xcf,0x97,0xdd,0xd6,0xe7,0x49,0x32,0x47,0x0c,0x8e,0xdb,0x6d,0xbf,0xc8,0x1a,
193: 0x0a,0x01,0xe8,0x5e,0x3f,0x8e,0x64,0x33,0xb4,0x15,0xbb,0x1b,0xa5,0xed,0xf9,0x4b,
194: 0xa7,0xe8,0x5e,0x6f,0x49,0x24,0xf7,0x32,0xf4,0x9b,0x4c,0x47,0xdc,0xf1,0x28,0x44,
195: 0x1c,0x37,0xdb,0xee,0xfb,0xd8,0xbd,0x4e,0x5c,0xeb,0x07),
196: chunk_from_chars(
197: 0x07,0x64,0x50,0x1c,0x33,0x37,0x20,0x9b,0xe2,0x0e,0xe9,0x27,0xf0,0x29,0x5b,0x97,
198: 0x11,0x5f,0x7c,0xd1),
199: chunk_from_chars(
200: 0x1a,0x97,0x25,0x7a,0x48,0xae,0x8a,0x40,0x1a,0x4b,0xa0,0x0f,0x82,0x3c,0xa3,0x1f,
201: 0x61,0x91,0xd3,0x91),
202: },
203: { chunk_from_chars( /* ECDSA-384 */
204: 0x30,0x81,0xa4,0x02,0x01,0x01,0x04,0x30,0x4b,0xbf,0x6c,0xf5,0x24,0x78,0x53,0x4b,
205: 0x1a,0x91,0x23,0xae,0x30,0xc8,0xb3,0xc9,0xc2,0x9b,0x23,0x07,0x10,0x6f,0x1b,0x47,
206: 0x7c,0xa0,0xd4,0x79,0x3c,0xc4,0x83,0x10,0xd1,0x44,0x07,0xc2,0x1b,0x66,0xff,0xae,
207: 0x76,0x57,0x72,0x90,0x53,0xc2,0xf5,0x29,0xa0,0x07,0x06,0x05,0x2b,0x81,0x04,0x00,
208: 0x22,0xa1,0x64,0x03,0x62,0x00,0x04,0x1e,0xcf,0x1c,0x85,0x9d,0x06,0xa0,0x54,0xa2,
209: 0x24,0x2f,0xd8,0x63,0x56,0x7b,0x70,0x0b,0x7f,0x81,0x96,0xce,0xb9,0x2e,0x35,0x03,
210: 0x9c,0xf9,0x0a,0x5d,0x3b,0x10,0xf7,0x13,0x7a,0x0d,0xca,0x56,0xda,0x1d,0x44,0x84,
211: 0x07,0x6f,0x58,0xdc,0x34,0x7b,0x1d,0x4c,0xdd,0x28,0x10,0xc0,0xe2,0xae,0xf4,0xd6,
212: 0xda,0xea,0xaf,0xfc,0x7a,0xaf,0x59,0x5f,0xbc,0x91,0x65,0xd3,0x21,0x19,0x61,0xbb,
213: 0xfe,0x3c,0xdb,0x47,0xcb,0x7a,0xe7,0x5d,0xbd,0x28,0xde,0x25,0x64,0x9e,0x3a,0xa9,
214: 0x18,0xed,0x24,0xe1,0x1f,0x73,0xcc),
215: chunk_from_chars(
216: 0x30,0x81,0xb6,0x02,0x01,0x00,0x30,0x10,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,
217: 0x01,0x06,0x05,0x2b,0x81,0x04,0x00,0x22,0x04,0x81,0x9e,0x30,0x81,0x9b,0x02,0x01,
218: 0x01,0x04,0x30,0x4b,0xbf,0x6c,0xf5,0x24,0x78,0x53,0x4b,0x1a,0x91,0x23,0xae,0x30,
219: 0xc8,0xb3,0xc9,0xc2,0x9b,0x23,0x07,0x10,0x6f,0x1b,0x47,0x7c,0xa0,0xd4,0x79,0x3c,
220: 0xc4,0x83,0x10,0xd1,0x44,0x07,0xc2,0x1b,0x66,0xff,0xae,0x76,0x57,0x72,0x90,0x53,
221: 0xc2,0xf5,0x29,0xa1,0x64,0x03,0x62,0x00,0x04,0x1e,0xcf,0x1c,0x85,0x9d,0x06,0xa0,
222: 0x54,0xa2,0x24,0x2f,0xd8,0x63,0x56,0x7b,0x70,0x0b,0x7f,0x81,0x96,0xce,0xb9,0x2e,
223: 0x35,0x03,0x9c,0xf9,0x0a,0x5d,0x3b,0x10,0xf7,0x13,0x7a,0x0d,0xca,0x56,0xda,0x1d,
224: 0x44,0x84,0x07,0x6f,0x58,0xdc,0x34,0x7b,0x1d,0x4c,0xdd,0x28,0x10,0xc0,0xe2,0xae,
225: 0xf4,0xd6,0xda,0xea,0xaf,0xfc,0x7a,0xaf,0x59,0x5f,0xbc,0x91,0x65,0xd3,0x21,0x19,
226: 0x61,0xbb,0xfe,0x3c,0xdb,0x47,0xcb,0x7a,0xe7,0x5d,0xbd,0x28,0xde,0x25,0x64,0x9e,
227: 0x3a,0xa9,0x18,0xed,0x24,0xe1,0x1f,0x73,0xcc),
228: chunk_from_chars(
229: 0x30,0x76,0x30,0x10,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x05,0x2b,
230: 0x81,0x04,0x00,0x22,0x03,0x62,0x00,0x04,0x1e,0xcf,0x1c,0x85,0x9d,0x06,0xa0,0x54,
231: 0xa2,0x24,0x2f,0xd8,0x63,0x56,0x7b,0x70,0x0b,0x7f,0x81,0x96,0xce,0xb9,0x2e,0x35,
232: 0x03,0x9c,0xf9,0x0a,0x5d,0x3b,0x10,0xf7,0x13,0x7a,0x0d,0xca,0x56,0xda,0x1d,0x44,
233: 0x84,0x07,0x6f,0x58,0xdc,0x34,0x7b,0x1d,0x4c,0xdd,0x28,0x10,0xc0,0xe2,0xae,0xf4,
234: 0xd6,0xda,0xea,0xaf,0xfc,0x7a,0xaf,0x59,0x5f,0xbc,0x91,0x65,0xd3,0x21,0x19,0x61,
235: 0xbb,0xfe,0x3c,0xdb,0x47,0xcb,0x7a,0xe7,0x5d,0xbd,0x28,0xde,0x25,0x64,0x9e,0x3a,
236: 0xa9,0x18,0xed,0x24,0xe1,0x1f,0x73,0xcc),
237: chunk_from_chars(
238: 0x33,0xe5,0x8b,0x39,0xb7,0x88,0xa1,0xbe,0x86,0x2f,0x5f,0xdf,0x8c,0x48,0xe2,0x4a,
239: 0x51,0x4e,0xe8,0xea),
240: chunk_from_chars(
241: 0x57,0x5b,0xdb,0x2e,0xa4,0xa9,0xd5,0x53,0x26,0x91,0x76,0x21,0xce,0x68,0x90,0xb2,
242: 0xa7,0x09,0x74,0xb4),
243: },
244: { chunk_from_chars( /* ECDSA-521 */
245: 0x30,0x81,0xdc,0x02,0x01,0x01,0x04,0x42,0x01,0xcf,0x38,0xaa,0xa7,0x7a,0x79,0x48,
246: 0xa9,0x60,0x55,0x24,0xa8,0x7e,0xe1,0xbc,0x45,0x35,0x16,0xff,0x18,0xce,0x44,0xa2,
247: 0x0b,0x72,0x6b,0xca,0x0a,0x40,0xb4,0x97,0x13,0x17,0x90,0x50,0x15,0xb9,0xba,0xfc,
248: 0x08,0x0e,0xdb,0xf8,0xfc,0x06,0x35,0x37,0xbf,0xfb,0x25,0x74,0xfe,0x0f,0xe1,0x3c,
249: 0x3a,0xf0,0x0d,0xe0,0x52,0x15,0xa8,0x07,0x6f,0x3e,0xa0,0x07,0x06,0x05,0x2b,0x81,
250: 0x04,0x00,0x23,0xa1,0x81,0x89,0x03,0x81,0x86,0x00,0x04,0x00,0x56,0x81,0x28,0xd6,
251: 0xac,0xe9,0xc8,0x82,0x2c,0xac,0x61,0x6d,0xdd,0x88,0x79,0x00,0xe3,0x7a,0x4d,0x25,
252: 0xc4,0xea,0x05,0x80,0x75,0x48,0xbc,0x75,0x73,0xc4,0xe9,0x76,0x68,0xba,0x51,0xc3,
253: 0x29,0xce,0x7d,0x1b,0xb0,0x8b,0xac,0xc1,0xcc,0x23,0xa7,0x2d,0xa7,0x2c,0x95,0xf6,
254: 0x01,0x40,0x26,0x01,0x1c,0x1c,0x9c,0xe7,0xa7,0xb4,0x0f,0x8e,0xba,0x01,0x07,0xb3,
255: 0xf7,0xbe,0x45,0x20,0xa9,0x9e,0x70,0xf0,0xcf,0x9b,0xa0,0x91,0xe3,0x88,0x8f,0x04,
256: 0x69,0x3d,0x0f,0x2b,0xf3,0xb4,0x03,0x19,0x89,0xcf,0xfa,0x77,0x04,0x15,0xaf,0xdd,
257: 0xf7,0x32,0x76,0x25,0x25,0x05,0x8d,0xfd,0x18,0x8a,0xda,0xd6,0xbc,0x71,0xb8,0x9f,
258: 0x39,0xb0,0xaf,0xcc,0x54,0xb0,0x9c,0x4d,0x54,0xfb,0x46,0x53,0x5f,0xf8,0x45),
259: chunk_from_chars(
260: 0x30,0x81,0xee,0x02,0x01,0x00,0x30,0x10,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,
261: 0x01,0x06,0x05,0x2b,0x81,0x04,0x00,0x23,0x04,0x81,0xd6,0x30,0x81,0xd3,0x02,0x01,
262: 0x01,0x04,0x42,0x01,0xcf,0x38,0xaa,0xa7,0x7a,0x79,0x48,0xa9,0x60,0x55,0x24,0xa8,
263: 0x7e,0xe1,0xbc,0x45,0x35,0x16,0xff,0x18,0xce,0x44,0xa2,0x0b,0x72,0x6b,0xca,0x0a,
264: 0x40,0xb4,0x97,0x13,0x17,0x90,0x50,0x15,0xb9,0xba,0xfc,0x08,0x0e,0xdb,0xf8,0xfc,
265: 0x06,0x35,0x37,0xbf,0xfb,0x25,0x74,0xfe,0x0f,0xe1,0x3c,0x3a,0xf0,0x0d,0xe0,0x52,
266: 0x15,0xa8,0x07,0x6f,0x3e,0xa1,0x81,0x89,0x03,0x81,0x86,0x00,0x04,0x00,0x56,0x81,
267: 0x28,0xd6,0xac,0xe9,0xc8,0x82,0x2c,0xac,0x61,0x6d,0xdd,0x88,0x79,0x00,0xe3,0x7a,
268: 0x4d,0x25,0xc4,0xea,0x05,0x80,0x75,0x48,0xbc,0x75,0x73,0xc4,0xe9,0x76,0x68,0xba,
269: 0x51,0xc3,0x29,0xce,0x7d,0x1b,0xb0,0x8b,0xac,0xc1,0xcc,0x23,0xa7,0x2d,0xa7,0x2c,
270: 0x95,0xf6,0x01,0x40,0x26,0x01,0x1c,0x1c,0x9c,0xe7,0xa7,0xb4,0x0f,0x8e,0xba,0x01,
271: 0x07,0xb3,0xf7,0xbe,0x45,0x20,0xa9,0x9e,0x70,0xf0,0xcf,0x9b,0xa0,0x91,0xe3,0x88,
272: 0x8f,0x04,0x69,0x3d,0x0f,0x2b,0xf3,0xb4,0x03,0x19,0x89,0xcf,0xfa,0x77,0x04,0x15,
273: 0xaf,0xdd,0xf7,0x32,0x76,0x25,0x25,0x05,0x8d,0xfd,0x18,0x8a,0xda,0xd6,0xbc,0x71,
274: 0xb8,0x9f,0x39,0xb0,0xaf,0xcc,0x54,0xb0,0x9c,0x4d,0x54,0xfb,0x46,0x53,0x5f,0xf8,
275: 0x45),
276: chunk_from_chars(
277: 0x30,0x81,0x9b,0x30,0x10,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x05,
278: 0x2b,0x81,0x04,0x00,0x23,0x03,0x81,0x86,0x00,0x04,0x00,0x56,0x81,0x28,0xd6,0xac,
279: 0xe9,0xc8,0x82,0x2c,0xac,0x61,0x6d,0xdd,0x88,0x79,0x00,0xe3,0x7a,0x4d,0x25,0xc4,
280: 0xea,0x05,0x80,0x75,0x48,0xbc,0x75,0x73,0xc4,0xe9,0x76,0x68,0xba,0x51,0xc3,0x29,
281: 0xce,0x7d,0x1b,0xb0,0x8b,0xac,0xc1,0xcc,0x23,0xa7,0x2d,0xa7,0x2c,0x95,0xf6,0x01,
282: 0x40,0x26,0x01,0x1c,0x1c,0x9c,0xe7,0xa7,0xb4,0x0f,0x8e,0xba,0x01,0x07,0xb3,0xf7,
283: 0xbe,0x45,0x20,0xa9,0x9e,0x70,0xf0,0xcf,0x9b,0xa0,0x91,0xe3,0x88,0x8f,0x04,0x69,
284: 0x3d,0x0f,0x2b,0xf3,0xb4,0x03,0x19,0x89,0xcf,0xfa,0x77,0x04,0x15,0xaf,0xdd,0xf7,
285: 0x32,0x76,0x25,0x25,0x05,0x8d,0xfd,0x18,0x8a,0xda,0xd6,0xbc,0x71,0xb8,0x9f,0x39,
286: 0xb0,0xaf,0xcc,0x54,0xb0,0x9c,0x4d,0x54,0xfb,0x46,0x53,0x5f,0xf8,0x45),
287: chunk_from_chars(
288: 0x1d,0x3b,0x1b,0x05,0xd7,0xcb,0x87,0x17,0x49,0x2c,0x6a,0xed,0x3b,0x82,0xa8,0xc3,
289: 0xaa,0x76,0x72,0x91),
290: chunk_from_chars(
291: 0xd4,0x6d,0x34,0x22,0xd4,0xdd,0xca,0x63,0x26,0x95,0xb5,0x47,0x9b,0x8b,0x4a,0x30,
292: 0x67,0x27,0x3e,0xcd),
293: },
294: };
295:
296: START_TEST(test_load)
297: {
298: private_key_t *privkey;
299: public_key_t *pubkey;
300: chunk_t encoding, fp;
301:
302: privkey = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ECDSA,
303: BUILD_BLOB_ASN1_DER, keys[_i].key, BUILD_END);
304: ck_assert(privkey != NULL);
305: ck_assert(privkey->get_encoding(privkey, PRIVKEY_ASN1_DER, &encoding));
306: if (encoding.len == keys[_i].pkcs8.len)
307: {
308: ck_assert_chunk_eq(keys[_i].pkcs8, encoding);
309: }
310: else
311: {
312: ck_assert_chunk_eq(keys[_i].key, encoding);
313: }
314: chunk_clear(&encoding);
315:
316: ck_assert(privkey->get_fingerprint(privkey, KEYID_PUBKEY_SHA1, &fp));
317: ck_assert_chunk_eq(keys[_i].fp_pk, fp);
318: ck_assert(privkey->get_fingerprint(privkey, KEYID_PUBKEY_INFO_SHA1, &fp));
319: ck_assert_chunk_eq(keys[_i].fp_spki, fp);
320:
321: pubkey = privkey->get_public_key(privkey);
322: ck_assert(pubkey != NULL);
323: ck_assert(pubkey->get_encoding(pubkey, PUBKEY_SPKI_ASN1_DER, &encoding));
324: ck_assert_chunk_eq(keys[_i].pub, encoding);
325: chunk_free(&encoding);
326:
327: ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_SHA1, &fp));
328: ck_assert_chunk_eq(keys[_i].fp_pk, fp);
329: ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_INFO_SHA1, &fp));
330: ck_assert_chunk_eq(keys[_i].fp_spki, fp);
331:
332: test_good_sig(privkey, pubkey);
333:
334: test_bad_sigs(pubkey);
335:
336: pubkey->destroy(pubkey);
337: privkey->destroy(privkey);
338: }
339: END_TEST
340:
341: Suite *ecdsa_suite_create()
342: {
343: Suite *s;
344: TCase *tc;
345: int gen_count = countof(key_sizes);
346:
347: s = suite_create("ecdsa");
348:
349: if (getenv("TESTS_REDUCED_KEYLENGTHS") != NULL)
350: {
351: gen_count = min(1, gen_count);
352: }
353:
354: tc = tcase_create("generate");
355: tcase_add_loop_test(tc, test_gen, 0, gen_count);
356: suite_add_tcase(s, tc);
357:
358: tc = tcase_create("load");
359: tcase_add_loop_test(tc, test_load, 0, countof(keys));
360: suite_add_tcase(s, tc);
361:
362: return s;
363: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>