VirtualBox

source: vbox/trunk/src/libs/openssl-3.1.7/test/pkcs12_format_test.c@ 105943

最後變更 在這個檔案從105943是 104078,由 vboxsync 提交於 8 月 前

openssl-3.1.5: Applied and adjusted our OpenSSL changes to 3.1.4. bugref:10638

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette