]>
Commit | Line | Data |
---|---|---|
427c49bc | 1 | /* |
d8f41ccd | 2 | * Copyright (c) 2007,2009-2010,2012 Apple Inc. All Rights Reserved. |
427c49bc A |
3 | */ |
4 | ||
5 | #include <CoreFoundation/CoreFoundation.h> | |
6 | #include <Security/SecCertificate.h> | |
7 | #include <Security/SecCertificatePriv.h> | |
8 | #include <Security/SecPolicyPriv.h> | |
9 | #include <Security/SecTrust.h> | |
10 | #include <Security/SecTrustPriv.h> | |
11 | #include <Security/SecKey.h> | |
427c49bc A |
12 | #include <CommonCrypto/CommonDigest.h> |
13 | ||
14 | #include <stdlib.h> | |
15 | #include <unistd.h> | |
16 | ||
17 | #include <utilities/SecIOFormat.h> | |
fa7225c8 | 18 | #include <utilities/SecCFWrappers.h> |
427c49bc | 19 | |
fa7225c8 | 20 | #include "shared_regressions.h" |
427c49bc A |
21 | |
22 | /* subject:/CN=iPhone Developer: Katherine Kojima/OU=Core OS Plus Others/O=Core OS Plus Others/C=usa */ | |
23 | /* issuer :/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority */ | |
24 | unsigned char codesigning_certificate[1415]={ | |
25 | 0x30,0x82,0x05,0x83,0x30,0x82,0x04,0x6B,0xA0,0x03,0x02,0x01,0x02,0x02,0x08,0x70, | |
26 | 0xA9,0x16,0x20,0x02,0xA2,0xD4,0x50,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7, | |
27 | 0x0D,0x01,0x01,0x05,0x05,0x00,0x30,0x81,0x96,0x31,0x0B,0x30,0x09,0x06,0x03,0x55, | |
28 | 0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x0A,0x0C, | |
29 | 0x0A,0x41,0x70,0x70,0x6C,0x65,0x20,0x49,0x6E,0x63,0x2E,0x31,0x2C,0x30,0x2A,0x06, | |
30 | 0x03,0x55,0x04,0x0B,0x0C,0x23,0x41,0x70,0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C, | |
31 | 0x64,0x77,0x69,0x64,0x65,0x20,0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20, | |
32 | 0x52,0x65,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x73,0x31,0x44,0x30,0x42,0x06,0x03,0x55, | |
33 | 0x04,0x03,0x0C,0x3B,0x41,0x70,0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C,0x64,0x77, | |
34 | 0x69,0x64,0x65,0x20,0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20,0x52,0x65, | |
35 | 0x6C,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63, | |
36 | 0x61,0x74,0x69,0x6F,0x6E,0x20,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79,0x30, | |
37 | 0x1E,0x17,0x0D,0x30,0x38,0x30,0x33,0x32,0x36,0x31,0x37,0x30,0x37,0x34,0x36,0x5A, | |
38 | 0x17,0x0D,0x30,0x38,0x30,0x39,0x32,0x34,0x31,0x37,0x30,0x37,0x34,0x36,0x5A,0x30, | |
39 | 0x77,0x31,0x2B,0x30,0x29,0x06,0x03,0x55,0x04,0x03,0x0C,0x22,0x69,0x50,0x68,0x6F, | |
40 | 0x6E,0x65,0x20,0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x3A,0x20,0x4B,0x61, | |
41 | 0x74,0x68,0x65,0x72,0x69,0x6E,0x65,0x20,0x4B,0x6F,0x6A,0x69,0x6D,0x61,0x31,0x1C, | |
42 | 0x30,0x1A,0x06,0x03,0x55,0x04,0x0B,0x0C,0x13,0x43,0x6F,0x72,0x65,0x20,0x4F,0x53, | |
43 | 0x20,0x50,0x6C,0x75,0x73,0x20,0x4F,0x74,0x68,0x65,0x72,0x73,0x31,0x1C,0x30,0x1A, | |
44 | 0x06,0x03,0x55,0x04,0x0A,0x0C,0x13,0x43,0x6F,0x72,0x65,0x20,0x4F,0x53,0x20,0x50, | |
45 | 0x6C,0x75,0x73,0x20,0x4F,0x74,0x68,0x65,0x72,0x73,0x31,0x0C,0x30,0x0A,0x06,0x03, | |
46 | 0x55,0x04,0x06,0x13,0x03,0x75,0x73,0x61,0x30,0x82,0x01,0x22,0x30,0x0D,0x06,0x09, | |
47 | 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x82,0x01,0x0F,0x00, | |
48 | 0x30,0x82,0x01,0x0A,0x02,0x82,0x01,0x01,0x00,0xD4,0x2B,0xF2,0x10,0x71,0x0B,0xBB, | |
49 | 0x3D,0xA0,0x1A,0x32,0x41,0xBC,0xA9,0x55,0xF4,0xFB,0x6C,0x9C,0xB5,0x32,0x52,0x10, | |
50 | 0x7E,0x41,0xF4,0x2C,0x18,0x3A,0x4F,0x32,0x9D,0xA3,0x64,0x28,0xDD,0x94,0xD0,0xB8, | |
51 | 0x3F,0xF9,0x7C,0x62,0xE6,0xF5,0xF1,0x16,0x0D,0x7F,0xBA,0xEC,0xBF,0xD9,0x95,0xD4, | |
52 | 0x7A,0xD7,0x4D,0x32,0x0F,0xCD,0x6D,0xBC,0xF3,0x10,0xDE,0xE8,0x5D,0xA1,0xDA,0x98, | |
53 | 0x8F,0x6C,0x75,0xF7,0x7B,0xBE,0x33,0x43,0xBD,0x95,0xFA,0x35,0xD6,0x77,0x81,0x68, | |
54 | 0x02,0x9C,0x41,0x99,0x0B,0x53,0x5F,0x58,0xF3,0x85,0x4C,0xAB,0x06,0xC2,0xC0,0xC4, | |
55 | 0xD8,0x68,0x64,0xE3,0x14,0x5F,0x62,0x75,0xD5,0x66,0x9B,0xEE,0x4A,0x49,0xBA,0xC7, | |
56 | 0x7B,0xD1,0xE6,0x96,0x9D,0xE5,0xEF,0x99,0x0E,0x87,0xEC,0xE3,0xA4,0x54,0x3E,0x19, | |
57 | 0xBB,0x87,0x53,0x9C,0x3C,0x6A,0x94,0x6B,0x22,0x1A,0x01,0xAF,0x21,0xD5,0xDA,0xB0, | |
58 | 0x92,0xE0,0x70,0x61,0xDD,0xC1,0x37,0x60,0x1F,0xC3,0xB0,0xFC,0xB3,0x00,0x4A,0x56, | |
59 | 0x9D,0x70,0xC3,0xDE,0x66,0xD0,0xEF,0x39,0x88,0x48,0xBD,0x6D,0xA6,0xB2,0x2C,0x0A, | |
60 | 0x78,0xCE,0x05,0x62,0x9B,0xE9,0x18,0x4E,0x59,0xC8,0xDC,0xD3,0xDF,0xB6,0x77,0xB5, | |
61 | 0xA3,0xDA,0x62,0x15,0x9A,0x50,0x1E,0x28,0x55,0x70,0xC2,0xB7,0x97,0x63,0x00,0x1E, | |
62 | 0x0E,0x3A,0x8B,0xA6,0x13,0xE5,0xE0,0xD6,0xE6,0xFA,0x61,0xDE,0x5F,0x30,0x72,0xAA, | |
63 | 0xE4,0xBA,0x21,0x74,0x63,0x4A,0xF2,0x18,0x4C,0x99,0x8D,0x75,0x27,0x91,0xF9,0xD4, | |
64 | 0x08,0xAE,0xB6,0xDA,0x69,0x33,0x06,0x7F,0x17,0x02,0x03,0x01,0x00,0x01,0xA3,0x82, | |
65 | 0x01,0xF1,0x30,0x82,0x01,0xED,0x30,0x0C,0x06,0x03,0x55,0x1D,0x13,0x01,0x01,0xFF, | |
66 | 0x04,0x02,0x30,0x00,0x30,0x0E,0x06,0x03,0x55,0x1D,0x0F,0x01,0x01,0xFF,0x04,0x04, | |
67 | 0x03,0x02,0x07,0x80,0x30,0x16,0x06,0x03,0x55,0x1D,0x25,0x01,0x01,0xFF,0x04,0x0C, | |
68 | 0x30,0x0A,0x06,0x08,0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x03,0x30,0x1D,0x06,0x03, | |
69 | 0x55,0x1D,0x0E,0x04,0x16,0x04,0x14,0x6A,0x6D,0x56,0xC6,0xA5,0x0E,0xC2,0x97,0xF7, | |
70 | 0x17,0x48,0xBE,0xA0,0x07,0xFF,0x77,0xE9,0xEF,0xB2,0xED,0x30,0x1F,0x06,0x03,0x55, | |
71 | 0x1D,0x23,0x04,0x18,0x30,0x16,0x80,0x14,0x88,0x27,0x17,0x09,0xA9,0xB6,0x18,0x60, | |
72 | 0x8B,0xEC,0xEB,0xBA,0xF6,0x47,0x59,0xC5,0x52,0x54,0xA3,0xB7,0x30,0x82,0x01,0x0F, | |
73 | 0x06,0x03,0x55,0x1D,0x20,0x04,0x82,0x01,0x06,0x30,0x82,0x01,0x02,0x30,0x81,0xFF, | |
74 | 0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x63,0x64,0x05,0x01,0x30,0x81,0xF1,0x30,0x81, | |
75 | 0xC3,0x06,0x08,0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x02,0x30,0x81,0xB6,0x0C,0x81, | |
76 | 0xB3,0x52,0x65,0x6C,0x69,0x61,0x6E,0x63,0x65,0x20,0x6F,0x6E,0x20,0x74,0x68,0x69, | |
77 | 0x73,0x20,0x63,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x65,0x20,0x62,0x79, | |
78 | 0x20,0x61,0x6E,0x79,0x20,0x70,0x61,0x72,0x74,0x79,0x20,0x61,0x73,0x73,0x75,0x6D, | |
79 | 0x65,0x73,0x20,0x61,0x63,0x63,0x65,0x70,0x74,0x61,0x6E,0x63,0x65,0x20,0x6F,0x66, | |
80 | 0x20,0x74,0x68,0x65,0x20,0x74,0x68,0x65,0x6E,0x20,0x61,0x70,0x70,0x6C,0x69,0x63, | |
81 | 0x61,0x62,0x6C,0x65,0x20,0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,0x74,0x65, | |
82 | 0x72,0x6D,0x73,0x20,0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x64,0x69,0x74,0x69,0x6F, | |
83 | 0x6E,0x73,0x20,0x6F,0x66,0x20,0x75,0x73,0x65,0x2C,0x20,0x63,0x65,0x72,0x74,0x69, | |
84 | 0x66,0x69,0x63,0x61,0x74,0x65,0x20,0x70,0x6F,0x6C,0x69,0x63,0x79,0x20,0x61,0x6E, | |
85 | 0x64,0x20,0x63,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20, | |
86 | 0x70,0x72,0x61,0x63,0x74,0x69,0x63,0x65,0x20,0x73,0x74,0x61,0x74,0x65,0x6D,0x65, | |
87 | 0x6E,0x74,0x73,0x2E,0x30,0x29,0x06,0x08,0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x01, | |
88 | 0x16,0x1D,0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x77,0x77,0x77,0x2E,0x61,0x70,0x70, | |
89 | 0x6C,0x65,0x2E,0x63,0x6F,0x6D,0x2F,0x61,0x70,0x70,0x6C,0x65,0x63,0x61,0x2F,0x30, | |
90 | 0x4D,0x06,0x03,0x55,0x1D,0x1F,0x04,0x46,0x30,0x44,0x30,0x42,0xA0,0x40,0xA0,0x3E, | |
91 | 0x86,0x3C,0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x64,0x65,0x76,0x65,0x6C,0x6F,0x70, | |
92 | 0x65,0x72,0x2E,0x61,0x70,0x70,0x6C,0x65,0x2E,0x63,0x6F,0x6D,0x2F,0x63,0x65,0x72, | |
93 | 0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x61,0x75,0x74,0x68,0x6F,0x72, | |
94 | 0x69,0x74,0x79,0x2F,0x77,0x77,0x64,0x72,0x63,0x61,0x2E,0x63,0x72,0x6C,0x30,0x13, | |
95 | 0x06,0x0A,0x2A,0x86,0x48,0x86,0xF7,0x63,0x64,0x06,0x01,0x02,0x01,0x01,0xFF,0x04, | |
96 | 0x02,0x05,0x00,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05, | |
97 | 0x05,0x00,0x03,0x82,0x01,0x01,0x00,0xA1,0x1D,0x8C,0xB9,0x21,0x59,0xC8,0xC0,0x08, | |
98 | 0x25,0x97,0x78,0x0D,0x04,0x14,0x85,0xA8,0xFC,0xC3,0xB1,0x7E,0x72,0x45,0x4C,0x96, | |
99 | 0x82,0x90,0x73,0x68,0x24,0x65,0x11,0x0F,0xB8,0x0D,0xB8,0xE4,0x46,0xD5,0x61,0x01, | |
100 | 0x64,0xB8,0x51,0xF8,0xAE,0xE7,0xCF,0xF2,0x7A,0x93,0x78,0xC7,0x9A,0xD3,0xF4,0xF8, | |
101 | 0x04,0xDB,0xF1,0x4A,0xDB,0x05,0x98,0x2F,0xF3,0x39,0x37,0xB0,0x2B,0x49,0x9A,0x82, | |
102 | 0x36,0x63,0xF4,0xB3,0x70,0x75,0x43,0xE3,0xF1,0xBD,0xB5,0x68,0x0C,0xB3,0x7E,0xA3, | |
103 | 0xB3,0x29,0x55,0xD2,0x34,0xD8,0x13,0xB5,0x87,0xD3,0xCE,0xEB,0x26,0xE5,0xCB,0x1F, | |
104 | 0xF1,0xE1,0x89,0x7A,0xB0,0x39,0xB2,0x2E,0x88,0x76,0xE9,0x68,0x69,0x4E,0x90,0xB4, | |
105 | 0x7C,0x42,0x7A,0x2C,0xDF,0x33,0xCF,0x2F,0xBD,0x38,0x3A,0xCC,0xB3,0xC7,0x47,0x9C, | |
106 | 0xC4,0x87,0xCE,0x1A,0x1E,0xF4,0xBB,0xC9,0x97,0x35,0x1C,0x65,0xC2,0xF0,0x2F,0x98, | |
107 | 0x50,0x96,0xA6,0x6C,0xF5,0x1B,0x45,0xE6,0x48,0xBE,0x17,0xFB,0xF6,0x61,0x3E,0x94, | |
108 | 0xF3,0x49,0x57,0xB5,0x54,0x5F,0xE1,0x92,0x30,0xF9,0xC6,0xB7,0x21,0xE0,0x30,0x64, | |
109 | 0x83,0xE7,0x49,0x97,0x8D,0xDC,0xE5,0x9D,0x89,0xA9,0x14,0x2E,0xEF,0x21,0x00,0xBA, | |
110 | 0x13,0x63,0xF4,0xCD,0x2F,0x61,0x17,0x58,0xAB,0xD3,0xA8,0x06,0x54,0x5F,0x60,0xB3, | |
111 | 0xBE,0xED,0xE8,0xF8,0xA4,0x29,0x2F,0xE1,0x4A,0x0E,0xB1,0xFE,0xCE,0x73,0x14,0x9A, | |
112 | 0x3A,0x95,0xFC,0xC8,0xB6,0x53,0xBC,0xBF,0x3A,0xB0,0xAE,0x80,0x76,0xF5,0x57,0x47, | |
113 | 0xD2,0x1C,0x08,0x19,0x22,0xF2,0x6D, | |
114 | }; | |
115 | ||
116 | /* subject:/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority */ | |
117 | /* issuer :/C=US/O=Apple Inc./OU=Apple Certification Authority/CN=Apple Root CA */ | |
118 | unsigned char wwdr_intermediate_cert[1063]={ | |
119 | 0x30,0x82,0x04,0x23,0x30,0x82,0x03,0x0B,0xA0,0x03,0x02,0x01,0x02,0x02,0x01,0x19, | |
120 | 0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05,0x05,0x00,0x30, | |
121 | 0x62,0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13, | |
122 | 0x30,0x11,0x06,0x03,0x55,0x04,0x0A,0x13,0x0A,0x41,0x70,0x70,0x6C,0x65,0x20,0x49, | |
123 | 0x6E,0x63,0x2E,0x31,0x26,0x30,0x24,0x06,0x03,0x55,0x04,0x0B,0x13,0x1D,0x41,0x70, | |
124 | 0x70,0x6C,0x65,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F, | |
125 | 0x6E,0x20,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79,0x31,0x16,0x30,0x14,0x06, | |
126 | 0x03,0x55,0x04,0x03,0x13,0x0D,0x41,0x70,0x70,0x6C,0x65,0x20,0x52,0x6F,0x6F,0x74, | |
127 | 0x20,0x43,0x41,0x30,0x1E,0x17,0x0D,0x30,0x38,0x30,0x32,0x31,0x34,0x31,0x38,0x35, | |
128 | 0x36,0x33,0x35,0x5A,0x17,0x0D,0x31,0x36,0x30,0x32,0x31,0x34,0x31,0x38,0x35,0x36, | |
129 | 0x33,0x35,0x5A,0x30,0x81,0x96,0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13, | |
130 | 0x02,0x55,0x53,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x0A,0x0C,0x0A,0x41,0x70, | |
131 | 0x70,0x6C,0x65,0x20,0x49,0x6E,0x63,0x2E,0x31,0x2C,0x30,0x2A,0x06,0x03,0x55,0x04, | |
132 | 0x0B,0x0C,0x23,0x41,0x70,0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C,0x64,0x77,0x69, | |
133 | 0x64,0x65,0x20,0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20,0x52,0x65,0x6C, | |
134 | 0x61,0x74,0x69,0x6F,0x6E,0x73,0x31,0x44,0x30,0x42,0x06,0x03,0x55,0x04,0x03,0x0C, | |
135 | 0x3B,0x41,0x70,0x70,0x6C,0x65,0x20,0x57,0x6F,0x72,0x6C,0x64,0x77,0x69,0x64,0x65, | |
136 | 0x20,0x44,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x20,0x52,0x65,0x6C,0x61,0x74, | |
137 | 0x69,0x6F,0x6E,0x73,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69, | |
138 | 0x6F,0x6E,0x20,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79,0x30,0x82,0x01,0x22, | |
139 | 0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03, | |
140 | 0x82,0x01,0x0F,0x00,0x30,0x82,0x01,0x0A,0x02,0x82,0x01,0x01,0x00,0xCA,0x38,0x54, | |
141 | 0xA6,0xCB,0x56,0xAA,0xC8,0x24,0x39,0x48,0xE9,0x8C,0xEE,0xEC,0x5F,0xB8,0x7F,0x26, | |
142 | 0x91,0xBC,0x34,0x53,0x7A,0xCE,0x7C,0x63,0x80,0x61,0x77,0x64,0x5E,0xA5,0x07,0x23, | |
143 | 0xB6,0x39,0xFE,0x50,0x2D,0x15,0x56,0x58,0x70,0x2D,0x7E,0xC4,0x6E,0xC1,0x4A,0x85, | |
144 | 0x3E,0x2F,0xF0,0xDE,0x84,0x1A,0xA1,0x57,0xC9,0xAF,0x7B,0x18,0xFF,0x6A,0xFA,0x15, | |
145 | 0x12,0x49,0x15,0x08,0x19,0xAC,0xAA,0xDB,0x2A,0x32,0xED,0x96,0x63,0x68,0x52,0x15, | |
146 | 0x3D,0x8C,0x8A,0xEC,0xBF,0x6B,0x18,0x95,0xE0,0x03,0xAC,0x01,0x7D,0x97,0x05,0x67, | |
147 | 0xCE,0x0E,0x85,0x95,0x37,0x6A,0xED,0x09,0xB6,0xAE,0x67,0xCD,0x51,0x64,0x9F,0xC6, | |
148 | 0x5C,0xD1,0xBC,0x57,0x6E,0x67,0x35,0x80,0x76,0x36,0xA4,0x87,0x81,0x6E,0x38,0x8F, | |
149 | 0xD8,0x2B,0x15,0x4E,0x7B,0x25,0xD8,0x5A,0xBF,0x4E,0x83,0xC1,0x8D,0xD2,0x93,0xD5, | |
150 | 0x1A,0x71,0xB5,0x60,0x9C,0x9D,0x33,0x4E,0x55,0xF9,0x12,0x58,0x0C,0x86,0xB8,0x16, | |
151 | 0x0D,0xC1,0xE5,0x77,0x45,0x8D,0x50,0x48,0xBA,0x2B,0x2D,0xE4,0x94,0x85,0xE1,0xE8, | |
152 | 0xC4,0x9D,0xC6,0x68,0xA5,0xB0,0xA3,0xFC,0x67,0x7E,0x70,0xBA,0x02,0x59,0x4B,0x77, | |
153 | 0x42,0x91,0x39,0xB9,0xF5,0xCD,0xE1,0x4C,0xEF,0xC0,0x3B,0x48,0x8C,0xA6,0xE5,0x21, | |
154 | 0x5D,0xFD,0x6A,0x6A,0xBB,0xA7,0x16,0x35,0x60,0xD2,0xE6,0xAD,0xF3,0x46,0x29,0xC9, | |
155 | 0xE8,0xC3,0x8B,0xE9,0x79,0xC0,0x6A,0x61,0x67,0x15,0xB2,0xF0,0xFD,0xE5,0x68,0xBC, | |
156 | 0x62,0x5F,0x6E,0xCF,0x99,0xDD,0xEF,0x1B,0x63,0xFE,0x92,0x65,0xAB,0x02,0x03,0x01, | |
157 | 0x00,0x01,0xA3,0x81,0xAE,0x30,0x81,0xAB,0x30,0x0E,0x06,0x03,0x55,0x1D,0x0F,0x01, | |
158 | 0x01,0xFF,0x04,0x04,0x03,0x02,0x01,0x86,0x30,0x0F,0x06,0x03,0x55,0x1D,0x13,0x01, | |
159 | 0x01,0xFF,0x04,0x05,0x30,0x03,0x01,0x01,0xFF,0x30,0x1D,0x06,0x03,0x55,0x1D,0x0E, | |
160 | 0x04,0x16,0x04,0x14,0x88,0x27,0x17,0x09,0xA9,0xB6,0x18,0x60,0x8B,0xEC,0xEB,0xBA, | |
161 | 0xF6,0x47,0x59,0xC5,0x52,0x54,0xA3,0xB7,0x30,0x1F,0x06,0x03,0x55,0x1D,0x23,0x04, | |
162 | 0x18,0x30,0x16,0x80,0x14,0x2B,0xD0,0x69,0x47,0x94,0x76,0x09,0xFE,0xF4,0x6B,0x8D, | |
163 | 0x2E,0x40,0xA6,0xF7,0x47,0x4D,0x7F,0x08,0x5E,0x30,0x36,0x06,0x03,0x55,0x1D,0x1F, | |
164 | 0x04,0x2F,0x30,0x2D,0x30,0x2B,0xA0,0x29,0xA0,0x27,0x86,0x25,0x68,0x74,0x74,0x70, | |
165 | 0x3A,0x2F,0x2F,0x77,0x77,0x77,0x2E,0x61,0x70,0x70,0x6C,0x65,0x2E,0x63,0x6F,0x6D, | |
166 | 0x2F,0x61,0x70,0x70,0x6C,0x65,0x63,0x61,0x2F,0x72,0x6F,0x6F,0x74,0x2E,0x63,0x72, | |
167 | 0x6C,0x30,0x10,0x06,0x0A,0x2A,0x86,0x48,0x86,0xF7,0x63,0x64,0x06,0x02,0x01,0x04, | |
168 | 0x02,0x05,0x00,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05, | |
169 | 0x05,0x00,0x03,0x82,0x01,0x01,0x00,0xDA,0x32,0x00,0x96,0xC5,0x54,0x94,0xD3,0x3B, | |
170 | 0x82,0x37,0x66,0x7D,0x2E,0x68,0xD5,0xC3,0xC6,0xB8,0xCB,0x26,0x8C,0x48,0x90,0xCF, | |
171 | 0x13,0x24,0x6A,0x46,0x8E,0x63,0xD4,0xF0,0xD0,0x13,0x06,0xDD,0xD8,0xC4,0xC1,0x37, | |
172 | 0x15,0xF2,0x33,0x13,0x39,0x26,0x2D,0xCE,0x2E,0x55,0x40,0xE3,0x0B,0x03,0xAF,0xFA, | |
173 | 0x12,0xC2,0xE7,0x0D,0x21,0xB8,0xD5,0x80,0xCF,0xAC,0x28,0x2F,0xCE,0x2D,0xB3,0x4E, | |
174 | 0xAF,0x86,0x19,0x04,0xC6,0xE9,0x50,0xDD,0x4C,0x29,0x47,0x10,0x23,0xFC,0x6C,0xBB, | |
175 | 0x1B,0x98,0x6B,0x48,0x89,0xE1,0x5B,0x9D,0xDE,0x46,0xDB,0x35,0x85,0x35,0xEF,0x3E, | |
176 | 0xD0,0xE2,0x58,0x4B,0x38,0xF4,0xED,0x75,0x5A,0x1F,0x5C,0x70,0x1D,0x56,0x39,0x12, | |
177 | 0xE5,0xE1,0x0D,0x11,0xE4,0x89,0x25,0x06,0xBD,0xD5,0xB4,0x15,0x8E,0x5E,0xD0,0x59, | |
178 | 0x97,0x90,0xE9,0x4B,0x81,0xE2,0xDF,0x18,0xAF,0x44,0x74,0x1E,0x19,0xA0,0x3A,0x47, | |
179 | 0xCC,0x91,0x1D,0x3A,0xEB,0x23,0x5A,0xFE,0xA5,0x2D,0x97,0xF7,0x7B,0xBB,0xD6,0x87, | |
180 | 0x46,0x42,0x85,0xEB,0x52,0x3D,0x26,0xB2,0x63,0xA8,0xB4,0xB1,0xCA,0x8F,0xF4,0xCC, | |
181 | 0xE2,0xB3,0xC8,0x47,0xE0,0xBF,0x9A,0x59,0x83,0xFA,0xDA,0x98,0x53,0x2A,0x82,0xF5, | |
182 | 0x7C,0x65,0x2E,0x95,0xD9,0x33,0x5D,0xF5,0xED,0x65,0xCC,0x31,0x37,0xC5,0x5A,0x04, | |
183 | 0xE8,0x6B,0xE1,0xE7,0x88,0x03,0x4A,0x75,0x9E,0x9B,0x28,0xCB,0x4A,0x40,0x88,0x65, | |
184 | 0x43,0x75,0xDD,0xCB,0x3A,0x25,0x23,0xC5,0x9E,0x57,0xF8,0x2E,0xCE,0xD2,0xA9,0x92, | |
185 | 0x5E,0x73,0x2E,0x2F,0x25,0x75,0x15, | |
186 | }; | |
187 | ||
188 | /* TODO: Use the shared version of this function in print_cert.c. */ | |
fa7225c8 A |
189 | #if !TARGET_OS_IPHONE |
190 | __unused | |
191 | #endif | |
427c49bc A |
192 | static void print_line(CFStringRef line) { |
193 | UInt8 buf[256]; | |
194 | CFRange range = { .location = 0 }; | |
195 | range.length = CFStringGetLength(line); | |
196 | while (range.length > 0) { | |
197 | CFIndex bytesUsed = 0; | |
198 | CFIndex converted = CFStringGetBytes(line, range, kCFStringEncodingUTF8, 0, false, buf, sizeof(buf), &bytesUsed); | |
199 | fwrite(buf, 1, bytesUsed, stdout); | |
200 | range.length -= converted; | |
201 | range.location += converted; | |
202 | } | |
203 | fputc('\n', stdout); | |
204 | } | |
205 | ||
fa7225c8 A |
206 | #if !TARGET_OS_IPHONE |
207 | __unused | |
208 | #endif | |
427c49bc A |
209 | static void printPlist(CFArrayRef plist, CFIndex indent, CFIndex maxWidth) { |
210 | CFIndex count = CFArrayGetCount(plist); | |
211 | CFIndex ix; | |
212 | for (ix = 0; ix < count ; ++ix) { | |
213 | CFDictionaryRef prop = (CFDictionaryRef)CFArrayGetValueAtIndex(plist, | |
214 | ix); | |
215 | CFStringRef pType = (CFStringRef)CFDictionaryGetValue(prop, | |
216 | kSecPropertyKeyType); | |
217 | CFStringRef label = (CFStringRef)CFDictionaryGetValue(prop, | |
218 | kSecPropertyKeyLabel); | |
219 | CFStringRef llabel = (CFStringRef)CFDictionaryGetValue(prop, | |
220 | kSecPropertyKeyLocalizedLabel); | |
221 | CFTypeRef value = (CFTypeRef)CFDictionaryGetValue(prop, | |
222 | kSecPropertyKeyValue); | |
223 | ||
224 | bool isSection = CFEqual(pType, kSecPropertyTypeSection); | |
225 | CFMutableStringRef line = CFStringCreateMutable(NULL, 0); | |
226 | CFIndex jx = 0; | |
227 | for (jx = 0; jx < indent; ++jx) { | |
228 | CFStringAppend(line, CFSTR(" ")); | |
229 | } | |
230 | if (llabel) { | |
231 | CFStringAppend(line, llabel); | |
232 | if (!isSection) { | |
233 | for (jx = CFStringGetLength(llabel) + indent * 4; | |
234 | jx < maxWidth; ++jx) { | |
235 | CFStringAppend(line, CFSTR(" ")); | |
236 | } | |
237 | CFStringAppend(line, CFSTR(" : ")); | |
238 | } | |
239 | } | |
240 | if (CFEqual(pType, kSecPropertyTypeWarning)) { | |
241 | CFStringAppend(line, CFSTR("*WARNING* ")); | |
242 | CFStringAppend(line, (CFStringRef)value); | |
243 | } else if (CFEqual(pType, kSecPropertyTypeError)) { | |
244 | CFStringAppend(line, CFSTR("*ERROR* ")); | |
245 | CFStringAppend(line, (CFStringRef)value); | |
246 | } else if (CFEqual(pType, kSecPropertyTypeSuccess)) { | |
247 | CFStringAppend(line, CFSTR("*OK* ")); | |
248 | CFStringAppend(line, (CFStringRef)value); | |
249 | } else if (CFEqual(pType, kSecPropertyTypeTitle)) { | |
250 | CFStringAppend(line, CFSTR("*")); | |
251 | CFStringAppend(line, (CFStringRef)value); | |
252 | CFStringAppend(line, CFSTR("*")); | |
253 | } else if (CFEqual(pType, kSecPropertyTypeSection)) { | |
254 | } else if (CFEqual(pType, kSecPropertyTypeData)) { | |
255 | CFDataRef data = (CFDataRef)value; | |
256 | CFIndex length = CFDataGetLength(data); | |
257 | if (length > 20) | |
258 | CFStringAppendFormat(line, NULL, CFSTR("[%" PRIdCFIndex " bytes] "), length); | |
259 | const UInt8 *bytes = CFDataGetBytePtr(data); | |
260 | for (jx = 0; jx < length; ++jx) { | |
261 | if (jx == 0) | |
262 | CFStringAppendFormat(line, NULL, CFSTR("%02X"), bytes[jx]); | |
263 | else if (jx < 15 || length <= 20) | |
264 | CFStringAppendFormat(line, NULL, CFSTR(" %02X"), | |
265 | bytes[jx]); | |
266 | else { | |
267 | CFStringAppend(line, CFSTR(" ...")); | |
268 | break; | |
269 | } | |
270 | } | |
271 | } else if (CFEqual(pType, kSecPropertyTypeString)) { | |
272 | CFStringAppend(line, (CFStringRef)value); | |
273 | } else if (CFEqual(pType, kSecPropertyTypeDate)) { | |
274 | CFLocaleRef lc = CFLocaleCopyCurrent(); | |
275 | CFDateFormatterRef df = CFDateFormatterCreate(NULL, lc, | |
276 | kCFDateFormatterFullStyle, kCFDateFormatterFullStyle); | |
277 | //CFTimeZoneRef tz = CFTimeZoneCreateWithName(NULL, CFSTR("GMT"), false); | |
278 | //CFDateFormatterSetProperty(df, kCFDateFormatterTimeZone, tz); | |
279 | //CFRelease(tz); | |
280 | CFDateRef date = (CFDateRef)value; | |
281 | CFStringRef ds = CFDateFormatterCreateStringWithDate(NULL, df, | |
282 | date); | |
283 | CFStringAppend(line, ds); | |
284 | CFRelease(ds); | |
285 | CFRelease(df); | |
286 | CFRelease(lc); | |
287 | } else if (CFEqual(pType, kSecPropertyTypeURL)) { | |
288 | CFURLRef url = (CFURLRef)value; | |
289 | CFStringAppend(line, CFSTR("<")); | |
290 | CFStringAppend(line, CFURLGetString(url)); | |
291 | CFStringAppend(line, CFSTR(">")); | |
292 | } else { | |
293 | CFStringAppendFormat(line, NULL, CFSTR("*unknown type %@* = %@"), | |
294 | pType, value); | |
295 | } | |
296 | ||
297 | if (!isSection || label) | |
298 | print_line(line); | |
299 | CFRelease(line); | |
300 | if (isSection) { | |
301 | printPlist((CFArrayRef)value, indent + 1, maxWidth); | |
302 | } | |
303 | } | |
304 | } | |
305 | ||
fa7225c8 A |
306 | #if !TARGET_OS_IPHONE |
307 | __unused | |
308 | #endif | |
427c49bc A |
309 | static CFIndex maxLabelWidth(CFArrayRef plist, CFIndex indent) { |
310 | CFIndex count = CFArrayGetCount(plist); | |
311 | CFIndex ix; | |
312 | CFIndex maxWidth = 0; | |
313 | for (ix = 0; ix < count ; ++ix) { | |
314 | CFDictionaryRef prop = (CFDictionaryRef)CFArrayGetValueAtIndex(plist, | |
315 | ix); | |
316 | CFStringRef pType = (CFStringRef)CFDictionaryGetValue(prop, | |
317 | kSecPropertyKeyType); | |
318 | CFStringRef llabel = (CFStringRef)CFDictionaryGetValue(prop, | |
319 | kSecPropertyKeyLocalizedLabel); | |
320 | CFTypeRef value = (CFTypeRef)CFDictionaryGetValue(prop, | |
321 | kSecPropertyKeyValue); | |
322 | ||
323 | if (CFEqual(pType, kSecPropertyTypeSection)) { | |
324 | CFIndex width = maxLabelWidth((CFArrayRef)value, indent + 1); | |
325 | if (width > maxWidth) | |
326 | maxWidth = width; | |
327 | } else if (llabel) { | |
328 | CFIndex width = indent * 4 + CFStringGetLength(llabel); | |
329 | if (width > maxWidth) | |
330 | maxWidth = width; | |
331 | } | |
332 | } | |
333 | ||
334 | return maxWidth; | |
335 | } | |
336 | ||
fa7225c8 A |
337 | #if !TARGET_OS_IPHONE |
338 | __unused | |
339 | #endif | |
427c49bc A |
340 | static void print_plist(CFArrayRef plist) { |
341 | if (plist) | |
342 | printPlist(plist, 0, maxLabelWidth(plist, 0)); | |
343 | else | |
344 | printf("NULL plist\n"); | |
345 | } | |
346 | ||
fa7225c8 A |
347 | #if !TARGET_OS_IPHONE |
348 | __unused | |
349 | #endif | |
427c49bc A |
350 | static void print_cert(SecCertificateRef cert, bool verbose) { |
351 | CFArrayRef plist; | |
352 | if (verbose) | |
353 | plist = SecCertificateCopyProperties(cert); | |
354 | else { | |
355 | CFAbsoluteTime now = CFAbsoluteTimeGetCurrent(); | |
356 | plist = SecCertificateCopySummaryProperties(cert, now); | |
357 | } | |
358 | ||
359 | CFStringRef subject = SecCertificateCopySubjectString(cert); | |
360 | if (subject) { | |
361 | print_line(subject); | |
362 | CFRelease(subject); | |
363 | } else { | |
364 | print_line(CFSTR("no subject")); | |
365 | } | |
366 | ||
367 | print_plist(plist); | |
d64be36e | 368 | CFReleaseNull(plist); |
427c49bc A |
369 | } |
370 | ||
371 | static void tests(void) | |
372 | { | |
373 | SecTrustRef trust; | |
374 | SecCertificateRef leaf, wwdr_intermediate; | |
375 | SecPolicyRef policy; | |
376 | ||
377 | isnt(wwdr_intermediate = SecCertificateCreateWithBytes(kCFAllocatorDefault, | |
378 | wwdr_intermediate_cert, sizeof(wwdr_intermediate_cert)), NULL, "create WWDR intermediate"); | |
379 | isnt(leaf = SecCertificateCreateWithBytes(kCFAllocatorDefault, | |
380 | codesigning_certificate, sizeof(codesigning_certificate)), NULL, "create leaf"); | |
381 | ||
382 | const void *vcerts[] = { leaf, wwdr_intermediate }; | |
383 | CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, vcerts, 2, NULL); | |
384 | ||
385 | isnt(policy = SecPolicyCreateiPhoneProfileApplicationSigning(), NULL, | |
386 | "create iPhoneProfileApplicationSigning policy instance"); | |
387 | ok_status(SecTrustCreateWithCertificates(certs, policy, &trust), "create trust for leaf"); | |
388 | CFDateRef verifyDate = CFDateCreate(kCFAllocatorDefault, 228244066); | |
389 | ok_status(SecTrustSetVerifyDate(trust, verifyDate), "set verify date"); | |
390 | CFReleaseNull(verifyDate); | |
391 | SecTrustResultType trustResult; | |
392 | CFArrayRef properties = NULL; | |
393 | properties = SecTrustCopyProperties(trust); | |
7fb2cbd2 | 394 | #if TARGET_OS_IPHONE |
fa7225c8 | 395 | // Note: OS X will trigger the evaluation in order to return the properties. |
427c49bc | 396 | is(properties, NULL, "no properties returned before eval"); |
fa7225c8 | 397 | #endif |
427c49bc A |
398 | CFReleaseNull(properties); |
399 | ok_status(SecTrustEvaluate(trust, &trustResult), "evaluate trust"); | |
400 | is_status(trustResult, kSecTrustResultUnspecified, "trust is kSecTrustResultUnspecified"); | |
401 | properties = SecTrustCopyProperties(trust); | |
402 | ||
fa7225c8 | 403 | #if TARGET_OS_IPHONE |
427c49bc A |
404 | if (properties) { |
405 | print_plist(properties); | |
406 | print_cert(leaf, true); | |
407 | print_cert(wwdr_intermediate, false); | |
408 | } | |
fa7225c8 | 409 | #endif |
427c49bc | 410 | CFReleaseNull(properties); |
7fb2cbd2 A |
411 | // verify wrapper functions are available |
412 | properties = SecCertificateCopyProperties(leaf); | |
413 | isnt(properties, NULL, "leaf properties returned"); | |
414 | CFReleaseNull(properties); | |
415 | properties = SecCertificateCopyLocalizedProperties(leaf, true); | |
416 | isnt(properties, NULL, "localized leaf properties returned"); | |
417 | CFReleaseNull(properties); | |
418 | ||
427c49bc A |
419 | CFReleaseNull(trust); |
420 | CFReleaseNull(wwdr_intermediate); | |
421 | CFReleaseNull(leaf); | |
422 | CFReleaseNull(certs); | |
423 | CFReleaseNull(policy); | |
424 | CFReleaseNull(trust); | |
425 | } | |
426 | ||
fa7225c8 | 427 | int si_26_sectrust_copyproperties(int argc, char *const *argv) |
427c49bc | 428 | { |
fa7225c8 | 429 | #if TARGET_OS_IPHONE |
7fb2cbd2 | 430 | plan_tests(10); |
fa7225c8 A |
431 | #else |
432 | // <rdar://problem/26358545> | |
7fb2cbd2 | 433 | plan_tests(9); |
fa7225c8 | 434 | #endif |
427c49bc A |
435 | |
436 | ||
437 | tests(); | |
438 | ||
439 | return 0; | |
440 | } |