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