Skip to content

Commit 8a5d814

Browse files
committed
Fix tests related to wrapped asymmetric keys
* Fix the key used by tr31_export_test to test ANSI X9.143:2021, 8.5 because it was incorrectly copied from the document when it was originally implemented * Update tr31_decrypt_test to validate the decrypted keys properly for ANSI X9.143:2021, 8.5 and 8.6
1 parent 3dff358 commit 8a5d814

File tree

2 files changed

+153
-53
lines changed

2 files changed

+153
-53
lines changed

test/tr31_decrypt_test.c

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @file tr31_decrypt_test.c
33
*
4-
* Copyright 2020-2023 Leon Lynch
4+
* Copyright 2020-2023, 2025 Leon Lynch
55
*
66
* This program is free software; you can redistribute it and/or
77
* modify it under the terms of the GNU Lesser General Public
@@ -188,6 +188,83 @@ static const char test17_tr31_ascii[] =
188188
"CDE1B75F3299D4544787A07F6A9F7127";
189189
static const uint8_t test17_kcv_kbpk_verify[] = { 0xD7, 0x7F, 0x00, 0x77, 0x24 };
190190
static const char test17_tr31_ts_verify[] = "20200818221218Z";
191+
static const uint8_t test17_tr31_key_verify[] = {
192+
0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD6, 0xC4, 0x60, 0xFB,
193+
0x01, 0x2E, 0x8D, 0xED, 0xF2, 0xD7, 0x85, 0x74, 0xB4, 0x51, 0xE9, 0xBF, 0x1C, 0x69, 0x63, 0xF7,
194+
0xF2, 0xAE, 0x57, 0x41, 0xD2, 0x74, 0x5C, 0xB4, 0x10, 0xE7, 0xE0, 0x0B, 0xE4, 0x05, 0xFC, 0x89,
195+
0xB8, 0x32, 0xC6, 0xE7, 0xDB, 0xEA, 0x90, 0x65, 0xD5, 0x77, 0xC2, 0x7C, 0x61, 0x07, 0x70, 0x10,
196+
0x76, 0x49, 0xAD, 0x5A, 0xBE, 0xEC, 0x1F, 0x2B, 0x8E, 0xD3, 0x3A, 0x3C, 0xCA, 0x32, 0x1F, 0xFE,
197+
0xD0, 0x01, 0x96, 0x40, 0x0B, 0xBB, 0x70, 0xEF, 0x8D, 0x0F, 0xE1, 0xC7, 0xDE, 0x9F, 0x52, 0x2B,
198+
0xCA, 0xE6, 0xD9, 0x56, 0xF8, 0x95, 0xF5, 0x05, 0x29, 0xFA, 0x01, 0xD3, 0xA1, 0xE9, 0x59, 0x7E,
199+
0xBD, 0x6B, 0x7C, 0x8B, 0x2E, 0x10, 0x68, 0x73, 0xA3, 0xA5, 0x21, 0xC1, 0x8E, 0xF4, 0x92, 0x44,
200+
0xBC, 0xEF, 0xFA, 0xD8, 0x1C, 0x25, 0x5A, 0xB6, 0x16, 0x44, 0x8C, 0xC9, 0xAF, 0x50, 0x81, 0x1D,
201+
0xA7, 0x38, 0x34, 0x3D, 0x9D, 0xBE, 0x1D, 0xE8, 0x3A, 0x0F, 0x7E, 0x4E, 0x43, 0xBD, 0x08, 0xFA,
202+
0x7A, 0x7E, 0x06, 0xC1, 0x10, 0x7F, 0xBD, 0x59, 0xAF, 0xE7, 0x76, 0x88, 0xAA, 0x95, 0x18, 0x47,
203+
0x79, 0xD2, 0x5F, 0x2D, 0x6E, 0x7E, 0x16, 0xDC, 0x0E, 0x2B, 0x3B, 0x25, 0x04, 0x44, 0xF4, 0xDA,
204+
0x00, 0x2C, 0x12, 0xF6, 0xBB, 0xDD, 0x17, 0xB9, 0xE5, 0x99, 0x3A, 0x92, 0x23, 0x9C, 0x9B, 0x37,
205+
0xA9, 0x66, 0x9B, 0x7E, 0xDA, 0xEF, 0x58, 0x7B, 0xEE, 0x7E, 0x8C, 0xE7, 0x86, 0x9A, 0xC3, 0x62,
206+
0xA4, 0x25, 0x85, 0x95, 0xA3, 0xED, 0x6C, 0xB5, 0x44, 0xF2, 0x15, 0x5B, 0x2F, 0xFD, 0x80, 0x6C,
207+
0xF5, 0xAC, 0xA5, 0x6C, 0x11, 0xD0, 0x39, 0x8A, 0xA9, 0xFD, 0x4D, 0xAD, 0x07, 0x44, 0xF1, 0x33,
208+
0x9F, 0x10, 0x60, 0x6C, 0xF2, 0x69, 0x6B, 0xCD, 0xA9, 0xB1, 0x73, 0x39, 0x02, 0x03, 0x01, 0x00,
209+
0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0x9A, 0x61, 0x93, 0xED, 0x1A, 0xCE, 0x62, 0x4B, 0xF7, 0xD2,
210+
0xA1, 0x26, 0x61, 0x30, 0xB8, 0xBC, 0x1E, 0x2A, 0x4C, 0x28, 0x42, 0x14, 0xBC, 0xB8, 0x9E, 0x15,
211+
0xF3, 0x45, 0xA5, 0x19, 0x69, 0x5E, 0x62, 0xCD, 0x42, 0xD9, 0xA4, 0xC5, 0x2B, 0x62, 0x24, 0x1D,
212+
0x9B, 0x2A, 0xF8, 0xA6, 0x1B, 0xF1, 0xD8, 0xB5, 0xC6, 0x02, 0xAF, 0x65, 0x0A, 0xEE, 0x3E, 0x6B,
213+
0xF1, 0x84, 0x18, 0x29, 0x12, 0xA5, 0xFC, 0x1A, 0xC8, 0x11, 0x1D, 0x68, 0xE6, 0x9E, 0xA7, 0x50,
214+
0x58, 0x40, 0x7A, 0xC0, 0x3D, 0xE6, 0xB4, 0xCB, 0x06, 0x00, 0x60, 0xDC, 0x4C, 0xC3, 0x4D, 0xF2,
215+
0x4D, 0xAD, 0x26, 0x9D, 0x86, 0x8E, 0xA0, 0xC6, 0xE3, 0x04, 0x4E, 0x19, 0x63, 0xEF, 0x90, 0x6F,
216+
0x4F, 0x06, 0x41, 0x4E, 0x44, 0xD3, 0xA4, 0x75, 0x7E, 0x67, 0x57, 0x01, 0x92, 0xE9, 0xA2, 0x61,
217+
0xDF, 0xB1, 0x20, 0x94, 0xAA, 0x36, 0x47, 0x65, 0x82, 0x27, 0x2E, 0xDA, 0xB0, 0xF5, 0x6F, 0x81,
218+
0x6D, 0x9F, 0xA6, 0x95, 0x80, 0xB3, 0xAB, 0x05, 0x32, 0x37, 0x13, 0x5B, 0xD1, 0xDD, 0xDB, 0x42,
219+
0xAF, 0x77, 0xE1, 0x1E, 0x16, 0x29, 0xF5, 0xA1, 0x1B, 0x22, 0xC5, 0xE3, 0xE2, 0xDB, 0x3E, 0x87,
220+
0x67, 0xA9, 0x0B, 0x94, 0x41, 0x48, 0x98, 0xDC, 0xCB, 0xB4, 0x7E, 0xFE, 0x61, 0x9F, 0x06, 0x20,
221+
0xAC, 0x29, 0xC3, 0x89, 0xFB, 0x46, 0x4C, 0xE9, 0xC5, 0xE2, 0x43, 0x96, 0x3E, 0x13, 0xB6, 0xDA,
222+
0x38, 0xEF, 0xAE, 0x13, 0x30, 0xAE, 0xFB, 0x54, 0xC0, 0xD5, 0xE2, 0xE5, 0x9B, 0x6D, 0x7F, 0xBE,
223+
0x4B, 0x3A, 0x22, 0xEE, 0x48, 0x3F, 0x74, 0xE7, 0x4D, 0x4A, 0x4A, 0x25, 0x97, 0x8C, 0x65, 0xF4,
224+
0xAC, 0x58, 0x29, 0xC3, 0x42, 0x60, 0x93, 0x0C, 0x85, 0xEC, 0xEA, 0x1F, 0xB2, 0x4D, 0xB5, 0x2A,
225+
0x43, 0x8D, 0x4E, 0xB2, 0xCF, 0x61, 0x02, 0x81, 0x81, 0x00, 0xED, 0x00, 0x3D, 0xEE, 0xB8, 0x01,
226+
0x3A, 0xF4, 0xE4, 0xEB, 0xE1, 0x72, 0xFE, 0x47, 0x4B, 0x23, 0xFE, 0x20, 0x12, 0x88, 0x05, 0x84,
227+
0x0C, 0x2D, 0x27, 0x7E, 0x3E, 0x30, 0x8D, 0x5B, 0x44, 0x52, 0x7F, 0x1E, 0xD3, 0x3C, 0x07, 0xAF,
228+
0x35, 0x0D, 0x5B, 0x22, 0xB2, 0x7E, 0x08, 0x2C, 0xD1, 0x01, 0xDD, 0x2D, 0xE5, 0x4D, 0xC8, 0xDF,
229+
0x8F, 0x91, 0xD4, 0xBA, 0x57, 0x68, 0xEB, 0x9E, 0xC5, 0xF2, 0x7D, 0xB5, 0xD3, 0x58, 0xEA, 0x5E,
230+
0x0D, 0xEE, 0x08, 0xA5, 0x35, 0x67, 0x7C, 0xB3, 0xF7, 0x65, 0x78, 0x9C, 0x9D, 0xAE, 0x56, 0xB7,
231+
0x42, 0x1B, 0x9E, 0x54, 0x52, 0x5E, 0xF9, 0x28, 0xAB, 0x28, 0x85, 0xBF, 0x09, 0x8E, 0x83, 0x79,
232+
0x99, 0xAD, 0x0C, 0xA3, 0xCA, 0x6A, 0xC6, 0x42, 0xEA, 0x9A, 0xD1, 0x33, 0x18, 0x56, 0xB0, 0xCC,
233+
0xEE, 0x5D, 0xF0, 0x1F, 0xED, 0x1B, 0x2F, 0x63, 0xC3, 0xA5, 0x02, 0x81, 0x81, 0x00, 0xE7, 0xFB,
234+
0xDA, 0x0A, 0x71, 0xC9, 0x26, 0xDD, 0x51, 0xF0, 0x37, 0x20, 0x6D, 0x90, 0x1A, 0x29, 0x75, 0x54,
235+
0xA3, 0x9B, 0xBC, 0x92, 0x39, 0x79, 0x44, 0x21, 0xF1, 0xF5, 0x4D, 0x29, 0x76, 0x6E, 0x50, 0xE0,
236+
0x16, 0xCA, 0x57, 0x01, 0xBD, 0xA7, 0x9A, 0xEC, 0x54, 0x3F, 0x50, 0x66, 0xB3, 0x73, 0x0E, 0x05,
237+
0x3E, 0xA4, 0xB5, 0x87, 0x2D, 0x25, 0xC2, 0x96, 0x73, 0xCA, 0x84, 0x57, 0xB0, 0x73, 0x90, 0xD1,
238+
0x1A, 0xF2, 0x3F, 0x22, 0x47, 0xA1, 0x13, 0x3F, 0xC2, 0x52, 0x2B, 0x96, 0xCB, 0x02, 0xDA, 0x77,
239+
0xD9, 0x27, 0xFE, 0xE6, 0x66, 0x10, 0x66, 0x05, 0x8D, 0x1A, 0x4D, 0x85, 0xFE, 0x3C, 0x1D, 0x34,
240+
0x18, 0x54, 0x2F, 0x24, 0xB3, 0x98, 0x2B, 0x4D, 0xDF, 0xB4, 0x19, 0x2E, 0x51, 0x2E, 0xDA, 0x1B,
241+
0xAA, 0xAA, 0x59, 0x95, 0x5B, 0x50, 0x94, 0x5D, 0xD0, 0x83, 0xE2, 0x6E, 0x4D, 0x05, 0x02, 0x81,
242+
0x80, 0x02, 0xD4, 0xE0, 0xE8, 0x8C, 0x3C, 0x3F, 0x87, 0x13, 0x81, 0x19, 0xF5, 0x74, 0xC2, 0x47,
243+
0x4C, 0x8B, 0xC9, 0xB8, 0x4E, 0xF5, 0xB9, 0xE9, 0x27, 0x54, 0xF4, 0x76, 0x2B, 0xC0, 0x54, 0x99,
244+
0xD1, 0x5E, 0x81, 0x70, 0xC6, 0xA3, 0xD4, 0xDD, 0x0E, 0x66, 0xCB, 0x58, 0x54, 0x97, 0x26, 0x69,
245+
0xEC, 0xDA, 0xC6, 0xA4, 0x99, 0xB4, 0x4F, 0xAF, 0x78, 0x6F, 0x91, 0x36, 0x60, 0x23, 0x88, 0x87,
246+
0x16, 0xE9, 0x97, 0x95, 0x89, 0xD7, 0x6A, 0xFE, 0x41, 0x9C, 0xCA, 0xD4, 0x83, 0x83, 0x02, 0xE7,
247+
0x6E, 0xC7, 0xED, 0x1F, 0x19, 0x29, 0x22, 0x11, 0x61, 0x21, 0x18, 0x22, 0xCF, 0xCD, 0xAC, 0x45,
248+
0xB7, 0x3B, 0x39, 0xD8, 0x14, 0x62, 0xCF, 0xBE, 0x1D, 0x4A, 0x2C, 0x5E, 0xCB, 0xBD, 0xC8, 0xA8,
249+
0xE2, 0xE6, 0xA2, 0xF4, 0xA4, 0x7C, 0x82, 0x46, 0x4A, 0xCB, 0x06, 0xA6, 0x9F, 0x8F, 0x86, 0x62,
250+
0x9D, 0x02, 0x81, 0x80, 0x4E, 0x98, 0xA9, 0x9A, 0xF8, 0x4A, 0x2A, 0x7C, 0xB9, 0x92, 0x25, 0x5B,
251+
0x3B, 0x43, 0xA3, 0x59, 0x80, 0x83, 0x18, 0x9B, 0x5F, 0x1C, 0x3B, 0x94, 0xB6, 0x5C, 0xB9, 0xD9,
252+
0x5E, 0x37, 0x3A, 0x04, 0xCE, 0x29, 0xDE, 0x0E, 0xD7, 0xC3, 0xA3, 0x39, 0xF1, 0xE7, 0x37, 0xF3,
253+
0xEB, 0x8D, 0xA0, 0x26, 0xCF, 0x0D, 0x3F, 0xD8, 0x16, 0x18, 0xA2, 0x57, 0x34, 0xC2, 0x3C, 0xA0,
254+
0xD4, 0x8D, 0xD1, 0x1E, 0x96, 0x66, 0x02, 0x37, 0x28, 0xE4, 0xB8, 0x57, 0xFE, 0x69, 0x8F, 0xB0,
255+
0xBF, 0x4B, 0xEB, 0xA4, 0x1F, 0xD8, 0x93, 0x1E, 0x55, 0xE2, 0x41, 0x9A, 0x34, 0xB6, 0x94, 0xC3,
256+
0xE0, 0x98, 0x11, 0x36, 0xD4, 0xBE, 0x1D, 0xB0, 0x07, 0xF8, 0xEB, 0x50, 0x16, 0xFB, 0xDF, 0x5A,
257+
0xE9, 0x5D, 0x23, 0xEC, 0x37, 0xC1, 0x3F, 0xE5, 0x4F, 0x4C, 0xA7, 0x0F, 0x79, 0xF4, 0xFE, 0xFC,
258+
0x6F, 0xEE, 0xE6, 0xF1, 0x02, 0x81, 0x81, 0x00, 0x83, 0x21, 0xC2, 0xF1, 0xE8, 0x91, 0x4C, 0x0A,
259+
0xE0, 0x9C, 0x41, 0x8A, 0xCF, 0xEB, 0xB8, 0xA7, 0xB8, 0x6A, 0x1E, 0x71, 0x44, 0x18, 0x2F, 0x51,
260+
0x45, 0xFB, 0xA9, 0x0A, 0xF1, 0x04, 0xDE, 0x3B, 0xC7, 0x60, 0x4D, 0x86, 0xA8, 0x31, 0xAC, 0x2F,
261+
0x38, 0xDA, 0x35, 0x6C, 0x99, 0xBC, 0x60, 0xBE, 0xA8, 0x0E, 0x26, 0xEC, 0x8B, 0x7F, 0xAF, 0x8B,
262+
0xB8, 0x4A, 0x86, 0x61, 0xEF, 0x56, 0x4B, 0xDC, 0x65, 0xDA, 0x05, 0x19, 0xF5, 0xE3, 0xCE, 0x81,
263+
0xFF, 0x49, 0x1C, 0xC7, 0x1D, 0xA0, 0x81, 0x39, 0x60, 0x04, 0x8B, 0x22, 0x5E, 0x61, 0xC5, 0x66,
264+
0x84, 0xD3, 0xCE, 0x01, 0xAE, 0x28, 0xA2, 0x12, 0xC9, 0xAC, 0xCE, 0x94, 0x6E, 0x2A, 0xAB, 0x80,
265+
0xAD, 0xD5, 0x1B, 0x00, 0x09, 0x30, 0x29, 0xC5, 0xD5, 0x2E, 0x9A, 0xF6, 0xC8, 0xA3, 0xEB, 0x86,
266+
0x16, 0x41, 0xB0, 0x0E, 0x23, 0x63, 0x6A, 0x68,
267+
};
191268

