5 * Copyright (c) 2008-2010,2012-2013 Apple Inc. All Rights Reserved.
10 /* This test is only supported for iOS */
12 #include <TargetConditionals.h>
16 #include <CoreFoundation/CoreFoundation.h>
17 #include <Security/SecCertificate.h>
18 #include <Security/SecCertificatePriv.h>
19 #include <Security/SecKey.h>
20 #include <Security/SecItem.h>
21 #include <Security/SecIdentity.h>
22 #include <Security/SecPolicy.h>
23 #include <Security/SecTrust.h>
24 #include <Security/SecureTransport.h>
25 #include <utilities/array_size.h>
30 #include <Security/SecRSAKey.h>
33 #include "ssl_regressions.h"
35 #define CFReleaseNull(CF) { CFTypeRef _cf = (CF); if (_cf) { (CF) = NULL; CFRelease(_cf); } }
39 friendlyName: uranusLeaf
40 localKeyID: 46 E0 8A 05 63 4D 17 3F CA A4 AA B6 5A DA CF BA 84 22 7C 23
41 subject=/CN=uranusLeaf/emailAddress=uranus@uranus.com
42 issuer=/CN=plutoCA/emailAddress=pluto@pluto.com
44 static const uint8_t _c1
[] = {
45 0x30, 0x82, 0x02, 0xe0, 0x30, 0x82, 0x01, 0xc8,
46 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02,
47 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
48 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x30, 0x32, 0x31,
49 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x03,
50 0x0c, 0x07, 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x43,
51 0x41, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x09, 0x2a,
52 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01,
53 0x0c, 0x0f, 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x40,
54 0x70, 0x6c, 0x75, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
55 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x35, 0x31,
56 0x32, 0x31, 0x37, 0x30, 0x30, 0x30, 0x34, 0x32,
57 0x35, 0x5a, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32,
58 0x31, 0x37, 0x30, 0x30, 0x30, 0x34, 0x32, 0x35,
59 0x5a, 0x30, 0x37, 0x31, 0x13, 0x30, 0x11, 0x06,
60 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x75, 0x72,
61 0x61, 0x6e, 0x75, 0x73, 0x4c, 0x65, 0x61, 0x66,
62 0x31, 0x20, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86,
63 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x0c,
64 0x11, 0x75, 0x72, 0x61, 0x6e, 0x75, 0x73, 0x40,
65 0x75, 0x72, 0x61, 0x6e, 0x75, 0x73, 0x2e, 0x63,
66 0x6f, 0x6d, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
67 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
68 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
69 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
70 0x01, 0x01, 0x00, 0xa6, 0x82, 0x8e, 0xc6, 0x7e,
71 0xc9, 0x8c, 0x99, 0x6f, 0xb0, 0x62, 0x32, 0x35,
72 0xe7, 0xdb, 0xff, 0x34, 0x84, 0xdc, 0x72, 0xa8,
73 0xef, 0x22, 0x6f, 0x93, 0x63, 0x64, 0x80, 0x80,
74 0x5d, 0x50, 0x7e, 0xb4, 0x2e, 0x1b, 0x93, 0x93,
75 0x49, 0xca, 0xae, 0xcd, 0x34, 0x44, 0x4b, 0xd7,
76 0xfa, 0x9f, 0x3c, 0xfc, 0x9e, 0x65, 0xa9, 0xfb,
77 0x5e, 0x5d, 0x18, 0xa3, 0xf8, 0xb0, 0x08, 0xac,
78 0x8f, 0xfd, 0x03, 0xcb, 0xbd, 0x7f, 0xa0, 0x2a,
79 0xa6, 0xea, 0xca, 0xa3, 0x24, 0xef, 0x7c, 0xc3,
80 0xeb, 0x95, 0xcb, 0x90, 0x3f, 0x5e, 0xde, 0x78,
81 0xf2, 0x3d, 0x32, 0x72, 0xdb, 0x33, 0x6e, 0x9b,
82 0x52, 0x9f, 0x0c, 0x60, 0x4a, 0x24, 0xa1, 0xf6,
83 0x3b, 0x80, 0xbd, 0xa1, 0xdc, 0x40, 0x03, 0xe7,
84 0xa0, 0x59, 0x1f, 0xdb, 0xb4, 0xed, 0x57, 0xdc,
85 0x74, 0x0d, 0x99, 0x5a, 0x12, 0x74, 0x64, 0xaa,
86 0xb6, 0xa5, 0x96, 0x75, 0xf9, 0x42, 0x43, 0xe2,
87 0x52, 0xc2, 0x57, 0x23, 0x75, 0xd7, 0xa9, 0x4f,
88 0x07, 0x32, 0x99, 0xbd, 0x3d, 0x44, 0xbd, 0x04,
89 0x62, 0xe5, 0xb7, 0x2c, 0x0c, 0x11, 0xc5, 0xb2,
90 0x2e, 0xc4, 0x12, 0x1d, 0x7f, 0x42, 0x1e, 0x71,
91 0xaf, 0x39, 0x2b, 0x78, 0x47, 0x92, 0x23, 0x44,
92 0xef, 0xe3, 0xc1, 0x47, 0x69, 0x5a, 0xf1, 0x48,
93 0xaa, 0x37, 0xa4, 0x94, 0x6b, 0x96, 0xe5, 0x4b,
94 0xfd, 0x05, 0xc7, 0x9c, 0xcc, 0x38, 0xd1, 0x47,
95 0x85, 0x60, 0x7f, 0xef, 0xe9, 0x2e, 0x25, 0x08,
96 0xf8, 0x7d, 0x98, 0xdd, 0x6c, 0xeb, 0x4a, 0x32,
97 0x33, 0x44, 0x0b, 0x61, 0xb3, 0xf9, 0xae, 0x26,
98 0x41, 0xb5, 0x38, 0xdb, 0xcf, 0x13, 0x72, 0x23,
99 0x5b, 0x66, 0x20, 0x86, 0x4d, 0x24, 0xc2, 0xd4,
100 0x94, 0xde, 0xe3, 0x24, 0xb7, 0xcd, 0x75, 0x9e,
101 0x1d, 0x9f, 0xbc, 0xd0, 0x60, 0x34, 0x7d, 0xf8,
102 0xcb, 0x41, 0x39, 0x02, 0x03, 0x01, 0x00, 0x01,
103 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
104 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03,
105 0x82, 0x01, 0x01, 0x00, 0x17, 0xa5, 0x22, 0xed,
106 0xb8, 0x3e, 0x1f, 0x11, 0x99, 0xc5, 0xba, 0x28,
107 0x3e, 0x7e, 0xa6, 0xeb, 0x02, 0x81, 0x06, 0xa1,
108 0xc6, 0x80, 0xb9, 0x7e, 0x5c, 0x5a, 0x63, 0xe0,
109 0x8d, 0xeb, 0xd0, 0xec, 0x9c, 0x3a, 0x94, 0x64,
110 0x7c, 0x13, 0x54, 0x0d, 0xd6, 0xe3, 0x27, 0x88,
111 0xa6, 0xd2, 0x4b, 0x36, 0xdd, 0x2e, 0xfa, 0x94,
112 0xe5, 0x03, 0x27, 0xc9, 0xa6, 0x31, 0x02, 0xea,
113 0x40, 0x77, 0x2e, 0x93, 0xc4, 0x4d, 0xe2, 0x70,
114 0xe2, 0x67, 0x1c, 0xa8, 0x0d, 0xcd, 0x1a, 0x72,
115 0x86, 0x2c, 0xea, 0xdc, 0x7f, 0x8c, 0x49, 0x2c,
116 0xe7, 0x99, 0x13, 0xda, 0x3f, 0x58, 0x9e, 0xf5,
117 0x4d, 0x3c, 0x8c, 0x1c, 0xed, 0x85, 0xa7, 0xe2,
118 0xae, 0xda, 0x5f, 0xbe, 0x36, 0x1c, 0x9f, 0x5a,
119 0xa0, 0xdc, 0x2a, 0xc0, 0xee, 0x71, 0x07, 0x26,
120 0x8b, 0xe8, 0x8a, 0xf8, 0x2d, 0x36, 0x78, 0xc9,
121 0x79, 0xfa, 0xbe, 0x98, 0x59, 0x95, 0x12, 0x24,
122 0xf1, 0xda, 0x20, 0xc7, 0x78, 0xf9, 0x7c, 0x6a,
123 0x24, 0x43, 0x82, 0xa8, 0x0f, 0xb1, 0x7d, 0x94,
124 0xaa, 0x30, 0x35, 0xe5, 0x69, 0xdc, 0x0a, 0x0e,
125 0xaf, 0x10, 0x5e, 0x1a, 0x81, 0x50, 0x5c, 0x7e,
126 0x24, 0xb3, 0x07, 0x65, 0x4b, 0xc1, 0x7e, 0xc6,
127 0x38, 0xdb, 0xd3, 0x6a, 0xf0, 0xd8, 0x85, 0x61,
128 0x9a, 0x9f, 0xfe, 0x02, 0x46, 0x29, 0xb2, 0x9a,
129 0xe2, 0x04, 0xe7, 0x72, 0xcc, 0x87, 0x46, 0xba,
130 0x7d, 0xa8, 0xf9, 0xd0, 0x0f, 0x29, 0xfc, 0xfd,
131 0xd1, 0xd0, 0x7f, 0x36, 0xc1, 0xd8, 0x7d, 0x88,
132 0x03, 0x62, 0xf5, 0x8c, 0x00, 0xb5, 0xc2, 0x81,
133 0x44, 0x67, 0x58, 0x11, 0xb4, 0x3a, 0xbb, 0xd1,
134 0x8c, 0x94, 0x20, 0x60, 0xea, 0xa0, 0xac, 0xc1,
135 0xf1, 0x08, 0x54, 0xb8, 0xf6, 0x5e, 0xac, 0xf1,
136 0xec, 0x78, 0x69, 0x9d, 0x7e, 0x4d, 0x06, 0x3b,
137 0x9b, 0x78, 0x78, 0x10
142 friendlyName: uranusLeaf
143 localKeyID: 46 E0 8A 05 63 4D 17 3F CA A4 AA B6 5A DA CF BA 84 22 7C 23
144 Key Attributes: <No Attributes>
146 static const uint8_t _k1
[] = {
147 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02,
148 0x82, 0x01, 0x01, 0x00, 0xa6, 0x82, 0x8e, 0xc6,
149 0x7e, 0xc9, 0x8c, 0x99, 0x6f, 0xb0, 0x62, 0x32,
150 0x35, 0xe7, 0xdb, 0xff, 0x34, 0x84, 0xdc, 0x72,
151 0xa8, 0xef, 0x22, 0x6f, 0x93, 0x63, 0x64, 0x80,
152 0x80, 0x5d, 0x50, 0x7e, 0xb4, 0x2e, 0x1b, 0x93,
153 0x93, 0x49, 0xca, 0xae, 0xcd, 0x34, 0x44, 0x4b,
154 0xd7, 0xfa, 0x9f, 0x3c, 0xfc, 0x9e, 0x65, 0xa9,
155 0xfb, 0x5e, 0x5d, 0x18, 0xa3, 0xf8, 0xb0, 0x08,
156 0xac, 0x8f, 0xfd, 0x03, 0xcb, 0xbd, 0x7f, 0xa0,
157 0x2a, 0xa6, 0xea, 0xca, 0xa3, 0x24, 0xef, 0x7c,
158 0xc3, 0xeb, 0x95, 0xcb, 0x90, 0x3f, 0x5e, 0xde,
159 0x78, 0xf2, 0x3d, 0x32, 0x72, 0xdb, 0x33, 0x6e,
160 0x9b, 0x52, 0x9f, 0x0c, 0x60, 0x4a, 0x24, 0xa1,
161 0xf6, 0x3b, 0x80, 0xbd, 0xa1, 0xdc, 0x40, 0x03,
162 0xe7, 0xa0, 0x59, 0x1f, 0xdb, 0xb4, 0xed, 0x57,
163 0xdc, 0x74, 0x0d, 0x99, 0x5a, 0x12, 0x74, 0x64,
164 0xaa, 0xb6, 0xa5, 0x96, 0x75, 0xf9, 0x42, 0x43,
165 0xe2, 0x52, 0xc2, 0x57, 0x23, 0x75, 0xd7, 0xa9,
166 0x4f, 0x07, 0x32, 0x99, 0xbd, 0x3d, 0x44, 0xbd,
167 0x04, 0x62, 0xe5, 0xb7, 0x2c, 0x0c, 0x11, 0xc5,
168 0xb2, 0x2e, 0xc4, 0x12, 0x1d, 0x7f, 0x42, 0x1e,
169 0x71, 0xaf, 0x39, 0x2b, 0x78, 0x47, 0x92, 0x23,
170 0x44, 0xef, 0xe3, 0xc1, 0x47, 0x69, 0x5a, 0xf1,
171 0x48, 0xaa, 0x37, 0xa4, 0x94, 0x6b, 0x96, 0xe5,
172 0x4b, 0xfd, 0x05, 0xc7, 0x9c, 0xcc, 0x38, 0xd1,
173 0x47, 0x85, 0x60, 0x7f, 0xef, 0xe9, 0x2e, 0x25,
174 0x08, 0xf8, 0x7d, 0x98, 0xdd, 0x6c, 0xeb, 0x4a,
175 0x32, 0x33, 0x44, 0x0b, 0x61, 0xb3, 0xf9, 0xae,
176 0x26, 0x41, 0xb5, 0x38, 0xdb, 0xcf, 0x13, 0x72,
177 0x23, 0x5b, 0x66, 0x20, 0x86, 0x4d, 0x24, 0xc2,
178 0xd4, 0x94, 0xde, 0xe3, 0x24, 0xb7, 0xcd, 0x75,
179 0x9e, 0x1d, 0x9f, 0xbc, 0xd0, 0x60, 0x34, 0x7d,
180 0xf8, 0xcb, 0x41, 0x39, 0x02, 0x03, 0x01, 0x00,
181 0x01, 0x02, 0x82, 0x01, 0x00, 0x4d, 0x27, 0xf2,
182 0x40, 0xc8, 0x3f, 0x5c, 0x87, 0x3c, 0xd9, 0xde,
183 0xa6, 0xa5, 0x93, 0xea, 0xbd, 0x36, 0xf8, 0xd9,
184 0xad, 0xc7, 0xda, 0x07, 0x7a, 0xec, 0x31, 0x02,
185 0x41, 0x09, 0x3a, 0x34, 0x32, 0x82, 0x0b, 0x5b,
186 0x7b, 0xe6, 0xa4, 0x2a, 0xe7, 0x14, 0xef, 0x43,
187 0x36, 0x61, 0xbe, 0x20, 0x4b, 0x82, 0x43, 0x63,
188 0x98, 0x80, 0x82, 0x19, 0x61, 0x71, 0x99, 0xaa,
189 0xf8, 0x59, 0xfd, 0xde, 0xa0, 0x03, 0xa8, 0xab,
190 0x9a, 0xec, 0x28, 0xac, 0x63, 0x79, 0x75, 0x84,
191 0x03, 0xac, 0x45, 0x5e, 0x04, 0x15, 0xb3, 0x47,
192 0xa2, 0x8f, 0x28, 0xb0, 0x72, 0xd0, 0x06, 0x02,
193 0xaf, 0x1e, 0x0a, 0x0a, 0xe9, 0x11, 0x35, 0x4a,
194 0x04, 0x42, 0xb5, 0x0f, 0xd2, 0xcf, 0x4d, 0xdf,
195 0xdb, 0xef, 0x58, 0xbd, 0xf3, 0xa5, 0x3b, 0x11,
196 0x3f, 0xc5, 0x47, 0x81, 0x85, 0xad, 0xd7, 0x1f,
197 0x58, 0x06, 0x42, 0xdc, 0x37, 0x3c, 0xdb, 0x98,
198 0x33, 0xa1, 0xc6, 0x80, 0x07, 0xe0, 0x2b, 0xc5,
199 0xf5, 0x60, 0x35, 0x6a, 0xa2, 0x06, 0x40, 0x4a,
200 0xac, 0x64, 0x02, 0x58, 0x4d, 0x07, 0xe3, 0x69,
201 0xd7, 0xe0, 0x8f, 0xb5, 0xf4, 0xbc, 0xfa, 0xab,
202 0x1a, 0xb0, 0xfa, 0x29, 0xf8, 0xca, 0xde, 0x78,
203 0xf0, 0x89, 0xe2, 0xf9, 0xb7, 0x68, 0x5b, 0x0e,
204 0xdc, 0x4e, 0x8a, 0x56, 0x8d, 0x33, 0x20, 0x2e,
205 0xed, 0x2e, 0xab, 0x6f, 0xba, 0x77, 0xef, 0xe6,
206 0x12, 0x62, 0x49, 0x9e, 0x87, 0x76, 0x1c, 0x1e,
207 0xf4, 0x0e, 0x9e, 0x78, 0x98, 0x91, 0x1a, 0xe3,
208 0xb4, 0x51, 0x4b, 0x8c, 0x2f, 0x08, 0x97, 0x8f,
209 0xf9, 0x68, 0x61, 0x40, 0xcd, 0xb6, 0x10, 0xb4,
210 0xfb, 0x75, 0xb4, 0x20, 0xc1, 0x5a, 0xda, 0x64,
211 0xfd, 0x51, 0x06, 0x85, 0x9a, 0x9e, 0x5d, 0x82,
212 0x14, 0xd4, 0x41, 0x4e, 0x75, 0x10, 0xb5, 0x7b,
213 0xd0, 0x4c, 0xd1, 0x00, 0x01, 0x02, 0x81, 0x81,
214 0x00, 0xcf, 0x8e, 0x68, 0x04, 0x67, 0x09, 0xa9,
215 0x6e, 0xff, 0x11, 0x8c, 0xe5, 0xe4, 0x16, 0xdd,
216 0xb6, 0xa6, 0x55, 0xca, 0x4b, 0x0b, 0xbb, 0xb7,
217 0xf5, 0xe5, 0x73, 0xf3, 0x24, 0x84, 0x29, 0xb2,
218 0xc3, 0xbc, 0x7f, 0x2b, 0x4a, 0xc7, 0xdf, 0x46,
219 0x8e, 0xe1, 0x35, 0x69, 0x1b, 0x8e, 0x9f, 0x6b,
220 0x4d, 0xf3, 0x65, 0xae, 0x3d, 0x87, 0x2b, 0xc9,
221 0xf0, 0x8c, 0xf2, 0x88, 0x2f, 0x1b, 0x79, 0x80,
222 0xd2, 0xb2, 0x64, 0x0a, 0xcc, 0x66, 0x69, 0x4c,
223 0xa1, 0x85, 0xc4, 0x6a, 0x94, 0x46, 0x70, 0x69,
224 0xbc, 0x8c, 0x1c, 0x62, 0x65, 0x4d, 0x68, 0xcc,
225 0xe3, 0x3c, 0x6c, 0xe7, 0xd1, 0x09, 0xed, 0xdd,
226 0x42, 0x10, 0x11, 0x6b, 0xdd, 0x7c, 0xe3, 0xe1,
227 0x3b, 0x3b, 0x0d, 0x01, 0x6d, 0xca, 0x2f, 0x4b,
228 0x45, 0x5e, 0x76, 0x5d, 0x5c, 0x6f, 0x53, 0xa4,
229 0x38, 0x74, 0x75, 0x94, 0x2c, 0xda, 0xf8, 0xa6,
230 0x01, 0x02, 0x81, 0x81, 0x00, 0xcd, 0x5f, 0x9d,
231 0x6c, 0x94, 0xf6, 0x44, 0x37, 0x72, 0xfe, 0xcf,
232 0xbe, 0x82, 0x96, 0x24, 0x22, 0x12, 0x07, 0x6f,
233 0xd1, 0x57, 0x7b, 0xc7, 0x63, 0x20, 0xf5, 0x93,
234 0x79, 0x70, 0x0b, 0xe4, 0x38, 0x19, 0x62, 0x7b,
235 0x89, 0x3e, 0x45, 0xdf, 0xd6, 0xae, 0x9d, 0x0d,
236 0xa8, 0x76, 0xc1, 0xbd, 0x04, 0x2b, 0xaa, 0x30,
237 0x6a, 0xac, 0x65, 0x91, 0x61, 0xf0, 0xf8, 0x5d,
238 0xa3, 0x53, 0xa4, 0xfb, 0x99, 0xac, 0x46, 0x7a,
239 0x12, 0x4b, 0xf7, 0xa7, 0x48, 0x41, 0x61, 0x48,
240 0x26, 0x5c, 0x68, 0x2f, 0x73, 0x91, 0xe4, 0x74,
241 0xcd, 0xc9, 0x8b, 0xe7, 0x26, 0xe4, 0x35, 0xde,
242 0x32, 0x6b, 0x24, 0x49, 0xf2, 0x04, 0x67, 0x3d,
243 0x31, 0x8f, 0x22, 0xe5, 0x49, 0xae, 0x49, 0x94,
244 0xb3, 0x45, 0x2b, 0xed, 0x6f, 0x9c, 0xc7, 0x80,
245 0xf0, 0x42, 0xd5, 0x8f, 0x27, 0xd6, 0xd6, 0x49,
246 0xf2, 0x16, 0xcc, 0x4b, 0x39, 0x02, 0x81, 0x81,
247 0x00, 0xbb, 0xb7, 0xd7, 0x59, 0xcb, 0xfb, 0x10,
248 0x13, 0xc4, 0x7b, 0x92, 0x0c, 0x45, 0xcb, 0x6c,
249 0x81, 0x0a, 0x55, 0x63, 0x1d, 0x96, 0xa2, 0x13,
250 0xd2, 0x40, 0xd1, 0x2a, 0xa1, 0xe7, 0x2a, 0x73,
251 0x74, 0xd6, 0x61, 0xc9, 0xbc, 0xdb, 0xa2, 0x93,
252 0x85, 0x1c, 0x28, 0x9b, 0x44, 0x82, 0x2c, 0xaa,
253 0xf7, 0x18, 0x60, 0xe9, 0x42, 0xda, 0xa2, 0xff,
254 0x04, 0x21, 0xe6, 0x24, 0xc7, 0x3e, 0x39, 0x19,
255 0x0a, 0xf6, 0xae, 0xc6, 0x99, 0x71, 0x32, 0x61,
256 0x4d, 0x60, 0xd7, 0x71, 0x71, 0x63, 0x77, 0xbe,
257 0x19, 0xfa, 0x3a, 0x9d, 0xbf, 0x73, 0x50, 0x8a,
258 0xa6, 0x26, 0x7b, 0x74, 0xfa, 0x39, 0xd9, 0xb9,
259 0x18, 0x4b, 0xc2, 0x05, 0xe5, 0x8f, 0x53, 0xe6,
260 0xdc, 0x14, 0x1f, 0x42, 0x20, 0x93, 0x11, 0x4d,
261 0x29, 0x93, 0x32, 0xc8, 0x63, 0x96, 0x88, 0x76,
262 0x69, 0x5c, 0xe3, 0x0e, 0xbd, 0xb6, 0xd9, 0xd6,
263 0x01, 0x02, 0x81, 0x80, 0x62, 0xa2, 0xed, 0x84,
264 0xdc, 0xf6, 0x7a, 0x44, 0xf7, 0x62, 0x12, 0x7c,
265 0xb9, 0x53, 0x4a, 0xff, 0x62, 0x11, 0x58, 0x4e,
266 0xfe, 0xe9, 0x60, 0x15, 0xe8, 0x1a, 0x8a, 0x3d,
267 0xe4, 0xe6, 0x91, 0x31, 0xb0, 0x5f, 0x70, 0x5d,
268 0xb6, 0x1e, 0xf1, 0x26, 0xb6, 0xae, 0x8f, 0x84,
269 0xbd, 0xa4, 0xc7, 0x17, 0x5d, 0xb1, 0x5b, 0x97,
270 0xa0, 0x3d, 0x17, 0xda, 0x26, 0x55, 0xe3, 0x03,
271 0x32, 0x85, 0x26, 0xa1, 0xe3, 0xef, 0xe5, 0x69,
272 0x2c, 0x3b, 0x41, 0x88, 0x9e, 0x7e, 0x0e, 0x9c,
273 0xfd, 0xfc, 0xbb, 0xed, 0x91, 0xc0, 0x5b, 0xa9,
274 0x0a, 0x87, 0xba, 0xf9, 0x1e, 0xda, 0x10, 0x61,
275 0xbe, 0xbb, 0xab, 0x18, 0x25, 0xad, 0x3f, 0xe2,
276 0xb1, 0x90, 0x5c, 0xf7, 0x4a, 0x51, 0xe4, 0xad,
277 0x45, 0x27, 0x97, 0xdd, 0xe7, 0x3a, 0x9a, 0x5e,
278 0xca, 0x7a, 0xaf, 0x4a, 0xbf, 0x10, 0x24, 0x6b,
279 0xb5, 0x2f, 0x61, 0x61, 0x02, 0x81, 0x81, 0x00,
280 0x85, 0x7c, 0x78, 0xa5, 0x11, 0xdf, 0xc3, 0x6a,
281 0x38, 0x48, 0xfa, 0x7e, 0x48, 0xf0, 0x5a, 0x58,
282 0xe2, 0xc5, 0x83, 0x4e, 0x38, 0x3f, 0x4a, 0x2b,
283 0x07, 0x57, 0x31, 0xe7, 0xbe, 0x50, 0xb1, 0xbb,
284 0x24, 0xf3, 0x3d, 0x8b, 0x53, 0xb7, 0xd1, 0x47,
285 0x72, 0x5e, 0xd5, 0xd6, 0x4c, 0xce, 0x2c, 0x46,
286 0x61, 0x9a, 0xaa, 0xc3, 0x0e, 0xd4, 0x23, 0x2c,
287 0xdd, 0xf5, 0xb7, 0xad, 0x38, 0x52, 0x17, 0xc4,
288 0x16, 0xbb, 0xda, 0x1c, 0x61, 0xb1, 0xca, 0x8d,
289 0xb2, 0xa0, 0xbe, 0x4f, 0x3d, 0x19, 0x0e, 0xe0,
290 0x0e, 0x52, 0xad, 0xf3, 0xaf, 0xd9, 0xcc, 0x78,
291 0xc2, 0xb1, 0x5e, 0x05, 0x5e, 0xf2, 0x27, 0x84,
292 0x15, 0xe4, 0x8f, 0xca, 0xc5, 0x92, 0x43, 0xe0,
293 0x24, 0x8d, 0xf2, 0x5d, 0x55, 0xcc, 0x9d, 0x2f,
294 0xa9, 0xf6, 0x9b, 0x67, 0x6a, 0x87, 0x74, 0x36,
295 0x34, 0x7c, 0xd4, 0x9d, 0xff, 0xad, 0xee, 0x69
298 __unused
static const uint8_t _k1_digest
[] = {
299 0x46, 0xE0, 0x8A, 0x05, 0x63, 0x4D, 0x17, 0x3F,
300 0xCA, 0xA4, 0xAA, 0xB6, 0x5A, 0xDA, 0xCF, 0xBA,
301 0x84, 0x22, 0x7C, 0x23
304 /* Create and identity and try to retrieve it. */
305 static void AddIdentityToKeychain(void)
307 SecCertificateRef cert
= NULL
;
308 SecKeyRef privKey
= NULL
;
309 //SecIdentityRef identity = NULL;
311 isnt(cert
= SecCertificateCreateWithBytes(NULL
, _c1
, sizeof(_c1
)),
312 NULL
, "create certificate");
315 privKey
= SecKeyCreateRSAPrivateKey(NULL
, _k1
, sizeof(_k1
),
316 kSecKeyEncodingPkcs1
);
322 isnt(privKey
, NULL
, "create private key");
324 const void *certkeys
[] = {
327 const void *certvalues
[] = {
330 CFDictionaryRef certDict
= CFDictionaryCreate(NULL
, certkeys
, certvalues
,
331 array_size(certkeys
), NULL
, NULL
);
332 ok_status(SecItemAdd(certDict
, NULL
), "add certificate");
333 CFReleaseNull(certDict
);
336 const void *privkeys
[] = {
339 const void *privvalues
[] = {
342 CFDictionaryRef privDict
= CFDictionaryCreate(NULL
, privkeys
, privvalues
,
343 array_size(privkeys
), NULL
, NULL
);
344 ok_status(SecItemAdd(privDict
, NULL
), "add private key");
345 CFReleaseNull(privDict
);
346 CFReleaseNull(privKey
);
349 static void DeleteIdentityFromKeychain(void)
351 SecCertificateRef cert
= NULL
;
352 SecKeyRef privKey
= NULL
;
353 //SecIdentityRef identity = NULL;
355 isnt(cert
= SecCertificateCreateWithBytes(NULL
, _c1
, sizeof(_c1
)),
356 NULL
, "create certificate");
358 privKey
= SecKeyCreateRSAPrivateKey(NULL
, _k1
, sizeof(_k1
),
359 kSecKeyEncodingPkcs1
);
364 isnt(privKey
, NULL
, "create private key");
366 const void *certkeys
[] = {
369 const void *certvalues
[] = {
372 CFDictionaryRef certDict
= CFDictionaryCreate(NULL
, certkeys
, certvalues
,
373 array_size(certkeys
), NULL
, NULL
);
374 ok_status(SecItemDelete(certDict
), "delete certificate");
375 CFReleaseNull(certDict
);
378 const void *privkeys
[] = {
381 const void *privvalues
[] = {
384 CFDictionaryRef privDict
= CFDictionaryCreate(NULL
, privkeys
, privvalues
,
385 array_size(privkeys
), NULL
, NULL
);
386 ok_status(SecItemDelete(privDict
), "delete private key");
387 CFReleaseNull(privDict
);
388 CFReleaseNull(privKey
);
393 EAPSecIdentityListCreate(CFArrayRef
* ret_array
)
395 const void * keys
[] = {
400 CFDictionaryRef query
;
401 CFTypeRef results
= NULL
;
402 OSStatus status
= errSecSuccess
;
403 const void * values
[] = {
409 query
= CFDictionaryCreate(NULL
, keys
, values
,
411 &kCFTypeDictionaryKeyCallBacks
,
412 &kCFTypeDictionaryValueCallBacks
);
413 ok_status(status
= SecItemCopyMatching(query
, &results
), "SecItemCopyMatching");
414 CFReleaseNull(query
);
415 if (status
== errSecSuccess
) {
416 *ret_array
= results
;
422 _EAPSecIdentityCreateCertificateTrustChain(SecIdentityRef identity
,
423 CFArrayRef
* ret_chain
)
425 SecCertificateRef cert
= NULL
;
427 SecPolicyRef policy
= NULL
;
429 SecTrustRef trust
= NULL
;
430 SecTrustResultType trust_result
;
433 ok(policy
= SecPolicyCreateBasicX509(), "SecPolicyCreateBasicX509");
434 ok_status(status
= SecIdentityCopyCertificate(identity
, &cert
), "SecIdentityCopyCertificate");
435 certs
= CFArrayCreate(NULL
, (const void **)&cert
,
436 1, &kCFTypeArrayCallBacks
);
438 ok_status(status
= SecTrustCreateWithCertificates(certs
, policy
, &trust
),
439 "SecTrustCreateWithCertificates");
440 CFReleaseNull(certs
);
441 ok_status(status
= SecTrustEvaluate(trust
, &trust_result
), "SecTrustEvaluate");
443 CFMutableArrayRef array
;
444 CFIndex count
= SecTrustGetCertificateCount(trust
);
447 isnt(count
, 0, "SecTrustGetCertificateCount is nonzero");
448 array
= CFArrayCreateMutable(NULL
, count
, &kCFTypeArrayCallBacks
);
449 for (i
= 0; i
< count
; i
++) {
452 s
= SecTrustGetCertificateAtIndex(trust
, i
);
453 CFArrayAppendValue(array
, s
);
458 CFReleaseNull(trust
);
459 CFReleaseNull(policy
);
464 EAPSecIdentityCreateIdentityTrustChain(SecIdentityRef identity
,
465 CFArrayRef
* ret_array
)
467 CFMutableArrayRef array
= NULL
;
470 CFArrayRef trust_chain
= NULL
;
473 ok_status(status
= _EAPSecIdentityCreateCertificateTrustChain(identity
,
474 &trust_chain
), "_EAPSecIdentityCreateCertificateTrustChain");
475 count
= CFArrayGetCount(trust_chain
);
476 array
= CFArrayCreateMutable(NULL
, count
+ 1, &kCFTypeArrayCallBacks
);
477 CFArrayAppendValue(array
, identity
); /* identity into [0] */
478 CFArrayAppendArray(array
, trust_chain
, CFRangeMake(0, count
));
481 CFReleaseNull(trust_chain
);
489 SSLContextRef ctx
= NULL
;
490 SecIdentityRef identity
;
491 CFArrayRef list
= NULL
;
492 CFArrayRef trust_chain
;
494 AddIdentityToKeychain();
495 EAPSecIdentityListCreate(&list
);
496 identity
= (SecIdentityRef
)CFArrayGetValueAtIndex(list
, 0);
497 is(CFGetRetainCount(identity
), 1, "identity rc = 1");
498 ok_status(EAPSecIdentityCreateIdentityTrustChain(identity
, &trust_chain
),
499 "EAPSecIdentityCreateIdentityTrustChain");
500 ok(ctx
=SSLCreateContext(NULL
, kSSLClientSide
, kSSLStreamType
), "SSLNewContext");
501 ok_status(SSLSetCertificate(ctx
, trust_chain
), "SSLSetCertificate");
503 DeleteIdentityFromKeychain();
504 CFRelease(trust_chain
);
508 int ssl_40_clientauth(int argc
, char *const *argv
)
517 #endif /* TARGET_OS_IPHONE */