]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_ssl/regressions/ssl-41-clientauth.c
Security-59754.80.3.tar.gz
[apple/security.git] / OSX / libsecurity_ssl / regressions / ssl-41-clientauth.c
1 /*
2 * ssl-40-clientauth.c
3 * Security
4 *
5 * Copyright (c) 2008-2010,2012-2014 Apple Inc. All Rights Reserved.
6 *
7 */
8
9 #include <CoreFoundation/CoreFoundation.h>
10 #include <Security/SecCertificatePriv.h>
11 #include <Security/SecIdentityPriv.h>
12 #include <Security/SecureTransport.h>
13 #include <utilities/array_size.h>
14 #include <stdlib.h>
15 #include <unistd.h>
16 #include <AssertMacros.h>
17
18 #if TARGET_OS_IPHONE
19 #include <Security/SecRSAKey.h>
20 #endif
21
22 #include "ssl_regressions.h"
23
24 #define CFReleaseSafe(CF) { CFTypeRef _cf = (CF); if (_cf) { CFRelease(_cf); } }
25 #define CFReleaseNull(CF) { CFTypeRef _cf = (CF); if (_cf) { (CF) = NULL; CFRelease(_cf); } }
26
27 /*
28 Bag Attributes
29 friendlyName: uranusLeaf
30 localKeyID: 46 E0 8A 05 63 4D 17 3F CA A4 AA B6 5A DA CF BA 84 22 7C 23
31 subject=/CN=uranusLeaf/emailAddress=uranus@uranus.com
32 issuer=/CN=plutoCA/emailAddress=pluto@pluto.com
33 */
34 static const uint8_t _c1[] = {
35 0x30, 0x82, 0x02, 0xe0, 0x30, 0x82, 0x01, 0xc8,
36 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02,
37 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
38 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x30, 0x32, 0x31,
39 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x03,
40 0x0c, 0x07, 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x43,
41 0x41, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x09, 0x2a,
42 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01,
43 0x0c, 0x0f, 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x40,
44 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
45 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x35, 0x31,
46 0x32, 0x31, 0x37, 0x30, 0x30, 0x30, 0x34, 0x32,
47 0x35, 0x5a, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32,
48 0x31, 0x37, 0x30, 0x30, 0x30, 0x34, 0x32, 0x35,
49 0x5a, 0x30, 0x37, 0x31, 0x13, 0x30, 0x11, 0x06,
50 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x75, 0x72,
51 0x61, 0x6e, 0x75, 0x73, 0x4c, 0x65, 0x61, 0x66,
52 0x31, 0x20, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86,
53 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x0c,
54 0x11, 0x75, 0x72, 0x61, 0x6e, 0x75, 0x73, 0x40,
55 0x75, 0x72, 0x61, 0x6e, 0x75, 0x73, 0x2e, 0x63,
56 0x6f, 0x6d, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
57 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
58 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
59 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
60 0x01, 0x01, 0x00, 0xa6, 0x82, 0x8e, 0xc6, 0x7e,
61 0xc9, 0x8c, 0x99, 0x6f, 0xb0, 0x62, 0x32, 0x35,
62 0xe7, 0xdb, 0xff, 0x34, 0x84, 0xdc, 0x72, 0xa8,
63 0xef, 0x22, 0x6f, 0x93, 0x63, 0x64, 0x80, 0x80,
64 0x5d, 0x50, 0x7e, 0xb4, 0x2e, 0x1b, 0x93, 0x93,
65 0x49, 0xca, 0xae, 0xcd, 0x34, 0x44, 0x4b, 0xd7,
66 0xfa, 0x9f, 0x3c, 0xfc, 0x9e, 0x65, 0xa9, 0xfb,
67 0x5e, 0x5d, 0x18, 0xa3, 0xf8, 0xb0, 0x08, 0xac,
68 0x8f, 0xfd, 0x03, 0xcb, 0xbd, 0x7f, 0xa0, 0x2a,
69 0xa6, 0xea, 0xca, 0xa3, 0x24, 0xef, 0x7c, 0xc3,
70 0xeb, 0x95, 0xcb, 0x90, 0x3f, 0x5e, 0xde, 0x78,
71 0xf2, 0x3d, 0x32, 0x72, 0xdb, 0x33, 0x6e, 0x9b,
72 0x52, 0x9f, 0x0c, 0x60, 0x4a, 0x24, 0xa1, 0xf6,
73 0x3b, 0x80, 0xbd, 0xa1, 0xdc, 0x40, 0x03, 0xe7,
74 0xa0, 0x59, 0x1f, 0xdb, 0xb4, 0xed, 0x57, 0xdc,
75 0x74, 0x0d, 0x99, 0x5a, 0x12, 0x74, 0x64, 0xaa,
76 0xb6, 0xa5, 0x96, 0x75, 0xf9, 0x42, 0x43, 0xe2,
77 0x52, 0xc2, 0x57, 0x23, 0x75, 0xd7, 0xa9, 0x4f,
78 0x07, 0x32, 0x99, 0xbd, 0x3d, 0x44, 0xbd, 0x04,
79 0x62, 0xe5, 0xb7, 0x2c, 0x0c, 0x11, 0xc5, 0xb2,
80 0x2e, 0xc4, 0x12, 0x1d, 0x7f, 0x42, 0x1e, 0x71,
81 0xaf, 0x39, 0x2b, 0x78, 0x47, 0x92, 0x23, 0x44,
82 0xef, 0xe3, 0xc1, 0x47, 0x69, 0x5a, 0xf1, 0x48,
83 0xaa, 0x37, 0xa4, 0x94, 0x6b, 0x96, 0xe5, 0x4b,
84 0xfd, 0x05, 0xc7, 0x9c, 0xcc, 0x38, 0xd1, 0x47,
85 0x85, 0x60, 0x7f, 0xef, 0xe9, 0x2e, 0x25, 0x08,
86 0xf8, 0x7d, 0x98, 0xdd, 0x6c, 0xeb, 0x4a, 0x32,
87 0x33, 0x44, 0x0b, 0x61, 0xb3, 0xf9, 0xae, 0x26,
88 0x41, 0xb5, 0x38, 0xdb, 0xcf, 0x13, 0x72, 0x23,
89 0x5b, 0x66, 0x20, 0x86, 0x4d, 0x24, 0xc2, 0xd4,
90 0x94, 0xde, 0xe3, 0x24, 0xb7, 0xcd, 0x75, 0x9e,
91 0x1d, 0x9f, 0xbc, 0xd0, 0x60, 0x34, 0x7d, 0xf8,
92 0xcb, 0x41, 0x39, 0x02, 0x03, 0x01, 0x00, 0x01,
93 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
94 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03,
95 0x82, 0x01, 0x01, 0x00, 0x17, 0xa5, 0x22, 0xed,
96 0xb8, 0x3e, 0x1f, 0x11, 0x99, 0xc5, 0xba, 0x28,
97 0x3e, 0x7e, 0xa6, 0xeb, 0x02, 0x81, 0x06, 0xa1,
98 0xc6, 0x80, 0xb9, 0x7e, 0x5c, 0x5a, 0x63, 0xe0,
99 0x8d, 0xeb, 0xd0, 0xec, 0x9c, 0x3a, 0x94, 0x64,
100 0x7c, 0x13, 0x54, 0x0d, 0xd6, 0xe3, 0x27, 0x88,
101 0xa6, 0xd2, 0x4b, 0x36, 0xdd, 0x2e, 0xfa, 0x94,
102 0xe5, 0x03, 0x27, 0xc9, 0xa6, 0x31, 0x02, 0xea,
103 0x40, 0x77, 0x2e, 0x93, 0xc4, 0x4d, 0xe2, 0x70,
104 0xe2, 0x67, 0x1c, 0xa8, 0x0d, 0xcd, 0x1a, 0x72,
105 0x86, 0x2c, 0xea, 0xdc, 0x7f, 0x8c, 0x49, 0x2c,
106 0xe7, 0x99, 0x13, 0xda, 0x3f, 0x58, 0x9e, 0xf5,
107 0x4d, 0x3c, 0x8c, 0x1c, 0xed, 0x85, 0xa7, 0xe2,
108 0xae, 0xda, 0x5f, 0xbe, 0x36, 0x1c, 0x9f, 0x5a,
109 0xa0, 0xdc, 0x2a, 0xc0, 0xee, 0x71, 0x07, 0x26,
110 0x8b, 0xe8, 0x8a, 0xf8, 0x2d, 0x36, 0x78, 0xc9,
111 0x79, 0xfa, 0xbe, 0x98, 0x59, 0x95, 0x12, 0x24,
112 0xf1, 0xda, 0x20, 0xc7, 0x78, 0xf9, 0x7c, 0x6a,
113 0x24, 0x43, 0x82, 0xa8, 0x0f, 0xb1, 0x7d, 0x94,
114 0xaa, 0x30, 0x35, 0xe5, 0x69, 0xdc, 0x0a, 0x0e,
115 0xaf, 0x10, 0x5e, 0x1a, 0x81, 0x50, 0x5c, 0x7e,
116 0x24, 0xb3, 0x07, 0x65, 0x4b, 0xc1, 0x7e, 0xc6,
117 0x38, 0xdb, 0xd3, 0x6a, 0xf0, 0xd8, 0x85, 0x61,
118 0x9a, 0x9f, 0xfe, 0x02, 0x46, 0x29, 0xb2, 0x9a,
119 0xe2, 0x04, 0xe7, 0x72, 0xcc, 0x87, 0x46, 0xba,
120 0x7d, 0xa8, 0xf9, 0xd0, 0x0f, 0x29, 0xfc, 0xfd,
121 0xd1, 0xd0, 0x7f, 0x36, 0xc1, 0xd8, 0x7d, 0x88,
122 0x03, 0x62, 0xf5, 0x8c, 0x00, 0xb5, 0xc2, 0x81,
123 0x44, 0x67, 0x58, 0x11, 0xb4, 0x3a, 0xbb, 0xd1,
124 0x8c, 0x94, 0x20, 0x60, 0xea, 0xa0, 0xac, 0xc1,
125 0xf1, 0x08, 0x54, 0xb8, 0xf6, 0x5e, 0xac, 0xf1,
126 0xec, 0x78, 0x69, 0x9d, 0x7e, 0x4d, 0x06, 0x3b,
127 0x9b, 0x78, 0x78, 0x10
128 };
129
130 /*
131 Bag Attributes
132 friendlyName: uranusLeaf
133 localKeyID: 46 E0 8A 05 63 4D 17 3F CA A4 AA B6 5A DA CF BA 84 22 7C 23
134 Key Attributes: <No Attributes>
135 */
136
137 #if TARGET_OS_IPHONE
138 /* we use _k1 on iPhone */
139 static const uint8_t _k1[] = {
140 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02,
141 0x82, 0x01, 0x01, 0x00, 0xa6, 0x82, 0x8e, 0xc6,
142 0x7e, 0xc9, 0x8c, 0x99, 0x6f, 0xb0, 0x62, 0x32,
143 0x35, 0xe7, 0xdb, 0xff, 0x34, 0x84, 0xdc, 0x72,
144 0xa8, 0xef, 0x22, 0x6f, 0x93, 0x63, 0x64, 0x80,
145 0x80, 0x5d, 0x50, 0x7e, 0xb4, 0x2e, 0x1b, 0x93,
146 0x93, 0x49, 0xca, 0xae, 0xcd, 0x34, 0x44, 0x4b,
147 0xd7, 0xfa, 0x9f, 0x3c, 0xfc, 0x9e, 0x65, 0xa9,
148 0xfb, 0x5e, 0x5d, 0x18, 0xa3, 0xf8, 0xb0, 0x08,
149 0xac, 0x8f, 0xfd, 0x03, 0xcb, 0xbd, 0x7f, 0xa0,
150 0x2a, 0xa6, 0xea, 0xca, 0xa3, 0x24, 0xef, 0x7c,
151 0xc3, 0xeb, 0x95, 0xcb, 0x90, 0x3f, 0x5e, 0xde,
152 0x78, 0xf2, 0x3d, 0x32, 0x72, 0xdb, 0x33, 0x6e,
153 0x9b, 0x52, 0x9f, 0x0c, 0x60, 0x4a, 0x24, 0xa1,
154 0xf6, 0x3b, 0x80, 0xbd, 0xa1, 0xdc, 0x40, 0x03,
155 0xe7, 0xa0, 0x59, 0x1f, 0xdb, 0xb4, 0xed, 0x57,
156 0xdc, 0x74, 0x0d, 0x99, 0x5a, 0x12, 0x74, 0x64,
157 0xaa, 0xb6, 0xa5, 0x96, 0x75, 0xf9, 0x42, 0x43,
158 0xe2, 0x52, 0xc2, 0x57, 0x23, 0x75, 0xd7, 0xa9,
159 0x4f, 0x07, 0x32, 0x99, 0xbd, 0x3d, 0x44, 0xbd,
160 0x04, 0x62, 0xe5, 0xb7, 0x2c, 0x0c, 0x11, 0xc5,
161 0xb2, 0x2e, 0xc4, 0x12, 0x1d, 0x7f, 0x42, 0x1e,
162 0x71, 0xaf, 0x39, 0x2b, 0x78, 0x47, 0x92, 0x23,
163 0x44, 0xef, 0xe3, 0xc1, 0x47, 0x69, 0x5a, 0xf1,
164 0x48, 0xaa, 0x37, 0xa4, 0x94, 0x6b, 0x96, 0xe5,
165 0x4b, 0xfd, 0x05, 0xc7, 0x9c, 0xcc, 0x38, 0xd1,
166 0x47, 0x85, 0x60, 0x7f, 0xef, 0xe9, 0x2e, 0x25,
167 0x08, 0xf8, 0x7d, 0x98, 0xdd, 0x6c, 0xeb, 0x4a,
168 0x32, 0x33, 0x44, 0x0b, 0x61, 0xb3, 0xf9, 0xae,
169 0x26, 0x41, 0xb5, 0x38, 0xdb, 0xcf, 0x13, 0x72,
170 0x23, 0x5b, 0x66, 0x20, 0x86, 0x4d, 0x24, 0xc2,
171 0xd4, 0x94, 0xde, 0xe3, 0x24, 0xb7, 0xcd, 0x75,
172 0x9e, 0x1d, 0x9f, 0xbc, 0xd0, 0x60, 0x34, 0x7d,
173 0xf8, 0xcb, 0x41, 0x39, 0x02, 0x03, 0x01, 0x00,
174 0x01, 0x02, 0x82, 0x01, 0x00, 0x4d, 0x27, 0xf2,
175 0x40, 0xc8, 0x3f, 0x5c, 0x87, 0x3c, 0xd9, 0xde,
176 0xa6, 0xa5, 0x93, 0xea, 0xbd, 0x36, 0xf8, 0xd9,
177 0xad, 0xc7, 0xda, 0x07, 0x7a, 0xec, 0x31, 0x02,
178 0x41, 0x09, 0x3a, 0x34, 0x32, 0x82, 0x0b, 0x5b,
179 0x7b, 0xe6, 0xa4, 0x2a, 0xe7, 0x14, 0xef, 0x43,
180 0x36, 0x61, 0xbe, 0x20, 0x4b, 0x82, 0x43, 0x63,
181 0x98, 0x80, 0x82, 0x19, 0x61, 0x71, 0x99, 0xaa,
182 0xf8, 0x59, 0xfd, 0xde, 0xa0, 0x03, 0xa8, 0xab,
183 0x9a, 0xec, 0x28, 0xac, 0x63, 0x79, 0x75, 0x84,
184 0x03, 0xac, 0x45, 0x5e, 0x04, 0x15, 0xb3, 0x47,
185 0xa2, 0x8f, 0x28, 0xb0, 0x72, 0xd0, 0x06, 0x02,
186 0xaf, 0x1e, 0x0a, 0x0a, 0xe9, 0x11, 0x35, 0x4a,
187 0x04, 0x42, 0xb5, 0x0f, 0xd2, 0xcf, 0x4d, 0xdf,
188 0xdb, 0xef, 0x58, 0xbd, 0xf3, 0xa5, 0x3b, 0x11,
189 0x3f, 0xc5, 0x47, 0x81, 0x85, 0xad, 0xd7, 0x1f,
190 0x58, 0x06, 0x42, 0xdc, 0x37, 0x3c, 0xdb, 0x98,
191 0x33, 0xa1, 0xc6, 0x80, 0x07, 0xe0, 0x2b, 0xc5,
192 0xf5, 0x60, 0x35, 0x6a, 0xa2, 0x06, 0x40, 0x4a,
193 0xac, 0x64, 0x02, 0x58, 0x4d, 0x07, 0xe3, 0x69,
194 0xd7, 0xe0, 0x8f, 0xb5, 0xf4, 0xbc, 0xfa, 0xab,
195 0x1a, 0xb0, 0xfa, 0x29, 0xf8, 0xca, 0xde, 0x78,
196 0xf0, 0x89, 0xe2, 0xf9, 0xb7, 0x68, 0x5b, 0x0e,
197 0xdc, 0x4e, 0x8a, 0x56, 0x8d, 0x33, 0x20, 0x2e,
198 0xed, 0x2e, 0xab, 0x6f, 0xba, 0x77, 0xef, 0xe6,
199 0x12, 0x62, 0x49, 0x9e, 0x87, 0x76, 0x1c, 0x1e,
200 0xf4, 0x0e, 0x9e, 0x78, 0x98, 0x91, 0x1a, 0xe3,
201 0xb4, 0x51, 0x4b, 0x8c, 0x2f, 0x08, 0x97, 0x8f,
202 0xf9, 0x68, 0x61, 0x40, 0xcd, 0xb6, 0x10, 0xb4,
203 0xfb, 0x75, 0xb4, 0x20, 0xc1, 0x5a, 0xda, 0x64,
204 0xfd, 0x51, 0x06, 0x85, 0x9a, 0x9e, 0x5d, 0x82,
205 0x14, 0xd4, 0x41, 0x4e, 0x75, 0x10, 0xb5, 0x7b,
206 0xd0, 0x4c, 0xd1, 0x00, 0x01, 0x02, 0x81, 0x81,
207 0x00, 0xcf, 0x8e, 0x68, 0x04, 0x67, 0x09, 0xa9,
208 0x6e, 0xff, 0x11, 0x8c, 0xe5, 0xe4, 0x16, 0xdd,
209 0xb6, 0xa6, 0x55, 0xca, 0x4b, 0x0b, 0xbb, 0xb7,
210 0xf5, 0xe5, 0x73, 0xf3, 0x24, 0x84, 0x29, 0xb2,
211 0xc3, 0xbc, 0x7f, 0x2b, 0x4a, 0xc7, 0xdf, 0x46,
212 0x8e, 0xe1, 0x35, 0x69, 0x1b, 0x8e, 0x9f, 0x6b,
213 0x4d, 0xf3, 0x65, 0xae, 0x3d, 0x87, 0x2b, 0xc9,
214 0xf0, 0x8c, 0xf2, 0x88, 0x2f, 0x1b, 0x79, 0x80,
215 0xd2, 0xb2, 0x64, 0x0a, 0xcc, 0x66, 0x69, 0x4c,
216 0xa1, 0x85, 0xc4, 0x6a, 0x94, 0x46, 0x70, 0x69,
217 0xbc, 0x8c, 0x1c, 0x62, 0x65, 0x4d, 0x68, 0xcc,
218 0xe3, 0x3c, 0x6c, 0xe7, 0xd1, 0x09, 0xed, 0xdd,
219 0x42, 0x10, 0x11, 0x6b, 0xdd, 0x7c, 0xe3, 0xe1,
220 0x3b, 0x3b, 0x0d, 0x01, 0x6d, 0xca, 0x2f, 0x4b,
221 0x45, 0x5e, 0x76, 0x5d, 0x5c, 0x6f, 0x53, 0xa4,
222 0x38, 0x74, 0x75, 0x94, 0x2c, 0xda, 0xf8, 0xa6,
223 0x01, 0x02, 0x81, 0x81, 0x00, 0xcd, 0x5f, 0x9d,
224 0x6c, 0x94, 0xf6, 0x44, 0x37, 0x72, 0xfe, 0xcf,
225 0xbe, 0x82, 0x96, 0x24, 0x22, 0x12, 0x07, 0x6f,
226 0xd1, 0x57, 0x7b, 0xc7, 0x63, 0x20, 0xf5, 0x93,
227 0x79, 0x70, 0x0b, 0xe4, 0x38, 0x19, 0x62, 0x7b,
228 0x89, 0x3e, 0x45, 0xdf, 0xd6, 0xae, 0x9d, 0x0d,
229 0xa8, 0x76, 0xc1, 0xbd, 0x04, 0x2b, 0xaa, 0x30,
230 0x6a, 0xac, 0x65, 0x91, 0x61, 0xf0, 0xf8, 0x5d,
231 0xa3, 0x53, 0xa4, 0xfb, 0x99, 0xac, 0x46, 0x7a,
232 0x12, 0x4b, 0xf7, 0xa7, 0x48, 0x41, 0x61, 0x48,
233 0x26, 0x5c, 0x68, 0x2f, 0x73, 0x91, 0xe4, 0x74,
234 0xcd, 0xc9, 0x8b, 0xe7, 0x26, 0xe4, 0x35, 0xde,
235 0x32, 0x6b, 0x24, 0x49, 0xf2, 0x04, 0x67, 0x3d,
236 0x31, 0x8f, 0x22, 0xe5, 0x49, 0xae, 0x49, 0x94,
237 0xb3, 0x45, 0x2b, 0xed, 0x6f, 0x9c, 0xc7, 0x80,
238 0xf0, 0x42, 0xd5, 0x8f, 0x27, 0xd6, 0xd6, 0x49,
239 0xf2, 0x16, 0xcc, 0x4b, 0x39, 0x02, 0x81, 0x81,
240 0x00, 0xbb, 0xb7, 0xd7, 0x59, 0xcb, 0xfb, 0x10,
241 0x13, 0xc4, 0x7b, 0x92, 0x0c, 0x45, 0xcb, 0x6c,
242 0x81, 0x0a, 0x55, 0x63, 0x1d, 0x96, 0xa2, 0x13,
243 0xd2, 0x40, 0xd1, 0x2a, 0xa1, 0xe7, 0x2a, 0x73,
244 0x74, 0xd6, 0x61, 0xc9, 0xbc, 0xdb, 0xa2, 0x93,
245 0x85, 0x1c, 0x28, 0x9b, 0x44, 0x82, 0x2c, 0xaa,
246 0xf7, 0x18, 0x60, 0xe9, 0x42, 0xda, 0xa2, 0xff,
247 0x04, 0x21, 0xe6, 0x24, 0xc7, 0x3e, 0x39, 0x19,
248 0x0a, 0xf6, 0xae, 0xc6, 0x99, 0x71, 0x32, 0x61,
249 0x4d, 0x60, 0xd7, 0x71, 0x71, 0x63, 0x77, 0xbe,
250 0x19, 0xfa, 0x3a, 0x9d, 0xbf, 0x73, 0x50, 0x8a,
251 0xa6, 0x26, 0x7b, 0x74, 0xfa, 0x39, 0xd9, 0xb9,
252 0x18, 0x4b, 0xc2, 0x05, 0xe5, 0x8f, 0x53, 0xe6,
253 0xdc, 0x14, 0x1f, 0x42, 0x20, 0x93, 0x11, 0x4d,
254 0x29, 0x93, 0x32, 0xc8, 0x63, 0x96, 0x88, 0x76,
255 0x69, 0x5c, 0xe3, 0x0e, 0xbd, 0xb6, 0xd9, 0xd6,
256 0x01, 0x02, 0x81, 0x80, 0x62, 0xa2, 0xed, 0x84,
257 0xdc, 0xf6, 0x7a, 0x44, 0xf7, 0x62, 0x12, 0x7c,
258 0xb9, 0x53, 0x4a, 0xff, 0x62, 0x11, 0x58, 0x4e,
259 0xfe, 0xe9, 0x60, 0x15, 0xe8, 0x1a, 0x8a, 0x3d,
260 0xe4, 0xe6, 0x91, 0x31, 0xb0, 0x5f, 0x70, 0x5d,
261 0xb6, 0x1e, 0xf1, 0x26, 0xb6, 0xae, 0x8f, 0x84,
262 0xbd, 0xa4, 0xc7, 0x17, 0x5d, 0xb1, 0x5b, 0x97,
263 0xa0, 0x3d, 0x17, 0xda, 0x26, 0x55, 0xe3, 0x03,
264 0x32, 0x85, 0x26, 0xa1, 0xe3, 0xef, 0xe5, 0x69,
265 0x2c, 0x3b, 0x41, 0x88, 0x9e, 0x7e, 0x0e, 0x9c,
266 0xfd, 0xfc, 0xbb, 0xed, 0x91, 0xc0, 0x5b, 0xa9,
267 0x0a, 0x87, 0xba, 0xf9, 0x1e, 0xda, 0x10, 0x61,
268 0xbe, 0xbb, 0xab, 0x18, 0x25, 0xad, 0x3f, 0xe2,
269 0xb1, 0x90, 0x5c, 0xf7, 0x4a, 0x51, 0xe4, 0xad,
270 0x45, 0x27, 0x97, 0xdd, 0xe7, 0x3a, 0x9a, 0x5e,
271 0xca, 0x7a, 0xaf, 0x4a, 0xbf, 0x10, 0x24, 0x6b,
272 0xb5, 0x2f, 0x61, 0x61, 0x02, 0x81, 0x81, 0x00,
273 0x85, 0x7c, 0x78, 0xa5, 0x11, 0xdf, 0xc3, 0x6a,
274 0x38, 0x48, 0xfa, 0x7e, 0x48, 0xf0, 0x5a, 0x58,
275 0xe2, 0xc5, 0x83, 0x4e, 0x38, 0x3f, 0x4a, 0x2b,
276 0x07, 0x57, 0x31, 0xe7, 0xbe, 0x50, 0xb1, 0xbb,
277 0x24, 0xf3, 0x3d, 0x8b, 0x53, 0xb7, 0xd1, 0x47,
278 0x72, 0x5e, 0xd5, 0xd6, 0x4c, 0xce, 0x2c, 0x46,
279 0x61, 0x9a, 0xaa, 0xc3, 0x0e, 0xd4, 0x23, 0x2c,
280 0xdd, 0xf5, 0xb7, 0xad, 0x38, 0x52, 0x17, 0xc4,
281 0x16, 0xbb, 0xda, 0x1c, 0x61, 0xb1, 0xca, 0x8d,
282 0xb2, 0xa0, 0xbe, 0x4f, 0x3d, 0x19, 0x0e, 0xe0,
283 0x0e, 0x52, 0xad, 0xf3, 0xaf, 0xd9, 0xcc, 0x78,
284 0xc2, 0xb1, 0x5e, 0x05, 0x5e, 0xf2, 0x27, 0x84,
285 0x15, 0xe4, 0x8f, 0xca, 0xc5, 0x92, 0x43, 0xe0,
286 0x24, 0x8d, 0xf2, 0x5d, 0x55, 0xcc, 0x9d, 0x2f,
287 0xa9, 0xf6, 0x9b, 0x67, 0x6a, 0x87, 0x74, 0x36,
288 0x34, 0x7c, 0xd4, 0x9d, 0xff, 0xad, 0xee, 0x69
289 };
290 #else
291 /* don’t use _k1 */
292 #endif
293
294 __unused static const uint8_t _k1_digest[] = {
295 0x46, 0xE0, 0x8A, 0x05, 0x63, 0x4D, 0x17, 0x3F,
296 0xCA, 0xA4, 0xAA, 0xB6, 0x5A, 0xDA, 0xCF, 0xBA,
297 0x84, 0x22, 0x7C, 0x23
298 };
299
300 /* Create and identity and try to retrieve it. */
301 static void tests(void)
302 {
303 SecCertificateRef cert = NULL, cert2 = NULL;
304 SecKeyRef privKey = NULL;
305 SecIdentityRef identity = NULL;
306 CFArrayRef trust_chain = NULL;
307 SSLContextRef ctx = NULL;
308
309 isnt(cert = SecCertificateCreateWithBytes(NULL, _c1, sizeof(_c1)),
310 NULL, "create certificate");
311 isnt(cert2 = SecCertificateCreateWithBytes(NULL, _c1, sizeof(_c1)),
312 NULL, "create certificate2");
313 #if TARGET_OS_IPHONE
314 privKey = SecKeyCreateRSAPrivateKey(NULL, _k1, sizeof(_k1),
315 kSecKeyEncodingPkcs1);
316 #else
317 privKey = NULL; /* TODO */
318 #endif
319 isnt(privKey, NULL, "create private key");
320
321 ok(identity = SecIdentityCreate(kCFAllocatorDefault, cert, privKey), "SecIdentityCreate");
322 CFReleaseSafe(cert);
323 CFReleaseSafe(privKey);
324 const void *values[] = { identity, cert2 };
325 ok(trust_chain = CFArrayCreate(kCFAllocatorDefault, values,
326 array_size(values), &kCFTypeArrayCallBacks), "CFArrayCreate");
327 CFReleaseSafe(identity);
328 CFReleaseSafe(cert2);
329
330 is(CFGetRetainCount(trust_chain), 1, "trust_chain rc = 1");
331 is(CFGetRetainCount(identity), 1, "identity rc = 1");
332 is(CFGetRetainCount(cert), 1, "cert rc = 1");
333 is(CFGetRetainCount(cert2), 1, "cert2 rc = 1");
334 is(CFGetRetainCount(privKey), 1, "privKey rc = 1");
335
336 ok(ctx=SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType), "SSLNewContext");
337 require(ctx, errOut);
338 ok_status(SSLSetCertificate(ctx, trust_chain), "SSLSetCertificate");
339 CFReleaseSafe(ctx);
340
341 is(CFGetRetainCount(trust_chain), 1, "trust_chain rc = 1");
342 is(CFGetRetainCount(identity), 1, "identity rc = 1");
343 is(CFGetRetainCount(cert), 1, "cert rc = 1");
344 is(CFGetRetainCount(cert2), 1, "cert2 rc = 1");
345 is(CFGetRetainCount(privKey), 1, "privKey rc = 1");
346
347 ok(ctx=SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType), "SSLCreateContext");
348 require(ctx, errOut);
349 ok_status(SSLSetCertificate(ctx, trust_chain), "SSLSetCertificate");
350 CFReleaseSafe(ctx);
351
352 is(CFGetRetainCount(trust_chain), 1, "trust_chain rc = 1");
353 is(CFGetRetainCount(identity), 1, "identity rc = 1");
354 is(CFGetRetainCount(cert), 1, "cert rc = 1");
355 is(CFGetRetainCount(cert2), 1, "cert2 rc = 1");
356 is(CFGetRetainCount(privKey), 1, "privKey rc = 1");
357
358 ok(ctx=SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType), "SSLCreateContext");
359 require(ctx, errOut);
360 ok_status(SSLSetCertificate(ctx, trust_chain), "SSLSetCertificate");
361 ok_status(SSLSetCertificate(ctx, trust_chain), "SSLSetCertificate");
362 CFReleaseSafe(ctx);
363
364 is(CFGetRetainCount(trust_chain), 1, "trust_chain rc = 1");
365 is(CFGetRetainCount(identity), 1, "identity rc = 1");
366 is(CFGetRetainCount(cert), 1, "cert rc = 1");
367 is(CFGetRetainCount(cert2), 1, "cert2 rc = 1");
368 is(CFGetRetainCount(privKey), 1, "privKey rc = 1");
369
370 errOut:
371 CFReleaseNull(trust_chain);
372 }
373
374 int ssl_41_clientauth(int argc, char *const *argv)
375 {
376 plan_tests(32);
377
378
379 tests();
380
381 return 0;
382 }