2 * Copyright 2020-2021 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 "internal/nelem.h"
16 #include <openssl/pkcs12.h>
17 #include <openssl/x509.h>
18 #include <openssl/x509v3.h>
19 #include <openssl/pem.h>
22 #include "helpers/pkcs12.h"
24 static int default_libctx
= 1;
26 static OSSL_LIB_CTX
*testctx
= NULL
;
27 static OSSL_PROVIDER
*nullprov
= NULL
;
28 static OSSL_PROVIDER
*deflprov
= NULL
;
29 static OSSL_PROVIDER
*lgcyprov
= NULL
;
31 /* --------------------------------------------------------------------------
32 * PKCS12 component test data
35 static const unsigned char CERT1
[] =
37 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
38 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
39 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
40 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
41 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
42 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
43 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
44 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x31, 0x30,
45 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
46 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c,
47 0x7a, 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1,
48 0xc8, 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84,
49 0x81, 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf,
50 0xc7, 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b,
51 0x84, 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72,
52 0x31, 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9,
53 0x19, 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44,
54 0xc1, 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00,
55 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
56 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
57 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
58 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
59 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
60 0x00, 0x1c, 0x13, 0xdc, 0x02, 0xf1, 0x44, 0x36, 0x65, 0xa9, 0xbe, 0x30, 0x1c, 0x66, 0x14, 0x20,
61 0x86, 0x5a, 0xa8, 0x69, 0x25, 0xf8, 0x1a, 0xb6, 0x9e, 0x5e, 0xe9, 0x89, 0xb8, 0x67, 0x70, 0x19,
62 0x87, 0x60, 0xeb, 0x4b, 0x11, 0x71, 0x85, 0xf8, 0xe9, 0xa7, 0x3e, 0x20, 0x42, 0xec, 0x43, 0x25,
63 0x01, 0x03, 0xe5, 0x4d, 0x83, 0x22, 0xf5, 0x8e, 0x3a, 0x1a, 0x1b, 0xd4, 0x1c, 0xda, 0x6b, 0x9d,
64 0x10, 0x1b, 0xee, 0x67, 0x4e, 0x1f, 0x69, 0xab, 0xbc, 0xaa, 0x62, 0x8e, 0x9e, 0xc6, 0xee, 0xd6,
65 0x09, 0xc0, 0xca, 0xe0, 0xaa, 0x9f, 0x07, 0xb2, 0xc2, 0xbb, 0x31, 0x96, 0xa2, 0x04, 0x62, 0xd3,
66 0x13, 0x32, 0x29, 0x67, 0x6e, 0xad, 0x2e, 0x0b, 0xea, 0x04, 0x7c, 0x8c, 0x5a, 0x5d, 0xac, 0x14,
67 0xaa, 0x61, 0x7f, 0x28, 0x6c, 0x2d, 0x64, 0x2d, 0xc3, 0xaf, 0x77, 0x52, 0x90, 0xb4, 0x37, 0xc0,
71 static const unsigned char CERT2
[] =
73 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
74 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe7, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
75 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
76 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
77 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
78 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
79 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
80 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x31, 0x30,
81 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
82 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86,
83 0x9f, 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35,
84 0x4d, 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8,
85 0xa5, 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03,
86 0x98, 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e,
87 0x31, 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc,
88 0x70, 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49,
89 0xd3, 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe,
90 0x2d, 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00,
91 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
92 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
93 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
94 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
95 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
96 0x00, 0x3b, 0xa6, 0x73, 0xbe, 0xe0, 0x28, 0xed, 0x1f, 0x29, 0x78, 0x4c, 0xc0, 0x1f, 0xe9, 0x85,
97 0xc6, 0x8f, 0xe3, 0x87, 0x7c, 0xd9, 0xe7, 0x0a, 0x37, 0xe8, 0xaa, 0xb5, 0xd2, 0x7f, 0xf8, 0x90,
98 0x20, 0x80, 0x35, 0xa7, 0x79, 0x2b, 0x04, 0xa7, 0xbf, 0xe6, 0x7b, 0x58, 0xcb, 0xec, 0x0e, 0x58,
99 0xef, 0x2a, 0x70, 0x8a, 0x56, 0x8a, 0xcf, 0x6b, 0x7a, 0x74, 0x0c, 0xf4, 0x15, 0x37, 0x93, 0xcd,
100 0xe6, 0xb2, 0xa1, 0x83, 0x09, 0xdb, 0x9e, 0x4f, 0xff, 0x6a, 0x17, 0x4f, 0x33, 0xc9, 0xcc, 0x90,
101 0x2a, 0x67, 0xff, 0x16, 0x78, 0xa8, 0x2c, 0x10, 0xe0, 0x52, 0x8c, 0xe6, 0xe9, 0x90, 0x8d, 0xe0,
102 0x62, 0x04, 0x9a, 0x0f, 0x44, 0x01, 0x82, 0x14, 0x92, 0x44, 0x25, 0x69, 0x22, 0xb7, 0xb8, 0xc5,
103 0x94, 0x4c, 0x4b, 0x1c, 0x9b, 0x92, 0x60, 0x66, 0x90, 0x4e, 0xb9, 0xa8, 0x4c, 0x89, 0xbb, 0x0f,
107 static const unsigned char KEY1
[] =
109 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c, 0x7a,
110 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1, 0xc8,
111 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84, 0x81,
112 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf, 0xc7,
113 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b, 0x84,
114 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72, 0x31,
115 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9, 0x19,
116 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44, 0xc1,
117 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00, 0x01,
118 0x02, 0x81, 0x81, 0x00, 0xa5, 0x6d, 0xf9, 0x8f, 0xf5, 0x5a, 0xa3, 0x50, 0xd9, 0x0d, 0x37, 0xbb,
119 0xce, 0x13, 0x94, 0xb8, 0xea, 0x32, 0x7f, 0x0c, 0xf5, 0x46, 0x0b, 0x90, 0x17, 0x7e, 0x5e, 0x63,
120 0xbd, 0xa4, 0x78, 0xcd, 0x19, 0x97, 0xd4, 0x92, 0x30, 0x78, 0xaa, 0xb4, 0xa7, 0x9c, 0xc6, 0xdf,
121 0x2a, 0x65, 0x0e, 0xb5, 0x9f, 0x9c, 0x84, 0x0d, 0x4d, 0x3a, 0x74, 0xfc, 0xd0, 0xb4, 0x09, 0x74,
122 0xc4, 0xb8, 0x24, 0x03, 0xa8, 0xf0, 0xf8, 0x0d, 0x5c, 0x8e, 0xdf, 0x4b, 0xe1, 0x0a, 0x8f, 0x4f,
123 0xd5, 0xc7, 0x9b, 0x54, 0x55, 0x8f, 0x00, 0x5c, 0xea, 0x4c, 0x73, 0xf9, 0x1b, 0xbf, 0xb8, 0x93,
124 0x33, 0x20, 0xce, 0x45, 0xd9, 0x03, 0x02, 0xb2, 0x36, 0xc5, 0x0a, 0x30, 0x50, 0x78, 0x80, 0x66,
125 0x00, 0x22, 0x38, 0x86, 0xcf, 0x63, 0x4a, 0x5c, 0xbf, 0x2b, 0xd9, 0x6e, 0xe6, 0xf0, 0x39, 0xad,
126 0x12, 0x25, 0x41, 0xb9, 0x02, 0x41, 0x00, 0xf3, 0x7c, 0x07, 0x99, 0x64, 0x3a, 0x28, 0x8c, 0x8d,
127 0x05, 0xfe, 0x32, 0xb5, 0x4c, 0x8c, 0x6d, 0xde, 0x3d, 0x16, 0x08, 0xa0, 0x01, 0x61, 0x4f, 0x8e,
128 0xa0, 0xf7, 0x26, 0x26, 0xb5, 0x8e, 0xc0, 0x7a, 0xce, 0x86, 0x34, 0xde, 0xb8, 0xef, 0x86, 0x01,
129 0xbe, 0x24, 0xaa, 0x9b, 0x36, 0x93, 0x72, 0x9b, 0xf9, 0xc6, 0xcb, 0x76, 0x84, 0x67, 0x06, 0x06,
130 0x30, 0x50, 0xdf, 0x42, 0x17, 0xe0, 0xa7, 0x02, 0x41, 0x00, 0xc6, 0x91, 0xa0, 0x41, 0x34, 0x11,
131 0x67, 0x4b, 0x08, 0x0f, 0xda, 0xa7, 0x99, 0xec, 0x58, 0x11, 0xa5, 0x82, 0xdb, 0x50, 0xfe, 0x77,
132 0xe2, 0xd1, 0x53, 0x9c, 0x7d, 0xe8, 0xbf, 0xe7, 0x7c, 0xa9, 0x01, 0xb1, 0x87, 0xc3, 0x52, 0x79,
133 0x9e, 0x2c, 0xa7, 0x6f, 0x02, 0x37, 0x32, 0xef, 0x24, 0x31, 0x21, 0x0b, 0x86, 0x05, 0x32, 0x4a,
134 0x2e, 0x0b, 0x65, 0x05, 0xd3, 0xd6, 0x30, 0xb2, 0xfc, 0xa7, 0x02, 0x41, 0x00, 0xc2, 0xed, 0x31,
135 0xdc, 0x40, 0x9c, 0x3a, 0xe8, 0x42, 0xe2, 0x60, 0x5e, 0x52, 0x3c, 0xc5, 0x54, 0x14, 0x0e, 0x8d,
136 0x7c, 0x3c, 0x34, 0xbe, 0xa6, 0x05, 0x86, 0xa2, 0x36, 0x5d, 0xd9, 0x0e, 0x3e, 0xd4, 0x52, 0x50,
137 0xa9, 0x35, 0x01, 0x93, 0x68, 0x92, 0x2e, 0x9a, 0x86, 0x27, 0x1a, 0xab, 0x32, 0x9e, 0xe2, 0x79,
138 0x9f, 0x5b, 0xf3, 0xa5, 0xd2, 0xf1, 0xd3, 0x6e, 0x7b, 0x3e, 0x1b, 0x85, 0x93, 0x02, 0x40, 0x68,
139 0xb8, 0xb6, 0x7e, 0x8c, 0xba, 0x3c, 0xf2, 0x8a, 0x2e, 0xea, 0x4f, 0x07, 0xd3, 0x68, 0x62, 0xee,
140 0x1a, 0x04, 0x16, 0x44, 0x0d, 0xef, 0xf6, 0x1b, 0x95, 0x65, 0xa5, 0xd1, 0x47, 0x81, 0x2c, 0x14,
141 0xb3, 0x8e, 0xf9, 0x08, 0xcf, 0x11, 0x07, 0x55, 0xca, 0x2a, 0xad, 0xf7, 0xd3, 0xbd, 0x0f, 0x97,
142 0xf0, 0xde, 0xde, 0x70, 0xb6, 0x44, 0x70, 0x47, 0xf7, 0xf9, 0xcf, 0x75, 0x61, 0x7f, 0xf3, 0x02,
143 0x40, 0x38, 0x4a, 0x67, 0xaf, 0xae, 0xb6, 0xb2, 0x6a, 0x00, 0x25, 0x5a, 0xa4, 0x65, 0x20, 0xb1,
144 0x13, 0xbd, 0x83, 0xff, 0xb4, 0xbc, 0xf4, 0xdd, 0xa1, 0xbb, 0x1c, 0x96, 0x37, 0x35, 0xf4, 0xbf,
145 0xed, 0x4c, 0xed, 0x92, 0xe8, 0xac, 0xc9, 0xc1, 0xa5, 0xa3, 0x23, 0x66, 0x40, 0x8a, 0xa1, 0xe6,
146 0xe3, 0x95, 0xfe, 0xc4, 0x53, 0xf5, 0x7d, 0x6e, 0xca, 0x45, 0x42, 0xe4, 0xc2, 0x9f, 0xe5, 0x1e,
151 static const unsigned char KEY2
[] =
153 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86, 0x9f,
154 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35, 0x4d,
155 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8, 0xa5,
156 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03, 0x98,
157 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e, 0x31,
158 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc, 0x70,
159 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49, 0xd3,
160 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe, 0x2d,
161 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00, 0x01,
162 0x02, 0x81, 0x81, 0x00, 0xa6, 0x00, 0x83, 0xf8, 0x2b, 0x33, 0xac, 0xfb, 0xdb, 0xf0, 0x52, 0x4b,
163 0xd6, 0x39, 0xe3, 0x94, 0x3d, 0x8d, 0xa9, 0x01, 0xb0, 0x6b, 0xbe, 0x7f, 0x10, 0x01, 0xb6, 0xcd,
164 0x0a, 0x45, 0x0a, 0xca, 0x67, 0x8e, 0xd8, 0x29, 0x44, 0x8a, 0x51, 0xa8, 0x66, 0x35, 0x26, 0x30,
165 0x8b, 0xe9, 0x41, 0xa6, 0x22, 0xec, 0xd2, 0xf0, 0x58, 0x41, 0x33, 0x26, 0xf2, 0x3f, 0xe8, 0x75,
166 0x4f, 0xc7, 0x5d, 0x2e, 0x5a, 0xa8, 0x7a, 0xd2, 0xbf, 0x59, 0xa0, 0x86, 0x79, 0x0b, 0x92, 0x6c,
167 0x95, 0x5d, 0x87, 0x63, 0x5c, 0xd6, 0x1a, 0xc0, 0xf6, 0x7a, 0x15, 0x8d, 0xc7, 0x3c, 0xb6, 0x9e,
168 0xa6, 0x58, 0x46, 0x9b, 0xbf, 0x3e, 0x28, 0x8c, 0xdf, 0x1a, 0x87, 0xaa, 0x7e, 0xf5, 0xf2, 0xcb,
169 0x5e, 0x84, 0x2d, 0xf6, 0x82, 0x7e, 0x89, 0x4e, 0xf5, 0xe6, 0x3c, 0x92, 0x80, 0x1e, 0x98, 0x1c,
170 0x6a, 0x7b, 0x57, 0x01, 0x02, 0x41, 0x00, 0xdd, 0x60, 0x95, 0xd7, 0xa1, 0x9d, 0x0c, 0xa1, 0x84,
171 0xc5, 0x39, 0xca, 0x67, 0x4c, 0x1c, 0x06, 0x71, 0x5b, 0x5c, 0x2d, 0x8d, 0xce, 0xcd, 0xe2, 0x79,
172 0xc8, 0x33, 0xbe, 0x50, 0x37, 0x60, 0x9f, 0x3b, 0xb9, 0x59, 0x55, 0x22, 0x1f, 0xa5, 0x4b, 0x1d,
173 0xca, 0x38, 0xa0, 0xab, 0x87, 0x9c, 0x86, 0x0e, 0xdb, 0x1c, 0x4f, 0x4f, 0x07, 0xed, 0x18, 0x3f,
174 0x05, 0x3c, 0xec, 0x78, 0x11, 0xf6, 0x99, 0x02, 0x41, 0x00, 0xc2, 0xc5, 0xcf, 0xbe, 0x95, 0x91,
175 0xeb, 0xcf, 0x47, 0xf3, 0x33, 0x32, 0xc7, 0x7e, 0x93, 0x56, 0xf7, 0xd8, 0xf9, 0xd4, 0xb6, 0xd6,
176 0x20, 0xac, 0xba, 0x8a, 0x20, 0x19, 0x14, 0xab, 0xc5, 0x5d, 0xb2, 0x08, 0xcc, 0x77, 0x7c, 0x65,
177 0xa8, 0xdb, 0x66, 0x97, 0x36, 0x44, 0x2c, 0x63, 0xc0, 0x6a, 0x7e, 0xb0, 0x0b, 0x5c, 0x90, 0x12,
178 0x50, 0xb4, 0x36, 0x60, 0xc3, 0x1f, 0x22, 0x0c, 0xc8, 0x13, 0x02, 0x40, 0x33, 0xc8, 0x7e, 0x04,
179 0x7c, 0x97, 0x61, 0xf6, 0xfe, 0x39, 0xac, 0x34, 0xfe, 0x48, 0xbd, 0x5d, 0x7c, 0x72, 0xa4, 0x73,
180 0x3b, 0x72, 0x9e, 0x92, 0x55, 0x6e, 0x51, 0x3c, 0x39, 0x43, 0x5a, 0xe4, 0xa4, 0x71, 0xcc, 0xc5,
181 0xaf, 0x3f, 0xbb, 0xc8, 0x80, 0x65, 0x67, 0x2d, 0x9e, 0x32, 0x10, 0x99, 0x03, 0x2c, 0x99, 0xc8,
182 0xab, 0x71, 0xed, 0x31, 0xf8, 0xbb, 0xde, 0xee, 0x69, 0x7f, 0xba, 0x31, 0x02, 0x40, 0x7e, 0xbc,
183 0x60, 0x55, 0x4e, 0xd5, 0xc8, 0x6e, 0xf4, 0x0e, 0x57, 0xbe, 0x2e, 0xf9, 0x39, 0xbe, 0x59, 0x3f,
184 0xa2, 0x30, 0xbb, 0x57, 0xd1, 0xa3, 0x13, 0x2e, 0x55, 0x7c, 0x7c, 0x6a, 0xd8, 0xde, 0x02, 0xbe,
185 0x9e, 0xed, 0x10, 0xd0, 0xc5, 0x73, 0x1d, 0xea, 0x3e, 0xb1, 0x55, 0x81, 0x02, 0xef, 0x48, 0xc8,
186 0x1c, 0x5c, 0x7a, 0x92, 0xb0, 0x58, 0xd3, 0x19, 0x5b, 0x5d, 0xa2, 0xb6, 0x56, 0x69, 0x02, 0x40,
187 0x1e, 0x00, 0x6a, 0x9f, 0xba, 0xee, 0x46, 0x5a, 0xc5, 0xb5, 0x9f, 0x91, 0x33, 0xdd, 0xc9, 0x96,
188 0x75, 0xb7, 0x87, 0xcf, 0x18, 0x1c, 0xb7, 0xb9, 0x3f, 0x04, 0x10, 0xb8, 0x75, 0xa9, 0xb8, 0xa0,
189 0x31, 0x35, 0x03, 0x30, 0x89, 0xc8, 0x37, 0x68, 0x20, 0x30, 0x99, 0x39, 0x96, 0xd6, 0x2b, 0x3d,
190 0x5e, 0x45, 0x84, 0xf7, 0xd2, 0x61, 0x50, 0xc9, 0x50, 0xba, 0x8d, 0x08, 0xaa, 0xd0, 0x08, 0x1e,
194 static const PKCS12_ATTR ATTRS1
[] = {
195 { "friendlyName", "george" },
196 { "localKeyID", "1234567890" },
197 { "1.2.3.4.5", "MyCustomAttribute" },
201 static const PKCS12_ATTR ATTRS2
[] = {
202 { "friendlyName", "janet" },
203 { "localKeyID", "987654321" },
204 { "1.2.3.5.8.13", "AnotherCustomAttribute" },
208 static const PKCS12_ENC enc_default
= {
209 #ifndef OPENSSL_NO_DES
210 NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
218 static const PKCS12_ENC mac_default
= {
224 static const int enc_nids_all
[] = {
225 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
228 #ifndef OPENSSL_NO_DES
232 #ifndef OPENSSL_NO_RC5
235 #ifndef OPENSSL_NO_RC4
238 #ifndef OPENSSL_NO_RC2
242 #ifndef OPENSSL_NO_MD2
243 # ifndef OPENSSL_NO_DES
244 NID_pbeWithMD2AndDES_CBC
,
246 # ifndef OPENSSL_NO_RC2
247 NID_pbeWithMD2AndRC2_CBC
,
251 #ifndef OPENSSL_NO_MD5
252 # ifndef OPENSSL_NO_DES
253 NID_pbeWithMD5AndDES_CBC
,
255 # ifndef OPENSSL_NO_RC2
256 NID_pbeWithMD5AndRC2_CBC
,
259 #ifndef OPENSSL_NO_DES
260 NID_pbeWithSHA1AndDES_CBC
,
262 #ifndef OPENSSL_NO_RC2
263 NID_pbe_WithSHA1And128BitRC2_CBC
,
264 NID_pbe_WithSHA1And40BitRC2_CBC
,
265 NID_pbeWithSHA1AndRC2_CBC
,
267 #ifndef OPENSSL_NO_RC4
268 NID_pbe_WithSHA1And128BitRC4
,
269 NID_pbe_WithSHA1And40BitRC4
,
271 #ifndef OPENSSL_NO_DES
272 NID_pbe_WithSHA1And2_Key_TripleDES_CBC
,
273 NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
277 static const int enc_nids_no_legacy
[] = {
278 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
281 #ifndef OPENSSL_NO_DES
283 NID_pbe_WithSHA1And2_Key_TripleDES_CBC
,
284 NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
288 static const int mac_nids
[] = {
297 static const int iters
[] = {
302 static const char *passwords
[] = {
307 /* --------------------------------------------------------------------------
311 static int get_custom_oid(void)
313 static int sec_nid
= -1;
317 if (!TEST_true(OBJ_create("1.3.5.7.9", "CustomSecretOID", "My custom secret OID")))
319 return sec_nid
= OBJ_txt2nid("CustomSecretOID");
323 /* --------------------------------------------------------------------------
324 * PKCS12 format tests
327 static int test_single_cert_no_attrs(void)
329 PKCS12_BUILDER
*pb
= new_pkcs12_builder("1cert.p12");
331 /* Generate/encode */
334 start_contentinfo(pb
);
336 add_certbag(pb
, CERT1
, sizeof(CERT1
), NULL
);
343 start_check_pkcs12(pb
);
345 start_check_contentinfo(pb
);
347 check_certbag(pb
, CERT1
, sizeof(CERT1
), NULL
);
349 end_check_contentinfo(pb
);
351 end_check_pkcs12(pb
);
353 return end_pkcs12_builder(pb
);
356 static int test_single_key(PKCS12_ENC
*enc
)
361 sprintf(fname
, "1key_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc
->nid
), enc
->iter
);
363 pb
= new_pkcs12_builder(fname
);
365 /* Generate/encode */
368 start_contentinfo(pb
);
370 add_keybag(pb
, KEY1
, sizeof(KEY1
), NULL
, enc
);
377 start_check_pkcs12(pb
);
379 start_check_contentinfo(pb
);
381 check_keybag(pb
, KEY1
, sizeof(KEY1
), NULL
, enc
);
383 end_check_contentinfo(pb
);
385 end_check_pkcs12(pb
);
387 return end_pkcs12_builder(pb
);
390 static int test_single_key_enc_alg(int z
)
394 if (lgcyprov
== NULL
)
395 enc
.nid
= enc_nids_no_legacy
[z
];
397 enc
.nid
= enc_nids_all
[z
];
398 enc
.pass
= enc_default
.pass
;
399 enc
.iter
= enc_default
.iter
;
401 return test_single_key(&enc
);
404 static int test_single_key_enc_pass(int z
)
408 enc
.nid
= enc_default
.nid
;
409 enc
.pass
= passwords
[z
];
410 enc
.iter
= enc_default
.iter
;
412 return test_single_key(&enc
);
415 static int test_single_key_enc_iter(int z
)
419 enc
.nid
= enc_default
.nid
;
420 enc
.pass
= enc_default
.pass
;
423 return test_single_key(&enc
);
426 static int test_single_key_with_attrs(void)
428 PKCS12_BUILDER
*pb
= new_pkcs12_builder("1keyattrs.p12");
430 /* Generate/encode */
433 start_contentinfo(pb
);
435 add_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
442 start_check_pkcs12(pb
);
444 start_check_contentinfo(pb
);
446 check_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
448 end_check_contentinfo(pb
);
450 end_check_pkcs12(pb
);
452 return end_pkcs12_builder(pb
);
455 static int test_single_cert_mac(PKCS12_ENC
*mac
)
460 sprintf(fname
, "1cert_mac-%s_iter-%d.p12", OBJ_nid2sn(mac
->nid
), mac
->iter
);
462 pb
= new_pkcs12_builder(fname
);
464 /* Generate/encode */
467 start_contentinfo(pb
);
469 add_certbag(pb
, CERT1
, sizeof(CERT1
), NULL
);
473 end_pkcs12_with_mac(pb
, mac
);
476 start_check_pkcs12_with_mac(pb
, mac
);
478 start_check_contentinfo(pb
);
480 check_certbag(pb
, CERT1
, sizeof(CERT1
), NULL
);
482 end_check_contentinfo(pb
);
484 end_check_pkcs12(pb
);
486 return end_pkcs12_builder(pb
);
489 static int test_single_cert_mac_alg(int z
)
493 mac
.nid
= mac_nids
[z
];
494 mac
.pass
= mac_default
.pass
;
495 mac
.iter
= mac_default
.iter
;
497 return test_single_cert_mac(&mac
);
500 static int test_single_cert_mac_pass(int z
)
504 mac
.nid
= mac_default
.nid
;
505 mac
.pass
= passwords
[z
];
506 mac
.iter
= mac_default
.iter
;
508 return test_single_cert_mac(&mac
);
511 static int test_single_cert_mac_iter(int z
)
515 mac
.nid
= mac_default
.nid
;
516 mac
.pass
= mac_default
.pass
;
519 return test_single_cert_mac(&mac
);
522 static int test_cert_key_with_attrs_and_mac(void)
524 PKCS12_BUILDER
*pb
= new_pkcs12_builder("1cert1key.p12");
526 /* Generate/encode */
529 start_contentinfo(pb
);
531 add_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
532 add_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
536 end_pkcs12_with_mac(pb
, &mac_default
);
539 start_check_pkcs12_with_mac(pb
, &mac_default
);
541 start_check_contentinfo(pb
);
543 check_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
544 check_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
546 end_check_contentinfo(pb
);
548 end_check_pkcs12(pb
);
550 return end_pkcs12_builder(pb
);
553 static int test_cert_key_encrypted_content(void)
555 PKCS12_BUILDER
*pb
= new_pkcs12_builder("1cert1key_enc.p12");
557 /* Generate/encode */
560 start_contentinfo(pb
);
562 add_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
563 add_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
565 end_contentinfo_encrypted(pb
, &enc_default
);
567 end_pkcs12_with_mac(pb
, &mac_default
);
570 start_check_pkcs12_with_mac(pb
, &mac_default
);
572 start_check_contentinfo_encrypted(pb
, &enc_default
);
574 check_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
575 check_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
577 end_check_contentinfo(pb
);
579 end_check_pkcs12(pb
);
581 return end_pkcs12_builder(pb
);
584 static int test_single_secret_encrypted_content(void)
586 PKCS12_BUILDER
*pb
= new_pkcs12_builder("1secret.p12");
587 int custom_nid
= get_custom_oid();
589 /* Generate/encode */
592 start_contentinfo(pb
);
594 add_secretbag(pb
, custom_nid
, "VerySecretMessage", ATTRS1
);
596 end_contentinfo_encrypted(pb
, &enc_default
);
598 end_pkcs12_with_mac(pb
, &mac_default
);
601 start_check_pkcs12_with_mac(pb
, &mac_default
);
603 start_check_contentinfo_encrypted(pb
, &enc_default
);
605 check_secretbag(pb
, custom_nid
, "VerySecretMessage", ATTRS1
);
607 end_check_contentinfo(pb
);
609 end_check_pkcs12(pb
);
611 return end_pkcs12_builder(pb
);
614 static int test_single_secret(PKCS12_ENC
*enc
)
620 sprintf(fname
, "1secret_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc
->nid
), enc
->iter
);
621 pb
= new_pkcs12_builder(fname
);
622 custom_nid
= get_custom_oid();
624 /* Generate/encode */
627 start_contentinfo(pb
);
629 add_secretbag(pb
, custom_nid
, "VerySecretMessage", ATTRS1
);
631 end_contentinfo_encrypted(pb
, enc
);
633 end_pkcs12_with_mac(pb
, &mac_default
);
636 start_check_pkcs12_with_mac(pb
, &mac_default
);
638 start_check_contentinfo_encrypted(pb
, enc
);
640 check_secretbag(pb
, custom_nid
, "VerySecretMessage", ATTRS1
);
642 end_check_contentinfo(pb
);
644 end_check_pkcs12(pb
);
646 return end_pkcs12_builder(pb
);
649 static int test_single_secret_enc_alg(int z
)
653 if (lgcyprov
== NULL
)
654 enc
.nid
= enc_nids_no_legacy
[z
];
656 enc
.nid
= enc_nids_all
[z
];
657 enc
.pass
= enc_default
.pass
;
658 enc
.iter
= enc_default
.iter
;
660 return test_single_secret(&enc
);
663 static int test_multiple_contents(void)
665 PKCS12_BUILDER
*pb
= new_pkcs12_builder("multi_contents.p12");
666 int custom_nid
= get_custom_oid();
668 /* Generate/encode */
671 start_contentinfo(pb
);
673 add_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
674 add_certbag(pb
, CERT2
, sizeof(CERT2
), ATTRS2
);
675 add_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
676 add_keybag(pb
, KEY2
, sizeof(KEY2
), ATTRS2
, &enc_default
);
680 start_contentinfo(pb
);
682 add_secretbag(pb
, custom_nid
, "VeryVerySecretMessage", ATTRS1
);
684 end_contentinfo_encrypted(pb
, &enc_default
);
686 end_pkcs12_with_mac(pb
, &mac_default
);
689 start_check_pkcs12_with_mac(pb
, &mac_default
);
691 start_check_contentinfo(pb
);
693 check_certbag(pb
, CERT1
, sizeof(CERT1
), ATTRS1
);
694 check_certbag(pb
, CERT2
, sizeof(CERT2
), ATTRS2
);
695 check_keybag(pb
, KEY1
, sizeof(KEY1
), ATTRS1
, &enc_default
);
696 check_keybag(pb
, KEY2
, sizeof(KEY2
), ATTRS2
, &enc_default
);
698 end_check_contentinfo(pb
);
700 start_check_contentinfo_encrypted(pb
, &enc_default
);
702 check_secretbag(pb
, custom_nid
, "VeryVerySecretMessage", ATTRS1
);
704 end_check_contentinfo(pb
);
706 end_check_pkcs12(pb
);
708 return end_pkcs12_builder(pb
);
711 typedef enum OPTION_choice
{
720 const OPTIONS
*test_get_options(void)
722 static const OPTIONS options
[] = {
723 OPT_TEST_OPTIONS_DEFAULT_USAGE
,
724 { "write", OPT_WRITE
, '-', "Write PKCS12 objects to file" },
725 { "legacy", OPT_LEGACY
, '-', "Test the legacy APIs" },
726 { "context", OPT_CONTEXT
, '-', "Explicitly use a non-default library context" },
732 int setup_tests(void)
736 while ((o
= opt_next()) != OPT_EOF
) {
739 PKCS12_helper_set_write_files(1);
742 PKCS12_helper_set_legacy(1);
754 if (!default_libctx
) {
755 testctx
= OSSL_LIB_CTX_new();
756 if (!TEST_ptr(testctx
))
758 nullprov
= OSSL_PROVIDER_load(NULL
, "null");
759 if (!TEST_ptr(nullprov
))
763 deflprov
= OSSL_PROVIDER_load(testctx
, "default");
764 if (!TEST_ptr(deflprov
))
766 lgcyprov
= OSSL_PROVIDER_load(testctx
, "legacy");
768 PKCS12_helper_set_libctx(testctx
);
771 * Verify that the default and fips providers in the default libctx are not
772 * available if we are using a standalone context
774 if (!default_libctx
) {
775 if (!TEST_false(OSSL_PROVIDER_available(NULL
, "default"))
776 || !TEST_false(OSSL_PROVIDER_available(NULL
, "fips")))
780 ADD_TEST(test_single_cert_no_attrs
);
781 if (lgcyprov
== NULL
) {
782 ADD_ALL_TESTS(test_single_key_enc_alg
, OSSL_NELEM(enc_nids_no_legacy
));
783 ADD_ALL_TESTS(test_single_secret_enc_alg
, OSSL_NELEM(enc_nids_no_legacy
));
785 ADD_ALL_TESTS(test_single_key_enc_alg
, OSSL_NELEM(enc_nids_all
));
786 ADD_ALL_TESTS(test_single_secret_enc_alg
, OSSL_NELEM(enc_nids_all
));
788 ADD_ALL_TESTS(test_single_key_enc_pass
, OSSL_NELEM(passwords
));
789 ADD_ALL_TESTS(test_single_key_enc_iter
, OSSL_NELEM(iters
));
790 ADD_TEST(test_single_key_with_attrs
);
791 ADD_ALL_TESTS(test_single_cert_mac_alg
, OSSL_NELEM(mac_nids
));
792 ADD_ALL_TESTS(test_single_cert_mac_pass
, OSSL_NELEM(passwords
));
793 ADD_ALL_TESTS(test_single_cert_mac_iter
, OSSL_NELEM(iters
));
794 ADD_TEST(test_cert_key_with_attrs_and_mac
);
795 ADD_TEST(test_cert_key_encrypted_content
);
796 ADD_TEST(test_single_secret_encrypted_content
);
797 ADD_TEST(test_multiple_contents
);
801 void cleanup_tests(void)
803 OSSL_PROVIDER_unload(nullprov
);
804 OSSL_PROVIDER_unload(deflprov
);
805 OSSL_PROVIDER_unload(lgcyprov
);
806 OSSL_LIB_CTX_free(testctx
);