]> git.ipfire.org Git - thirdparty/openssl.git/blob - test/pkcs12_format_test.c
Fix various typos, repeated words, align some spelling to LDP.
[thirdparty/openssl.git] / test / pkcs12_format_test.c
1 /*
2 * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
3 *
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
8 */
9
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13
14 #include "internal/nelem.h"
15
16 #include <openssl/pkcs12.h>
17 #include <openssl/x509.h>
18 #include <openssl/x509v3.h>
19 #include <openssl/pem.h>
20
21 #include "testutil.h"
22 #include "helpers/pkcs12.h"
23
24 static int default_libctx = 1;
25
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;
30
31 /* --------------------------------------------------------------------------
32 * PKCS12 component test data
33 */
34
35 static const unsigned char CERT1[] =
36 {
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,
68 0x30,
69 };
70
71 static const unsigned char CERT2[] =
72 {
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,
104 0x0b,
105 };
106
107 static const unsigned char KEY1[] =
108 {
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,
147 0xb5,
148 };
149
150
151 static const unsigned char KEY2[] =
152 {
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,
191 };
192
193
194 static const PKCS12_ATTR ATTRS1[] = {
195 { "friendlyName", "george" },
196 { "localKeyID", "1234567890" },
197 { "1.2.3.4.5", "MyCustomAttribute" },
198 { NULL, NULL }
199 };
200
201 static const PKCS12_ATTR ATTRS2[] = {
202 { "friendlyName", "janet" },
203 { "localKeyID", "987654321" },
204 { "1.2.3.5.8.13", "AnotherCustomAttribute" },
205 { NULL, NULL }
206 };
207
208 static const PKCS12_ATTR ATTRS3[] = {
209 { "friendlyName", "wildduk" },
210 { "localKeyID", "1122334455" },
211 { "oracle-jdk-trustedkeyusage", "anyExtendedKeyUsage" },
212 { NULL, NULL }
213 };
214
215 static const PKCS12_ATTR ATTRS4[] = {
216 { "friendlyName", "wildduk" },
217 { "localKeyID", "1122334455" },
218 { NULL, NULL }
219 };
220
221 static const PKCS12_ENC enc_default = {
222 #ifndef OPENSSL_NO_DES
223 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
224 #else
225 NID_aes_128_cbc,
226 #endif
227 "Password1",
228 1000
229 };
230
231 static const PKCS12_ENC mac_default = {
232 NID_sha1,
233 "Password1",
234 1000
235 };
236
237 static const int enc_nids_all[] = {
238 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
239 NID_aes_128_cbc,
240 NID_aes_256_cbc,
241 #ifndef OPENSSL_NO_DES
242 NID_des_ede3_cbc,
243 NID_des_cbc,
244 #endif
245 #ifndef OPENSSL_NO_RC5
246 NID_rc5_cbc,
247 #endif
248 #ifndef OPENSSL_NO_RC4
249 NID_rc4,
250 #endif
251 #ifndef OPENSSL_NO_RC2
252 NID_rc2_cbc,
253 #endif
254
255 #ifndef OPENSSL_NO_MD2
256 # ifndef OPENSSL_NO_DES
257 NID_pbeWithMD2AndDES_CBC,
258 # endif
259 # ifndef OPENSSL_NO_RC2
260 NID_pbeWithMD2AndRC2_CBC,
261 # endif
262 #endif
263
264 #ifndef OPENSSL_NO_MD5
265 # ifndef OPENSSL_NO_DES
266 NID_pbeWithMD5AndDES_CBC,
267 # endif
268 # ifndef OPENSSL_NO_RC2
269 NID_pbeWithMD5AndRC2_CBC,
270 # endif
271 #endif
272 #ifndef OPENSSL_NO_DES
273 NID_pbeWithSHA1AndDES_CBC,
274 #endif
275 #ifndef OPENSSL_NO_RC2
276 NID_pbe_WithSHA1And128BitRC2_CBC,
277 NID_pbe_WithSHA1And40BitRC2_CBC,
278 NID_pbeWithSHA1AndRC2_CBC,
279 #endif
280 #ifndef OPENSSL_NO_RC4
281 NID_pbe_WithSHA1And128BitRC4,
282 NID_pbe_WithSHA1And40BitRC4,
283 #endif
284 #ifndef OPENSSL_NO_DES
285 NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
286 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
287 #endif
288 };
289
290 static const int enc_nids_no_legacy[] = {
291 /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
292 NID_aes_128_cbc,
293 NID_aes_256_cbc,
294 #ifndef OPENSSL_NO_DES
295 NID_des_ede3_cbc,
296 NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
297 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
298 #endif
299 };
300
301 static const int mac_nids[] = {
302 NID_sha1,
303 NID_md5,
304 NID_sha256,
305 NID_sha512,
306 NID_sha3_256,
307 NID_sha3_512
308 };
309
310 static const int iters[] = {
311 1,
312 1000
313 };
314
315 static const char *passwords[] = {
316 "Password1",
317 "",
318 };
319
320 /* --------------------------------------------------------------------------
321 * Local functions
322 */
323
324 static int get_custom_oid(void)
325 {
326 static int sec_nid = -1;
327
328 if (sec_nid != -1)
329 return sec_nid;
330 if (!TEST_true(OBJ_create("1.3.5.7.9", "CustomSecretOID", "My custom secret OID")))
331 return -1;
332 return sec_nid = OBJ_txt2nid("CustomSecretOID");
333 }
334
335
336 /* --------------------------------------------------------------------------
337 * PKCS12 format tests
338 */
339
340 static int test_single_cert_no_attrs(void)
341 {
342 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert.p12");
343
344 /* Generate/encode */
345 start_pkcs12(pb);
346
347 start_contentinfo(pb);
348
349 add_certbag(pb, CERT1, sizeof(CERT1), NULL);
350
351 end_contentinfo(pb);
352
353 end_pkcs12(pb);
354
355 /* Read/decode */
356 start_check_pkcs12(pb);
357
358 start_check_contentinfo(pb);
359
360 check_certbag(pb, CERT1, sizeof(CERT1), NULL);
361
362 end_check_contentinfo(pb);
363
364 end_check_pkcs12(pb);
365
366 return end_pkcs12_builder(pb);
367 }
368
369 static int test_single_key(PKCS12_ENC *enc)
370 {
371 char fname[80];
372 PKCS12_BUILDER *pb;
373
374 sprintf(fname, "1key_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
375
376 pb = new_pkcs12_builder(fname);
377
378 /* Generate/encode */
379 start_pkcs12(pb);
380
381 start_contentinfo(pb);
382
383 add_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
384
385 end_contentinfo(pb);
386
387 end_pkcs12(pb);
388
389 /* Read/decode */
390 start_check_pkcs12(pb);
391
392 start_check_contentinfo(pb);
393
394 check_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
395
396 end_check_contentinfo(pb);
397
398 end_check_pkcs12(pb);
399
400 return end_pkcs12_builder(pb);
401 }
402
403 static int test_single_key_enc_alg(int z)
404 {
405 PKCS12_ENC enc;
406
407 if (lgcyprov == NULL)
408 enc.nid = enc_nids_no_legacy[z];
409 else
410 enc.nid = enc_nids_all[z];
411 enc.pass = enc_default.pass;
412 enc.iter = enc_default.iter;
413
414 return test_single_key(&enc);
415 }
416
417 static int test_single_key_enc_pass(int z)
418 {
419 PKCS12_ENC enc;
420
421 enc.nid = enc_default.nid;
422 enc.pass = passwords[z];
423 enc.iter = enc_default.iter;
424
425 return test_single_key(&enc);
426 }
427
428 static int test_single_key_enc_iter(int z)
429 {
430 PKCS12_ENC enc;
431
432 enc.nid = enc_default.nid;
433 enc.pass = enc_default.pass;
434 enc.iter = iters[z];
435
436 return test_single_key(&enc);
437 }
438
439 static int test_single_key_with_attrs(void)
440 {
441 PKCS12_BUILDER *pb = new_pkcs12_builder("1keyattrs.p12");
442
443 /* Generate/encode */
444 start_pkcs12(pb);
445
446 start_contentinfo(pb);
447
448 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
449
450 end_contentinfo(pb);
451
452 end_pkcs12(pb);
453
454 /* Read/decode */
455 start_check_pkcs12(pb);
456
457 start_check_contentinfo(pb);
458
459 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
460
461 end_check_contentinfo(pb);
462
463 end_check_pkcs12(pb);
464
465 return end_pkcs12_builder(pb);
466 }
467
468 static int test_single_cert_mac(PKCS12_ENC *mac)
469 {
470 char fname[80];
471 PKCS12_BUILDER *pb;
472
473 sprintf(fname, "1cert_mac-%s_iter-%d.p12", OBJ_nid2sn(mac->nid), mac->iter);
474
475 pb = new_pkcs12_builder(fname);
476
477 /* Generate/encode */
478 start_pkcs12(pb);
479
480 start_contentinfo(pb);
481
482 add_certbag(pb, CERT1, sizeof(CERT1), NULL);
483
484 end_contentinfo(pb);
485
486 end_pkcs12_with_mac(pb, mac);
487
488 /* Read/decode */
489 start_check_pkcs12_with_mac(pb, mac);
490
491 start_check_contentinfo(pb);
492
493 check_certbag(pb, CERT1, sizeof(CERT1), NULL);
494
495 end_check_contentinfo(pb);
496
497 end_check_pkcs12(pb);
498
499 return end_pkcs12_builder(pb);
500 }
501
502 static int test_single_cert_mac_alg(int z)
503 {
504 PKCS12_ENC mac;
505
506 mac.nid = mac_nids[z];
507 mac.pass = mac_default.pass;
508 mac.iter = mac_default.iter;
509
510 return test_single_cert_mac(&mac);
511 }
512
513 static int test_single_cert_mac_pass(int z)
514 {
515 PKCS12_ENC mac;
516
517 mac.nid = mac_default.nid;
518 mac.pass = passwords[z];
519 mac.iter = mac_default.iter;
520
521 return test_single_cert_mac(&mac);
522 }
523
524 static int test_single_cert_mac_iter(int z)
525 {
526 PKCS12_ENC mac;
527
528 mac.nid = mac_default.nid;
529 mac.pass = mac_default.pass;
530 mac.iter = iters[z];
531
532 return test_single_cert_mac(&mac);
533 }
534
535 static int test_cert_key_with_attrs_and_mac(void)
536 {
537 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key.p12");
538
539 /* Generate/encode */
540 start_pkcs12(pb);
541
542 start_contentinfo(pb);
543
544 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
545 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
546
547 end_contentinfo(pb);
548
549 end_pkcs12_with_mac(pb, &mac_default);
550
551 /* Read/decode */
552 start_check_pkcs12_with_mac(pb, &mac_default);
553
554 start_check_contentinfo(pb);
555
556 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
557 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
558
559 end_check_contentinfo(pb);
560
561 end_check_pkcs12(pb);
562
563 return end_pkcs12_builder(pb);
564 }
565
566 static int test_cert_key_encrypted_content(void)
567 {
568 PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key_enc.p12");
569
570 /* Generate/encode */
571 start_pkcs12(pb);
572
573 start_contentinfo(pb);
574
575 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
576 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
577
578 end_contentinfo_encrypted(pb, &enc_default);
579
580 end_pkcs12_with_mac(pb, &mac_default);
581
582 /* Read/decode */
583 start_check_pkcs12_with_mac(pb, &mac_default);
584
585 start_check_contentinfo_encrypted(pb, &enc_default);
586
587 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
588 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
589
590 end_check_contentinfo(pb);
591
592 end_check_pkcs12(pb);
593
594 return end_pkcs12_builder(pb);
595 }
596
597 static int test_single_secret_encrypted_content(void)
598 {
599 PKCS12_BUILDER *pb = new_pkcs12_builder("1secret.p12");
600 int custom_nid = get_custom_oid();
601
602 /* Generate/encode */
603 start_pkcs12(pb);
604
605 start_contentinfo(pb);
606
607 add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
608
609 end_contentinfo_encrypted(pb, &enc_default);
610
611 end_pkcs12_with_mac(pb, &mac_default);
612
613 /* Read/decode */
614 start_check_pkcs12_with_mac(pb, &mac_default);
615
616 start_check_contentinfo_encrypted(pb, &enc_default);
617
618 check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
619
620 end_check_contentinfo(pb);
621
622 end_check_pkcs12(pb);
623
624 return end_pkcs12_builder(pb);
625 }
626
627 static int test_single_secret(PKCS12_ENC *enc)
628 {
629 int custom_nid;
630 char fname[80];
631 PKCS12_BUILDER *pb;
632
633 sprintf(fname, "1secret_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
634 pb = new_pkcs12_builder(fname);
635 custom_nid = get_custom_oid();
636
637 /* Generate/encode */
638 start_pkcs12(pb);
639
640 start_contentinfo(pb);
641
642 add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
643
644 end_contentinfo_encrypted(pb, enc);
645
646 end_pkcs12_with_mac(pb, &mac_default);
647
648 /* Read/decode */
649 start_check_pkcs12_with_mac(pb, &mac_default);
650
651 start_check_contentinfo_encrypted(pb, enc);
652
653 check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
654
655 end_check_contentinfo(pb);
656
657 end_check_pkcs12(pb);
658
659 return end_pkcs12_builder(pb);
660 }
661
662 static int test_single_secret_enc_alg(int z)
663 {
664 PKCS12_ENC enc;
665
666 if (lgcyprov == NULL)
667 enc.nid = enc_nids_no_legacy[z];
668 else
669 enc.nid = enc_nids_all[z];
670 enc.pass = enc_default.pass;
671 enc.iter = enc_default.iter;
672
673 return test_single_secret(&enc);
674 }
675
676 static int test_multiple_contents(void)
677 {
678 PKCS12_BUILDER *pb = new_pkcs12_builder("multi_contents.p12");
679 int custom_nid = get_custom_oid();
680
681 /* Generate/encode */
682 start_pkcs12(pb);
683
684 start_contentinfo(pb);
685
686 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
687 add_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
688 add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
689 add_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
690
691 end_contentinfo(pb);
692
693 start_contentinfo(pb);
694
695 add_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
696
697 end_contentinfo_encrypted(pb, &enc_default);
698
699 end_pkcs12_with_mac(pb, &mac_default);
700
701 /* Read/decode */
702 start_check_pkcs12_with_mac(pb, &mac_default);
703
704 start_check_contentinfo(pb);
705
706 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
707 check_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
708 check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
709 check_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
710
711 end_check_contentinfo(pb);
712
713 start_check_contentinfo_encrypted(pb, &enc_default);
714
715 check_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
716
717 end_check_contentinfo(pb);
718
719 end_check_pkcs12(pb);
720
721 return end_pkcs12_builder(pb);
722 }
723
724 static int test_jdk_trusted_attr(void)
725 {
726 PKCS12_BUILDER *pb = new_pkcs12_builder("jdk_trusted.p12");
727
728 /* Generate/encode */
729 start_pkcs12(pb);
730
731 start_contentinfo(pb);
732
733 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
734
735 end_contentinfo(pb);
736
737 end_pkcs12_with_mac(pb, &mac_default);
738
739 /* Read/decode */
740 start_check_pkcs12_with_mac(pb, &mac_default);
741
742 start_check_contentinfo(pb);
743
744 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
745
746 end_check_contentinfo(pb);
747
748 end_check_pkcs12(pb);
749
750 return end_pkcs12_builder(pb);
751 }
752
753 static int test_set0_attrs(void)
754 {
755 PKCS12_BUILDER *pb = new_pkcs12_builder("attrs.p12");
756 PKCS12_SAFEBAG *bag = NULL;
757 STACK_OF(X509_ATTRIBUTE) *attrs = NULL;
758 X509_ATTRIBUTE *attr = NULL;
759
760 start_pkcs12(pb);
761
762 start_contentinfo(pb);
763
764 /* Add cert and attrs (name/locakkey only) */
765 add_certbag(pb, CERT1, sizeof(CERT1), ATTRS4);
766
767 bag = sk_PKCS12_SAFEBAG_value(pb->bags, 0);
768 attrs = (STACK_OF(X509_ATTRIBUTE)*)PKCS12_SAFEBAG_get0_attrs(bag);
769
770 /* Create new attr, add to list and confirm return attrs is not NULL */
771 attr = X509_ATTRIBUTE_create(NID_oracle_jdk_trustedkeyusage, V_ASN1_OBJECT, OBJ_txt2obj("anyExtendedKeyUsage", 0));
772 X509at_add1_attr(&attrs, attr);
773 PKCS12_SAFEBAG_set0_attrs(bag, attrs);
774 attrs = (STACK_OF(X509_ATTRIBUTE)*)PKCS12_SAFEBAG_get0_attrs(bag);
775 X509_ATTRIBUTE_free(attr);
776 if(!TEST_ptr(attrs)) {
777 goto err;
778 }
779
780 end_contentinfo(pb);
781
782 end_pkcs12(pb);
783
784 /* Read/decode */
785 start_check_pkcs12(pb);
786
787 start_check_contentinfo(pb);
788
789 /* Use existing check functionality to confirm cert bag attrs identical to ATTRS3 */
790 check_certbag(pb, CERT1, sizeof(CERT1), ATTRS3);
791
792 end_check_contentinfo(pb);
793
794 end_check_pkcs12(pb);
795
796 return end_pkcs12_builder(pb);
797
798 err:
799 (void)end_pkcs12_builder(pb);
800 return 0;
801 }
802
803 #ifndef OPENSSL_NO_DES
804 static int pkcs12_create_test(void)
805 {
806 int ret = 0;
807 EVP_PKEY *pkey = NULL;
808 PKCS12 *p12 = NULL;
809 const unsigned char *p;
810
811 static const unsigned char rsa_key[] = {
812 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbb,
813 0x24, 0x7a, 0x09, 0x7e, 0x0e, 0xb2, 0x37, 0x32, 0xcc, 0x39, 0x67, 0xad,
814 0xf1, 0x9e, 0x3d, 0x6b, 0x82, 0x83, 0xd1, 0xd0, 0xac, 0xa4, 0xc0, 0x18,
815 0xbe, 0x8d, 0x98, 0x00, 0xc0, 0x7b, 0xff, 0x07, 0x44, 0xc9, 0xca, 0x1c,
816 0xba, 0x36, 0xe1, 0x27, 0x69, 0xff, 0xb1, 0xe3, 0x8d, 0x8b, 0xee, 0x57,
817 0xa9, 0x3a, 0xaa, 0x16, 0x43, 0x39, 0x54, 0x19, 0x7c, 0xae, 0x69, 0x24,
818 0x14, 0xf6, 0x64, 0xff, 0xbc, 0x74, 0xc6, 0x67, 0x6c, 0x4c, 0xf1, 0x02,
819 0x49, 0x69, 0xc7, 0x2b, 0xe1, 0xe1, 0xa1, 0xa3, 0x43, 0x14, 0xf4, 0x77,
820 0x8f, 0xc8, 0xd0, 0x85, 0x5a, 0x35, 0x95, 0xac, 0x62, 0xa9, 0xc1, 0x21,
821 0x00, 0x77, 0xa0, 0x8b, 0x97, 0x30, 0xb4, 0x5a, 0x2c, 0xb8, 0x90, 0x2f,
822 0x48, 0xa0, 0x05, 0x28, 0x4b, 0xf2, 0x0f, 0x8d, 0xec, 0x8b, 0x4d, 0x03,
823 0x42, 0x75, 0xd6, 0xad, 0x81, 0xc0, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01,
824 0x02, 0x81, 0x80, 0x00, 0xfc, 0xb9, 0x4a, 0x26, 0x07, 0x89, 0x51, 0x2b,
825 0x53, 0x72, 0x91, 0xe0, 0x18, 0x3e, 0xa6, 0x5e, 0x31, 0xef, 0x9c, 0x0c,
826 0x16, 0x24, 0x42, 0xd0, 0x28, 0x33, 0xf9, 0xfa, 0xd0, 0x3c, 0x54, 0x04,
827 0x06, 0xc0, 0x15, 0xf5, 0x1b, 0x9a, 0xb3, 0x24, 0x31, 0xab, 0x3c, 0x6b,
828 0x47, 0x43, 0xb0, 0xd2, 0xa9, 0xdc, 0x05, 0xe1, 0x81, 0x59, 0xb6, 0x04,
829 0xe9, 0x66, 0x61, 0xaa, 0xd7, 0x0b, 0x00, 0x8f, 0x3d, 0xe5, 0xbf, 0xa2,
830 0xf8, 0x5e, 0x25, 0x6c, 0x1e, 0x22, 0x0f, 0xb4, 0xfd, 0x41, 0xe2, 0x03,
831 0x31, 0x5f, 0xda, 0x20, 0xc5, 0xc0, 0xf3, 0x55, 0x0e, 0xe1, 0xc9, 0xec,
832 0xd7, 0x3e, 0x2a, 0x0c, 0x01, 0xca, 0x7b, 0x22, 0xcb, 0xac, 0xf4, 0x2b,
833 0x27, 0xf0, 0x78, 0x5f, 0xb5, 0xc2, 0xf9, 0xe8, 0x14, 0x5a, 0x6e, 0x7e,
834 0x86, 0xbd, 0x6a, 0x9b, 0x20, 0x0c, 0xba, 0xcc, 0x97, 0x20, 0x11, 0x02,
835 0x41, 0x00, 0xc9, 0x59, 0x9f, 0x29, 0x8a, 0x5b, 0x9f, 0xe3, 0x2a, 0xd8,
836 0x7e, 0xc2, 0x40, 0x9f, 0xa8, 0x45, 0xe5, 0x3e, 0x11, 0x8d, 0x3c, 0xed,
837 0x6e, 0xab, 0xce, 0xd0, 0x65, 0x46, 0xd8, 0xc7, 0x07, 0x63, 0xb5, 0x23,
838 0x34, 0xf4, 0x9f, 0x7e, 0x1c, 0xc7, 0xc7, 0xf9, 0x65, 0xd1, 0xf4, 0x04,
839 0x42, 0x38, 0xbe, 0x3a, 0x0c, 0x9d, 0x08, 0x25, 0xfc, 0xa3, 0x71, 0xd9,
840 0xae, 0x0c, 0x39, 0x61, 0xf4, 0x89, 0x02, 0x41, 0x00, 0xed, 0xef, 0xab,
841 0xa9, 0xd5, 0x39, 0x9c, 0xee, 0x59, 0x1b, 0xff, 0xcf, 0x48, 0x44, 0x1b,
842 0xb6, 0x32, 0xe7, 0x46, 0x24, 0xf3, 0x04, 0x7f, 0xde, 0x95, 0x08, 0x6d,
843 0x75, 0x9e, 0x67, 0x17, 0xba, 0x5c, 0xa4, 0xd4, 0xe2, 0xe2, 0x4d, 0x77,
844 0xce, 0xeb, 0x66, 0x29, 0xc5, 0x96, 0xe0, 0x62, 0xbb, 0xe5, 0xac, 0xdc,
845 0x44, 0x62, 0x54, 0x86, 0xed, 0x64, 0x0c, 0xce, 0xd0, 0x60, 0x03, 0x9d,
846 0x49, 0x02, 0x40, 0x54, 0xd9, 0x18, 0x72, 0x27, 0xe4, 0xbe, 0x76, 0xbb,
847 0x1a, 0x6a, 0x28, 0x2f, 0x95, 0x58, 0x12, 0xc4, 0x2c, 0xa8, 0xb6, 0xcc,
848 0xe2, 0xfd, 0x0d, 0x17, 0x64, 0xc8, 0x18, 0xd7, 0xc6, 0xdf, 0x3d, 0x4c,
849 0x1a, 0x9e, 0xf9, 0x2a, 0xb0, 0xb9, 0x2e, 0x12, 0xfd, 0xec, 0xc3, 0x51,
850 0xc1, 0xed, 0xa9, 0xfd, 0xb7, 0x76, 0x93, 0x41, 0xd8, 0xc8, 0x22, 0x94,
851 0x1a, 0x77, 0xf6, 0x9c, 0xc3, 0xc3, 0x89, 0x02, 0x41, 0x00, 0x8e, 0xf9,
852 0xa7, 0x08, 0xad, 0xb5, 0x2a, 0x04, 0xdb, 0x8d, 0x04, 0xa1, 0xb5, 0x06,
853 0x20, 0x34, 0xd2, 0xcf, 0xc0, 0x89, 0xb1, 0x72, 0x31, 0xb8, 0x39, 0x8b,
854 0xcf, 0xe2, 0x8e, 0xa5, 0xda, 0x4f, 0x45, 0x1e, 0x53, 0x42, 0x66, 0xc4,
855 0x30, 0x4b, 0x29, 0x8e, 0xc1, 0x69, 0x17, 0x29, 0x8c, 0x8a, 0xe6, 0x0f,
856 0x82, 0x68, 0xa1, 0x41, 0xb3, 0xb6, 0x70, 0x99, 0x75, 0xa9, 0x27, 0x18,
857 0xe4, 0xe9, 0x02, 0x41, 0x00, 0x89, 0xea, 0x6e, 0x6d, 0x70, 0xdf, 0x25,
858 0x5f, 0x18, 0x3f, 0x48, 0xda, 0x63, 0x10, 0x8b, 0xfe, 0xa8, 0x0c, 0x94,
859 0x0f, 0xde, 0x97, 0x56, 0x53, 0x89, 0x94, 0xe2, 0x1e, 0x2c, 0x74, 0x3c,
860 0x91, 0x81, 0x34, 0x0b, 0xa6, 0x40, 0xf8, 0xcb, 0x2a, 0x60, 0x8c, 0xe0,
861 0x02, 0xb7, 0x89, 0x93, 0xcf, 0x18, 0x9f, 0x49, 0x54, 0xfd, 0x7d, 0x3f,
862 0x9a, 0xef, 0xd4, 0xa4, 0x4f, 0xc1, 0x45, 0x99, 0x91,
863 };
864
865 p = rsa_key;
866 if (!TEST_ptr(pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &p,
867 sizeof(rsa_key), NULL, NULL)))
868 goto err;
869 if (!TEST_int_eq(ERR_peek_error(), 0))
870 goto err;
871 p12 = PKCS12_create(NULL, NULL, pkey, NULL, NULL,
872 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
873 NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 2, 1, 0);
874 if (!TEST_ptr(p12))
875 goto err;
876
877 if (!TEST_int_eq(ERR_peek_error(), 0))
878 goto err;
879 ret = 1;
880 err:
881 PKCS12_free(p12);
882 EVP_PKEY_free(pkey);
883 return ret;
884 }
885 #endif
886
887 typedef enum OPTION_choice {
888 OPT_ERR = -1,
889 OPT_EOF = 0,
890 OPT_WRITE,
891 OPT_LEGACY,
892 OPT_CONTEXT,
893 OPT_TEST_ENUM
894 } OPTION_CHOICE;
895
896 const OPTIONS *test_get_options(void)
897 {
898 static const OPTIONS options[] = {
899 OPT_TEST_OPTIONS_DEFAULT_USAGE,
900 { "write", OPT_WRITE, '-', "Write PKCS12 objects to file" },
901 { "legacy", OPT_LEGACY, '-', "Test the legacy APIs" },
902 { "context", OPT_CONTEXT, '-', "Explicitly use a non-default library context" },
903 { NULL }
904 };
905 return options;
906 }
907
908 int setup_tests(void)
909 {
910 OPTION_CHOICE o;
911
912 while ((o = opt_next()) != OPT_EOF) {
913 switch (o) {
914 case OPT_WRITE:
915 PKCS12_helper_set_write_files(1);
916 break;
917 case OPT_LEGACY:
918 PKCS12_helper_set_legacy(1);
919 break;
920 case OPT_CONTEXT:
921 default_libctx = 0;
922 break;
923 case OPT_TEST_CASES:
924 break;
925 default:
926 return 0;
927 }
928 }
929
930 if (!default_libctx) {
931 testctx = OSSL_LIB_CTX_new();
932 if (!TEST_ptr(testctx))
933 return 0;
934 nullprov = OSSL_PROVIDER_load(NULL, "null");
935 if (!TEST_ptr(nullprov))
936 return 0;
937 }
938
939 deflprov = OSSL_PROVIDER_load(testctx, "default");
940 if (!TEST_ptr(deflprov))
941 return 0;
942 lgcyprov = OSSL_PROVIDER_load(testctx, "legacy");
943
944 PKCS12_helper_set_libctx(testctx);
945
946 /*
947 * Verify that the default and fips providers in the default libctx are not
948 * available if we are using a standalone context
949 */
950 if (!default_libctx) {
951 if (!TEST_false(OSSL_PROVIDER_available(NULL, "default"))
952 || !TEST_false(OSSL_PROVIDER_available(NULL, "fips")))
953 return 0;
954 }
955
956 ADD_TEST(test_single_cert_no_attrs);
957 if (lgcyprov == NULL) {
958 ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
959 ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
960 } else {
961 ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_all));
962 ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_all));
963 }
964 #ifndef OPENSSL_NO_DES
965 if (default_libctx)
966 ADD_TEST(pkcs12_create_test);
967 #endif
968 ADD_ALL_TESTS(test_single_key_enc_pass, OSSL_NELEM(passwords));
969 ADD_ALL_TESTS(test_single_key_enc_iter, OSSL_NELEM(iters));
970 ADD_TEST(test_single_key_with_attrs);
971 ADD_ALL_TESTS(test_single_cert_mac_alg, OSSL_NELEM(mac_nids));
972 ADD_ALL_TESTS(test_single_cert_mac_pass, OSSL_NELEM(passwords));
973 ADD_ALL_TESTS(test_single_cert_mac_iter, OSSL_NELEM(iters));
974 ADD_TEST(test_cert_key_with_attrs_and_mac);
975 ADD_TEST(test_cert_key_encrypted_content);
976 ADD_TEST(test_single_secret_encrypted_content);
977 ADD_TEST(test_multiple_contents);
978 ADD_TEST(test_jdk_trusted_attr);
979 ADD_TEST(test_set0_attrs);
980 return 1;
981 }
982
983 void cleanup_tests(void)
984 {
985 OSSL_PROVIDER_unload(nullprov);
986 OSSL_PROVIDER_unload(deflprov);
987 OSSL_PROVIDER_unload(lgcyprov);
988 OSSL_LIB_CTX_free(testctx);
989 }