]> git.saurik.com Git - apple/security.git/blob - OSX/sec/securityd/SecItemSchema.c
Security-59306.11.20.tar.gz
[apple/security.git] / OSX / sec / securityd / SecItemSchema.c
1 /*
2 * Copyright (c) 2006-2014 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 /*
25 * SecItemSchema.c - CoreFoundation-based constants and functions for
26 access to Security items (certificates, keys, identities, and
27 passwords.)
28 */
29
30 #include "SecItemSchema.h"
31 #include <securityd/SecDbKeychainItem.h>
32 #include <keychain/ckks/CKKS.h>
33 #include "CheckV12DevEnabled.h"
34
35 // MARK -
36 // MARK Keychain version 6 schema
37
38 #define __FLAGS(ARG, ...) SECDBFLAGS(__VA_ARGS__)
39 #define SECDBFLAGS(ARG, ...) __FLAGS_##ARG | __FLAGS(__VA_ARGS__)
40
41 #define SecDbFlags(P,L,I,S,A,D,R,C,H,B,Z,E,N,U,V,Y) (__FLAGS_##P|__FLAGS_##L|__FLAGS_##I|__FLAGS_##S|__FLAGS_##A|__FLAGS_##D|__FLAGS_##R|__FLAGS_##C|__FLAGS_##H|__FLAGS_##B|__FLAGS_##Z|__FLAGS_##E|__FLAGS_##N|__FLAGS_##U|__FLAGS_##V|__FLAGS_##Y)
42
43 #define __FLAGS_ 0
44 #define __FLAGS_P kSecDbPrimaryKeyFlag
45 #define __FLAGS_L kSecDbInFlag
46 #define __FLAGS_I kSecDbIndexFlag
47 #define __FLAGS_S kSecDbSHA1ValueInFlag
48 #define __FLAGS_A kSecDbReturnAttrFlag
49 #define __FLAGS_D kSecDbReturnDataFlag
50 #define __FLAGS_R kSecDbReturnRefFlag
51 #define __FLAGS_C kSecDbInCryptoDataFlag
52 #define __FLAGS_H kSecDbInHashFlag
53 #define __FLAGS_B kSecDbInBackupFlag
54 #define __FLAGS_Z kSecDbDefault0Flag
55 #define __FLAGS_E kSecDbDefaultEmptyFlag
56 #define __FLAGS_N kSecDbNotNullFlag
57 #define __FLAGS_U kSecDbInAuthenticatedDataFlag
58 #define __FLAGS_V0 kSecDbSyncPrimaryKeyV0
59 #define __FLAGS_V2 (kSecDbSyncPrimaryKeyV0 | kSecDbSyncPrimaryKeyV2)
60 #define __FLAGS_Y kSecDbSyncFlag
61
62 // ,----------------- P : Part of primary key
63 // / ,---------------- L : Stored in local database
64 // / / ,--------------- I : Attribute wants an index in the database
65 // / / / ,-------------- S : SHA1 hashed attribute value in database (implies L)
66 // / / / / ,------------- A : Returned to client as attribute in queries
67 // / / / / / ,------------ D : Returned to client as data in queries
68 // / / / / / / ,----------- R : Returned to client as ref/persistent ref in queries
69 // / / / / / / / ,---------- C : Part of encrypted blob
70 // / / / / / / / / ,--------- H : Attribute is part of item SHA1 hash (Implied by C)
71 // / / / / / / / / / ,-------- B : Attribute is part of iTunes/iCloud backup bag
72 // / / / / / / / / / / ,------- Z : Attribute has a default value of 0
73 // / / / / / / / / / / / ,------ E : Attribute has a default value of "" or empty data
74 // / / / / / / / / / / / / ,----- N : Attribute must have a value
75 // / / / / / / / / / / / / / ,---- U : Attribute is stored in authenticated, but not necessarily encrypted data
76 // / / / / / / / / / / / / / / ,--- V0: Sync primary key version
77 // / / / / / / / / / / / / / / / ,- Y : Attribute should be synced
78 // | | | | | | | | | | | | | | | |
79 // common to all | | | | | | | | | | | | | | | |
80 SECDB_ATTR(v6rowid, "rowid", RowId, SecDbFlags( ,L, , , , ,R, , ,B, , , , , , ), NULL, NULL);
81 SECDB_ATTR(v6cdat, "cdat", CreationDate, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), SecDbKeychainItemCopyCurrentDate, NULL);
82 SECDB_ATTR(v6mdat, "mdat",ModificationDate,SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), SecDbKeychainItemCopyCurrentDate, NULL);
83 SECDB_ATTR(v6labl, "labl", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
84 SECDB_ATTR(v6data, "data", EncryptedData, SecDbFlags( ,L, , , , , , , ,B, , , , , , ), SecDbKeychainItemCopyEncryptedData, NULL);
85 SECDB_ATTR(v6agrp, "agrp", String, SecDbFlags(P,L,I, ,A, , , ,H, , , ,N,U,V0,Y), NULL, NULL);
86 SECDB_ATTR(v6pdmn, "pdmn", Access, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
87 SECDB_ATTR(v6sync, "sync", Sync, SecDbFlags(P,L,I, ,A, , , ,H, ,Z, ,N,U,V0, ), NULL, NULL);
88 SECDB_ATTR(v6tomb, "tomb", Tomb, SecDbFlags( ,L, , , , , , ,H, ,Z, ,N,U, ,Y), NULL, NULL);
89 SECDB_ATTR(v6sha1, "sha1", SHA1, SecDbFlags( ,L,I, ,A, ,R, , , , , , , , ,Y), SecDbKeychainItemCopySHA1, NULL);
90 SECDB_ATTR(v6accc, "accc", AccessControl, SecDbFlags( , , , ,A, , , , , , , , , , , ), NULL, NULL);
91 SECDB_ATTR(v6v_Data, "v_Data", Data, SecDbFlags( , , , , ,D, ,C,H, , , , , , ,Y), NULL, NULL);
92 SECDB_ATTR(v6v_pk, "v_pk", PrimaryKey, SecDbFlags( , , , , , , , , , , , , , , , ), SecDbKeychainItemCopyPrimaryKey, NULL);
93 SECDB_ATTR(v7vwht, "vwht", String, SecDbFlags(P,L,I, ,A, , , ,H, , , , ,U,V2,Y), NULL, NULL);
94 SECDB_ATTR(v7tkid, "tkid", String, SecDbFlags(P,L,I, ,A, , , ,H, , , , ,U,V2,Y), NULL, NULL);
95 SECDB_ATTR(v7utomb, "u_Tomb", UTomb, SecDbFlags( , , , , , , , , , , , , , , , ), NULL, NULL);
96 SECDB_ATTR(v8musr, "musr", UUID, SecDbFlags(P,L,I, , , , , , , , , ,N,U, ,Y), NULL, NULL);
97 // genp and inet and keys | | | | | | | | | | | | | | | |
98 SECDB_ATTR(v6crtr, "crtr", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
99 SECDB_ATTR(v6alis, "alis", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
100 // genp and inet | | | | | | | | | | | | | | | |
101 SECDB_ATTR(v6desc, "desc", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
102 SECDB_ATTR(v6icmt, "icmt", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
103 SECDB_ATTR(v6type, "type", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
104 SECDB_ATTR(v6invi, "invi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
105 SECDB_ATTR(v6nega, "nega", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
106 SECDB_ATTR(v6cusi, "cusi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
107 SECDB_ATTR(v6prot, "prot", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
108 SECDB_ATTR(v6scrp, "scrp", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
109 SECDB_ATTR(v6acct, "acct", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
110 // genp only | | | | | | | | | | | | | | | |
111 SECDB_ATTR(v6svce, "svce", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
112 SECDB_ATTR(v6gena, "gena", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
113 // inet only | | | | | | | | | | | | | | | |
114 SECDB_ATTR(v6sdmn, "sdmn", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
115 SECDB_ATTR(v6srvr, "srvr", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
116 SECDB_ATTR(v6ptcl, "ptcl", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
117 SECDB_ATTR(v6atyp, "atyp", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
118 SECDB_ATTR(v6port, "port", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
119 SECDB_ATTR(v6path, "path", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
120 // cert only | | | | | | | | | | | | | | | |
121 SECDB_ATTR(v6ctyp, "ctyp", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
122 SECDB_ATTR(v6cenc, "cenc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
123 SECDB_ATTR(v6subj, "subj", Data, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
124 SECDB_ATTR(v6issr, "issr", Data, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
125 SECDB_ATTR(v6slnr, "slnr", Data, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
126 SECDB_ATTR(v6skid, "skid", Data, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
127 SECDB_ATTR(v6pkhh, "pkhh", Data, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
128 // cert attributes that share names with common ones but have different flags
129 SECDB_ATTR(v6certalis, "alis", Blob, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
130 // keys only | | | | | | | | | | | | | | | |
131 SECDB_ATTR(v6kcls, "kcls", Number, SecDbFlags(P,L,I,S,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
132 SECDB_ATTR(v6perm, "perm", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
133 SECDB_ATTR(v6priv, "priv", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
134 SECDB_ATTR(v6modi, "modi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
135 SECDB_ATTR(v6klbl, "klbl", Data, SecDbFlags(P,L,I, ,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
136 SECDB_ATTR(v6atag, "atag", Blob, SecDbFlags(P,L,I,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
137 SECDB_ATTR(v6bsiz, "bsiz", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
138 SECDB_ATTR(v6esiz, "esiz", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
139 SECDB_ATTR(v6sdat, "sdat", Date, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
140 SECDB_ATTR(v6edat, "edat", Date, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
141 SECDB_ATTR(v6sens, "sens", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
142 SECDB_ATTR(v6asen, "asen", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
143 SECDB_ATTR(v6extr, "extr", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
144 SECDB_ATTR(v6next, "next", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
145 SECDB_ATTR(v6encr, "encr", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
146 SECDB_ATTR(v6decr, "decr", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
147 SECDB_ATTR(v6drve, "drve", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
148 SECDB_ATTR(v6sign, "sign", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
149 SECDB_ATTR(v6vrfy, "vrfy", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
150 SECDB_ATTR(v6snrc, "snrc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
151 SECDB_ATTR(v6vyrc, "vyrc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
152 SECDB_ATTR(v6wrap, "wrap", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
153 SECDB_ATTR(v6unwp, "unwp", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
154 // keys attributes that share names with common ones but have different flags
155 SECDB_ATTR(v6keytype, "type", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
156 SECDB_ATTR(v6keycrtr, "crtr", Number, SecDbFlags(P,L,I, ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
157 // | | | | | | | | | | | | | | |
158 SECDB_ATTR(v6version, "version", Number, SecDbFlags(P,L,I, , , , , , , , , ,N, , ,Y), NULL, NULL);
159 SECDB_ATTR(v91minor, "minor", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , ,Y), NULL, NULL);
160
161 SECDB_ATTR(v10_1pcsservice, "pcss", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
162 SECDB_ATTR(v10_1pcspublickey, "pcsk", Blob, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
163 SECDB_ATTR(v10_1pcspublicidentity,"pcsi", Blob, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
164
165 SECDB_ATTR(v10itemuuid, "UUID", String, SecDbFlags( ,L,I, , , , , , , , , , ,U, , ), NULL, NULL);
166 SECDB_ATTR(v10syncuuid, "UUID", String, SecDbFlags(P,L,I, , , , , , , , , , ,U, , ), NULL, NULL);
167 SECDB_ATTR(v10parentKeyUUID, "parentKeyUUID", String, SecDbFlags( ,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
168 SECDB_ATTR(v10currentKeyUUID,"currentKeyUUID",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
169 SECDB_ATTR(v10wrappedkey, "wrappedkey", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
170 SECDB_ATTR(v10encrypteditem, "encitem", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
171 SECDB_ATTR(v10gencount, "gencount", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
172 SECDB_ATTR(v10action, "action", String, SecDbFlags( ,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
173 SECDB_ATTR(v10state, "state", String, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
174 SECDB_ATTR(v10waituntiltime, "waituntil", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
175 SECDB_ATTR(v10encodedCKRecord, "ckrecord", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
176 SECDB_ATTR(v10_1wasCurrent, "wascurrent", Number, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
177 SECDB_ATTR(v10accessgroup, "accessgroup", String, SecDbFlags( ,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
178 SECDB_ATTR(v10keyclass, "keyclass", String, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
179 SECDB_ATTR(v10currentkey, "currentkey", Number, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
180 SECDB_ATTR(v10ckzone, "ckzone", String, SecDbFlags(P,L,I, , , , , , , , , ,N,U, , ), NULL, NULL);
181 SECDB_ATTR(v10ckzonecreated, "ckzonecreated", Number, SecDbFlags( ,L, , , , , , , , ,Z, , ,N, , ), NULL, NULL);
182 SECDB_ATTR(v10ckzonesubscribed,"ckzonesubscribed", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
183 SECDB_ATTR(v10ratelimiter, "ratelimiter", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
184 SECDB_ATTR(v10changetoken, "changetoken", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
185 SECDB_ATTR(v10lastfetchtime, "lastfetch", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
186 SECDB_ATTR(v10itempersistentref,"persistref", UUID, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
187 SECDB_ATTR(v10sysbound, "sysb", Number, SecDbFlags( ,L, , ,A, , ,C,H, ,Z, , , , , ), NULL, NULL);
188 SECDB_ATTR(v10encryptionver, "encver", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N,U, , ), NULL, NULL);
189
190 SECDB_ATTR(v10primaryKey, "primaryKey", String, SecDbFlags(P,L,I, ,A, , , , , , , ,N,U, , ), NULL, NULL);
191 SECDB_ATTR(v10publickeyHash, "publickeyHash", Blob, SecDbFlags(P,L,I, , , , , , , , , ,N,U, , ), NULL, NULL);
192 SECDB_ATTR(v10publickey, "publickey", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
193 SECDB_ATTR(v10backupData, "backupData", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
194
195 SECDB_ATTR(v10_1digest, "digest", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
196 SECDB_ATTR(v10_1signatures, "signatures", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
197 SECDB_ATTR(v10_1signerID, "signerID", String, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
198 SECDB_ATTR(v10_1leafIDs, "leafIDs", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
199 SECDB_ATTR(v10_1peerManIDs, "peerManifests", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
200 SECDB_ATTR(v10_1entryDigests,"entryDigests", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
201 SECDB_ATTR(v10_2currentItems,"currentItems", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
202 SECDB_ATTR(v10_2futureData, "futureData", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
203 SECDB_ATTR(v10_2schema, "schema", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
204 SECDB_ATTR(v10_1encRecord, "ckrecord", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
205
206 SECDB_ATTR(v10_1keyArchiveHash, "key_archive_hash", String, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
207 SECDB_ATTR(v10_1keyArchive, "key_archive", String, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
208 SECDB_ATTR(v10_1archivedKey, "archived_key", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
209 SECDB_ATTR(v10_1keyArchiveName, "keyarchive_name", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
210 SECDB_ATTR(v10_1optionalEncodedCKRecord, "ckrecord", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
211 SECDB_ATTR(v10_1archiveEscrowID,"archive_escrowid", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
212
213 SECDB_ATTR(v10_1itempersistentref,"persistref", UUID, SecDbFlags( ,L,I, , , , , , , , , ,N,U, , ), NULL, NULL);
214
215 SECDB_ATTR(v10_1currentItemUUID,"currentItemUUID",String, SecDbFlags(P,L,I, , , , , , , , , , , , , ), NULL, NULL);
216 SECDB_ATTR(v10_4currentItemUUID,"currentItemUUID",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
217 SECDB_ATTR(v10_1currentPtrIdentifier,"identifier",String, SecDbFlags(P,L,I, , , , , , , , , , , , , ), NULL, NULL);
218
219 SECDB_ATTR(v10_2device, "device", String, SecDbFlags(P,L,I, , , , , , , , , , , , , ), NULL, NULL);
220 SECDB_ATTR(v10_2peerid, "peerid", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
221 SECDB_ATTR(v10_2circleStatus,"circlestatus", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
222 SECDB_ATTR(v10_2keyState, "keystate", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
223 SECDB_ATTR(v10_2currentTLK, "currentTLK", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
224 SECDB_ATTR(v10_2currentClassA,"currentClassA",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
225 SECDB_ATTR(v10_2currentClassC,"currentClassC",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
226
227 SECDB_ATTR(v10_4lastFixup, "lastfixup", Number, SecDbFlags( ,L, , , , , , , , ,Z, , ,N, , ), NULL, NULL);
228
229 SECDB_ATTR(v10_5senderPeerID,"senderpeerid", String, SecDbFlags(P,L,I, , , , , , , , , , , , , ), NULL, NULL);
230 SECDB_ATTR(v10_5recvPeerID, "recvpeerid", String, SecDbFlags(P,L,I, , , , , , , , , , , , , ), NULL, NULL);
231 SECDB_ATTR(v10_5recvPubKey, "recvpubenckey", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
232 SECDB_ATTR(v10_5curve, "curve", Number, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
233 SECDB_ATTR(v10_5poisoned, "poisoned", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
234 SECDB_ATTR(v10_5epoch, "epoch", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
235 SECDB_ATTR(v10_5signature, "signature", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
236 SECDB_ATTR(v10_5version, "version", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N,U, , ), NULL, NULL);
237
238 SECDB_ATTR(v11_1osversion, "osversion", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
239 SECDB_ATTR(v11_1lastunlock, "lastunlock", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
240
241 SECDB_ATTR(v11_2actualKeyclass, "actualKeyclass", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
242
243 SECDB_ATTR(v11_5octagonpeerid, "octagonpeerid", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
244 SECDB_ATTR(v11_5octagonStatus, "octagonstatus", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
245
246 SECDB_ATTR(v12_backupUUIDPrimary, "backupUUID", UUID, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
247 SECDB_ATTR(v12_backupUUID, "backupUUID", UUID, SecDbFlags( ,L,I, , , , , , , , ,E, , , , ), NULL, NULL);
248 SECDB_ATTR(v12_backupBag, "backupbag", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
249 SECDB_ATTR(v12_defaultValue, "defaultvalue", Number, SecDbFlags( ,L,I, , , , , , , ,Z, , , , , ), NULL, NULL);
250 SECDB_ATTR(v12_keyClassSigningKey, "signingkey", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
251 SECDB_ATTR(v12_recoveryType, "recoverytype", String, SecDbFlags(P,L,I, , , , , , , , , ,N, , , ), NULL, NULL);
252 SECDB_ATTR(v12_recoverySet, "recoveryset", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
253 SECDB_ATTR(v12_metadatakeydata, "metadatakeydata", Blob, SecDbFlags( ,L, , , , , , , , , ,E, , , , ), NULL, NULL);
254
255 const SecDbClass v12_backupbags_class = {
256 .name = CFSTR("backupbags"),
257 .itemclass = false,
258 .attrs = {
259 &v12_backupUUIDPrimary, // primary
260 &v12_backupBag,
261 &v12_defaultValue,
262 0
263 }
264 };
265
266 const SecDbClass v12_backupkeyclasssigningkeys_class = {
267 .name = CFSTR("backupkeyclasssigningkeys"),
268 .itemclass = false,
269 .attrs = {
270 &v10keyclass, // primary
271 &v12_backupUUIDPrimary, // primary
272 &v12_keyClassSigningKey,
273 0
274 }
275 };
276
277 const SecDbClass v12_backuprecoverysets_class = {
278 .name = CFSTR("backuprecoverysets"),
279 .itemclass = false,
280 .attrs = {
281 &v12_backupUUIDPrimary, // primary
282 &v12_recoveryType, // primary
283 &v12_recoverySet,
284 0
285 }
286 };
287
288 const SecDbClass v12_metadatakeys_class = {
289 .name = CFSTR("metadatakeys"),
290 .itemclass = false,
291 .attrs = {
292 &v10keyclass,
293 &v11_2actualKeyclass,
294 &v6data,
295 &v12_metadatakeydata,
296 0
297 }
298 };
299
300 const SecDbClass v12_genp_class = {
301 .name = CFSTR("genp"),
302 .itemclass = true,
303 .attrs = {
304 &v6rowid,
305 &v6cdat,
306 &v6mdat,
307 &v6desc,
308 &v6icmt,
309 &v6crtr,
310 &v6type,
311 &v6scrp,
312 &v6labl,
313 &v6alis,
314 &v6invi,
315 &v6nega,
316 &v6cusi,
317 &v6prot,
318 &v6acct,
319 &v6svce,
320 &v6gena,
321 &v6data,
322 &v6agrp,
323 &v6pdmn,
324 &v6sync,
325 &v6tomb,
326 &v6sha1,
327 &v7vwht,
328 &v7tkid,
329 &v6v_Data,
330 &v6v_pk,
331 &v6accc,
332 &v7utomb,
333 &v8musr,
334 &v10itemuuid,
335 &v10sysbound,
336 &v10_1pcsservice,
337 &v10_1pcspublickey,
338 &v10_1pcspublicidentity,
339 &v10_1itempersistentref,
340 &v12_backupUUID,
341 0
342 },
343 };
344
345 const SecDbClass v12_inet_class = {
346 .name = CFSTR("inet"),
347 .itemclass = true,
348 .attrs = {
349 &v6rowid,
350 &v6cdat,
351 &v6mdat,
352 &v6desc,
353 &v6icmt,
354 &v6crtr,
355 &v6type,
356 &v6scrp,
357 &v6labl,
358 &v6alis,
359 &v6invi,
360 &v6nega,
361 &v6cusi,
362 &v6prot,
363 &v6acct,
364 &v6sdmn,
365 &v6srvr,
366 &v6ptcl,
367 &v6atyp,
368 &v6port,
369 &v6path,
370 &v6data,
371 &v6agrp,
372 &v6pdmn,
373 &v6sync,
374 &v6tomb,
375 &v6sha1,
376 &v7vwht,
377 &v7tkid,
378 &v6v_Data,
379 &v6v_pk,
380 &v6accc,
381 &v7utomb,
382 &v8musr,
383 &v10itemuuid,
384 &v10sysbound,
385 &v10_1pcsservice,
386 &v10_1pcspublickey,
387 &v10_1pcspublicidentity,
388 &v10_1itempersistentref,
389 &v12_backupUUID,
390 0
391 },
392 };
393
394 const SecDbClass v12_cert_class = {
395 .name = CFSTR("cert"),
396 .itemclass = true,
397 .attrs = {
398 &v6rowid,
399 &v6cdat,
400 &v6mdat,
401 &v6ctyp,
402 &v6cenc,
403 &v6labl,
404 &v6certalis,
405 &v6subj,
406 &v6issr,
407 &v6slnr,
408 &v6skid,
409 &v6pkhh,
410 &v6data,
411 &v6agrp,
412 &v6pdmn,
413 &v6sync,
414 &v6tomb,
415 &v6sha1,
416 &v7vwht,
417 &v7tkid,
418 &v6v_Data,
419 &v6v_pk,
420 &v6accc,
421 &v7utomb,
422 &v8musr,
423 &v10itemuuid,
424 &v10sysbound,
425 &v10_1pcsservice,
426 &v10_1pcspublickey,
427 &v10_1pcspublicidentity,
428 &v10_1itempersistentref,
429 &v12_backupUUID,
430 0
431 },
432 };
433
434 const SecDbClass v12_keys_class = {
435 .name = CFSTR("keys"),
436 .itemclass = true,
437 .attrs = {
438 &v6rowid,
439 &v6cdat,
440 &v6mdat,
441 &v6kcls,
442 &v6labl,
443 &v6alis,
444 &v6perm,
445 &v6priv,
446 &v6modi,
447 &v6klbl,
448 &v6atag,
449 &v6keycrtr,
450 &v6keytype,
451 &v6bsiz,
452 &v6esiz,
453 &v6sdat,
454 &v6edat,
455 &v6sens,
456 &v6asen,
457 &v6extr,
458 &v6next,
459 &v6encr,
460 &v6decr,
461 &v6drve,
462 &v6sign,
463 &v6vrfy,
464 &v6snrc,
465 &v6vyrc,
466 &v6wrap,
467 &v6unwp,
468 &v6data,
469 &v6agrp,
470 &v6pdmn,
471 &v6sync,
472 &v6tomb,
473 &v6sha1,
474 &v7vwht,
475 &v7tkid,
476 &v6v_Data,
477 &v6v_pk,
478 &v6accc,
479 &v7utomb,
480 &v8musr,
481 &v10itemuuid,
482 &v10sysbound,
483 &v10_1pcsservice,
484 &v10_1pcspublickey,
485 &v10_1pcspublicidentity,
486 &v10_1itempersistentref,
487 &v12_backupUUID,
488 0
489 }
490 };
491
492 const SecDbClass v11_5_ckdevicestate_class = {
493 .name = CFSTR("ckdevicestate"),
494 .itemclass = false,
495 .attrs = {
496 &v10ckzone,
497 &v10_2device,
498 &v11_1osversion,
499 &v11_1lastunlock,
500 &v10_2peerid,
501 &v10_2circleStatus,
502 &v11_5octagonpeerid,
503 &v11_5octagonStatus,
504 &v10_2keyState,
505 &v10_2currentTLK,
506 &v10_2currentClassA,
507 &v10_2currentClassC,
508 &v10_1encRecord,
509 0
510 }
511 };
512
513 const SecDbClass v11_2_metadatakeys_class = {
514 .name = CFSTR("metadatakeys"),
515 .itemclass = false,
516 .attrs = {
517 &v10keyclass,
518 &v11_2actualKeyclass,
519 &v6data,
520 0
521 }
522 };
523
524 const SecDbClass v11_1_ckdevicestate_class = {
525 .name = CFSTR("ckdevicestate"),
526 .itemclass = false,
527 .attrs = {
528 &v10ckzone,
529 &v10_2device,
530 &v11_1osversion,
531 &v11_1lastunlock,
532 &v10_2peerid,
533 &v10_2circleStatus,
534 &v10_2keyState,
535 &v10_2currentTLK,
536 &v10_2currentClassA,
537 &v10_2currentClassC,
538 &v10_1encRecord,
539 0
540 }
541 };
542
543 const SecDbClass v11_metadatakeys_class = {
544 .name = CFSTR("metadatakeys"),
545 .itemclass = false,
546 .attrs = {
547 &v10keyclass,
548 &v6data,
549 0
550 }
551 };
552
553 const SecDbClass v10_5_tlkshare_class = {
554 .name = CFSTR("tlkshare"),
555 .itemclass = false,
556 .attrs = {
557 &v10ckzone,
558 &v10syncuuid,
559 &v10_5senderPeerID,
560 &v10_5recvPeerID,
561 &v10_5recvPubKey,
562 &v10_5curve,
563 &v10_5poisoned,
564 &v10_5epoch,
565 &v10wrappedkey,
566 &v10_5signature,
567 &v10_1encRecord,
568 &v10_5version,
569 0
570 }
571 };
572
573
574 const SecDbClass v10_4_current_item_class = {
575 .name = CFSTR("currentitems"),
576 .itemclass = false,
577 .attrs = {
578 &v10ckzone,
579 &v10_1currentPtrIdentifier,
580 &v10_4currentItemUUID,
581 &v10state,
582 &v10encodedCKRecord,
583 0
584 }
585 };
586
587 const SecDbClass v10_4_ckstate_class = {
588 .name = CFSTR("ckstate"),
589 .itemclass = false,
590 .attrs = {
591 &v10ckzone,
592 &v10ckzonecreated,
593 &v10ckzonesubscribed,
594 &v10lastfetchtime,
595 &v10changetoken,
596 &v10ratelimiter,
597 &v10_4lastFixup,
598 0
599 }
600 };
601
602 const SecDbClass v10_3_ckdevicestate_class = {
603 .name = CFSTR("ckdevicestate"),
604 .itemclass = false,
605 .attrs = {
606 &v10ckzone,
607 &v10_2device,
608 &v10_2peerid,
609 &v10_2circleStatus,
610 &v10_2keyState,
611 &v10_2currentTLK,
612 &v10_2currentClassA,
613 &v10_2currentClassC,
614 &v10_1encRecord,
615 0
616 }
617 };
618
619 const SecDbClass v10_2_ckmanifest_class = {
620 .name = CFSTR("ckmanifest"),
621 .itemclass = false,
622 .attrs = {
623 &v10ckzone,
624 &v10gencount,
625 &v10_1digest,
626 &v10_1signatures,
627 &v10_1signerID,
628 &v10_1leafIDs,
629 &v10_1peerManIDs,
630 &v10_2currentItems,
631 &v10_2futureData,
632 &v10_2schema,
633 &v10_1encRecord,
634 0
635 }
636 };
637
638 const SecDbClass v10_2_pending_manifest_class = {
639 .name = CFSTR("pending_manifest"),
640 .itemclass = false,
641 .attrs = {
642 &v10ckzone,
643 &v10gencount,
644 &v10_1digest,
645 &v10_1signatures,
646 &v10_1signerID,
647 &v10_1leafIDs,
648 &v10_1peerManIDs,
649 &v10_2currentItems,
650 &v10_2futureData,
651 &v10_2schema,
652 &v10_1encRecord,
653 0
654 }
655 };
656
657 const SecDbClass v10_1_ckmanifest_class = {
658 .name = CFSTR("ckmanifest"),
659 .itemclass = false,
660 .attrs = {
661 &v10ckzone,
662 &v10gencount,
663 &v10_1digest,
664 &v10_1signatures,
665 &v10_1signerID,
666 &v10_1leafIDs,
667 &v10_1peerManIDs,
668 &v10_1encRecord,
669 0
670 }
671 };
672
673 const SecDbClass v10_1_pending_manifest_class = {
674 .name = CFSTR("pending_manifest"),
675 .itemclass = false,
676 .attrs = {
677 &v10ckzone,
678 &v10gencount,
679 &v10_1digest,
680 &v10_1signatures,
681 &v10_1signerID,
682 &v10_1leafIDs,
683 &v10_1peerManIDs,
684 &v10_1encRecord,
685 0
686 }
687 };
688
689 const SecDbClass v10_1_ckmanifest_leaf_class = {
690 .name = CFSTR("ckmanifest_leaf"),
691 .itemclass = false,
692 .attrs = {
693 &v10ckzone,
694 &v10syncuuid,
695 &v10_1digest,
696 &v10_1entryDigests,
697 &v10_1encRecord,
698 0
699 }
700 };
701
702 const SecDbClass v10_1_pending_manifest_leaf_class = {
703 .name = CFSTR("pending_manifest_leaf"),
704 .itemclass = false,
705 .attrs = {
706 &v10ckzone,
707 &v10syncuuid,
708 &v10_1digest,
709 &v10_1entryDigests,
710 &v10_1encRecord,
711 0
712 }
713 };
714
715 const SecDbClass v10_1_genp_class = {
716 .name = CFSTR("genp"),
717 .itemclass = true,
718 .attrs = {
719 &v6rowid,
720 &v6cdat,
721 &v6mdat,
722 &v6desc,
723 &v6icmt,
724 &v6crtr,
725 &v6type,
726 &v6scrp,
727 &v6labl,
728 &v6alis,
729 &v6invi,
730 &v6nega,
731 &v6cusi,
732 &v6prot,
733 &v6acct,
734 &v6svce,
735 &v6gena,
736 &v6data,
737 &v6agrp,
738 &v6pdmn,
739 &v6sync,
740 &v6tomb,
741 &v6sha1,
742 &v7vwht,
743 &v7tkid,
744 &v6v_Data,
745 &v6v_pk,
746 &v6accc,
747 &v7utomb,
748 &v8musr,
749 &v10itemuuid,
750 &v10sysbound,
751 &v10_1pcsservice,
752 &v10_1pcspublickey,
753 &v10_1pcspublicidentity,
754 &v10_1itempersistentref,
755 0
756 },
757 };
758
759 const SecDbClass v10_1_inet_class = {
760 .name = CFSTR("inet"),
761 .itemclass = true,
762 .attrs = {
763 &v6rowid,
764 &v6cdat,
765 &v6mdat,
766 &v6desc,
767 &v6icmt,
768 &v6crtr,
769 &v6type,
770 &v6scrp,
771 &v6labl,
772 &v6alis,
773 &v6invi,
774 &v6nega,
775 &v6cusi,
776 &v6prot,
777 &v6acct,
778 &v6sdmn,
779 &v6srvr,
780 &v6ptcl,
781 &v6atyp,
782 &v6port,
783 &v6path,
784 &v6data,
785 &v6agrp,
786 &v6pdmn,
787 &v6sync,
788 &v6tomb,
789 &v6sha1,
790 &v7vwht,
791 &v7tkid,
792 &v6v_Data,
793 &v6v_pk,
794 &v6accc,
795 &v7utomb,
796 &v8musr,
797 &v10itemuuid,
798 &v10sysbound,
799 &v10_1pcsservice,
800 &v10_1pcspublickey,
801 &v10_1pcspublicidentity,
802 &v10_1itempersistentref,
803 0
804 },
805 };
806
807 const SecDbClass v10_1_cert_class = {
808 .name = CFSTR("cert"),
809 .itemclass = true,
810 .attrs = {
811 &v6rowid,
812 &v6cdat,
813 &v6mdat,
814 &v6ctyp,
815 &v6cenc,
816 &v6labl,
817 &v6certalis,
818 &v6subj,
819 &v6issr,
820 &v6slnr,
821 &v6skid,
822 &v6pkhh,
823 &v6data,
824 &v6agrp,
825 &v6pdmn,
826 &v6sync,
827 &v6tomb,
828 &v6sha1,
829 &v7vwht,
830 &v7tkid,
831 &v6v_Data,
832 &v6v_pk,
833 &v6accc,
834 &v7utomb,
835 &v8musr,
836 &v10itemuuid,
837 &v10sysbound,
838 &v10_1pcsservice,
839 &v10_1pcspublickey,
840 &v10_1pcspublicidentity,
841 &v10_1itempersistentref,
842 0
843 },
844 };
845
846 const SecDbClass v10_1_keys_class = {
847 .name = CFSTR("keys"),
848 .itemclass = true,
849 .attrs = {
850 &v6rowid,
851 &v6cdat,
852 &v6mdat,
853 &v6kcls,
854 &v6labl,
855 &v6alis,
856 &v6perm,
857 &v6priv,
858 &v6modi,
859 &v6klbl,
860 &v6atag,
861 &v6keycrtr,
862 &v6keytype,
863 &v6bsiz,
864 &v6esiz,
865 &v6sdat,
866 &v6edat,
867 &v6sens,
868 &v6asen,
869 &v6extr,
870 &v6next,
871 &v6encr,
872 &v6decr,
873 &v6drve,
874 &v6sign,
875 &v6vrfy,
876 &v6snrc,
877 &v6vyrc,
878 &v6wrap,
879 &v6unwp,
880 &v6data,
881 &v6agrp,
882 &v6pdmn,
883 &v6sync,
884 &v6tomb,
885 &v6sha1,
886 &v7vwht,
887 &v7tkid,
888 &v6v_Data,
889 &v6v_pk,
890 &v6accc,
891 &v7utomb,
892 &v8musr,
893 &v10itemuuid,
894 &v10sysbound,
895 &v10_1pcsservice,
896 &v10_1pcspublickey,
897 &v10_1pcspublicidentity,
898 &v10_1itempersistentref,
899 0
900 }
901 };
902
903 const SecDbClass v10_0_tversion_class = {
904 .name = CFSTR("tversion"),
905 .itemclass = false,
906 .attrs = {
907 &v6rowid,
908 &v6version,
909 &v91minor,
910 0
911 }
912 };
913
914 const SecDbClass v10_2_outgoing_queue_class = {
915 .name = CFSTR("outgoingqueue"),
916 .itemclass = false,
917 .attrs = {
918 &v10ckzone,
919 &v10syncuuid,
920 &v10parentKeyUUID,
921 &v10action,
922 &v10state,
923 &v10waituntiltime,
924 &v10accessgroup,
925 &v10gencount,
926 &v10wrappedkey,
927 &v10encrypteditem,
928 &v10encryptionver,
929 &v10_1optionalEncodedCKRecord,
930 &v10_1pcsservice,
931 &v10_1pcspublickey,
932 &v10_1pcspublicidentity,
933 0
934 }
935 };
936
937 const SecDbClass v10_2_incoming_queue_class = {
938 .name = CFSTR("incomingqueue"),
939 .itemclass = false,
940 .attrs = {
941 &v10ckzone,
942 &v10syncuuid,
943 &v10parentKeyUUID,
944 &v10action,
945 &v10state,
946 &v10gencount,
947 &v10wrappedkey,
948 &v10encrypteditem,
949 &v10encryptionver,
950 &v10_1optionalEncodedCKRecord,
951 &v10_1pcsservice,
952 &v10_1pcspublickey,
953 &v10_1pcspublicidentity,
954 0
955 }
956 };
957
958
959 const SecDbClass v10_1_outgoing_queue_class = {
960 .name = CFSTR("outgoingqueue"),
961 .itemclass = false,
962 .attrs = {
963 &v10ckzone,
964 &v10syncuuid,
965 &v10parentKeyUUID,
966 &v10action,
967 &v10state,
968 &v10waituntiltime,
969 &v10accessgroup,
970 &v10gencount,
971 &v10wrappedkey,
972 &v10encrypteditem,
973 &v10encryptionver,
974 &v10_1pcsservice,
975 &v10_1pcspublickey,
976 &v10_1pcspublicidentity,
977 0
978 }
979 };
980
981 const SecDbClass v10_1_incoming_queue_class = {
982 .name = CFSTR("incomingqueue"),
983 .itemclass = false,
984 .attrs = {
985 &v10ckzone,
986 &v10syncuuid,
987 &v10parentKeyUUID,
988 &v10action,
989 &v10state,
990 &v10gencount,
991 &v10wrappedkey,
992 &v10encrypteditem,
993 &v10encryptionver,
994 &v10_1pcsservice,
995 &v10_1pcspublickey,
996 &v10_1pcspublicidentity,
997 0
998 }
999 };
1000
1001
1002 const SecDbClass v10_0_outgoing_queue_class = {
1003 .name = CFSTR("outgoingqueue"),
1004 .itemclass = false,
1005 .attrs = {
1006 &v10ckzone,
1007 &v10syncuuid,
1008 &v10parentKeyUUID,
1009 &v10action,
1010 &v10state,
1011 &v10waituntiltime,
1012 &v10accessgroup,
1013 &v10gencount,
1014 &v10wrappedkey,
1015 &v10encrypteditem,
1016 &v10encryptionver,
1017 0
1018 }
1019 };
1020
1021 const SecDbClass v10_0_incoming_queue_class = {
1022 .name = CFSTR("incomingqueue"),
1023 .itemclass = false,
1024 .attrs = {
1025 &v10ckzone,
1026 &v10syncuuid,
1027 &v10parentKeyUUID,
1028 &v10action,
1029 &v10state,
1030 &v10gencount,
1031 &v10wrappedkey,
1032 &v10encrypteditem,
1033 &v10encryptionver,
1034 0
1035 }
1036 };
1037
1038 const SecDbClass v10_0_sync_key_class = {
1039 .name = CFSTR("synckeys"),
1040 .itemclass = false,
1041 .attrs = {
1042 &v10ckzone,
1043 &v10syncuuid,
1044 &v10keyclass,
1045 &v10currentkey,
1046 &v10parentKeyUUID,
1047 &v10state,
1048 &v10wrappedkey,
1049 &v10encodedCKRecord,
1050 0
1051 }
1052 };
1053
1054 // Stores the "Current Key" records, and parentKeyUUID refers to items in the synckeys table
1055 // Wouldn't foreign keys be nice?
1056 const SecDbClass v10_0_current_key_class = {
1057 .name = CFSTR("currentkeys"),
1058 .itemclass = false,
1059 .attrs = {
1060 &v10ckzone,
1061 &v10keyclass,
1062 &v10currentKeyUUID,
1063 &v10encodedCKRecord,
1064 0
1065 }
1066 };
1067
1068 const SecDbClass v10_1_current_item_class = {
1069 .name = CFSTR("currentitems"),
1070 .itemclass = false,
1071 .attrs = {
1072 &v10ckzone,
1073 &v10_1currentPtrIdentifier,
1074 &v10_1currentItemUUID,
1075 &v10state,
1076 &v10encodedCKRecord,
1077 0
1078 }
1079 };
1080
1081 const SecDbClass v10_1_ckmirror_class = {
1082 .name = CFSTR("ckmirror"),
1083 .itemclass = false,
1084 .attrs = {
1085 &v10ckzone,
1086 &v10syncuuid,
1087 &v10parentKeyUUID,
1088 &v10gencount,
1089 &v10wrappedkey,
1090 &v10encrypteditem,
1091 &v10encodedCKRecord,
1092 &v10encryptionver,
1093 &v10_1wasCurrent,
1094 &v10_1pcsservice,
1095 &v10_1pcspublickey,
1096 &v10_1pcspublicidentity,
1097 0
1098 }
1099 };
1100
1101 const SecDbClass v10_0_ckmirror_class = {
1102 .name = CFSTR("ckmirror"),
1103 .itemclass = false,
1104 .attrs = {
1105 &v10ckzone,
1106 &v10syncuuid,
1107 &v10parentKeyUUID,
1108 &v10gencount,
1109 &v10wrappedkey,
1110 &v10encrypteditem,
1111 &v10encodedCKRecord,
1112 &v10encryptionver,
1113 0
1114 }
1115 };
1116
1117 const SecDbClass v10_0_ckstate_class = {
1118 .name = CFSTR("ckstate"),
1119 .itemclass = false,
1120 .attrs = {
1121 &v10ckzone,
1122 &v10ckzonecreated,
1123 &v10ckzonesubscribed,
1124 &v10lastfetchtime,
1125 &v10changetoken,
1126 &v10ratelimiter,
1127 0
1128 }
1129 };
1130
1131 /* Backup table */
1132 /* Primary keys: v10primaryKey, v8musr */
1133 /* This table is currently unused */
1134 const SecDbClass v10_0_item_backup_class = {
1135 .name = CFSTR("item_backup"),
1136 .itemclass = false,
1137 .attrs = {
1138 &v6rowid,
1139 &v10primaryKey, // Primary key of the original item, from v6v_pk
1140 &v8musr, //
1141 &v6sha1, // Hash of the original item
1142 &v10backupData, // Data wrapped to backup keybag
1143 &v6pkhh, // Hash of the public key of the backup bag [v10publickeyHash]
1144 0
1145 }
1146 };
1147
1148 /* Backup Keybag table */
1149 /* Primary keys: v10publickeyHash, v8musr */
1150 /* This table is currently unused */
1151 const SecDbClass v10_0_backup_keybag_class = {
1152 .name = CFSTR("backup_keybag"),
1153 .itemclass = false,
1154 .attrs = {
1155 &v6rowid,
1156 &v10publickeyHash, // Hash of the public key of the backup bag
1157 &v8musr, //
1158 &v10publickey, // Public key for the asymmetric backup bag
1159 &v6agrp, // Used for backup agent
1160 0
1161 }
1162 };
1163
1164 const SecDbClass v10_1_backup_keyarchive_class = {
1165 .name = CFSTR("backup_keyarchive"),
1166 .itemclass = false,
1167 .attrs = {
1168 &v10_1keyArchiveHash, // Hash of the key archive
1169 &v8musr, //
1170 &v10_1keyArchive, // Serialised key archive
1171 &v10ckzone,
1172 &v10_1optionalEncodedCKRecord,
1173 &v10_1archiveEscrowID,
1174 0
1175 }
1176 };
1177
1178 const SecDbClass v10_1_current_archived_keys_class = {
1179 .name = CFSTR("archived_key_backup"),
1180 .itemclass = false,
1181 .attrs = {
1182 &v6pdmn,
1183 &v10syncuuid,
1184 &v8musr,
1185 &v6agrp,
1186 &v10_1keyArchiveHash,
1187 &v10_1archivedKey,
1188 &v10ckzone,
1189 &v10_1optionalEncodedCKRecord,
1190 &v10_1archiveEscrowID,
1191 0
1192 }
1193 };
1194
1195 const SecDbClass v10_1_current_keyarchive_class = {
1196 .name = CFSTR("currentkeyarchives"),
1197 .itemclass = false,
1198 .attrs = {
1199 &v10_1keyArchiveHash,
1200 &v10_1keyArchiveName,
1201 0
1202 }
1203 };
1204
1205 /* An identity which is really a cert + a key, so all cert and keys attrs are
1206 allowed. */
1207 const SecDbClass v_identity_class = {
1208 .name = CFSTR("idnt"),
1209 .itemclass = true,
1210 .attrs = {
1211 0
1212 },
1213 };
1214
1215 /*
1216 * Version 12.0
1217 * Add backup/restore mechanism
1218 */
1219 const SecDbSchema v12_0_schema = {
1220 .majorVersion = 12,
1221 .minorVersion = 0,
1222 .classes = {
1223 &v12_genp_class,
1224 &v12_inet_class,
1225 &v12_cert_class,
1226 &v12_keys_class,
1227 &v10_0_tversion_class,
1228 &v10_2_outgoing_queue_class,
1229 &v10_2_incoming_queue_class,
1230 &v10_0_sync_key_class,
1231 &v10_1_ckmirror_class,
1232 &v10_0_current_key_class,
1233 &v10_4_ckstate_class,
1234 &v10_0_item_backup_class,
1235 &v10_0_backup_keybag_class,
1236 &v10_2_ckmanifest_class,
1237 &v10_2_pending_manifest_class,
1238 &v10_1_ckmanifest_leaf_class,
1239 &v10_1_backup_keyarchive_class,
1240 &v10_1_current_keyarchive_class,
1241 &v10_1_current_archived_keys_class,
1242 &v10_1_pending_manifest_leaf_class,
1243 &v10_4_current_item_class,
1244 &v11_5_ckdevicestate_class,
1245 &v10_5_tlkshare_class,
1246 &v12_metadatakeys_class,
1247 &v12_backupbags_class,
1248 &v12_backupkeyclasssigningkeys_class,
1249 &v12_backuprecoverysets_class,
1250 0
1251 }
1252 };
1253
1254 /*
1255 * Version 11.5 (Add octagon fields to device state)
1256 */
1257 const SecDbSchema v11_5_schema = {
1258 .majorVersion = 11,
1259 .minorVersion = 5,
1260 .classes = {
1261 &v10_1_genp_class,
1262 &v10_1_inet_class,
1263 &v10_1_cert_class,
1264 &v10_1_keys_class,
1265 &v10_0_tversion_class,
1266 &v10_2_outgoing_queue_class,
1267 &v10_2_incoming_queue_class,
1268 &v10_0_sync_key_class,
1269 &v10_1_ckmirror_class,
1270 &v10_0_current_key_class,
1271 &v10_4_ckstate_class,
1272 &v10_0_item_backup_class,
1273 &v10_0_backup_keybag_class,
1274 &v10_2_ckmanifest_class,
1275 &v10_2_pending_manifest_class,
1276 &v10_1_ckmanifest_leaf_class,
1277 &v10_1_backup_keyarchive_class,
1278 &v10_1_current_keyarchive_class,
1279 &v10_1_current_archived_keys_class,
1280 &v10_1_pending_manifest_leaf_class,
1281 &v10_4_current_item_class,
1282 &v11_5_ckdevicestate_class,
1283 &v10_5_tlkshare_class,
1284 &v11_2_metadatakeys_class,
1285 0
1286 }
1287 };
1288
1289
1290 /*
1291 * Version 11.4 (Add some more indexes)
1292 */
1293 const SecDbSchema v11_4_schema = {
1294 .majorVersion = 11,
1295 .minorVersion = 4,
1296 .classes = {
1297 &v10_1_genp_class,
1298 &v10_1_inet_class,
1299 &v10_1_cert_class,
1300 &v10_1_keys_class,
1301 &v10_0_tversion_class,
1302 &v10_2_outgoing_queue_class,
1303 &v10_2_incoming_queue_class,
1304 &v10_0_sync_key_class,
1305 &v10_1_ckmirror_class,
1306 &v10_0_current_key_class,
1307 &v10_4_ckstate_class,
1308 &v10_0_item_backup_class,
1309 &v10_0_backup_keybag_class,
1310 &v10_2_ckmanifest_class,
1311 &v10_2_pending_manifest_class,
1312 &v10_1_ckmanifest_leaf_class,
1313 &v10_1_backup_keyarchive_class,
1314 &v10_1_current_keyarchive_class,
1315 &v10_1_current_archived_keys_class,
1316 &v10_1_pending_manifest_leaf_class,
1317 &v10_4_current_item_class,
1318 &v11_1_ckdevicestate_class,
1319 &v10_5_tlkshare_class,
1320 &v11_2_metadatakeys_class,
1321 0
1322 }
1323 };
1324
1325 /*
1326 * Version 11.3 (no changes, restores the use of indexes in upgrade code. Gotta go fast!)
1327 */
1328 const SecDbSchema v11_3_schema = {
1329 .majorVersion = 11,
1330 .minorVersion = 3,
1331 .classes = {
1332 &v10_1_genp_class,
1333 &v10_1_inet_class,
1334 &v10_1_cert_class,
1335 &v10_1_keys_class,
1336 &v10_0_tversion_class,
1337 &v10_2_outgoing_queue_class,
1338 &v10_2_incoming_queue_class,
1339 &v10_0_sync_key_class,
1340 &v10_1_ckmirror_class,
1341 &v10_0_current_key_class,
1342 &v10_4_ckstate_class,
1343 &v10_0_item_backup_class,
1344 &v10_0_backup_keybag_class,
1345 &v10_2_ckmanifest_class,
1346 &v10_2_pending_manifest_class,
1347 &v10_1_ckmanifest_leaf_class,
1348 &v10_1_backup_keyarchive_class,
1349 &v10_1_current_keyarchive_class,
1350 &v10_1_current_archived_keys_class,
1351 &v10_1_pending_manifest_leaf_class,
1352 &v10_4_current_item_class,
1353 &v11_1_ckdevicestate_class,
1354 &v10_5_tlkshare_class,
1355 &v11_2_metadatakeys_class,
1356 0
1357 }
1358 };
1359
1360 /*
1361 * Version 11.2
1362 */
1363 const SecDbSchema v11_2_schema = {
1364 .majorVersion = 11,
1365 .minorVersion = 2,
1366 .classes = {
1367 &v10_1_genp_class,
1368 &v10_1_inet_class,
1369 &v10_1_cert_class,
1370 &v10_1_keys_class,
1371 &v10_0_tversion_class,
1372 &v10_2_outgoing_queue_class,
1373 &v10_2_incoming_queue_class,
1374 &v10_0_sync_key_class,
1375 &v10_1_ckmirror_class,
1376 &v10_0_current_key_class,
1377 &v10_4_ckstate_class,
1378 &v10_0_item_backup_class,
1379 &v10_0_backup_keybag_class,
1380 &v10_2_ckmanifest_class,
1381 &v10_2_pending_manifest_class,
1382 &v10_1_ckmanifest_leaf_class,
1383 &v10_1_backup_keyarchive_class,
1384 &v10_1_current_keyarchive_class,
1385 &v10_1_current_archived_keys_class,
1386 &v10_1_pending_manifest_leaf_class,
1387 &v10_4_current_item_class,
1388 &v11_1_ckdevicestate_class,
1389 &v10_5_tlkshare_class,
1390 &v11_2_metadatakeys_class,
1391 0
1392 }
1393 };
1394
1395 /*
1396 * Version 11.1
1397 */
1398 const SecDbSchema v11_1_schema = {
1399 .majorVersion = 11,
1400 .minorVersion = 1,
1401 .classes = {
1402 &v10_1_genp_class,
1403 &v10_1_inet_class,
1404 &v10_1_cert_class,
1405 &v10_1_keys_class,
1406 &v10_0_tversion_class,
1407 &v10_2_outgoing_queue_class,
1408 &v10_2_incoming_queue_class,
1409 &v10_0_sync_key_class,
1410 &v10_1_ckmirror_class,
1411 &v10_0_current_key_class,
1412 &v10_4_ckstate_class,
1413 &v10_0_item_backup_class,
1414 &v10_0_backup_keybag_class,
1415 &v10_2_ckmanifest_class,
1416 &v10_2_pending_manifest_class,
1417 &v10_1_ckmanifest_leaf_class,
1418 &v10_1_backup_keyarchive_class,
1419 &v10_1_current_keyarchive_class,
1420 &v10_1_current_archived_keys_class,
1421 &v10_1_pending_manifest_leaf_class,
1422 &v10_4_current_item_class,
1423 &v11_1_ckdevicestate_class,
1424 &v10_5_tlkshare_class,
1425 &v11_metadatakeys_class,
1426 0
1427 }
1428 };
1429
1430 /*
1431 * Version 11
1432 */
1433 const SecDbSchema v11_schema = {
1434 .majorVersion = 11,
1435 .minorVersion = 0,
1436 .classes = {
1437 &v10_1_genp_class,
1438 &v10_1_inet_class,
1439 &v10_1_cert_class,
1440 &v10_1_keys_class,
1441 &v10_0_tversion_class,
1442 &v10_2_outgoing_queue_class,
1443 &v10_2_incoming_queue_class,
1444 &v10_0_sync_key_class,
1445 &v10_1_ckmirror_class,
1446 &v10_0_current_key_class,
1447 &v10_4_ckstate_class,
1448 &v10_0_item_backup_class,
1449 &v10_0_backup_keybag_class,
1450 &v10_2_ckmanifest_class,
1451 &v10_2_pending_manifest_class,
1452 &v10_1_ckmanifest_leaf_class,
1453 &v10_1_backup_keyarchive_class,
1454 &v10_1_current_keyarchive_class,
1455 &v10_1_current_archived_keys_class,
1456 &v10_1_pending_manifest_leaf_class,
1457 &v10_4_current_item_class,
1458 &v10_3_ckdevicestate_class,
1459 &v10_5_tlkshare_class,
1460 &v11_metadatakeys_class,
1461 0
1462 }
1463 };
1464
1465
1466 /*
1467 * Version 10.5
1468 */
1469 const SecDbSchema v10_5_schema = {
1470 .majorVersion = 10,
1471 .minorVersion = 5,
1472 .classes = {
1473 &v10_1_genp_class,
1474 &v10_1_inet_class,
1475 &v10_1_cert_class,
1476 &v10_1_keys_class,
1477 &v10_0_tversion_class,
1478 &v10_2_outgoing_queue_class,
1479 &v10_2_incoming_queue_class,
1480 &v10_0_sync_key_class,
1481 &v10_1_ckmirror_class,
1482 &v10_0_current_key_class,
1483 &v10_4_ckstate_class,
1484 &v10_0_item_backup_class,
1485 &v10_0_backup_keybag_class,
1486 &v10_2_ckmanifest_class,
1487 &v10_2_pending_manifest_class,
1488 &v10_1_ckmanifest_leaf_class,
1489 &v10_1_backup_keyarchive_class,
1490 &v10_1_current_keyarchive_class,
1491 &v10_1_current_archived_keys_class,
1492 &v10_1_pending_manifest_leaf_class,
1493 &v10_4_current_item_class,
1494 &v10_3_ckdevicestate_class,
1495 &v10_5_tlkshare_class,
1496 0
1497 }
1498 };
1499
1500 /*
1501 * Version 10.4
1502 */
1503 const SecDbSchema v10_4_schema = {
1504 .majorVersion = 10,
1505 .minorVersion = 4,
1506 .classes = {
1507 &v10_1_genp_class,
1508 &v10_1_inet_class,
1509 &v10_1_cert_class,
1510 &v10_1_keys_class,
1511 &v10_0_tversion_class,
1512 &v10_2_outgoing_queue_class,
1513 &v10_2_incoming_queue_class,
1514 &v10_0_sync_key_class,
1515 &v10_1_ckmirror_class,
1516 &v10_0_current_key_class,
1517 &v10_4_ckstate_class,
1518 &v10_0_item_backup_class,
1519 &v10_0_backup_keybag_class,
1520 &v10_2_ckmanifest_class,
1521 &v10_2_pending_manifest_class,
1522 &v10_1_ckmanifest_leaf_class,
1523 &v10_1_backup_keyarchive_class,
1524 &v10_1_current_keyarchive_class,
1525 &v10_1_current_archived_keys_class,
1526 &v10_1_pending_manifest_leaf_class,
1527 &v10_4_current_item_class,
1528 &v10_3_ckdevicestate_class,
1529 0
1530 }
1531 };
1532
1533 /*
1534 * Version 10.3
1535 */
1536 const SecDbSchema v10_3_schema = {
1537 .majorVersion = 10,
1538 .minorVersion = 3,
1539 .classes = {
1540 &v10_1_genp_class,
1541 &v10_1_inet_class,
1542 &v10_1_cert_class,
1543 &v10_1_keys_class,
1544 &v10_0_tversion_class,
1545 &v10_2_outgoing_queue_class,
1546 &v10_2_incoming_queue_class,
1547 &v10_0_sync_key_class,
1548 &v10_1_ckmirror_class,
1549 &v10_0_current_key_class,
1550 &v10_0_ckstate_class,
1551 &v10_0_item_backup_class,
1552 &v10_0_backup_keybag_class,
1553 &v10_2_ckmanifest_class,
1554 &v10_2_pending_manifest_class,
1555 &v10_1_ckmanifest_leaf_class,
1556 &v10_1_backup_keyarchive_class,
1557 &v10_1_current_keyarchive_class,
1558 &v10_1_current_archived_keys_class,
1559 &v10_1_pending_manifest_leaf_class,
1560 &v10_1_current_item_class,
1561 &v10_3_ckdevicestate_class,
1562 0
1563 }
1564 };
1565
1566 /*
1567 * Version 10.2
1568 */
1569 const SecDbSchema v10_2_schema = {
1570 .majorVersion = 10,
1571 .minorVersion = 2,
1572 .classes = {
1573 &v10_1_genp_class,
1574 &v10_1_inet_class,
1575 &v10_1_cert_class,
1576 &v10_1_keys_class,
1577 &v10_0_tversion_class,
1578 &v10_2_outgoing_queue_class,
1579 &v10_2_incoming_queue_class,
1580 &v10_0_sync_key_class,
1581 &v10_1_ckmirror_class,
1582 &v10_0_current_key_class,
1583 &v10_0_ckstate_class,
1584 &v10_0_item_backup_class,
1585 &v10_0_backup_keybag_class,
1586 &v10_2_ckmanifest_class,
1587 &v10_2_pending_manifest_class,
1588 &v10_1_ckmanifest_leaf_class,
1589 &v10_1_backup_keyarchive_class,
1590 &v10_1_current_keyarchive_class,
1591 &v10_1_current_archived_keys_class,
1592 &v10_1_pending_manifest_leaf_class,
1593 &v10_1_current_item_class,
1594 0
1595 }
1596 };
1597
1598 /*
1599 * Version 10.1
1600 */
1601 const SecDbSchema v10_1_schema = {
1602 .majorVersion = 10,
1603 .minorVersion = 1,
1604 .classes = {
1605 &v10_1_genp_class,
1606 &v10_1_inet_class,
1607 &v10_1_cert_class,
1608 &v10_1_keys_class,
1609 &v10_0_tversion_class,
1610 &v10_1_outgoing_queue_class,
1611 &v10_1_incoming_queue_class,
1612 &v10_0_sync_key_class,
1613 &v10_1_ckmirror_class,
1614 &v10_0_current_key_class,
1615 &v10_0_ckstate_class,
1616 &v10_0_item_backup_class,
1617 &v10_0_backup_keybag_class,
1618 &v10_1_ckmanifest_class,
1619 &v10_1_pending_manifest_class,
1620 &v10_1_ckmanifest_leaf_class,
1621 &v10_1_backup_keyarchive_class,
1622 &v10_1_current_keyarchive_class,
1623 &v10_1_current_archived_keys_class,
1624 &v10_1_pending_manifest_leaf_class,
1625 &v10_1_current_item_class,
1626 0
1627 }
1628 };
1629
1630 /*
1631 * Version 10.0
1632 */
1633
1634 const SecDbClass v10_0_genp_class = {
1635 .name = CFSTR("genp"),
1636 .itemclass = true,
1637 .attrs = {
1638 &v6rowid,
1639 &v6cdat,
1640 &v6mdat,
1641 &v6desc,
1642 &v6icmt,
1643 &v6crtr,
1644 &v6type,
1645 &v6scrp,
1646 &v6labl,
1647 &v6alis,
1648 &v6invi,
1649 &v6nega,
1650 &v6cusi,
1651 &v6prot,
1652 &v6acct,
1653 &v6svce,
1654 &v6gena,
1655 &v6data,
1656 &v6agrp,
1657 &v6pdmn,
1658 &v6sync,
1659 &v6tomb,
1660 &v6sha1,
1661 &v7vwht,
1662 &v7tkid,
1663 &v6v_Data,
1664 &v6v_pk,
1665 &v6accc,
1666 &v7utomb,
1667 &v8musr,
1668 &v10itemuuid,
1669 &v10itempersistentref,
1670 &v10sysbound,
1671 0
1672 },
1673 };
1674
1675 const SecDbClass v10_0_inet_class = {
1676 .name = CFSTR("inet"),
1677 .itemclass = true,
1678 .attrs = {
1679 &v6rowid,
1680 &v6cdat,
1681 &v6mdat,
1682 &v6desc,
1683 &v6icmt,
1684 &v6crtr,
1685 &v6type,
1686 &v6scrp,
1687 &v6labl,
1688 &v6alis,
1689 &v6invi,
1690 &v6nega,
1691 &v6cusi,
1692 &v6prot,
1693 &v6acct,
1694 &v6sdmn,
1695 &v6srvr,
1696 &v6ptcl,
1697 &v6atyp,
1698 &v6port,
1699 &v6path,
1700 &v6data,
1701 &v6agrp,
1702 &v6pdmn,
1703 &v6sync,
1704 &v6tomb,
1705 &v6sha1,
1706 &v7vwht,
1707 &v7tkid,
1708 &v6v_Data,
1709 &v6v_pk,
1710 &v6accc,
1711 &v7utomb,
1712 &v8musr,
1713 &v10itemuuid,
1714 &v10itempersistentref,
1715 &v10sysbound,
1716 0
1717 },
1718 };
1719
1720 const SecDbClass v10_0_cert_class = {
1721 .name = CFSTR("cert"),
1722 .itemclass = true,
1723 .attrs = {
1724 &v6rowid,
1725 &v6cdat,
1726 &v6mdat,
1727 &v6ctyp,
1728 &v6cenc,
1729 &v6labl,
1730 &v6certalis,
1731 &v6subj,
1732 &v6issr,
1733 &v6slnr,
1734 &v6skid,
1735 &v6pkhh,
1736 &v6data,
1737 &v6agrp,
1738 &v6pdmn,
1739 &v6sync,
1740 &v6tomb,
1741 &v6sha1,
1742 &v7vwht,
1743 &v7tkid,
1744 &v6v_Data,
1745 &v6v_pk,
1746 &v6accc,
1747 &v7utomb,
1748 &v8musr,
1749 &v10itemuuid,
1750 &v10itempersistentref,
1751 &v10sysbound,
1752 0
1753 },
1754 };
1755
1756 const SecDbClass v10_0_keys_class = {
1757 .name = CFSTR("keys"),
1758 .itemclass = true,
1759 .attrs = {
1760 &v6rowid,
1761 &v6cdat,
1762 &v6mdat,
1763 &v6kcls,
1764 &v6labl,
1765 &v6alis,
1766 &v6perm,
1767 &v6priv,
1768 &v6modi,
1769 &v6klbl,
1770 &v6atag,
1771 &v6keycrtr,
1772 &v6keytype,
1773 &v6bsiz,
1774 &v6esiz,
1775 &v6sdat,
1776 &v6edat,
1777 &v6sens,
1778 &v6asen,
1779 &v6extr,
1780 &v6next,
1781 &v6encr,
1782 &v6decr,
1783 &v6drve,
1784 &v6sign,
1785 &v6vrfy,
1786 &v6snrc,
1787 &v6vyrc,
1788 &v6wrap,
1789 &v6unwp,
1790 &v6data,
1791 &v6agrp,
1792 &v6pdmn,
1793 &v6sync,
1794 &v6tomb,
1795 &v6sha1,
1796 &v7vwht,
1797 &v7tkid,
1798 &v6v_Data,
1799 &v6v_pk,
1800 &v6accc,
1801 &v7utomb,
1802 &v8musr,
1803 &v10itemuuid,
1804 &v10itempersistentref,
1805 &v10sysbound,
1806 0
1807 }
1808 };
1809
1810 const SecDbSchema v10_0_schema = {
1811 .majorVersion = 10,
1812 .minorVersion = 0,
1813 .classes = {
1814 &v10_0_genp_class,
1815 &v10_0_inet_class,
1816 &v10_0_cert_class,
1817 &v10_0_keys_class,
1818 &v10_0_tversion_class,
1819 &v10_0_outgoing_queue_class,
1820 &v10_0_incoming_queue_class,
1821 &v10_0_sync_key_class,
1822 &v10_0_ckmirror_class,
1823 &v10_0_current_key_class,
1824 &v10_0_ckstate_class,
1825 &v10_0_item_backup_class,
1826 &v10_0_backup_keybag_class,
1827 0
1828 }
1829 };
1830
1831 const SecDbClass v9_1_tversion_class = {
1832 .name = CFSTR("tversion91"),
1833 .itemclass = false,
1834 .attrs = {
1835 &v6rowid,
1836 &v6version,
1837 &v91minor,
1838 0
1839 }
1840 };
1841
1842 const SecDbClass v9_1_genp_class = {
1843 .name = CFSTR("genp91"),
1844 .itemclass = true,
1845 .attrs = {
1846 &v6rowid,
1847 &v6cdat,
1848 &v6mdat,
1849 &v6desc,
1850 &v6icmt,
1851 &v6crtr,
1852 &v6type,
1853 &v6scrp,
1854 &v6labl,
1855 &v6alis,
1856 &v6invi,
1857 &v6nega,
1858 &v6cusi,
1859 &v6prot,
1860 &v6acct,
1861 &v6svce,
1862 &v6gena,
1863 &v6data,
1864 &v6agrp,
1865 &v6pdmn,
1866 &v6sync,
1867 &v6tomb,
1868 &v6sha1,
1869 &v7vwht,
1870 &v7tkid,
1871 &v6v_Data,
1872 &v6v_pk,
1873 &v6accc,
1874 &v7utomb,
1875 &v8musr,
1876 0
1877 },
1878 };
1879
1880 const SecDbClass v9_1_inet_class = {
1881 .name = CFSTR("inet91"),
1882 .itemclass = true,
1883 .attrs = {
1884 &v6rowid,
1885 &v6cdat,
1886 &v6mdat,
1887 &v6desc,
1888 &v6icmt,
1889 &v6crtr,
1890 &v6type,
1891 &v6scrp,
1892 &v6labl,
1893 &v6alis,
1894 &v6invi,
1895 &v6nega,
1896 &v6cusi,
1897 &v6prot,
1898 &v6acct,
1899 &v6sdmn,
1900 &v6srvr,
1901 &v6ptcl,
1902 &v6atyp,
1903 &v6port,
1904 &v6path,
1905 &v6data,
1906 &v6agrp,
1907 &v6pdmn,
1908 &v6sync,
1909 &v6tomb,
1910 &v6sha1,
1911 &v7vwht,
1912 &v7tkid,
1913 &v6v_Data,
1914 &v6v_pk,
1915 &v6accc,
1916 &v7utomb,
1917 &v8musr,
1918 0
1919 },
1920 };
1921
1922 const SecDbClass v9_1_cert_class = {
1923 .name = CFSTR("cert91"),
1924 .itemclass = true,
1925 .attrs = {
1926 &v6rowid,
1927 &v6cdat,
1928 &v6mdat,
1929 &v6ctyp,
1930 &v6cenc,
1931 &v6labl,
1932 &v6certalis,
1933 &v6subj,
1934 &v6issr,
1935 &v6slnr,
1936 &v6skid,
1937 &v6pkhh,
1938 &v6data,
1939 &v6agrp,
1940 &v6pdmn,
1941 &v6sync,
1942 &v6tomb,
1943 &v6sha1,
1944 &v7vwht,
1945 &v7tkid,
1946 &v6v_Data,
1947 &v6v_pk,
1948 &v6accc,
1949 &v7utomb,
1950 &v8musr,
1951 0
1952 },
1953 };
1954
1955 const SecDbClass v9_1_keys_class = {
1956 .name = CFSTR("keys91"),
1957 .itemclass = true,
1958 .attrs = {
1959 &v6rowid,
1960 &v6cdat,
1961 &v6mdat,
1962 &v6kcls,
1963 &v6labl,
1964 &v6alis,
1965 &v6perm,
1966 &v6priv,
1967 &v6modi,
1968 &v6klbl,
1969 &v6atag,
1970 &v6keycrtr,
1971 &v6keytype,
1972 &v6bsiz,
1973 &v6esiz,
1974 &v6sdat,
1975 &v6edat,
1976 &v6sens,
1977 &v6asen,
1978 &v6extr,
1979 &v6next,
1980 &v6encr,
1981 &v6decr,
1982 &v6drve,
1983 &v6sign,
1984 &v6vrfy,
1985 &v6snrc,
1986 &v6vyrc,
1987 &v6wrap,
1988 &v6unwp,
1989 &v6data,
1990 &v6agrp,
1991 &v6pdmn,
1992 &v6sync,
1993 &v6tomb,
1994 &v6sha1,
1995 &v7vwht,
1996 &v7tkid,
1997 &v6v_Data,
1998 &v6v_pk,
1999 &v6accc,
2000 &v7utomb,
2001 &v8musr,
2002 0
2003 }
2004 };
2005
2006 /*
2007 * Version 9.1 (iOS 10.0 and OSX 10.11.8/10.12 addded minor version.
2008 */
2009 const SecDbSchema v9_1_schema = {
2010 .majorVersion = 9,
2011 .minorVersion = 1,
2012 .classes = {
2013 &v9_1_genp_class,
2014 &v9_1_inet_class,
2015 &v9_1_cert_class,
2016 &v9_1_keys_class,
2017 &v9_1_tversion_class,
2018 0
2019 }
2020 };
2021
2022 const SecDbClass v9genp_class = {
2023 .name = CFSTR("genp9"),
2024 .itemclass = true,
2025 .attrs = {
2026 &v6rowid,
2027 &v6cdat,
2028 &v6mdat,
2029 &v6desc,
2030 &v6icmt,
2031 &v6crtr,
2032 &v6type,
2033 &v6scrp,
2034 &v6labl,
2035 &v6alis,
2036 &v6invi,
2037 &v6nega,
2038 &v6cusi,
2039 &v6prot,
2040 &v6acct,
2041 &v6svce,
2042 &v6gena,
2043 &v6data,
2044 &v6agrp,
2045 &v6pdmn,
2046 &v6sync,
2047 &v6tomb,
2048 &v6sha1,
2049 &v7vwht,
2050 &v7tkid,
2051 &v6v_Data,
2052 &v6v_pk,
2053 &v6accc,
2054 &v7utomb,
2055 &v8musr,
2056 0
2057 },
2058 };
2059
2060 const SecDbClass v9inet_class = {
2061 .name = CFSTR("inet9"),
2062 .itemclass = true,
2063 .attrs = {
2064 &v6rowid,
2065 &v6cdat,
2066 &v6mdat,
2067 &v6desc,
2068 &v6icmt,
2069 &v6crtr,
2070 &v6type,
2071 &v6scrp,
2072 &v6labl,
2073 &v6alis,
2074 &v6invi,
2075 &v6nega,
2076 &v6cusi,
2077 &v6prot,
2078 &v6acct,
2079 &v6sdmn,
2080 &v6srvr,
2081 &v6ptcl,
2082 &v6atyp,
2083 &v6port,
2084 &v6path,
2085 &v6data,
2086 &v6agrp,
2087 &v6pdmn,
2088 &v6sync,
2089 &v6tomb,
2090 &v6sha1,
2091 &v7vwht,
2092 &v7tkid,
2093 &v6v_Data,
2094 &v6v_pk,
2095 &v6accc,
2096 &v7utomb,
2097 &v8musr,
2098 0
2099 },
2100 };
2101
2102 const SecDbClass v9cert_class = {
2103 .name = CFSTR("cert9"),
2104 .itemclass = true,
2105 .attrs = {
2106 &v6rowid,
2107 &v6cdat,
2108 &v6mdat,
2109 &v6ctyp,
2110 &v6cenc,
2111 &v6labl,
2112 &v6certalis,
2113 &v6subj,
2114 &v6issr,
2115 &v6slnr,
2116 &v6skid,
2117 &v6pkhh,
2118 &v6data,
2119 &v6agrp,
2120 &v6pdmn,
2121 &v6sync,
2122 &v6tomb,
2123 &v6sha1,
2124 &v7vwht,
2125 &v7tkid,
2126 &v6v_Data,
2127 &v6v_pk,
2128 &v6accc,
2129 &v7utomb,
2130 &v8musr,
2131 0
2132 },
2133 };
2134
2135 const SecDbClass v9keys_class = {
2136 .name = CFSTR("keys9"),
2137 .itemclass = true,
2138 .attrs = {
2139 &v6rowid,
2140 &v6cdat,
2141 &v6mdat,
2142 &v6kcls,
2143 &v6labl,
2144 &v6alis,
2145 &v6perm,
2146 &v6priv,
2147 &v6modi,
2148 &v6klbl,
2149 &v6atag,
2150 &v6keycrtr,
2151 &v6keytype,
2152 &v6bsiz,
2153 &v6esiz,
2154 &v6sdat,
2155 &v6edat,
2156 &v6sens,
2157 &v6asen,
2158 &v6extr,
2159 &v6next,
2160 &v6encr,
2161 &v6decr,
2162 &v6drve,
2163 &v6sign,
2164 &v6vrfy,
2165 &v6snrc,
2166 &v6vyrc,
2167 &v6wrap,
2168 &v6unwp,
2169 &v6data,
2170 &v6agrp,
2171 &v6pdmn,
2172 &v6sync,
2173 &v6tomb,
2174 &v6sha1,
2175 &v7vwht,
2176 &v7tkid,
2177 &v6v_Data,
2178 &v6v_pk,
2179 &v6accc,
2180 &v7utomb,
2181 &v8musr,
2182 0
2183 }
2184 };
2185
2186 const SecDbClass v5tversion_class = {
2187 .name = CFSTR("tversion5"),
2188 .itemclass = false,
2189 .attrs = {
2190 &v6version,
2191 0
2192 }
2193 };
2194
2195 /* Version 9 (iOS 9.3 and OSX 10.11.5) database schema
2196 * Same contents as v8 tables; table names changed to force upgrade
2197 * and correct default values in table.
2198 */
2199 const SecDbSchema v9_schema = {
2200 .majorVersion = 9,
2201 .classes = {
2202 &v9genp_class,
2203 &v9inet_class,
2204 &v9cert_class,
2205 &v9keys_class,
2206 &v5tversion_class,
2207 0
2208 }
2209 };
2210
2211 // Version 8 (Internal release iOS 9.3 and OSX 10.11.5) database schema
2212 const SecDbClass v8genp_class = {
2213 .name = CFSTR("genp8"),
2214 .itemclass = true,
2215 .attrs = {
2216 &v6rowid,
2217 &v6cdat,
2218 &v6mdat,
2219 &v6desc,
2220 &v6icmt,
2221 &v6crtr,
2222 &v6type,
2223 &v6scrp,
2224 &v6labl,
2225 &v6alis,
2226 &v6invi,
2227 &v6nega,
2228 &v6cusi,
2229 &v6prot,
2230 &v6acct,
2231 &v6svce,
2232 &v6gena,
2233 &v6data,
2234 &v6agrp,
2235 &v6pdmn,
2236 &v6sync,
2237 &v6tomb,
2238 &v6sha1,
2239 &v7vwht,
2240 &v7tkid,
2241 &v6v_Data,
2242 &v6v_pk,
2243 &v6accc,
2244 &v7utomb,
2245 &v8musr,
2246 0
2247 },
2248 };
2249
2250 const SecDbClass v8inet_class = {
2251 .name = CFSTR("inet8"),
2252 .itemclass = true,
2253 .attrs = {
2254 &v6rowid,
2255 &v6cdat,
2256 &v6mdat,
2257 &v6desc,
2258 &v6icmt,
2259 &v6crtr,
2260 &v6type,
2261 &v6scrp,
2262 &v6labl,
2263 &v6alis,
2264 &v6invi,
2265 &v6nega,
2266 &v6cusi,
2267 &v6prot,
2268 &v6acct,
2269 &v6sdmn,
2270 &v6srvr,
2271 &v6ptcl,
2272 &v6atyp,
2273 &v6port,
2274 &v6path,
2275 &v6data,
2276 &v6agrp,
2277 &v6pdmn,
2278 &v6sync,
2279 &v6tomb,
2280 &v6sha1,
2281 &v7vwht,
2282 &v7tkid,
2283 &v6v_Data,
2284 &v6v_pk,
2285 &v6accc,
2286 &v7utomb,
2287 &v8musr,
2288 0
2289 },
2290 };
2291
2292 const SecDbClass v8cert_class = {
2293 .name = CFSTR("cert8"),
2294 .itemclass = true,
2295 .attrs = {
2296 &v6rowid,
2297 &v6cdat,
2298 &v6mdat,
2299 &v6ctyp,
2300 &v6cenc,
2301 &v6labl,
2302 &v6certalis,
2303 &v6subj,
2304 &v6issr,
2305 &v6slnr,
2306 &v6skid,
2307 &v6pkhh,
2308 &v6data,
2309 &v6agrp,
2310 &v6pdmn,
2311 &v6sync,
2312 &v6tomb,
2313 &v6sha1,
2314 &v7vwht,
2315 &v7tkid,
2316 &v6v_Data,
2317 &v6v_pk,
2318 &v6accc,
2319 &v7utomb,
2320 &v8musr,
2321 0
2322 },
2323 };
2324
2325 const SecDbClass v8keys_class = {
2326 .name = CFSTR("keys8"),
2327 .itemclass = true,
2328 .attrs = {
2329 &v6rowid,
2330 &v6cdat,
2331 &v6mdat,
2332 &v6kcls,
2333 &v6labl,
2334 &v6alis,
2335 &v6perm,
2336 &v6priv,
2337 &v6modi,
2338 &v6klbl,
2339 &v6atag,
2340 &v6keycrtr,
2341 &v6keytype,
2342 &v6bsiz,
2343 &v6esiz,
2344 &v6sdat,
2345 &v6edat,
2346 &v6sens,
2347 &v6asen,
2348 &v6extr,
2349 &v6next,
2350 &v6encr,
2351 &v6decr,
2352 &v6drve,
2353 &v6sign,
2354 &v6vrfy,
2355 &v6snrc,
2356 &v6vyrc,
2357 &v6wrap,
2358 &v6unwp,
2359 &v6data,
2360 &v6agrp,
2361 &v6pdmn,
2362 &v6sync,
2363 &v6tomb,
2364 &v6sha1,
2365 &v7vwht,
2366 &v7tkid,
2367 &v6v_Data,
2368 &v6v_pk,
2369 &v6accc,
2370 &v7utomb,
2371 &v8musr,
2372 0
2373 }
2374 };
2375
2376 const SecDbSchema v8_schema = {
2377 .majorVersion = 8,
2378 .classes = {
2379 &v8genp_class,
2380 &v8inet_class,
2381 &v8cert_class,
2382 &v8keys_class,
2383 &v5tversion_class,
2384 0
2385 }
2386 };
2387
2388 // Version 7 (iOS 9 and OSX 10.11) database schema
2389 const SecDbClass v7genp_class = {
2390 .name = CFSTR("genp7"),
2391 .itemclass = true,
2392 .attrs = {
2393 &v6rowid,
2394 &v6cdat,
2395 &v6mdat,
2396 &v6desc,
2397 &v6icmt,
2398 &v6crtr,
2399 &v6type,
2400 &v6scrp,
2401 &v6labl,
2402 &v6alis,
2403 &v6invi,
2404 &v6nega,
2405 &v6cusi,
2406 &v6prot,
2407 &v6acct,
2408 &v6svce,
2409 &v6gena,
2410 &v6data,
2411 &v6agrp,
2412 &v6pdmn,
2413 &v6sync,
2414 &v6tomb,
2415 &v6sha1,
2416 &v7vwht,
2417 &v7tkid,
2418 &v6v_Data,
2419 &v6v_pk,
2420 &v6accc,
2421 &v7utomb,
2422 0
2423 },
2424 };
2425
2426 const SecDbClass v7inet_class = {
2427 .name = CFSTR("inet7"),
2428 .itemclass = true,
2429 .attrs = {
2430 &v6rowid,
2431 &v6cdat,
2432 &v6mdat,
2433 &v6desc,
2434 &v6icmt,
2435 &v6crtr,
2436 &v6type,
2437 &v6scrp,
2438 &v6labl,
2439 &v6alis,
2440 &v6invi,
2441 &v6nega,
2442 &v6cusi,
2443 &v6prot,
2444 &v6acct,
2445 &v6sdmn,
2446 &v6srvr,
2447 &v6ptcl,
2448 &v6atyp,
2449 &v6port,
2450 &v6path,
2451 &v6data,
2452 &v6agrp,
2453 &v6pdmn,
2454 &v6sync,
2455 &v6tomb,
2456 &v6sha1,
2457 &v7vwht,
2458 &v7tkid,
2459 &v6v_Data,
2460 &v6v_pk,
2461 &v6accc,
2462 &v7utomb,
2463 0
2464 },
2465 };
2466
2467 const SecDbClass v7cert_class = {
2468 .name = CFSTR("cert7"),
2469 .itemclass = true,
2470 .attrs = {
2471 &v6rowid,
2472 &v6cdat,
2473 &v6mdat,
2474 &v6ctyp,
2475 &v6cenc,
2476 &v6labl,
2477 &v6certalis,
2478 &v6subj,
2479 &v6issr,
2480 &v6slnr,
2481 &v6skid,
2482 &v6pkhh,
2483 &v6data,
2484 &v6agrp,
2485 &v6pdmn,
2486 &v6sync,
2487 &v6tomb,
2488 &v6sha1,
2489 &v7vwht,
2490 &v7tkid,
2491 &v6v_Data,
2492 &v6v_pk,
2493 &v6accc,
2494 &v7utomb,
2495 0
2496 },
2497 };
2498
2499 const SecDbClass v7keys_class = {
2500 .name = CFSTR("keys7"),
2501 .itemclass = true,
2502 .attrs = {
2503 &v6rowid,
2504 &v6cdat,
2505 &v6mdat,
2506 &v6kcls,
2507 &v6labl,
2508 &v6alis,
2509 &v6perm,
2510 &v6priv,
2511 &v6modi,
2512 &v6klbl,
2513 &v6atag,
2514 &v6keycrtr,
2515 &v6keytype,
2516 &v6bsiz,
2517 &v6esiz,
2518 &v6sdat,
2519 &v6edat,
2520 &v6sens,
2521 &v6asen,
2522 &v6extr,
2523 &v6next,
2524 &v6encr,
2525 &v6decr,
2526 &v6drve,
2527 &v6sign,
2528 &v6vrfy,
2529 &v6snrc,
2530 &v6vyrc,
2531 &v6wrap,
2532 &v6unwp,
2533 &v6data,
2534 &v6agrp,
2535 &v6pdmn,
2536 &v6sync,
2537 &v6tomb,
2538 &v6sha1,
2539 &v7vwht,
2540 &v7tkid,
2541 &v6v_Data,
2542 &v6v_pk,
2543 &v6accc,
2544 &v7utomb,
2545 0
2546 }
2547 };
2548
2549
2550 const SecDbSchema v7_schema = {
2551 .majorVersion = 7,
2552 .classes = {
2553 &v7genp_class,
2554 &v7inet_class,
2555 &v7cert_class,
2556 &v7keys_class,
2557 &v5tversion_class,
2558 0
2559 }
2560 };
2561
2562
2563 // Version 6 (iOS 7 and OSX 10.9) database schema
2564 static const SecDbClass v6genp_class = {
2565 .name = CFSTR("genp6"),
2566 .itemclass = true,
2567 .attrs = {
2568 &v6rowid,
2569 &v6cdat,
2570 &v6mdat,
2571 &v6desc,
2572 &v6icmt,
2573 &v6crtr,
2574 &v6type,
2575 &v6scrp,
2576 &v6labl,
2577 &v6alis,
2578 &v6invi,
2579 &v6nega,
2580 &v6cusi,
2581 &v6prot,
2582 &v6acct,
2583 &v6svce,
2584 &v6gena,
2585 &v6data,
2586 &v6agrp,
2587 &v6pdmn,
2588 &v6sync,
2589 &v6tomb,
2590 &v6sha1,
2591 &v6v_Data,
2592 &v6v_pk,
2593 &v6accc,
2594 0
2595 },
2596 };
2597
2598 static const SecDbClass v6inet_class = {
2599 .name = CFSTR("inet6"),
2600 .itemclass = true,
2601 .attrs = {
2602 &v6rowid,
2603 &v6cdat,
2604 &v6mdat,
2605 &v6desc,
2606 &v6icmt,
2607 &v6crtr,
2608 &v6type,
2609 &v6scrp,
2610 &v6labl,
2611 &v6alis,
2612 &v6invi,
2613 &v6nega,
2614 &v6cusi,
2615 &v6prot,
2616 &v6acct,
2617 &v6sdmn,
2618 &v6srvr,
2619 &v6ptcl,
2620 &v6atyp,
2621 &v6port,
2622 &v6path,
2623 &v6data,
2624 &v6agrp,
2625 &v6pdmn,
2626 &v6sync,
2627 &v6tomb,
2628 &v6sha1,
2629 &v6v_Data,
2630 &v6v_pk,
2631 &v6accc,
2632 0
2633 },
2634 };
2635
2636 static const SecDbClass v6cert_class = {
2637 .name = CFSTR("cert6"),
2638 .itemclass = true,
2639 .attrs = {
2640 &v6rowid,
2641 &v6cdat,
2642 &v6mdat,
2643 &v6ctyp,
2644 &v6cenc,
2645 &v6labl,
2646 &v6certalis,
2647 &v6subj,
2648 &v6issr,
2649 &v6slnr,
2650 &v6skid,
2651 &v6pkhh,
2652 &v6data,
2653 &v6agrp,
2654 &v6pdmn,
2655 &v6sync,
2656 &v6tomb,
2657 &v6sha1,
2658 &v6v_Data,
2659 &v6v_pk,
2660 &v6accc,
2661 0
2662 },
2663 };
2664
2665 static const SecDbClass v6keys_class = {
2666 .name = CFSTR("keys6"),
2667 .itemclass = true,
2668 .attrs = {
2669 &v6rowid,
2670 &v6cdat,
2671 &v6mdat,
2672 &v6kcls,
2673 &v6labl,
2674 &v6alis,
2675 &v6perm,
2676 &v6priv,
2677 &v6modi,
2678 &v6klbl,
2679 &v6atag,
2680 &v6keycrtr,
2681 &v6keytype,
2682 &v6bsiz,
2683 &v6esiz,
2684 &v6sdat,
2685 &v6edat,
2686 &v6sens,
2687 &v6asen,
2688 &v6extr,
2689 &v6next,
2690 &v6encr,
2691 &v6decr,
2692 &v6drve,
2693 &v6sign,
2694 &v6vrfy,
2695 &v6snrc,
2696 &v6vyrc,
2697 &v6wrap,
2698 &v6unwp,
2699 &v6data,
2700 &v6agrp,
2701 &v6pdmn,
2702 &v6sync,
2703 &v6tomb,
2704 &v6sha1,
2705 &v6v_Data,
2706 &v6v_pk,
2707 &v6accc,
2708 0
2709 }
2710 };
2711
2712 static const SecDbSchema v6_schema = {
2713 .majorVersion = 6,
2714 .classes = {
2715 &v6genp_class,
2716 &v6inet_class,
2717 &v6cert_class,
2718 &v6keys_class,
2719 &v5tversion_class,
2720 0
2721 }
2722 };
2723
2724
2725 // Version 5 (iOS 5 & iOS 6) database schema.
2726 static const SecDbClass v5genp_class = {
2727 .name = CFSTR("genp5"),
2728 .itemclass = true,
2729 .attrs = {
2730 &v6rowid,
2731 &v6cdat,
2732 &v6mdat,
2733 &v6desc,
2734 &v6icmt,
2735 &v6crtr,
2736 &v6type,
2737 &v6scrp,
2738 &v6labl,
2739 &v6alis,
2740 &v6invi,
2741 &v6nega,
2742 &v6cusi,
2743 &v6prot,
2744 &v6acct,
2745 &v6svce,
2746 &v6gena,
2747 &v6data,
2748 &v6agrp,
2749 &v6pdmn,
2750 &v6v_Data,
2751 0
2752 },
2753 };
2754
2755 static const SecDbClass v5inet_class = {
2756 .name = CFSTR("inet5"),
2757 .itemclass = true,
2758 .attrs = {
2759 &v6rowid,
2760 &v6cdat,
2761 &v6mdat,
2762 &v6desc,
2763 &v6icmt,
2764 &v6crtr,
2765 &v6type,
2766 &v6scrp,
2767 &v6labl,
2768 &v6alis,
2769 &v6invi,
2770 &v6nega,
2771 &v6cusi,
2772 &v6prot,
2773 &v6acct,
2774 &v6sdmn,
2775 &v6srvr,
2776 &v6ptcl,
2777 &v6atyp,
2778 &v6port,
2779 &v6path,
2780 &v6data,
2781 &v6agrp,
2782 &v6pdmn,
2783 &v6v_Data,
2784 0
2785 },
2786 };
2787
2788 static const SecDbClass v5cert_class = {
2789 .name = CFSTR("cert5"),
2790 .itemclass = true,
2791 .attrs = {
2792 &v6rowid,
2793 &v6cdat,
2794 &v6mdat,
2795 &v6ctyp,
2796 &v6cenc,
2797 &v6labl,
2798 &v6certalis,
2799 &v6subj,
2800 &v6issr,
2801 &v6slnr,
2802 &v6skid,
2803 &v6pkhh,
2804 &v6data,
2805 &v6agrp,
2806 &v6pdmn,
2807 &v6v_Data,
2808 0
2809 },
2810 };
2811
2812 static const SecDbClass v5keys_class = {
2813 .name = CFSTR("keys5"),
2814 .itemclass = true,
2815 .attrs = {
2816 &v6rowid,
2817 &v6cdat,
2818 &v6mdat,
2819 &v6kcls,
2820 &v6labl,
2821 &v6alis,
2822 &v6perm,
2823 &v6priv,
2824 &v6modi,
2825 &v6klbl,
2826 &v6atag,
2827 &v6keycrtr,
2828 &v6keytype,
2829 &v6bsiz,
2830 &v6esiz,
2831 &v6sdat,
2832 &v6edat,
2833 &v6sens,
2834 &v6asen,
2835 &v6extr,
2836 &v6next,
2837 &v6encr,
2838 &v6decr,
2839 &v6drve,
2840 &v6sign,
2841 &v6vrfy,
2842 &v6snrc,
2843 &v6vyrc,
2844 &v6wrap,
2845 &v6unwp,
2846 &v6data,
2847 &v6agrp,
2848 &v6pdmn,
2849 &v6v_Data,
2850 0
2851 }
2852 };
2853
2854 static const SecDbSchema v5_schema = {
2855 .majorVersion = 5,
2856 .classes = {
2857 &v5genp_class,
2858 &v5inet_class,
2859 &v5cert_class,
2860 &v5keys_class,
2861 &v5tversion_class,
2862 0
2863 }
2864 };
2865
2866 SecDbSchema const * const * kc_schemas = NULL;
2867
2868 const SecDbSchema *v10_kc_schemas_dev[] = {
2869 &v12_0_schema,
2870 &v11_5_schema,
2871 &v11_4_schema,
2872 &v11_3_schema,
2873 &v11_2_schema,
2874 &v11_1_schema,
2875 &v11_schema,
2876 &v10_5_schema,
2877 &v10_4_schema,
2878 &v10_3_schema,
2879 &v10_2_schema,
2880 &v10_1_schema,
2881 &v10_0_schema,
2882 &v9_1_schema,
2883 &v9_schema,
2884 &v8_schema,
2885 &v7_schema,
2886 &v6_schema,
2887 &v5_schema,
2888 0
2889 };
2890
2891 const SecDbSchema *v10_kc_schemas[] = {
2892 &v11_5_schema,
2893 &v11_4_schema,
2894 &v11_3_schema,
2895 &v11_2_schema,
2896 &v11_1_schema,
2897 &v11_schema,
2898 &v10_5_schema,
2899 &v10_4_schema,
2900 &v10_3_schema,
2901 &v10_2_schema,
2902 &v10_1_schema,
2903 &v10_0_schema,
2904 &v9_1_schema,
2905 &v9_schema,
2906 &v8_schema,
2907 &v7_schema,
2908 &v6_schema,
2909 &v5_schema,
2910 0
2911 };
2912
2913 const SecDbSchema * const * all_schemas() {
2914 static dispatch_once_t onceToken;
2915 dispatch_once(&onceToken, ^{
2916 if (checkV12DevEnabled()) {
2917 secwarning("SecItemSchema: v12 development enabled, returning experimental schema");
2918 } else {
2919 secnotice("SecItemSchema", "v12 development disabled, returning production schemas");
2920 }
2921 });
2922 if (checkV12DevEnabled() != 0) {
2923 return v10_kc_schemas_dev;
2924 } else {
2925 return v10_kc_schemas;
2926 }
2927 }
2928
2929 const SecDbSchema* current_schema() {
2930 // For now, the current schema is the first in the list.
2931 return all_schemas()[0];
2932 }
2933
2934 // class accessors for current schema.
2935 static const SecDbClass* find_class(const SecDbSchema* schema, CFStringRef class_name) {
2936 for (const SecDbClass * const *pclass = schema->classes; *pclass; ++pclass) {
2937 if( CFEqualSafe((*pclass)->name, class_name) ) {
2938 return *pclass;
2939 }
2940 }
2941 return NULL;
2942 }
2943
2944 const SecDbClass* genp_class() {
2945 static const SecDbClass* genp = NULL;
2946 static dispatch_once_t onceToken;
2947 dispatch_once(&onceToken, ^{
2948 genp = find_class(current_schema(), CFSTR("genp"));
2949 });
2950 return genp;
2951 }
2952 const SecDbClass* inet_class() {
2953 static const SecDbClass* inet = NULL;
2954 static dispatch_once_t onceToken;
2955 dispatch_once(&onceToken, ^{
2956 inet = find_class(current_schema(), CFSTR("inet"));
2957 });
2958 return inet;
2959 }
2960 const SecDbClass* cert_class() {
2961 static const SecDbClass* cert = NULL;
2962 static dispatch_once_t onceToken;
2963 dispatch_once(&onceToken, ^{
2964 cert = find_class(current_schema(), CFSTR("cert"));
2965 });
2966 return cert;
2967 }
2968 const SecDbClass* keys_class() {
2969 static const SecDbClass* keys = NULL;
2970 static dispatch_once_t onceToken;
2971 dispatch_once(&onceToken, ^{
2972 keys = find_class(current_schema(), CFSTR("keys"));
2973 });
2974 return keys;
2975 }
2976
2977 // Not really a class per-se
2978 const SecDbClass* identity_class() {
2979 return &v_identity_class;
2980 }
2981
2982 // Class with 1 element in it which is the database version->
2983 const SecDbClass* tversion_class() {
2984 static const SecDbClass* tversion = NULL;
2985 static dispatch_once_t onceToken;
2986 dispatch_once(&onceToken, ^{
2987 tversion = find_class(current_schema(), CFSTR("tversion"));
2988 });
2989 return tversion;
2990 }
2991
2992