2 * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
14 #include <openssl/pkcs12.h>
15 #include <openssl/x509.h>
16 #include <openssl/x509v3.h>
17 #include <openssl/pem.h>
20 #include "helpers/pkcs12.h"
22 static int default_libctx = 1;
24 static OSSL_LIB_CTX *testctx = NULL;
25 static OSSL_PROVIDER *nullprov = NULL;
26 static OSSL_PROVIDER *deflprov = NULL;
27 static OSSL_PROVIDER *lgcyprov = NULL;
29 /* --------------------------------------------------------------------------
30 * PKCS12 component test data
33 static const unsigned char CERT1[] =
35 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
36 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
37 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
38 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
39 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
40 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
41 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
42 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x31, 0x30,
43 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
44 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c,
45 0x7a, 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1,
46 0xc8, 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84,
47 0x81, 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf,
48 0xc7, 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b,
49 0x84, 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72,
50 0x31, 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9,
51 0x19, 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44,
52 0xc1, 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00,
53 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
54 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
55 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
56 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
57 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
58 0x00, 0x1c, 0x13, 0xdc, 0x02, 0xf1, 0x44, 0x36, 0x65, 0xa9, 0xbe, 0x30, 0x1c, 0x66, 0x14, 0x20,
59 0x86, 0x5a, 0xa8, 0x69, 0x25, 0xf8, 0x1a, 0xb6, 0x9e, 0x5e, 0xe9, 0x89, 0xb8, 0x67, 0x70, 0x19,
60 0x87, 0x60, 0xeb, 0x4b, 0x11, 0x71, 0x85, 0xf8, 0xe9, 0xa7, 0x3e, 0x20, 0x42, 0xec, 0x43, 0x25,
61 0x01, 0x03, 0xe5, 0x4d, 0x83, 0x22, 0xf5, 0x8e, 0x3a, 0x1a, 0x1b, 0xd4, 0x1c, 0xda, 0x6b, 0x9d,
62 0x10, 0x1b, 0xee, 0x67, 0x4e, 0x1f, 0x69, 0xab, 0xbc, 0xaa, 0x62, 0x8e, 0x9e, 0xc6, 0xee, 0xd6,
63 0x09, 0xc0, 0xca, 0xe0, 0xaa, 0x9f, 0x07, 0xb2, 0xc2, 0xbb, 0x31, 0x96, 0xa2, 0x04, 0x62, 0xd3,
64 0x13, 0x32, 0x29, 0x67, 0x6e, 0xad, 0x2e, 0x0b, 0xea, 0x04, 0x7c, 0x8c, 0x5a, 0x5d, 0xac, 0x14,
65 0xaa, 0x61, 0x7f, 0x28, 0x6c, 0x2d, 0x64, 0x2d, 0xc3, 0xaf, 0x77, 0x52, 0x90, 0xb4, 0x37, 0xc0,
69 static const unsigned char CERT2[] =
71 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
72 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe7, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
73 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
74 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
75 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
76 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
77 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
78 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x31, 0x30,
79 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
80 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86,
81 0x9f, 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35,
82 0x4d, 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8,
83 0xa5, 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03,
84 0x98, 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e,
85 0x31, 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc,
86 0x70, 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49,
87 0xd3, 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe,
88 0x2d, 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00,
89 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
90 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
91 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
92 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
93 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
94 0x00, 0x3b, 0xa6, 0x73, 0xbe, 0xe0, 0x28, 0xed, 0x1f, 0x29, 0x78, 0x4c, 0xc0, 0x1f, 0xe9, 0x85,
95 0xc6, 0x8f, 0xe3, 0x87, 0x7c, 0xd9, 0xe7, 0x0a, 0x37, 0xe8, 0xaa, 0xb5, 0xd2, 0x7f, 0xf8, 0x90,
96 0x20, 0x80, 0x35, 0xa7, 0x79, 0x2b, 0x04, 0xa7, 0xbf, 0xe6, 0x7b, 0x58, 0xcb, 0xec, 0x0e, 0x58,
97 0xef, 0x2a, 0x70, 0x8a, 0x56, 0x8a, 0xcf, 0x6b, 0x7a, 0x74, 0x0c, 0xf4, 0x15, 0x37, 0x93, 0xcd,
98 0xe6, 0xb2, 0xa1, 0x83, 0x09, 0xdb, 0x9e, 0x4f, 0xff, 0x6a, 0x17, 0x4f, 0x33, 0xc9, 0xcc, 0x90,
99 0x2a, 0x67, 0xff, 0x16, 0x78, 0xa8, 0x2c, 0x10, 0xe0, 0x52, 0x8c, 0xe6, 0xe9, 0x90, 0x8d, 0xe0,
100 0x62, 0x04, 0x9a, 0x0f, 0x44, 0x01, 0x82, 0x14, 0x92, 0x44, 0x25, 0x69, 0x22, 0xb7, 0xb8, 0xc5,
101 0x94, 0x4c, 0x4b, 0x1c, 0x9b, 0x92, 0x60, 0x66, 0x90, 0x4e, 0xb9, 0xa8, 0x4c, 0x89, 0xbb, 0x0f,
105 static const unsigned char KEY1[] =
107 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c, 0x7a,
108 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1, 0xc8,
109 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84, 0x81,
110 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf, 0xc7,
111 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b, 0x84,
112 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72, 0x31,
113 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9, 0x19,
114 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44, 0xc1,
115 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00, 0x01,
116 0x02, 0x81, 0x81, 0x00, 0xa5, 0x6d, 0xf9, 0x8f, 0xf5, 0x5a, 0xa3, 0x50, 0xd9, 0x0d, 0x37, 0xbb,
117 0xce, 0x13, 0x94, 0xb8, 0xea, 0x32, 0x7f, 0x0c, 0xf5, 0x46, 0x0b, 0x90, 0x17, 0x7e, 0x5e, 0x63,
118 0xbd, 0xa4, 0x78, 0xcd, 0x19, 0x97, 0xd4, 0x92, 0x30, 0x78, 0xaa, 0xb4, 0xa7, 0x9c, 0xc6, 0xdf,
119 0x2a, 0x65, 0x0e, 0xb5, 0x9f, 0x9c, 0x84, 0x0d, 0x4d, 0x3a, 0x74, 0xfc, 0xd0, 0xb4, 0x09, 0x74,
120 0xc4, 0xb8, 0x24, 0x03, 0xa8, 0xf0, 0xf8, 0x0d, 0x5c, 0x8e, 0xdf, 0x4b, 0xe1, 0x0a, 0x8f, 0x4f,
121 0xd5, 0xc7, 0x9b, 0x54, 0x55, 0x8f, 0x00, 0x5c, 0xea, 0x4c, 0x73, 0xf9, 0x1b, 0xbf, 0xb8, 0x93,
122 0x33, 0x20, 0xce, 0x45, 0xd9, 0x03, 0x02, 0xb2, 0x36, 0xc5, 0x0a, 0x30, 0x50, 0x78, 0x80, 0x66,
123 0x00, 0x22, 0x38, 0x86, 0xcf, 0x63, 0x4a, 0x5c, 0xbf, 0x2b, 0xd9, 0x6e, 0xe6, 0xf0, 0x39, 0xad,
124 0x12, 0x25, 0x41, 0xb9, 0x02, 0x41, 0x00, 0xf3, 0x7c, 0x07, 0x99, 0x64, 0x3a, 0x28, 0x8c, 0x8d,
125 0x05, 0xfe, 0x32, 0xb5, 0x4c, 0x8c, 0x6d, 0xde, 0x3d, 0x16, 0x08, 0xa0, 0x01, 0x61, 0x4f, 0x8e,
126 0xa0, 0xf7, 0x26, 0x26, 0xb5, 0x8e, 0xc0, 0x7a, 0xce, 0x86, 0x34, 0xde, 0xb8, 0xef, 0x86, 0x01,
127 0xbe, 0x24, 0xaa, 0x9b, 0x36, 0x93, 0x72, 0x9b, 0xf9, 0xc6, 0xcb, 0x76, 0x84, 0x67, 0x06, 0x06,
128 0x30, 0x50, 0xdf, 0x42, 0x17, 0xe0, 0xa7, 0x02, 0x41, 0x00, 0xc6, 0x91, 0xa0, 0x41, 0x34, 0x11,
129 0x67, 0x4b, 0x08, 0x0f, 0xda, 0xa7, 0x99, 0xec, 0x58, 0x11, 0xa5, 0x82, 0xdb, 0x50, 0xfe, 0x77,
130 0xe2, 0xd1, 0x53, 0x9c, 0x7d, 0xe8, 0xbf, 0xe7, 0x7c, 0xa9, 0x01, 0xb1, 0x87, 0xc3, 0x52, 0x79,
131 0x9e, 0x2c, 0xa7, 0x6f, 0x02, 0x37, 0x32, 0xef, 0x24, 0x31, 0x21, 0x0b, 0x86, 0x05, 0x32, 0x4a,
132 0x2e, 0x0b, 0x65, 0x05, 0xd3, 0xd6, 0x30, 0xb2, 0xfc, 0xa7, 0x02, 0x41, 0x00, 0xc2, 0xed, 0x31,
133 0xdc, 0x40, 0x9c, 0x3a, 0xe8, 0x42, 0xe2, 0x60, 0x5e, 0x52, 0x3c, 0xc5, 0x54, 0x14, 0x0e, 0x8d,
134 0x7c, 0x3c, 0x34, 0xbe, 0xa6, 0x05, 0x86, 0xa2, 0x36, 0x5d, 0xd9, 0x0e, 0x3e, 0xd4, 0x52, 0x50,
135 0xa9, 0x35, 0x01, 0x93, 0x68, 0x92, 0x2e, 0x9a, 0x86, 0x27, 0x1a, 0xab, 0x32, 0x9e, 0xe2, 0x79,
136 0x9f, 0x5b, 0xf3, 0xa5, 0xd2, 0xf1, 0xd3, 0x6e, 0x7b, 0x3e, 0x1b, 0x85, 0x93, 0x02, 0x40, 0x68,
137 0xb8, 0xb6, 0x7e, 0x8c, 0xba, 0x3c, 0xf2, 0x8a, 0x2e, 0xea, 0x4f, 0x07, 0xd3, 0x68, 0x62, 0xee,
138 0x1a, 0x04, 0x16, 0x44, 0x0d, 0xef, 0xf6, 0x1b, 0x95, 0x65, 0xa5, 0xd1, 0x47, 0x81, 0x2c, 0x14,
139 0xb3, 0x8e, 0xf9, 0x08, 0xcf, 0x11, 0x07, 0x55, 0xca, 0x2a, 0xad, 0xf7, 0xd3, 0xbd, 0x0f, 0x97,
140 0xf0, 0xde, 0xde, 0x70, 0xb6, 0x44, 0x70, 0x47, 0xf7, 0xf9, 0xcf, 0x75, 0x61, 0x7f, 0xf3, 0x02,
141 0x40, 0x38, 0x4a, 0x67, 0xaf, 0xae, 0xb6, 0xb2, 0x6a, 0x00, 0x25, 0x5a, 0xa4, 0x65, 0x20, 0xb1,
142 0x13, 0xbd, 0x83, 0xff, 0xb4, 0xbc, 0xf4, 0xdd, 0xa1, 0xbb, 0x1c, 0x96, 0x37, 0x35, 0xf4, 0xbf,
143 0xed, 0x4c, 0xed, 0x92, 0xe8, 0xac, 0xc9, 0xc1, 0xa5, 0xa3, 0x23, 0x66, 0x40, 0x8a, 0xa1, 0xe6,
144 0xe3, 0x95, 0xfe, 0xc4, 0x53, 0xf5, 0x7d, 0x6e, 0xca, 0x45, 0x42, 0xe4, 0xc2, 0x9f, 0xe5, 0x1e,
149 static const unsigned char KEY2[] =
151 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86, 0x9f,
152 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35, 0x4d,
153 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8, 0xa5,
154 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03, 0x98,
155 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e, 0x31,
156 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc, 0x70,
157 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49, 0xd3,
158 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe, 0x2d,
159 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00, 0x01,
160 0x02, 0x81, 0x81, 0x00, 0xa6, 0x00, 0x83, 0xf8, 0x2b, 0x33, 0xac, 0xfb, 0xdb, 0xf0, 0x52, 0x4b,
161 0xd6, 0x39, 0xe3, 0x94, 0x3d, 0x8d, 0xa9, 0x01, 0xb0, 0x6b, 0xbe, 0x7f, 0x10, 0x01, 0xb6, 0xcd,
162 0x0a, 0x45, 0x0a, 0xca, 0x67, 0x8e, 0xd8, 0x29, 0x44, 0x8a, 0x51, 0xa8, 0x66, 0x35, 0x26, 0x30,
163 0x8b, 0xe9, 0x41, 0xa6, 0x22, 0xec, 0xd2, 0xf0, 0x58, 0x41, 0x33, 0x26, 0xf2, 0x3f, 0xe8, 0x75,
164 0x4f, 0xc7, 0x5d, 0x2e, 0x5a, 0xa8, 0x7a, 0xd2, 0xbf, 0x59, 0xa0, 0x86, 0x79, 0x0b, 0x92, 0x6c,
165 0x95, 0x5d, 0x87, 0x63, 0x5c, 0xd6, 0x1a, 0xc0, 0xf6, 0x7a, 0x15, 0x8d, 0xc7, 0x3c, 0xb6, 0x9e,
166 0xa6, 0x58, 0x46, 0x9b, 0xbf, 0x3e, 0x28, 0x8c, 0xdf, 0x1a, 0x87, 0xaa, 0x7e, 0xf5, 0xf2, 0xcb,
167 0x5e, 0x84, 0x2d, 0xf6, 0x82, 0x7e, 0x89, 0x4e, 0xf5, 0xe6, 0x3c, 0x92, 0x80, 0x1e, 0x98, 0x1c,
168 0x6a, 0x7b, 0x57, 0x01, 0x02, 0x41, 0x00, 0xdd, 0x60, 0x95, 0xd7, 0xa1, 0x9d, 0x0c, 0xa1, 0x84,
169 0xc5, 0x39, 0xca, 0x67, 0x4c, 0x1c, 0x06, 0x71, 0x5b, 0x5c, 0x2d, 0x8d, 0xce, 0xcd, 0xe2, 0x79,
170 0xc8, 0x33, 0xbe, 0x50, 0x37, 0x60, 0x9f, 0x3b, 0xb9, 0x59, 0x55, 0x22, 0x1f, 0xa5, 0x4b, 0x1d,
171 0xca, 0x38, 0xa0, 0xab, 0x87, 0x9c, 0x86, 0x0e, 0xdb, 0x1c, 0x4f, 0x4f, 0x07, 0xed, 0x18, 0x3f,
172 0x05, 0x3c, 0xec, 0x78, 0x11, 0xf6, 0x99, 0x02, 0x41, 0x00, 0xc2, 0xc5, 0xcf, 0xbe, 0x95, 0x91,
173 0xeb, 0xcf, 0x47, 0xf3, 0x33, 0x32, 0xc7, 0x7e, 0x93, 0x56, 0xf7, 0xd8, 0xf9, 0xd4, 0xb6, 0xd6,
174 0x20, 0xac, 0xba, 0x8a, 0x20, 0x19, 0x14, 0xab, 0xc5, 0x5d, 0xb2, 0x08, 0xcc, 0x77, 0x7c, 0x65,
175 0xa8, 0xdb, 0x66, 0x97, 0x36, 0x44, 0x2c, 0x63, 0xc0, 0x6a, 0x7e, 0xb0, 0x0b, 0x5c, 0x90, 0x12,
176 0x50, 0xb4, 0x36, 0x60, 0xc3, 0x1f, 0x22, 0x0c, 0xc8, 0x13, 0x02, 0x40, 0x33, 0xc8, 0x7e, 0x04,
177 0x7c, 0x97, 0x61, 0xf6, 0xfe, 0x39, 0xac, 0x34, 0xfe, 0x48, 0xbd, 0x5d, 0x7c, 0x72, 0xa4, 0x73,
178 0x3b, 0x72, 0x9e, 0x92, 0x55, 0x6e, 0x51, 0x3c, 0x39, 0x43, 0x5a, 0xe4, 0xa4, 0x71, 0xcc, 0xc5,
179 0xaf, 0x3f, 0xbb, 0xc8, 0x80, 0x65, 0x67, 0x2d, 0x9e, 0x32, 0x10, 0x99, 0x03, 0x2c, 0x99, 0xc8,
180 0xab, 0x71, 0xed, 0x31, 0xf8, 0xbb, 0xde, 0xee, 0x69, 0x7f, 0xba, 0x31, 0x02, 0x40, 0x7e, 0xbc,
181 0x60, 0x55, 0x4e, 0xd5, 0xc8, 0x6e, 0xf4, 0x0e, 0x57, 0xbe, 0x2e, 0xf9, 0x39, 0xbe, 0x59, 0x3f,
182 0xa2, 0x30, 0xbb, 0x57, 0xd1, 0xa3, 0x13, 0x2e, 0x55, 0x7c, 0x7c, 0x6a, 0xd8, 0xde, 0x02, 0xbe,
183 0x9e, 0xed, 0x10, 0xd0, 0xc5, 0x73, 0x1d, 0xea, 0x3e, 0xb1, 0x55, 0x81, 0x02, 0xef, 0x48, 0xc8,
184 0x1c, 0x5c, 0x7a, 0x92, 0xb0, 0x58, 0xd3, 0x19, 0x5b, 0x5d, 0xa2, 0xb6, 0x56, 0x69, 0x02, 0x40,
185 0x1e, 0x00, 0x6a, 0x9f, 0xba, 0xee, 0x46, 0x5a, 0xc5, 0xb5, 0x9f, 0x91, 0x33, 0xdd, 0xc9, 0x96,
186 0x75, 0xb7, 0x87, 0xcf, 0x18, 0x1c, 0xb7, 0xb9, 0x3f, 0x04, 0x10, 0xb8, 0x75, 0xa9, 0xb8, 0xa0,
187 0x31, 0x35, 0x03, 0x30, 0x89, 0xc8, 0x37, 0x68, 0x20, 0x30, 0x99, 0x39, 0x96, 0xd6, 0x2b, 0x3d,
188 0x5e, 0x45, 0x84, 0xf7, 0xd2, 0x61, 0x50, 0xc9, 0x50, 0xba, 0x8d, 0x08, 0xaa, 0xd0, 0x08, 0x1e,
192 static const PKCS12_ATTR ATTRS1[] = {
193 { "friendlyName", "george" },
194 { "localKeyID", "1234567890" },
195 { "1.2.3.4.5", "MyCustomAttribute" },
199 static const PKCS12_ATTR ATTRS2[] = {
200 { "friendlyName", "janet" },
201 { "localKeyID", "987654321" },
202 { "1.2.3.5.8.13", "AnotherCustomAttribute" },
206 static const PKCS12_ATTR ATTRS3[] = {
207 { "friendlyName", "wildduk" },
208 { "localKeyID", "1122334455" },
209 { "oracle-jdk-trustedkeyusage", "anyExtendedKeyUsage" },
213 static const PKCS12_ATTR ATTRS4[] = {
214 { "friendlyName", "wildduk" },
215 { "localKeyID", "1122334455" },
219 static const PKCS12_ENC enc_default = {
220 #ifndef OPENSSL_NO_DES
221 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
229 static const PKCS12_ENC mac_default = {
235 static const int enc_nids_all[] = {
236 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
239 #ifndef OPENSSL_NO_DES
243 #ifndef OPENSSL_NO_RC5
246 #ifndef OPENSSL_NO_RC4
249 #ifndef OPENSSL_NO_RC2
253 #ifndef OPENSSL_NO_MD2
254 # ifndef OPENSSL_NO_DES
255 NID_pbeWithMD2AndDES_CBC,
257 # ifndef OPENSSL_NO_RC2
258 NID_pbeWithMD2AndRC2_CBC,
262 #ifndef OPENSSL_NO_MD5
263 # ifndef OPENSSL_NO_DES
264 NID_pbeWithMD5AndDES_CBC,
266 # ifndef OPENSSL_NO_RC2
267 NID_pbeWithMD5AndRC2_CBC,
270 #ifndef OPENSSL_NO_DES
271 NID_pbeWithSHA1AndDES_CBC,
273 #ifndef OPENSSL_NO_RC2
274 NID_pbe_WithSHA1And128BitRC2_CBC,
275 NID_pbe_WithSHA1And40BitRC2_CBC,
276 NID_pbeWithSHA1AndRC2_CBC,
278 #ifndef OPENSSL_NO_RC4
279 NID_pbe_WithSHA1And128BitRC4,
280 NID_pbe_WithSHA1And40BitRC4,
282 #ifndef OPENSSL_NO_DES
283 NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
284 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
288 static const int enc_nids_no_legacy[] = {
289 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
292 #ifndef OPENSSL_NO_DES
294 NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
295 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
299 static const int mac_nids[] = {
308 static const int iters[] = {
313 static const char *passwords[] = {
318 /* --------------------------------------------------------------------------
322 static int get_custom_oid(void)
324 static int sec_nid = -1;
328 if (!TEST_true(OBJ_create("1.3.5.7.9", "CustomSecretOID", "My custom secret OID")))
330 return sec_nid = OBJ_txt2nid("CustomSecretOID");
334 /* --------------------------------------------------------------------------
335 * PKCS12 format tests
338 static int test_single_cert_no_attrs(void)
340 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert.p12");
342 /* Generate/encode */
345 start_contentinfo(pb);
347 add_certbag(pb, CERT1, sizeof(CERT1), NULL);
354 start_check_pkcs12(pb);
356 start_check_contentinfo(pb);
358 check_certbag(pb, CERT1, sizeof(CERT1), NULL);
360 end_check_contentinfo(pb);
362 end_check_pkcs12(pb);
364 return end_pkcs12_builder(pb);
367 static int test_single_key(PKCS12_ENC *enc)
372 sprintf(fname, "1key_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
374 pb = new_pkcs12_builder(fname);
376 /* Generate/encode */
379 start_contentinfo(pb);
381 add_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
388 start_check_pkcs12(pb);
390 start_check_contentinfo(pb);
392 check_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
394 end_check_contentinfo(pb);
396 end_check_pkcs12(pb);
398 return end_pkcs12_builder(pb);
401 static int test_single_key_enc_alg(int z)
405 if (lgcyprov == NULL)
406 enc.nid = enc_nids_no_legacy[z];
408 enc.nid = enc_nids_all[z];
409 enc.pass = enc_default.pass;
410 enc.iter = enc_default.iter;
412 return test_single_key(&enc);
415 static int test_single_key_enc_pass(int z)
419 enc.nid = enc_default.nid;
420 enc.pass = passwords[z];
421 enc.iter = enc_default.iter;
423 return test_single_key(&enc);
426 static int test_single_key_enc_iter(int z)
430 enc.nid = enc_default.nid;
431 enc.pass = enc_default.pass;
434 return test_single_key(&enc);
437 static int test_single_key_with_attrs(void)
439 PKCS12_BUILDER *pb = new_pkcs12_builder("1keyattrs.p12");
441 /* Generate/encode */
444 start_contentinfo(pb);
446 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
453 start_check_pkcs12(pb);
455 start_check_contentinfo(pb);
457 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
459 end_check_contentinfo(pb);
461 end_check_pkcs12(pb);
463 return end_pkcs12_builder(pb);
466 static int test_single_cert_mac(PKCS12_ENC *mac)
471 sprintf(fname, "1cert_mac-%s_iter-%d.p12", OBJ_nid2sn(mac->nid), mac->iter);
473 pb = new_pkcs12_builder(fname);
475 /* Generate/encode */
478 start_contentinfo(pb);
480 add_certbag(pb, CERT1, sizeof(CERT1), NULL);
484 end_pkcs12_with_mac(pb, mac);
487 start_check_pkcs12_with_mac(pb, mac);
489 start_check_contentinfo(pb);
491 check_certbag(pb, CERT1, sizeof(CERT1), NULL);
493 end_check_contentinfo(pb);
495 end_check_pkcs12(pb);
497 return end_pkcs12_builder(pb);
500 static int test_single_cert_mac_alg(int z)
504 mac.nid = mac_nids[z];
505 mac.pass = mac_default.pass;
506 mac.iter = mac_default.iter;
508 return test_single_cert_mac(&mac);
511 static int test_single_cert_mac_pass(int z)
515 mac.nid = mac_default.nid;
516 mac.pass = passwords[z];
517 mac.iter = mac_default.iter;
519 return test_single_cert_mac(&mac);
522 static int test_single_cert_mac_iter(int z)
526 mac.nid = mac_default.nid;
527 mac.pass = mac_default.pass;
530 return test_single_cert_mac(&mac);
533 static int test_cert_key_with_attrs_and_mac(void)
535 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key.p12");
537 /* Generate/encode */
540 start_contentinfo(pb);
542 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
543 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
547 end_pkcs12_with_mac(pb, &mac_default);
550 start_check_pkcs12_with_mac(pb, &mac_default);
552 start_check_contentinfo(pb);
554 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
555 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
557 end_check_contentinfo(pb);
559 end_check_pkcs12(pb);
561 return end_pkcs12_builder(pb);
564 static int test_cert_key_encrypted_content(void)
566 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key_enc.p12");
568 /* Generate/encode */
571 start_contentinfo(pb);
573 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
574 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
576 end_contentinfo_encrypted(pb, &enc_default);
578 end_pkcs12_with_mac(pb, &mac_default);
581 start_check_pkcs12_with_mac(pb, &mac_default);
583 start_check_contentinfo_encrypted(pb, &enc_default);
585 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
586 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
588 end_check_contentinfo(pb);
590 end_check_pkcs12(pb);
592 return end_pkcs12_builder(pb);
595 static int test_single_secret_encrypted_content(void)
597 PKCS12_BUILDER *pb = new_pkcs12_builder("1secret.p12");
598 int custom_nid = get_custom_oid();
600 /* Generate/encode */
603 start_contentinfo(pb);
605 add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
607 end_contentinfo_encrypted(pb, &enc_default);
609 end_pkcs12_with_mac(pb, &mac_default);
612 start_check_pkcs12_with_mac(pb, &mac_default);
614 start_check_contentinfo_encrypted(pb, &enc_default);
616 check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
618 end_check_contentinfo(pb);
620 end_check_pkcs12(pb);
622 return end_pkcs12_builder(pb);
625 static int test_single_secret(PKCS12_ENC *enc)
631 sprintf(fname, "1secret_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
632 pb = new_pkcs12_builder(fname);
633 custom_nid = get_custom_oid();
635 /* Generate/encode */
638 start_contentinfo(pb);
640 add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
642 end_contentinfo_encrypted(pb, enc);
644 end_pkcs12_with_mac(pb, &mac_default);
647 start_check_pkcs12_with_mac(pb, &mac_default);
649 start_check_contentinfo_encrypted(pb, enc);
651 check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
653 end_check_contentinfo(pb);
655 end_check_pkcs12(pb);
657 return end_pkcs12_builder(pb);
660 static int test_single_secret_enc_alg(int z)
664 if (lgcyprov == NULL)
665 enc.nid = enc_nids_no_legacy[z];
667 enc.nid = enc_nids_all[z];
668 enc.pass = enc_default.pass;
669 enc.iter = enc_default.iter;
671 return test_single_secret(&enc);
674 static int test_multiple_contents(void)
676 PKCS12_BUILDER *pb = new_pkcs12_builder("multi_contents.p12");
677 int custom_nid = get_custom_oid();
679 /* Generate/encode */
682 start_contentinfo(pb);
684 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
685 add_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
686 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
687 add_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
691 start_contentinfo(pb);
693 add_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
695 end_contentinfo_encrypted(pb, &enc_default);
697 end_pkcs12_with_mac(pb, &mac_default);
700 start_check_pkcs12_with_mac(pb, &mac_default);
702 start_check_contentinfo(pb);
704 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
705 check_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
706 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
707 check_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
709 end_check_contentinfo(pb);
711 start_check_contentinfo_encrypted(pb, &enc_default);
713 check_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
715 end_check_contentinfo(pb);
717 end_check_pkcs12(pb);
719 return end_pkcs12_builder(pb);
722 static int test_jdk_trusted_attr(void)
724 PKCS12_BUILDER *pb = new_pkcs12_builder("jdk_trusted.p12");
726 /* Generate/encode */
729 start_contentinfo(pb);
731 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
735 end_pkcs12_with_mac(pb, &mac_default);
738 start_check_pkcs12_with_mac(pb, &mac_default);
740 start_check_contentinfo(pb);
742 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
744 end_check_contentinfo(pb);
746 end_check_pkcs12(pb);
748 return end_pkcs12_builder(pb);
751 static int test_set0_attrs(void)
753 PKCS12_BUILDER *pb = new_pkcs12_builder("attrs.p12");
754 PKCS12_SAFEBAG *bag = NULL;
755 STACK_OF(X509_ATTRIBUTE) *attrs = NULL;
756 X509_ATTRIBUTE *attr = NULL;
760 start_contentinfo(pb);
762 /* Add cert and attrs (name/locakkey only) */
763 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS4);
765 bag = sk_PKCS12_SAFEBAG_value(pb->bags, 0);
766 attrs = (STACK_OF(X509_ATTRIBUTE)*)PKCS12_SAFEBAG_get0_attrs(bag);
768 /* Create new attr, add to list and confirm return attrs is not NULL */
769 attr = X509_ATTRIBUTE_create(NID_oracle_jdk_trustedkeyusage, V_ASN1_OBJECT, OBJ_txt2obj("anyExtendedKeyUsage", 0));
770 X509at_add1_attr(&attrs, attr);
771 PKCS12_SAFEBAG_set0_attrs(bag, attrs);
772 attrs = (STACK_OF(X509_ATTRIBUTE)*)PKCS12_SAFEBAG_get0_attrs(bag);
773 X509_ATTRIBUTE_free(attr);
774 if(!TEST_ptr(attrs)) {
783 start_check_pkcs12(pb);
785 start_check_contentinfo(pb);
787 /* Use existing check functionality to confirm cert bag attrs identical to ATTRS3 */
788 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
790 end_check_contentinfo(pb);
792 end_check_pkcs12(pb);
794 return end_pkcs12_builder(pb);
797 (void)end_pkcs12_builder(pb);
801 #ifndef OPENSSL_NO_DES
802 static int pkcs12_create_test(void)
805 EVP_PKEY *pkey = NULL;
807 const unsigned char *p;
809 static const unsigned char rsa_key[] = {
810 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbb,
811 0x24, 0x7a, 0x09, 0x7e, 0x0e, 0xb2, 0x37, 0x32, 0xcc, 0x39, 0x67, 0xad,
812 0xf1, 0x9e, 0x3d, 0x6b, 0x82, 0x83, 0xd1, 0xd0, 0xac, 0xa4, 0xc0, 0x18,
813 0xbe, 0x8d, 0x98, 0x00, 0xc0, 0x7b, 0xff, 0x07, 0x44, 0xc9, 0xca, 0x1c,
814 0xba, 0x36, 0xe1, 0x27, 0x69, 0xff, 0xb1, 0xe3, 0x8d, 0x8b, 0xee, 0x57,
815 0xa9, 0x3a, 0xaa, 0x16, 0x43, 0x39, 0x54, 0x19, 0x7c, 0xae, 0x69, 0x24,
816 0x14, 0xf6, 0x64, 0xff, 0xbc, 0x74, 0xc6, 0x67, 0x6c, 0x4c, 0xf1, 0x02,
817 0x49, 0x69, 0xc7, 0x2b, 0xe1, 0xe1, 0xa1, 0xa3, 0x43, 0x14, 0xf4, 0x77,
818 0x8f, 0xc8, 0xd0, 0x85, 0x5a, 0x35, 0x95, 0xac, 0x62, 0xa9, 0xc1, 0x21,
819 0x00, 0x77, 0xa0, 0x8b, 0x97, 0x30, 0xb4, 0x5a, 0x2c, 0xb8, 0x90, 0x2f,
820 0x48, 0xa0, 0x05, 0x28, 0x4b, 0xf2, 0x0f, 0x8d, 0xec, 0x8b, 0x4d, 0x03,
821 0x42, 0x75, 0xd6, 0xad, 0x81, 0xc0, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01,
822 0x02, 0x81, 0x80, 0x00, 0xfc, 0xb9, 0x4a, 0x26, 0x07, 0x89, 0x51, 0x2b,
823 0x53, 0x72, 0x91, 0xe0, 0x18, 0x3e, 0xa6, 0x5e, 0x31, 0xef, 0x9c, 0x0c,
824 0x16, 0x24, 0x42, 0xd0, 0x28, 0x33, 0xf9, 0xfa, 0xd0, 0x3c, 0x54, 0x04,
825 0x06, 0xc0, 0x15, 0xf5, 0x1b, 0x9a, 0xb3, 0x24, 0x31, 0xab, 0x3c, 0x6b,
826 0x47, 0x43, 0xb0, 0xd2, 0xa9, 0xdc, 0x05, 0xe1, 0x81, 0x59, 0xb6, 0x04,
827 0xe9, 0x66, 0x61, 0xaa, 0xd7, 0x0b, 0x00, 0x8f, 0x3d, 0xe5, 0xbf, 0xa2,
828 0xf8, 0x5e, 0x25, 0x6c, 0x1e, 0x22, 0x0f, 0xb4, 0xfd, 0x41, 0xe2, 0x03,
829 0x31, 0x5f, 0xda, 0x20, 0xc5, 0xc0, 0xf3, 0x55, 0x0e, 0xe1, 0xc9, 0xec,
830 0xd7, 0x3e, 0x2a, 0x0c, 0x01, 0xca, 0x7b, 0x22, 0xcb, 0xac, 0xf4, 0x2b,
831 0x27, 0xf0, 0x78, 0x5f, 0xb5, 0xc2, 0xf9, 0xe8, 0x14, 0x5a, 0x6e, 0x7e,
832 0x86, 0xbd, 0x6a, 0x9b, 0x20, 0x0c, 0xba, 0xcc, 0x97, 0x20, 0x11, 0x02,
833 0x41, 0x00, 0xc9, 0x59, 0x9f, 0x29, 0x8a, 0x5b, 0x9f, 0xe3, 0x2a, 0xd8,
834 0x7e, 0xc2, 0x40, 0x9f, 0xa8, 0x45, 0xe5, 0x3e, 0x11, 0x8d, 0x3c, 0xed,
835 0x6e, 0xab, 0xce, 0xd0, 0x65, 0x46, 0xd8, 0xc7, 0x07, 0x63, 0xb5, 0x23,
836 0x34, 0xf4, 0x9f, 0x7e, 0x1c, 0xc7, 0xc7, 0xf9, 0x65, 0xd1, 0xf4, 0x04,
837 0x42, 0x38, 0xbe, 0x3a, 0x0c, 0x9d, 0x08, 0x25, 0xfc, 0xa3, 0x71, 0xd9,
838 0xae, 0x0c, 0x39, 0x61, 0xf4, 0x89, 0x02, 0x41, 0x00, 0xed, 0xef, 0xab,
839 0xa9, 0xd5, 0x39, 0x9c, 0xee, 0x59, 0x1b, 0xff, 0xcf, 0x48, 0x44, 0x1b,
840 0xb6, 0x32, 0xe7, 0x46, 0x24, 0xf3, 0x04, 0x7f, 0xde, 0x95, 0x08, 0x6d,
841 0x75, 0x9e, 0x67, 0x17, 0xba, 0x5c, 0xa4, 0xd4, 0xe2, 0xe2, 0x4d, 0x77,
842 0xce, 0xeb, 0x66, 0x29, 0xc5, 0x96, 0xe0, 0x62, 0xbb, 0xe5, 0xac, 0xdc,
843 0x44, 0x62, 0x54, 0x86, 0xed, 0x64, 0x0c, 0xce, 0xd0, 0x60, 0x03, 0x9d,
844 0x49, 0x02, 0x40, 0x54, 0xd9, 0x18, 0x72, 0x27, 0xe4, 0xbe, 0x76, 0xbb,
845 0x1a, 0x6a, 0x28, 0x2f, 0x95, 0x58, 0x12, 0xc4, 0x2c, 0xa8, 0xb6, 0xcc,
846 0xe2, 0xfd, 0x0d, 0x17, 0x64, 0xc8, 0x18, 0xd7, 0xc6, 0xdf, 0x3d, 0x4c,
847 0x1a, 0x9e, 0xf9, 0x2a, 0xb0, 0xb9, 0x2e, 0x12, 0xfd, 0xec, 0xc3, 0x51,
848 0xc1, 0xed, 0xa9, 0xfd, 0xb7, 0x76, 0x93, 0x41, 0xd8, 0xc8, 0x22, 0x94,
849 0x1a, 0x77, 0xf6, 0x9c, 0xc3, 0xc3, 0x89, 0x02, 0x41, 0x00, 0x8e, 0xf9,
850 0xa7, 0x08, 0xad, 0xb5, 0x2a, 0x04, 0xdb, 0x8d, 0x04, 0xa1, 0xb5, 0x06,
851 0x20, 0x34, 0xd2, 0xcf, 0xc0, 0x89, 0xb1, 0x72, 0x31, 0xb8, 0x39, 0x8b,
852 0xcf, 0xe2, 0x8e, 0xa5, 0xda, 0x4f, 0x45, 0x1e, 0x53, 0x42, 0x66, 0xc4,
853 0x30, 0x4b, 0x29, 0x8e, 0xc1, 0x69, 0x17, 0x29, 0x8c, 0x8a, 0xe6, 0x0f,
854 0x82, 0x68, 0xa1, 0x41, 0xb3, 0xb6, 0x70, 0x99, 0x75, 0xa9, 0x27, 0x18,
855 0xe4, 0xe9, 0x02, 0x41, 0x00, 0x89, 0xea, 0x6e, 0x6d, 0x70, 0xdf, 0x25,
856 0x5f, 0x18, 0x3f, 0x48, 0xda, 0x63, 0x10, 0x8b, 0xfe, 0xa8, 0x0c, 0x94,
857 0x0f, 0xde, 0x97, 0x56, 0x53, 0x89, 0x94, 0xe2, 0x1e, 0x2c, 0x74, 0x3c,
858 0x91, 0x81, 0x34, 0x0b, 0xa6, 0x40, 0xf8, 0xcb, 0x2a, 0x60, 0x8c, 0xe0,
859 0x02, 0xb7, 0x89, 0x93, 0xcf, 0x18, 0x9f, 0x49, 0x54, 0xfd, 0x7d, 0x3f,
860 0x9a, 0xef, 0xd4, 0xa4, 0x4f, 0xc1, 0x45, 0x99, 0x91,
864 if (!TEST_ptr(pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &p,
865 sizeof(rsa_key), NULL, NULL)))
867 if (!TEST_int_eq(ERR_peek_error(), 0))
869 p12 = PKCS12_create(NULL, NULL, pkey, NULL, NULL,
870 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
871 NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 2, 1, 0);
875 if (!TEST_int_eq(ERR_peek_error(), 0))
885 static int pkcs12_recreate_test(void)
889 X509 *cert_parsed = NULL;
890 EVP_PKEY *pkey = NULL;
891 EVP_PKEY *pkey_parsed = NULL;
893 PKCS12 *p12_parsed = NULL;
894 PKCS12 *p12_recreated = NULL;
895 const unsigned char *cert_bytes = CERT1;
896 const unsigned char *key_bytes = KEY1;
899 cert = d2i_X509(NULL, &cert_bytes, sizeof(CERT1));
902 pkey = d2i_AutoPrivateKey(NULL, &key_bytes, sizeof(KEY1));
905 p12 = PKCS12_create("pass", NULL, pkey, cert, NULL, NID_aes_256_cbc,
906 NID_aes_256_cbc, 2, 1, 0);
909 if (!TEST_int_eq(ERR_peek_error(), 0))
912 bio = BIO_new(BIO_s_mem());
915 if (!TEST_int_eq(i2d_PKCS12_bio(bio, p12), 1))
917 p12_parsed = PKCS12_init_ex(NID_pkcs7_data, testctx, NULL);
918 if (!TEST_ptr(p12_parsed))
920 p12_parsed = d2i_PKCS12_bio(bio, &p12_parsed);
921 if (!TEST_ptr(p12_parsed))
923 if (!TEST_int_eq(PKCS12_parse(p12_parsed, "pass", &pkey_parsed,
924 &cert_parsed, NULL), 1))
927 /* cert_parsed also contains auxiliary data */
928 p12_recreated = PKCS12_create("new_pass", NULL, pkey_parsed, cert_parsed,
929 NULL, NID_aes_256_cbc, NID_aes_256_cbc,
931 if (!TEST_ptr(p12_recreated))
933 if (!TEST_int_eq(ERR_peek_error(), 0))
940 PKCS12_free(p12_parsed);
941 PKCS12_free(p12_recreated);
943 EVP_PKEY_free(pkey_parsed);
945 X509_free(cert_parsed);
949 typedef enum OPTION_choice {
958 const OPTIONS *test_get_options(void)
960 static const OPTIONS options[] = {
961 OPT_TEST_OPTIONS_DEFAULT_USAGE,
962 { "write", OPT_WRITE, '-', "Write PKCS12 objects to file" },
963 { "legacy", OPT_LEGACY, '-', "Test the legacy APIs" },
964 { "context", OPT_CONTEXT, '-', "Explicitly use a non-default library context" },
970 int setup_tests(void)
974 while ((o = opt_next()) != OPT_EOF) {
977 PKCS12_helper_set_write_files(1);
980 PKCS12_helper_set_legacy(1);
992 if (!default_libctx) {
993 testctx = OSSL_LIB_CTX_new();
994 if (!TEST_ptr(testctx))
996 nullprov = OSSL_PROVIDER_load(NULL, "null");
997 if (!TEST_ptr(nullprov))
1001 deflprov = OSSL_PROVIDER_load(testctx, "default");
1002 if (!TEST_ptr(deflprov))
1004 lgcyprov = OSSL_PROVIDER_load(testctx, "legacy");
1006 PKCS12_helper_set_libctx(testctx);
1009 * Verify that the default and fips providers in the default libctx are not
1010 * available if we are using a standalone context
1012 if (!default_libctx) {
1013 if (!TEST_false(OSSL_PROVIDER_available(NULL, "default"))
1014 || !TEST_false(OSSL_PROVIDER_available(NULL, "fips")))
1018 ADD_TEST(test_single_cert_no_attrs);
1019 if (lgcyprov == NULL) {
1020 ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
1021 ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
1023 ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_all));
1024 ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_all));
1026 #ifndef OPENSSL_NO_DES
1028 ADD_TEST(pkcs12_create_test);
1031 ADD_TEST(pkcs12_recreate_test);
1032 ADD_ALL_TESTS(test_single_key_enc_pass, OSSL_NELEM(passwords));
1033 ADD_ALL_TESTS(test_single_key_enc_iter, OSSL_NELEM(iters));
1034 ADD_TEST(test_single_key_with_attrs);
1035 ADD_ALL_TESTS(test_single_cert_mac_alg, OSSL_NELEM(mac_nids));
1036 ADD_ALL_TESTS(test_single_cert_mac_pass, OSSL_NELEM(passwords));
1037 ADD_ALL_TESTS(test_single_cert_mac_iter, OSSL_NELEM(iters));
1038 ADD_TEST(test_cert_key_with_attrs_and_mac);
1039 ADD_TEST(test_cert_key_encrypted_content);
1040 ADD_TEST(test_single_secret_encrypted_content);
1041 ADD_TEST(test_multiple_contents);
1042 ADD_TEST(test_jdk_trusted_attr);
1043 ADD_TEST(test_set0_attrs);
1047 void cleanup_tests(void)
1049 OSSL_PROVIDER_unload(nullprov);
1050 OSSL_PROVIDER_unload(deflprov);
1051 OSSL_PROVIDER_unload(lgcyprov);
1052 OSSL_LIB_CTX_free(testctx);