192269
// ANSI X9.143:2021, 8.6
193270
static const uint8_t test18_kbpk[] = {
@@ -205,6 +282,16 @@ static const char test18_tr31_ascii[] =
205282
"F6186011C7BE905F875B24C5D05EA14E";
206283
static const uint8_t test18_kcv_kbpk_verify[] = { 0x23, 0x31, 0x55, 0x0B, 0xC9 };
207284
static const char test18_tr31_ts_verify[] = "20200818004100Z";
285+
static const uint8_t test18_tr31_key_verify[] = {
286+
0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x2D, 0x49, 0x32, 0x57, 0xA4, 0x5B, 0x34, 0xC1, 0x1B,
287+
0x65, 0x26, 0xA0, 0x3D, 0xB4, 0xD8, 0xAE, 0x16, 0xEE, 0x87, 0xA0, 0xC1, 0x6B, 0xDF, 0x1B, 0xE2,
288+
0x3C, 0x2D, 0xD8, 0xB1, 0x64, 0xA2, 0xD3, 0xA0, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
289+
0x03, 0x01, 0x07, 0xA1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x42, 0x3F, 0x48, 0xBA, 0xC7, 0xE9, 0xF2,
290+
0x13, 0x03, 0xDC, 0xBA, 0x63, 0x70, 0x67, 0x7A, 0xEA, 0x13, 0xFF, 0x9F, 0x84, 0x1D, 0x27, 0xA9,
291+
0x67, 0x10, 0x98, 0x79, 0x2B, 0x2D, 0x1A, 0x59, 0x76, 0xB1, 0x5B, 0xE6, 0x48, 0x36, 0x56, 0x59,
292+
0x26, 0xCD, 0xEA, 0x58, 0x79, 0x15, 0xBF, 0xF3, 0x6A, 0x0A, 0xC3, 0x8E, 0x34, 0x3F, 0x81, 0x9B,
293+
0x56, 0x20, 0xE4, 0xDF, 0xDB, 0x02, 0xF5, 0xBD, 0x21,
294+
};
208295

209296
int main(void)
210297
{
@@ -967,7 +1054,7 @@ int main(void)
9671054
test_tr31.key.key_version != TR31_KEY_VERSION_IS_UNUSED ||
9681055
test_tr31.key.exportability != TR31_KEY_EXPORT_NONE ||
9691056
test_tr31.key.key_context != TR31_KEY_CONTEXT_NONE ||
970-
test_tr31.key.length != 1192 ||
1057+
test_tr31.key.length != sizeof(test17_tr31_key_verify) ||
9711058
test_tr31.key.data == NULL ||
9721059
test_tr31.opt_blocks_count != 4 ||
9731060
test_tr31.opt_blocks == NULL ||
@@ -983,6 +1070,11 @@ int main(void)
9831070
r = 1;
9841071
goto exit;
9851072
}
1073+
if (memcmp(test_tr31.key.data, test17_tr31_key_verify, sizeof(test17_tr31_key_verify)) != 0) {
1074+
fprintf(stderr, "TR-31 key data is incorrect\n");
1075+
r = 1;
1076+
goto exit;
1077+
}
9861078
opt_ctx = tr31_opt_block_find(&test_tr31, TR31_OPT_BLOCK_CT);
9871079
if (opt_ctx != &test_tr31.opt_blocks[0]) {
9881080
fprintf(stderr, "tr31_opt_block_find() failed; r=%d\n", r);
@@ -1067,7 +1159,7 @@ int main(void)
10671159
test_tr31.key.key_version != TR31_KEY_VERSION_IS_UNUSED ||
10681160
test_tr31.key.exportability != TR31_KEY_EXPORT_NONE ||
10691161
test_tr31.key.key_context != TR31_KEY_CONTEXT_NONE ||
1070-
test_tr31.key.length != 121 ||
1162+
test_tr31.key.length != sizeof(test18_tr31_key_verify) ||
10711163
test_tr31.key.data == NULL ||
10721164
test_tr31.opt_blocks_count != 4 ||
10731165
test_tr31.opt_blocks == NULL ||
@@ -1083,6 +1175,11 @@ int main(void)
10831175
r = 1;
10841176
goto exit;
10851177
}
1178+
if (memcmp(test_tr31.key.data, test18_tr31_key_verify, sizeof(test18_tr31_key_verify)) != 0) {
1179+
fprintf(stderr, "TR-31 key data is incorrect\n");
1180+
r = 1;
1181+
goto exit;
1182+
}
10861183
opt_ctx = tr31_opt_block_find(&test_tr31, TR31_OPT_BLOCK_CT);
10871184
if (opt_ctx != &test_tr31.opt_blocks[0]) {
10881185
fprintf(stderr, "tr31_opt_block_find() failed; r=%d\n", r);

0 commit comments

Comments
 (0)