]> git.saurik.com Git - apple/security.git/blame - OSX/sec/securityd/SecItemSchema.c
Security-58286.1.32.tar.gz
[apple/security.git] / OSX / sec / securityd / SecItemSchema.c
CommitLineData
5c19dc3a
A
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>
866f8763 32#include <keychain/ckks/CKKS.h>
5c19dc3a
A
33
34// MARK -
35// MARK Keychain version 6 schema
36
37#define __FLAGS(ARG, ...) SECDBFLAGS(__VA_ARGS__)
38#define SECDBFLAGS(ARG, ...) __FLAGS_##ARG | __FLAGS(__VA_ARGS__)
39
866f8763 40#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)
5c19dc3a
A
41
42#define __FLAGS_ 0
43#define __FLAGS_P kSecDbPrimaryKeyFlag
44#define __FLAGS_L kSecDbInFlag
45#define __FLAGS_I kSecDbIndexFlag
46#define __FLAGS_S kSecDbSHA1ValueInFlag
47#define __FLAGS_A kSecDbReturnAttrFlag
48#define __FLAGS_D kSecDbReturnDataFlag
49#define __FLAGS_R kSecDbReturnRefFlag
50#define __FLAGS_C kSecDbInCryptoDataFlag
51#define __FLAGS_H kSecDbInHashFlag
52#define __FLAGS_B kSecDbInBackupFlag
53#define __FLAGS_Z kSecDbDefault0Flag
54#define __FLAGS_E kSecDbDefaultEmptyFlag
55#define __FLAGS_N kSecDbNotNullFlag
56#define __FLAGS_U kSecDbInAuthenticatedDataFlag
e3d460c9
A
57#define __FLAGS_V0 kSecDbSyncPrimaryKeyV0
58#define __FLAGS_V2 (kSecDbSyncPrimaryKeyV0 | kSecDbSyncPrimaryKeyV2)
866f8763 59#define __FLAGS_Y kSecDbSyncFlag
5c19dc3a 60
866f8763
A
61// ,----------------- P : Part of primary key
62// / ,---------------- L : Stored in local database
63// / / ,--------------- I : Attribute wants an index in the database
64// / / / ,-------------- S : SHA1 hashed attribute value in database (implies L)
65// / / / / ,------------- A : Returned to client as attribute in queries
66// / / / / / ,------------ D : Returned to client as data in queries
67// / / / / / / ,----------- R : Returned to client as ref/persistent ref in queries
68// / / / / / / / ,---------- C : Part of encrypted blob
69// / / / / / / / / ,--------- H : Attribute is part of item SHA1 hash (Implied by C)
70// / / / / / / / / / ,-------- B : Attribute is part of iTunes/iCloud backup bag
71// / / / / / / / / / / ,------- Z : Attribute has a default value of 0
72// / / / / / / / / / / / ,------ E : Attribute has a default value of "" or empty data
73// / / / / / / / / / / / / ,----- N : Attribute must have a value
74// / / / / / / / / / / / / / ,---- U : Attribute is stored in authenticated, but not necessarily encrypted data
75// / / / / / / / / / / / / / / ,--- V0: Sync primary key version
76// / / / / / / / / / / / / / / / ,- Y : Attribute should be synced
77// | | | | | | | | | | | | | | | |
78// common to all | | | | | | | | | | | | | | | |
79SECDB_ATTR(v6rowid, "rowid", RowId, SecDbFlags( ,L, , , , ,R, , ,B, , , , , , ), NULL, NULL);
80SECDB_ATTR(v6cdat, "cdat", CreationDate, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), SecDbKeychainItemCopyCurrentDate, NULL);
81SECDB_ATTR(v6mdat, "mdat",ModificationDate,SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), SecDbKeychainItemCopyCurrentDate, NULL);
82SECDB_ATTR(v6labl, "labl", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
83SECDB_ATTR(v6data, "data", EncryptedData, SecDbFlags( ,L, , , , , , , ,B, , , , , , ), SecDbKeychainItemCopyEncryptedData, NULL);
84SECDB_ATTR(v6agrp, "agrp", String, SecDbFlags(P,L, , ,A, , , ,H, , , ,N,U,V0,Y), NULL, NULL);
85SECDB_ATTR(v6pdmn, "pdmn", Access, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
86SECDB_ATTR(v6sync, "sync", Sync, SecDbFlags(P,L,I, ,A, , , ,H, ,Z, ,N,U,V0, ), NULL, NULL);
87SECDB_ATTR(v6tomb, "tomb", Tomb, SecDbFlags( ,L, , , , , , ,H, ,Z, ,N,U, ,Y), NULL, NULL);
88SECDB_ATTR(v6sha1, "sha1", SHA1, SecDbFlags( ,L,I, ,A, ,R, , , , , , , , ,Y), SecDbKeychainItemCopySHA1, NULL);
89SECDB_ATTR(v6accc, "accc", AccessControl, SecDbFlags( , , , ,A, , , , , , , , , , , ), NULL, NULL);
90SECDB_ATTR(v6v_Data, "v_Data", Data, SecDbFlags( , , , , ,D, ,C,H, , , , , , ,Y), NULL, NULL);
91SECDB_ATTR(v6v_pk, "v_pk", PrimaryKey, SecDbFlags( , , , , , , , , , , , , , , , ), SecDbKeychainItemCopyPrimaryKey, NULL);
92SECDB_ATTR(v7vwht, "vwht", String, SecDbFlags(P,L, , ,A, , , ,H, , , , ,U,V2,Y), NULL, NULL);
93SECDB_ATTR(v7tkid, "tkid", String, SecDbFlags(P,L, , ,A, , , ,H, , , , ,U,V2,Y), NULL, NULL);
94SECDB_ATTR(v7utomb, "u_Tomb", UTomb, SecDbFlags( , , , , , , , , , , , , , , , ), NULL, NULL);
95SECDB_ATTR(v8musr, "musr", UUID, SecDbFlags(P,L,I, , , , , , , , , ,N,U, ,Y), NULL, NULL);
96// genp and inet and keys | | | | | | | | | | | | | | | |
97SECDB_ATTR(v6crtr, "crtr", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
98SECDB_ATTR(v6alis, "alis", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
99// genp and inet | | | | | | | | | | | | | | | |
100SECDB_ATTR(v6desc, "desc", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
101SECDB_ATTR(v6icmt, "icmt", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
102SECDB_ATTR(v6type, "type", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
103SECDB_ATTR(v6invi, "invi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
104SECDB_ATTR(v6nega, "nega", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
105SECDB_ATTR(v6cusi, "cusi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
106SECDB_ATTR(v6prot, "prot", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
107SECDB_ATTR(v6scrp, "scrp", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
108SECDB_ATTR(v6acct, "acct", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
109// genp only | | | | | | | | | | | | | | | |
110SECDB_ATTR(v6svce, "svce", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
111SECDB_ATTR(v6gena, "gena", Blob, SecDbFlags( ,L, ,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
112// inet only | | | | | | | | | | | | | | | |
113SECDB_ATTR(v6sdmn, "sdmn", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
114SECDB_ATTR(v6srvr, "srvr", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
115SECDB_ATTR(v6ptcl, "ptcl", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
116SECDB_ATTR(v6atyp, "atyp", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
117SECDB_ATTR(v6port, "port", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
118SECDB_ATTR(v6path, "path", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
119// cert only | | | | | | | | | | | | | | | |
120SECDB_ATTR(v6ctyp, "ctyp", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
121SECDB_ATTR(v6cenc, "cenc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
122SECDB_ATTR(v6subj, "subj", Data, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
123SECDB_ATTR(v6issr, "issr", Data, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
124SECDB_ATTR(v6slnr, "slnr", Data, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
125SECDB_ATTR(v6skid, "skid", Data, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
126SECDB_ATTR(v6pkhh, "pkhh", Data, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
5c19dc3a 127// cert attributes that share names with common ones but have different flags
866f8763
A
128SECDB_ATTR(v6certalis, "alis", Blob, SecDbFlags( ,L,I,S,A, , ,C,H, , , , , , ,Y), NULL, NULL);
129// keys only | | | | | | | | | | | | | | | |
130SECDB_ATTR(v6kcls, "kcls", Number, SecDbFlags(P,L,I,S,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
131SECDB_ATTR(v6perm, "perm", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
132SECDB_ATTR(v6priv, "priv", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
133SECDB_ATTR(v6modi, "modi", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
134SECDB_ATTR(v6klbl, "klbl", Data, SecDbFlags(P,L,I, ,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
135SECDB_ATTR(v6atag, "atag", Blob, SecDbFlags(P,L, ,S,A, , ,C,H, , ,E,N, ,V0,Y), NULL, NULL);
136SECDB_ATTR(v6bsiz, "bsiz", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
137SECDB_ATTR(v6esiz, "esiz", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
138SECDB_ATTR(v6sdat, "sdat", Date, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
139SECDB_ATTR(v6edat, "edat", Date, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
140SECDB_ATTR(v6sens, "sens", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
141SECDB_ATTR(v6asen, "asen", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
142SECDB_ATTR(v6extr, "extr", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
143SECDB_ATTR(v6next, "next", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
144SECDB_ATTR(v6encr, "encr", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
145SECDB_ATTR(v6decr, "decr", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
146SECDB_ATTR(v6drve, "drve", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
147SECDB_ATTR(v6sign, "sign", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
148SECDB_ATTR(v6vrfy, "vrfy", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
149SECDB_ATTR(v6snrc, "snrc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
150SECDB_ATTR(v6vyrc, "vyrc", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
151SECDB_ATTR(v6wrap, "wrap", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
152SECDB_ATTR(v6unwp, "unwp", Number, SecDbFlags( ,L,I, ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
5c19dc3a 153// keys attributes that share names with common ones but have different flags
866f8763
A
154SECDB_ATTR(v6keytype, "type", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
155SECDB_ATTR(v6keycrtr, "crtr", Number, SecDbFlags(P,L, , ,A, , ,C,H, ,Z, ,N, ,V0,Y), NULL, NULL);
e3d460c9 156// | | | | | | | | | | | | | | |
866f8763
A
157SECDB_ATTR(v6version, "version", Number, SecDbFlags(P,L, , , , , , , , , , ,N, , ,Y), NULL, NULL);
158SECDB_ATTR(v91minor, "minor", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , ,Y), NULL, NULL);
159
160SECDB_ATTR(v10_1pcsservice, "pcss", Number, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
161SECDB_ATTR(v10_1pcspublickey, "pcsk", Blob, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
162SECDB_ATTR(v10_1pcspublicidentity,"pcsi", Blob, SecDbFlags( ,L, , ,A, , ,C,H, , , , , , ,Y), NULL, NULL);
163
164SECDB_ATTR(v10itemuuid, "UUID", String, SecDbFlags( ,L, , , , , , , , , , , ,U, , ), NULL, NULL);
165SECDB_ATTR(v10syncuuid, "UUID", String, SecDbFlags(P,L, , , , , , , , , , , ,U, , ), NULL, NULL);
166SECDB_ATTR(v10parentKeyUUID, "parentKeyUUID", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
167SECDB_ATTR(v10currentKeyUUID,"currentKeyUUID",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
168SECDB_ATTR(v10wrappedkey, "wrappedkey", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
169SECDB_ATTR(v10encrypteditem, "encitem", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
170SECDB_ATTR(v10gencount, "gencount", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
171SECDB_ATTR(v10action, "action", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
172SECDB_ATTR(v10state, "state", String, SecDbFlags(P,L, , , , , , , , , , ,N, , , ), NULL, NULL);
173SECDB_ATTR(v10waituntiltime, "waituntil", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
174SECDB_ATTR(v10encodedCKRecord, "ckrecord", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
175SECDB_ATTR(v10_1wasCurrent, "wascurrent", Number, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
176SECDB_ATTR(v10accessgroup, "accessgroup", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
177SECDB_ATTR(v10keyclass, "keyclass", String, SecDbFlags(P,L, , , , , , , , , , ,N, , , ), NULL, NULL);
178SECDB_ATTR(v10currentkey, "currentkey", Number, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
179SECDB_ATTR(v10ckzone, "ckzone", String, SecDbFlags(P,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
180SECDB_ATTR(v10ckzonecreated, "ckzonecreated", Number, SecDbFlags( ,L, , , , , , , , ,Z, , ,N, , ), NULL, NULL);
181SECDB_ATTR(v10ckzonesubscribed,"ckzonesubscribed", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N, , , ), NULL, NULL);
182SECDB_ATTR(v10ratelimiter, "ratelimiter", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
183SECDB_ATTR(v10changetoken, "changetoken", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
184SECDB_ATTR(v10lastfetchtime, "lastfetch", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
185SECDB_ATTR(v10itempersistentref,"persistref", UUID, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
186SECDB_ATTR(v10sysbound, "sysb", Number, SecDbFlags( ,L, , ,A, , ,C,H, ,Z, , , , , ), NULL, NULL);
187SECDB_ATTR(v10encryptionver, "encver", Number, SecDbFlags( ,L, , , , , , , , ,Z, ,N,U, , ), NULL, NULL);
188
189SECDB_ATTR(v10primaryKey, "primaryKey", String, SecDbFlags(P,L, , ,A, , , , , , , ,N,U, , ), NULL, NULL);
190SECDB_ATTR(v10publickeyHash, "publickeyHash", Blob, SecDbFlags(P,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
191SECDB_ATTR(v10publickey, "publickey", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
192SECDB_ATTR(v10backupData, "backupData", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
193
194SECDB_ATTR(v10_1digest, "digest", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
195SECDB_ATTR(v10_1signatures, "signatures", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
196SECDB_ATTR(v10_1signerID, "signerID", String, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
197SECDB_ATTR(v10_1leafIDs, "leafIDs", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
198SECDB_ATTR(v10_1peerManIDs, "peerManifests", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
199SECDB_ATTR(v10_1entryDigests,"entryDigests", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
200SECDB_ATTR(v10_2currentItems,"currentItems", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
201SECDB_ATTR(v10_2futureData, "futureData", Blob, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
202SECDB_ATTR(v10_2schema, "schema", Blob, SecDbFlags( ,L, , , , , , , , , , ,N,U, , ), NULL, NULL);
203SECDB_ATTR(v10_1encRecord, "ckrecord", Blob, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
204
205SECDB_ATTR(v10_1keyArchiveHash, "key_archive_hash", String, SecDbFlags(P,L, , , , , , , , , , ,N, , , ), NULL, NULL);
206SECDB_ATTR(v10_1keyArchive, "key_archive", String, SecDbFlags(P,L, , , , , , , , , , ,N, , , ), NULL, NULL);
207SECDB_ATTR(v10_1archivedKey, "archived_key", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
208SECDB_ATTR(v10_1keyArchiveName, "keyarchive_name", String, SecDbFlags( ,L, , , , , , , , , , ,N, , , ), NULL, NULL);
209SECDB_ATTR(v10_1optionalEncodedCKRecord, "ckrecord", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
210SECDB_ATTR(v10_1archiveEscrowID,"archive_escrowid", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
211
212SECDB_ATTR(v10_1itempersistentref,"persistref", UUID, SecDbFlags( ,L,I, , , , , , , , , ,N,U, , ), NULL, NULL);
213
214SECDB_ATTR(v10_1currentItemUUID,"currentItemUUID",String, SecDbFlags(P,L, , , , , , , , , , , , , , ), NULL, NULL);
215SECDB_ATTR(v10_1currentPtrIdentifier,"identifier",String, SecDbFlags(P,L, , , , , , , , , , , , , , ), NULL, NULL);
216
217SECDB_ATTR(v10_2device, "device", String, SecDbFlags(P,L, , , , , , , , , , , , , , ), NULL, NULL);
218SECDB_ATTR(v10_2peerid, "peerid", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
219SECDB_ATTR(v10_2circleStatus,"circlestatus", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
220SECDB_ATTR(v10_2keyState, "keystate", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
221SECDB_ATTR(v10_2currentTLK, "currentTLK", String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
222SECDB_ATTR(v10_2currentClassA,"currentClassA",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
223SECDB_ATTR(v10_2currentClassC,"currentClassC",String, SecDbFlags( ,L, , , , , , , , , , , , , , ), NULL, NULL);
224
225const SecDbClass v10_3_ckdevicestate_class = {
226 .name = CFSTR("ckdevicestate"),
227 .itemclass = false,
228 .attrs = {
229 &v10ckzone,
230 &v10_2device,
231 &v10_2peerid,
232 &v10_2circleStatus,
233 &v10_2keyState,
234 &v10_2currentTLK,
235 &v10_2currentClassA,
236 &v10_2currentClassC,
237 &v10_1encRecord,
238 0
239 }
240};
241
242const SecDbClass v10_2_ckmanifest_class = {
243 .name = CFSTR("ckmanifest"),
244 .itemclass = false,
245 .attrs = {
246 &v10ckzone,
247 &v10gencount,
248 &v10_1digest,
249 &v10_1signatures,
250 &v10_1signerID,
251 &v10_1leafIDs,
252 &v10_1peerManIDs,
253 &v10_2currentItems,
254 &v10_2futureData,
255 &v10_2schema,
256 &v10_1encRecord,
257 0
258 }
259};
260
261const SecDbClass v10_2_pending_manifest_class = {
262 .name = CFSTR("pending_manifest"),
263 .itemclass = false,
264 .attrs = {
265 &v10ckzone,
266 &v10gencount,
267 &v10_1digest,
268 &v10_1signatures,
269 &v10_1signerID,
270 &v10_1leafIDs,
271 &v10_1peerManIDs,
272 &v10_2currentItems,
273 &v10_2futureData,
274 &v10_2schema,
275 &v10_1encRecord,
276 0
277 }
278};
279
280const SecDbClass v10_1_ckmanifest_class = {
281 .name = CFSTR("ckmanifest"),
282 .itemclass = false,
283 .attrs = {
284 &v10ckzone,
285 &v10gencount,
286 &v10_1digest,
287 &v10_1signatures,
288 &v10_1signerID,
289 &v10_1leafIDs,
290 &v10_1peerManIDs,
291 &v10_1encRecord,
292 0
293 }
294};
295
296const SecDbClass v10_1_pending_manifest_class = {
297 .name = CFSTR("pending_manifest"),
298 .itemclass = false,
299 .attrs = {
300 &v10ckzone,
301 &v10gencount,
302 &v10_1digest,
303 &v10_1signatures,
304 &v10_1signerID,
305 &v10_1leafIDs,
306 &v10_1peerManIDs,
307 &v10_1encRecord,
308 0
309 }
310};
311
312const SecDbClass v10_1_ckmanifest_leaf_class = {
313 .name = CFSTR("ckmanifest_leaf"),
314 .itemclass = false,
315 .attrs = {
316 &v10ckzone,
317 &v10syncuuid,
318 &v10_1digest,
319 &v10_1entryDigests,
320 &v10_1encRecord,
321 0
322 }
323};
5c19dc3a 324
866f8763
A
325const SecDbClass v10_1_pending_manifest_leaf_class = {
326 .name = CFSTR("pending_manifest_leaf"),
327 .itemclass = false,
328 .attrs = {
329 &v10ckzone,
330 &v10syncuuid,
331 &v10_1digest,
332 &v10_1entryDigests,
333 &v10_1encRecord,
334 0
335 }
336};
337
338const SecDbClass v10_1_genp_class = {
5c19dc3a 339 .name = CFSTR("genp"),
866f8763 340 .itemclass = true,
5c19dc3a
A
341 .attrs = {
342 &v6rowid,
343 &v6cdat,
344 &v6mdat,
345 &v6desc,
346 &v6icmt,
347 &v6crtr,
348 &v6type,
349 &v6scrp,
350 &v6labl,
351 &v6alis,
352 &v6invi,
353 &v6nega,
354 &v6cusi,
355 &v6prot,
356 &v6acct,
357 &v6svce,
358 &v6gena,
359 &v6data,
360 &v6agrp,
361 &v6pdmn,
362 &v6sync,
363 &v6tomb,
364 &v6sha1,
365 &v7vwht,
366 &v7tkid,
367 &v6v_Data,
368 &v6v_pk,
369 &v6accc,
370 &v7utomb,
e3d460c9 371 &v8musr,
866f8763
A
372 &v10itemuuid,
373 &v10sysbound,
374 &v10_1pcsservice,
375 &v10_1pcspublickey,
376 &v10_1pcspublicidentity,
377 &v10_1itempersistentref,
5c19dc3a
A
378 0
379 },
380};
381
866f8763 382const SecDbClass v10_1_inet_class = {
5c19dc3a 383 .name = CFSTR("inet"),
866f8763 384 .itemclass = true,
5c19dc3a
A
385 .attrs = {
386 &v6rowid,
387 &v6cdat,
388 &v6mdat,
389 &v6desc,
390 &v6icmt,
391 &v6crtr,
392 &v6type,
393 &v6scrp,
394 &v6labl,
395 &v6alis,
396 &v6invi,
397 &v6nega,
398 &v6cusi,
399 &v6prot,
400 &v6acct,
401 &v6sdmn,
402 &v6srvr,
403 &v6ptcl,
404 &v6atyp,
405 &v6port,
406 &v6path,
407 &v6data,
408 &v6agrp,
409 &v6pdmn,
410 &v6sync,
411 &v6tomb,
412 &v6sha1,
413 &v7vwht,
414 &v7tkid,
415 &v6v_Data,
416 &v6v_pk,
417 &v6accc,
418 &v7utomb,
e3d460c9 419 &v8musr,
866f8763
A
420 &v10itemuuid,
421 &v10sysbound,
422 &v10_1pcsservice,
423 &v10_1pcspublickey,
424 &v10_1pcspublicidentity,
425 &v10_1itempersistentref,
5c19dc3a
A
426 0
427 },
428};
429
866f8763 430const SecDbClass v10_1_cert_class = {
5c19dc3a 431 .name = CFSTR("cert"),
866f8763 432 .itemclass = true,
5c19dc3a
A
433 .attrs = {
434 &v6rowid,
435 &v6cdat,
436 &v6mdat,
437 &v6ctyp,
438 &v6cenc,
439 &v6labl,
440 &v6certalis,
441 &v6subj,
442 &v6issr,
443 &v6slnr,
444 &v6skid,
445 &v6pkhh,
446 &v6data,
447 &v6agrp,
448 &v6pdmn,
449 &v6sync,
450 &v6tomb,
451 &v6sha1,
452 &v7vwht,
453 &v7tkid,
454 &v6v_Data,
455 &v6v_pk,
456 &v6accc,
457 &v7utomb,
e3d460c9 458 &v8musr,
866f8763
A
459 &v10itemuuid,
460 &v10sysbound,
461 &v10_1pcsservice,
462 &v10_1pcspublickey,
463 &v10_1pcspublicidentity,
464 &v10_1itempersistentref,
5c19dc3a
A
465 0
466 },
467};
468
866f8763 469const SecDbClass v10_1_keys_class = {
5c19dc3a 470 .name = CFSTR("keys"),
866f8763 471 .itemclass = true,
5c19dc3a
A
472 .attrs = {
473 &v6rowid,
474 &v6cdat,
475 &v6mdat,
476 &v6kcls,
477 &v6labl,
478 &v6alis,
479 &v6perm,
480 &v6priv,
481 &v6modi,
482 &v6klbl,
483 &v6atag,
484 &v6keycrtr,
485 &v6keytype,
486 &v6bsiz,
487 &v6esiz,
488 &v6sdat,
489 &v6edat,
490 &v6sens,
491 &v6asen,
492 &v6extr,
493 &v6next,
494 &v6encr,
495 &v6decr,
496 &v6drve,
497 &v6sign,
498 &v6vrfy,
499 &v6snrc,
500 &v6vyrc,
501 &v6wrap,
502 &v6unwp,
503 &v6data,
504 &v6agrp,
505 &v6pdmn,
506 &v6sync,
507 &v6tomb,
508 &v6sha1,
509 &v7vwht,
510 &v7tkid,
511 &v6v_Data,
512 &v6v_pk,
513 &v6accc,
514 &v7utomb,
e3d460c9 515 &v8musr,
866f8763
A
516 &v10itemuuid,
517 &v10sysbound,
518 &v10_1pcsservice,
519 &v10_1pcspublickey,
520 &v10_1pcspublicidentity,
521 &v10_1itempersistentref,
5c19dc3a
A
522 0
523 }
524};
525
866f8763 526const SecDbClass v10_0_tversion_class = {
5c19dc3a 527 .name = CFSTR("tversion"),
866f8763 528 .itemclass = false,
5c19dc3a 529 .attrs = {
fa7225c8 530 &v6rowid,
5c19dc3a 531 &v6version,
fa7225c8 532 &v91minor,
5c19dc3a
A
533 0
534 }
535};
536
866f8763
A
537const SecDbClass v10_2_outgoing_queue_class = {
538 .name = CFSTR("outgoingqueue"),
539 .itemclass = false,
540 .attrs = {
541 &v10ckzone,
542 &v10syncuuid,
543 &v10parentKeyUUID,
544 &v10action,
545 &v10state,
546 &v10waituntiltime,
547 &v10accessgroup,
548 &v10gencount,
549 &v10wrappedkey,
550 &v10encrypteditem,
551 &v10encryptionver,
552 &v10_1optionalEncodedCKRecord,
553 &v10_1pcsservice,
554 &v10_1pcspublickey,
555 &v10_1pcspublicidentity,
556 0
557 }
558};
559
560const SecDbClass v10_2_incoming_queue_class = {
561 .name = CFSTR("incomingqueue"),
562 .itemclass = false,
563 .attrs = {
564 &v10ckzone,
565 &v10syncuuid,
566 &v10parentKeyUUID,
567 &v10action,
568 &v10state,
569 &v10gencount,
570 &v10wrappedkey,
571 &v10encrypteditem,
572 &v10encryptionver,
573 &v10_1optionalEncodedCKRecord,
574 &v10_1pcsservice,
575 &v10_1pcspublickey,
576 &v10_1pcspublicidentity,
577 0
578 }
579};
580
581
582const SecDbClass v10_1_outgoing_queue_class = {
583 .name = CFSTR("outgoingqueue"),
584 .itemclass = false,
585 .attrs = {
586 &v10ckzone,
587 &v10syncuuid,
588 &v10parentKeyUUID,
589 &v10action,
590 &v10state,
591 &v10waituntiltime,
592 &v10accessgroup,
593 &v10gencount,
594 &v10wrappedkey,
595 &v10encrypteditem,
596 &v10encryptionver,
597 &v10_1pcsservice,
598 &v10_1pcspublickey,
599 &v10_1pcspublicidentity,
600 0
601 }
602};
603
604const SecDbClass v10_1_incoming_queue_class = {
605 .name = CFSTR("incomingqueue"),
606 .itemclass = false,
607 .attrs = {
608 &v10ckzone,
609 &v10syncuuid,
610 &v10parentKeyUUID,
611 &v10action,
612 &v10state,
613 &v10gencount,
614 &v10wrappedkey,
615 &v10encrypteditem,
616 &v10encryptionver,
617 &v10_1pcsservice,
618 &v10_1pcspublickey,
619 &v10_1pcspublicidentity,
620 0
621 }
622};
623
624
625const SecDbClass v10_0_outgoing_queue_class = {
626 .name = CFSTR("outgoingqueue"),
627 .itemclass = false,
628 .attrs = {
629 &v10ckzone,
630 &v10syncuuid,
631 &v10parentKeyUUID,
632 &v10action,
633 &v10state,
634 &v10waituntiltime,
635 &v10accessgroup,
636 &v10gencount,
637 &v10wrappedkey,
638 &v10encrypteditem,
639 &v10encryptionver,
640 0
641 }
642};
643
644const SecDbClass v10_0_incoming_queue_class = {
645 .name = CFSTR("incomingqueue"),
646 .itemclass = false,
647 .attrs = {
648 &v10ckzone,
649 &v10syncuuid,
650 &v10parentKeyUUID,
651 &v10action,
652 &v10state,
653 &v10gencount,
654 &v10wrappedkey,
655 &v10encrypteditem,
656 &v10encryptionver,
657 0
658 }
659};
660
661const SecDbClass v10_0_sync_key_class = {
662 .name = CFSTR("synckeys"),
663 .itemclass = false,
664 .attrs = {
665 &v10ckzone,
666 &v10syncuuid,
667 &v10keyclass,
668 &v10currentkey,
669 &v10parentKeyUUID,
670 &v10state,
671 &v10wrappedkey,
672 &v10encodedCKRecord,
673 0
674 }
675};
676
677// Stores the "Current Key" records, and parentKeyUUID refers to items in the synckeys table
678// Wouldn't foreign keys be nice?
679const SecDbClass v10_0_current_key_class = {
680 .name = CFSTR("currentkeys"),
681 .itemclass = false,
682 .attrs = {
683 &v10ckzone,
684 &v10keyclass,
685 &v10currentKeyUUID,
686 &v10encodedCKRecord,
687 0
688 }
689};
690
691const SecDbClass v10_1_current_item_class = {
692 .name = CFSTR("currentitems"),
693 .itemclass = false,
694 .attrs = {
695 &v10ckzone,
696 &v10_1currentPtrIdentifier,
697 &v10_1currentItemUUID,
698 &v10state,
699 &v10encodedCKRecord,
700 0
701 }
702};
703
704const SecDbClass v10_1_ckmirror_class = {
705 .name = CFSTR("ckmirror"),
706 .itemclass = false,
707 .attrs = {
708 &v10ckzone,
709 &v10syncuuid,
710 &v10parentKeyUUID,
711 &v10gencount,
712 &v10wrappedkey,
713 &v10encrypteditem,
714 &v10encodedCKRecord,
715 &v10encryptionver,
716 &v10_1wasCurrent,
717 &v10_1pcsservice,
718 &v10_1pcspublickey,
719 &v10_1pcspublicidentity,
720 0
721 }
722};
723
724const SecDbClass v10_0_ckmirror_class = {
725 .name = CFSTR("ckmirror"),
726 .itemclass = false,
727 .attrs = {
728 &v10ckzone,
729 &v10syncuuid,
730 &v10parentKeyUUID,
731 &v10gencount,
732 &v10wrappedkey,
733 &v10encrypteditem,
734 &v10encodedCKRecord,
735 &v10encryptionver,
736 0
737 }
738};
739
740const SecDbClass v10_0_ckstate_class = {
741 .name = CFSTR("ckstate"),
742 .itemclass = false,
743 .attrs = {
744 &v10ckzone,
745 &v10ckzonecreated,
746 &v10ckzonesubscribed,
747 &v10lastfetchtime,
748 &v10changetoken,
749 &v10ratelimiter,
750 0
751 }
752};
753
754/* Backup table */
755/* Primary keys: v10primaryKey, v8musr */
756const SecDbClass v10_0_item_backup_class = {
757 .name = CFSTR("item_backup"),
758 .itemclass = false,
759 .attrs = {
760 &v6rowid,
761 &v10primaryKey, // Primary key of the original item, from v6v_pk
762 &v8musr, //
763 &v6sha1, // Hash of the original item
764 &v10backupData, // Data wrapped to backup keybag
765 &v6pkhh, // Hash of the public key of the backup bag [v10publickeyHash]
766 0
767 }
768};
769
770/* Backup Keybag table */
771/* Primary keys: v10publickeyHash, v8musr */
772const SecDbClass v10_0_backup_keybag_class = {
773 .name = CFSTR("backup_keybag"),
774 .itemclass = false,
775 .attrs = {
776 &v6rowid,
777 &v10publickeyHash, // Hash of the public key of the backup bag
778 &v8musr, //
779 &v10publickey, // Public key for the asymmetric backup bag
780 &v6agrp, // Used for backup agent
781 0
782 }
783};
784
785const SecDbClass v10_1_backup_keyarchive_class = {
786 .name = CFSTR("backup_keyarchive"),
787 .itemclass = false,
788 .attrs = {
789 &v10_1keyArchiveHash, // Hash of the key archive
790 &v8musr, //
791 &v10_1keyArchive, // Serialised key archive
792 &v10ckzone,
793 &v10_1optionalEncodedCKRecord,
794 &v10_1archiveEscrowID,
795 0
796 }
797};
798
799const SecDbClass v10_1_current_archived_keys_class = {
800 .name = CFSTR("archived_key_backup"),
801 .itemclass = false,
802 .attrs = {
803 &v6pdmn,
804 &v10syncuuid,
805 &v8musr,
806 &v6agrp,
807 &v10_1keyArchiveHash,
808 &v10_1archivedKey,
809 &v10ckzone,
810 &v10_1optionalEncodedCKRecord,
811 &v10_1archiveEscrowID,
812 0
813 }
814};
815
816const SecDbClass v10_1_current_keyarchive_class = {
817 .name = CFSTR("currentkeyarchives"),
818 .itemclass = false,
819 .attrs = {
820 &v10_1keyArchiveHash,
821 &v10_1keyArchiveName,
822 0
823 }
824};
825
5c19dc3a
A
826/* An identity which is really a cert + a key, so all cert and keys attrs are
827 allowed. */
866f8763 828const SecDbClass v_identity_class = {
5c19dc3a 829 .name = CFSTR("idnt"),
866f8763
A
830 .itemclass = true,
831 .attrs = {
832 0
833 },
834};
835
836/*
837 * Version 10.3
838 */
839const SecDbSchema v10_3_schema = {
840 .majorVersion = 10,
841 .minorVersion = 3,
842 .classes = {
843 &v10_1_genp_class,
844 &v10_1_inet_class,
845 &v10_1_cert_class,
846 &v10_1_keys_class,
847 &v10_0_tversion_class,
848 &v10_2_outgoing_queue_class,
849 &v10_2_incoming_queue_class,
850 &v10_0_sync_key_class,
851 &v10_1_ckmirror_class,
852 &v10_0_current_key_class,
853 &v10_0_ckstate_class,
854 &v10_0_item_backup_class,
855 &v10_0_backup_keybag_class,
856 &v10_2_ckmanifest_class,
857 &v10_2_pending_manifest_class,
858 &v10_1_ckmanifest_leaf_class,
859 &v10_1_backup_keyarchive_class,
860 &v10_1_current_keyarchive_class,
861 &v10_1_current_archived_keys_class,
862 &v10_1_pending_manifest_leaf_class,
863 &v10_1_current_item_class,
864 &v10_3_ckdevicestate_class,
865 0
866 }
867};
868
869/*
870 * Version 10.2
871 */
872const SecDbSchema v10_2_schema = {
873 .majorVersion = 10,
874 .minorVersion = 2,
875 .classes = {
876 &v10_1_genp_class,
877 &v10_1_inet_class,
878 &v10_1_cert_class,
879 &v10_1_keys_class,
880 &v10_0_tversion_class,
881 &v10_2_outgoing_queue_class,
882 &v10_2_incoming_queue_class,
883 &v10_0_sync_key_class,
884 &v10_1_ckmirror_class,
885 &v10_0_current_key_class,
886 &v10_0_ckstate_class,
887 &v10_0_item_backup_class,
888 &v10_0_backup_keybag_class,
889 &v10_2_ckmanifest_class,
890 &v10_2_pending_manifest_class,
891 &v10_1_ckmanifest_leaf_class,
892 &v10_1_backup_keyarchive_class,
893 &v10_1_current_keyarchive_class,
894 &v10_1_current_archived_keys_class,
895 &v10_1_pending_manifest_leaf_class,
896 &v10_1_current_item_class,
897 0
898 }
899};
900
901/*
902 * Version 10.1
903 */
904const SecDbSchema v10_1_schema = {
905 .majorVersion = 10,
906 .minorVersion = 1,
907 .classes = {
908 &v10_1_genp_class,
909 &v10_1_inet_class,
910 &v10_1_cert_class,
911 &v10_1_keys_class,
912 &v10_0_tversion_class,
913 &v10_1_outgoing_queue_class,
914 &v10_1_incoming_queue_class,
915 &v10_0_sync_key_class,
916 &v10_1_ckmirror_class,
917 &v10_0_current_key_class,
918 &v10_0_ckstate_class,
919 &v10_0_item_backup_class,
920 &v10_0_backup_keybag_class,
921 &v10_1_ckmanifest_class,
922 &v10_1_pending_manifest_class,
923 &v10_1_ckmanifest_leaf_class,
924 &v10_1_backup_keyarchive_class,
925 &v10_1_current_keyarchive_class,
926 &v10_1_current_archived_keys_class,
927 &v10_1_pending_manifest_leaf_class,
928 &v10_1_current_item_class,
929 0
930 }
931};
932
933/*
934 * Version 10.0
935 */
936
937const SecDbClass v10_0_genp_class = {
938 .name = CFSTR("genp"),
939 .itemclass = true,
940 .attrs = {
941 &v6rowid,
942 &v6cdat,
943 &v6mdat,
944 &v6desc,
945 &v6icmt,
946 &v6crtr,
947 &v6type,
948 &v6scrp,
949 &v6labl,
950 &v6alis,
951 &v6invi,
952 &v6nega,
953 &v6cusi,
954 &v6prot,
955 &v6acct,
956 &v6svce,
957 &v6gena,
958 &v6data,
959 &v6agrp,
960 &v6pdmn,
961 &v6sync,
962 &v6tomb,
963 &v6sha1,
964 &v7vwht,
965 &v7tkid,
966 &v6v_Data,
967 &v6v_pk,
968 &v6accc,
969 &v7utomb,
970 &v8musr,
971 &v10itemuuid,
972 &v10itempersistentref,
973 &v10sysbound,
974 0
975 },
976};
977
978const SecDbClass v10_0_inet_class = {
979 .name = CFSTR("inet"),
980 .itemclass = true,
981 .attrs = {
982 &v6rowid,
983 &v6cdat,
984 &v6mdat,
985 &v6desc,
986 &v6icmt,
987 &v6crtr,
988 &v6type,
989 &v6scrp,
990 &v6labl,
991 &v6alis,
992 &v6invi,
993 &v6nega,
994 &v6cusi,
995 &v6prot,
996 &v6acct,
997 &v6sdmn,
998 &v6srvr,
999 &v6ptcl,
1000 &v6atyp,
1001 &v6port,
1002 &v6path,
1003 &v6data,
1004 &v6agrp,
1005 &v6pdmn,
1006 &v6sync,
1007 &v6tomb,
1008 &v6sha1,
1009 &v7vwht,
1010 &v7tkid,
1011 &v6v_Data,
1012 &v6v_pk,
1013 &v6accc,
1014 &v7utomb,
1015 &v8musr,
1016 &v10itemuuid,
1017 &v10itempersistentref,
1018 &v10sysbound,
1019 0
1020 },
1021};
1022
1023const SecDbClass v10_0_cert_class = {
1024 .name = CFSTR("cert"),
1025 .itemclass = true,
1026 .attrs = {
1027 &v6rowid,
1028 &v6cdat,
1029 &v6mdat,
1030 &v6ctyp,
1031 &v6cenc,
1032 &v6labl,
1033 &v6certalis,
1034 &v6subj,
1035 &v6issr,
1036 &v6slnr,
1037 &v6skid,
1038 &v6pkhh,
1039 &v6data,
1040 &v6agrp,
1041 &v6pdmn,
1042 &v6sync,
1043 &v6tomb,
1044 &v6sha1,
1045 &v7vwht,
1046 &v7tkid,
1047 &v6v_Data,
1048 &v6v_pk,
1049 &v6accc,
1050 &v7utomb,
1051 &v8musr,
1052 &v10itemuuid,
1053 &v10itempersistentref,
1054 &v10sysbound,
1055 0
1056 },
1057};
1058
1059const SecDbClass v10_0_keys_class = {
1060 .name = CFSTR("keys"),
1061 .itemclass = true,
1062 .attrs = {
1063 &v6rowid,
1064 &v6cdat,
1065 &v6mdat,
1066 &v6kcls,
1067 &v6labl,
1068 &v6alis,
1069 &v6perm,
1070 &v6priv,
1071 &v6modi,
1072 &v6klbl,
1073 &v6atag,
1074 &v6keycrtr,
1075 &v6keytype,
1076 &v6bsiz,
1077 &v6esiz,
1078 &v6sdat,
1079 &v6edat,
1080 &v6sens,
1081 &v6asen,
1082 &v6extr,
1083 &v6next,
1084 &v6encr,
1085 &v6decr,
1086 &v6drve,
1087 &v6sign,
1088 &v6vrfy,
1089 &v6snrc,
1090 &v6vyrc,
1091 &v6wrap,
1092 &v6unwp,
1093 &v6data,
1094 &v6agrp,
1095 &v6pdmn,
1096 &v6sync,
1097 &v6tomb,
1098 &v6sha1,
1099 &v7vwht,
1100 &v7tkid,
1101 &v6v_Data,
1102 &v6v_pk,
1103 &v6accc,
1104 &v7utomb,
1105 &v8musr,
1106 &v10itemuuid,
1107 &v10itempersistentref,
1108 &v10sysbound,
1109 0
1110 }
1111};
1112
1113const SecDbSchema v10_0_schema = {
1114 .majorVersion = 10,
1115 .minorVersion = 0,
1116 .classes = {
1117 &v10_0_genp_class,
1118 &v10_0_inet_class,
1119 &v10_0_cert_class,
1120 &v10_0_keys_class,
1121 &v10_0_tversion_class,
1122 &v10_0_outgoing_queue_class,
1123 &v10_0_incoming_queue_class,
1124 &v10_0_sync_key_class,
1125 &v10_0_ckmirror_class,
1126 &v10_0_current_key_class,
1127 &v10_0_ckstate_class,
1128 &v10_0_item_backup_class,
1129 &v10_0_backup_keybag_class,
1130 0
1131 }
1132};
1133
1134const SecDbClass v9_1_tversion_class = {
1135 .name = CFSTR("tversion91"),
1136 .itemclass = false,
1137 .attrs = {
1138 &v6rowid,
1139 &v6version,
1140 &v91minor,
1141 0
1142 }
1143};
1144
1145const SecDbClass v9_1_genp_class = {
1146 .name = CFSTR("genp91"),
1147 .itemclass = true,
1148 .attrs = {
1149 &v6rowid,
1150 &v6cdat,
1151 &v6mdat,
1152 &v6desc,
1153 &v6icmt,
1154 &v6crtr,
1155 &v6type,
1156 &v6scrp,
1157 &v6labl,
1158 &v6alis,
1159 &v6invi,
1160 &v6nega,
1161 &v6cusi,
1162 &v6prot,
1163 &v6acct,
1164 &v6svce,
1165 &v6gena,
1166 &v6data,
1167 &v6agrp,
1168 &v6pdmn,
1169 &v6sync,
1170 &v6tomb,
1171 &v6sha1,
1172 &v7vwht,
1173 &v7tkid,
1174 &v6v_Data,
1175 &v6v_pk,
1176 &v6accc,
1177 &v7utomb,
1178 &v8musr,
1179 0
1180 },
1181};
1182
1183const SecDbClass v9_1_inet_class = {
1184 .name = CFSTR("inet91"),
1185 .itemclass = true,
5c19dc3a 1186 .attrs = {
866f8763
A
1187 &v6rowid,
1188 &v6cdat,
1189 &v6mdat,
1190 &v6desc,
1191 &v6icmt,
1192 &v6crtr,
1193 &v6type,
1194 &v6scrp,
1195 &v6labl,
1196 &v6alis,
1197 &v6invi,
1198 &v6nega,
1199 &v6cusi,
1200 &v6prot,
1201 &v6acct,
1202 &v6sdmn,
1203 &v6srvr,
1204 &v6ptcl,
1205 &v6atyp,
1206 &v6port,
1207 &v6path,
1208 &v6data,
1209 &v6agrp,
1210 &v6pdmn,
1211 &v6sync,
1212 &v6tomb,
1213 &v6sha1,
1214 &v7vwht,
1215 &v7tkid,
1216 &v6v_Data,
1217 &v6v_pk,
1218 &v6accc,
1219 &v7utomb,
1220 &v8musr,
5c19dc3a
A
1221 0
1222 },
1223};
1224
866f8763
A
1225const SecDbClass v9_1_cert_class = {
1226 .name = CFSTR("cert91"),
1227 .itemclass = true,
1228 .attrs = {
1229 &v6rowid,
1230 &v6cdat,
1231 &v6mdat,
1232 &v6ctyp,
1233 &v6cenc,
1234 &v6labl,
1235 &v6certalis,
1236 &v6subj,
1237 &v6issr,
1238 &v6slnr,
1239 &v6skid,
1240 &v6pkhh,
1241 &v6data,
1242 &v6agrp,
1243 &v6pdmn,
1244 &v6sync,
1245 &v6tomb,
1246 &v6sha1,
1247 &v7vwht,
1248 &v7tkid,
1249 &v6v_Data,
1250 &v6v_pk,
1251 &v6accc,
1252 &v7utomb,
1253 &v8musr,
1254 0
1255 },
1256};
1257
1258const SecDbClass v9_1_keys_class = {
1259 .name = CFSTR("keys91"),
1260 .itemclass = true,
1261 .attrs = {
1262 &v6rowid,
1263 &v6cdat,
1264 &v6mdat,
1265 &v6kcls,
1266 &v6labl,
1267 &v6alis,
1268 &v6perm,
1269 &v6priv,
1270 &v6modi,
1271 &v6klbl,
1272 &v6atag,
1273 &v6keycrtr,
1274 &v6keytype,
1275 &v6bsiz,
1276 &v6esiz,
1277 &v6sdat,
1278 &v6edat,
1279 &v6sens,
1280 &v6asen,
1281 &v6extr,
1282 &v6next,
1283 &v6encr,
1284 &v6decr,
1285 &v6drve,
1286 &v6sign,
1287 &v6vrfy,
1288 &v6snrc,
1289 &v6vyrc,
1290 &v6wrap,
1291 &v6unwp,
1292 &v6data,
1293 &v6agrp,
1294 &v6pdmn,
1295 &v6sync,
1296 &v6tomb,
1297 &v6sha1,
1298 &v7vwht,
1299 &v7tkid,
1300 &v6v_Data,
1301 &v6v_pk,
1302 &v6accc,
1303 &v7utomb,
1304 &v8musr,
1305 0
1306 }
1307};
1308
fa7225c8
A
1309/*
1310 * Version 9.1 (iOS 10.0 and OSX 10.11.8/10.12 addded minor version.
1311 */
1312const SecDbSchema v9_1_schema = {
1313 .majorVersion = 9,
1314 .minorVersion = 1,
5c19dc3a 1315 .classes = {
866f8763
A
1316 &v9_1_genp_class,
1317 &v9_1_inet_class,
1318 &v9_1_cert_class,
1319 &v9_1_keys_class,
1320 &v9_1_tversion_class,
5c19dc3a
A
1321 0
1322 }
1323};
1324
fa7225c8
A
1325const SecDbClass v9genp_class = {
1326 .name = CFSTR("genp9"),
866f8763 1327 .itemclass = true,
fa7225c8
A
1328 .attrs = {
1329 &v6rowid,
1330 &v6cdat,
1331 &v6mdat,
1332 &v6desc,
1333 &v6icmt,
1334 &v6crtr,
1335 &v6type,
1336 &v6scrp,
1337 &v6labl,
1338 &v6alis,
1339 &v6invi,
1340 &v6nega,
1341 &v6cusi,
1342 &v6prot,
1343 &v6acct,
1344 &v6svce,
1345 &v6gena,
1346 &v6data,
1347 &v6agrp,
1348 &v6pdmn,
1349 &v6sync,
1350 &v6tomb,
1351 &v6sha1,
1352 &v7vwht,
1353 &v7tkid,
1354 &v6v_Data,
1355 &v6v_pk,
1356 &v6accc,
1357 &v7utomb,
1358 &v8musr,
1359 0
1360 },
1361};
1362
1363const SecDbClass v9inet_class = {
1364 .name = CFSTR("inet9"),
866f8763 1365 .itemclass = true,
fa7225c8
A
1366 .attrs = {
1367 &v6rowid,
1368 &v6cdat,
1369 &v6mdat,
1370 &v6desc,
1371 &v6icmt,
1372 &v6crtr,
1373 &v6type,
1374 &v6scrp,
1375 &v6labl,
1376 &v6alis,
1377 &v6invi,
1378 &v6nega,
1379 &v6cusi,
1380 &v6prot,
1381 &v6acct,
1382 &v6sdmn,
1383 &v6srvr,
1384 &v6ptcl,
1385 &v6atyp,
1386 &v6port,
1387 &v6path,
1388 &v6data,
1389 &v6agrp,
1390 &v6pdmn,
1391 &v6sync,
1392 &v6tomb,
1393 &v6sha1,
1394 &v7vwht,
1395 &v7tkid,
1396 &v6v_Data,
1397 &v6v_pk,
1398 &v6accc,
1399 &v7utomb,
1400 &v8musr,
1401 0
1402 },
1403};
1404
1405const SecDbClass v9cert_class = {
1406 .name = CFSTR("cert9"),
866f8763 1407 .itemclass = true,
fa7225c8
A
1408 .attrs = {
1409 &v6rowid,
1410 &v6cdat,
1411 &v6mdat,
1412 &v6ctyp,
1413 &v6cenc,
1414 &v6labl,
1415 &v6certalis,
1416 &v6subj,
1417 &v6issr,
1418 &v6slnr,
1419 &v6skid,
1420 &v6pkhh,
1421 &v6data,
1422 &v6agrp,
1423 &v6pdmn,
1424 &v6sync,
1425 &v6tomb,
1426 &v6sha1,
1427 &v7vwht,
1428 &v7tkid,
1429 &v6v_Data,
1430 &v6v_pk,
1431 &v6accc,
1432 &v7utomb,
1433 &v8musr,
1434 0
1435 },
1436};
1437
1438const SecDbClass v9keys_class = {
1439 .name = CFSTR("keys9"),
866f8763 1440 .itemclass = true,
fa7225c8
A
1441 .attrs = {
1442 &v6rowid,
1443 &v6cdat,
1444 &v6mdat,
1445 &v6kcls,
1446 &v6labl,
1447 &v6alis,
1448 &v6perm,
1449 &v6priv,
1450 &v6modi,
1451 &v6klbl,
1452 &v6atag,
1453 &v6keycrtr,
1454 &v6keytype,
1455 &v6bsiz,
1456 &v6esiz,
1457 &v6sdat,
1458 &v6edat,
1459 &v6sens,
1460 &v6asen,
1461 &v6extr,
1462 &v6next,
1463 &v6encr,
1464 &v6decr,
1465 &v6drve,
1466 &v6sign,
1467 &v6vrfy,
1468 &v6snrc,
1469 &v6vyrc,
1470 &v6wrap,
1471 &v6unwp,
1472 &v6data,
1473 &v6agrp,
1474 &v6pdmn,
1475 &v6sync,
1476 &v6tomb,
1477 &v6sha1,
1478 &v7vwht,
1479 &v7tkid,
1480 &v6v_Data,
1481 &v6v_pk,
1482 &v6accc,
1483 &v7utomb,
1484 &v8musr,
1485 0
1486 }
1487};
1488
1489const SecDbClass v5tversion_class = {
1490 .name = CFSTR("tversion5"),
866f8763 1491 .itemclass = false,
fa7225c8
A
1492 .attrs = {
1493 &v6version,
1494 0
1495 }
1496};
1497
1498/* Version 9 (iOS 9.3 and OSX 10.11.5) database schema
1499 * Same contents as v8 tables; table names changed to force upgrade
1500 * and correct default values in table.
1501 */
1502const SecDbSchema v9_schema = {
1503 .majorVersion = 9,
1504 .classes = {
1505 &v9genp_class,
1506 &v9inet_class,
1507 &v9cert_class,
1508 &v9keys_class,
1509 &v5tversion_class,
1510 0
1511 }
1512};
1513
e3d460c9
A
1514// Version 8 (Internal release iOS 9.3 and OSX 10.11.5) database schema
1515const SecDbClass v8genp_class = {
1516 .name = CFSTR("genp8"),
866f8763 1517 .itemclass = true,
e3d460c9
A
1518 .attrs = {
1519 &v6rowid,
1520 &v6cdat,
1521 &v6mdat,
1522 &v6desc,
1523 &v6icmt,
1524 &v6crtr,
1525 &v6type,
1526 &v6scrp,
1527 &v6labl,
1528 &v6alis,
1529 &v6invi,
1530 &v6nega,
1531 &v6cusi,
1532 &v6prot,
1533 &v6acct,
1534 &v6svce,
1535 &v6gena,
1536 &v6data,
1537 &v6agrp,
1538 &v6pdmn,
1539 &v6sync,
1540 &v6tomb,
1541 &v6sha1,
1542 &v7vwht,
1543 &v7tkid,
1544 &v6v_Data,
1545 &v6v_pk,
1546 &v6accc,
1547 &v7utomb,
1548 &v8musr,
1549 0
1550 },
1551};
1552
1553const SecDbClass v8inet_class = {
1554 .name = CFSTR("inet8"),
866f8763 1555 .itemclass = true,
e3d460c9
A
1556 .attrs = {
1557 &v6rowid,
1558 &v6cdat,
1559 &v6mdat,
1560 &v6desc,
1561 &v6icmt,
1562 &v6crtr,
1563 &v6type,
1564 &v6scrp,
1565 &v6labl,
1566 &v6alis,
1567 &v6invi,
1568 &v6nega,
1569 &v6cusi,
1570 &v6prot,
1571 &v6acct,
1572 &v6sdmn,
1573 &v6srvr,
1574 &v6ptcl,
1575 &v6atyp,
1576 &v6port,
1577 &v6path,
1578 &v6data,
1579 &v6agrp,
1580 &v6pdmn,
1581 &v6sync,
1582 &v6tomb,
1583 &v6sha1,
1584 &v7vwht,
1585 &v7tkid,
1586 &v6v_Data,
1587 &v6v_pk,
1588 &v6accc,
1589 &v7utomb,
1590 &v8musr,
1591 0
1592 },
1593};
1594
1595const SecDbClass v8cert_class = {
1596 .name = CFSTR("cert8"),
866f8763 1597 .itemclass = true,
e3d460c9
A
1598 .attrs = {
1599 &v6rowid,
1600 &v6cdat,
1601 &v6mdat,
1602 &v6ctyp,
1603 &v6cenc,
1604 &v6labl,
1605 &v6certalis,
1606 &v6subj,
1607 &v6issr,
1608 &v6slnr,
1609 &v6skid,
1610 &v6pkhh,
1611 &v6data,
1612 &v6agrp,
1613 &v6pdmn,
1614 &v6sync,
1615 &v6tomb,
1616 &v6sha1,
1617 &v7vwht,
1618 &v7tkid,
1619 &v6v_Data,
1620 &v6v_pk,
1621 &v6accc,
1622 &v7utomb,
1623 &v8musr,
1624 0
1625 },
1626};
1627
1628const SecDbClass v8keys_class = {
1629 .name = CFSTR("keys8"),
866f8763 1630 .itemclass = true,
e3d460c9
A
1631 .attrs = {
1632 &v6rowid,
1633 &v6cdat,
1634 &v6mdat,
1635 &v6kcls,
1636 &v6labl,
1637 &v6alis,
1638 &v6perm,
1639 &v6priv,
1640 &v6modi,
1641 &v6klbl,
1642 &v6atag,
1643 &v6keycrtr,
1644 &v6keytype,
1645 &v6bsiz,
1646 &v6esiz,
1647 &v6sdat,
1648 &v6edat,
1649 &v6sens,
1650 &v6asen,
1651 &v6extr,
1652 &v6next,
1653 &v6encr,
1654 &v6decr,
1655 &v6drve,
1656 &v6sign,
1657 &v6vrfy,
1658 &v6snrc,
1659 &v6vyrc,
1660 &v6wrap,
1661 &v6unwp,
1662 &v6data,
1663 &v6agrp,
1664 &v6pdmn,
1665 &v6sync,
1666 &v6tomb,
1667 &v6sha1,
1668 &v7vwht,
1669 &v7tkid,
1670 &v6v_Data,
1671 &v6v_pk,
1672 &v6accc,
1673 &v7utomb,
1674 &v8musr,
1675 0
1676 }
1677};
1678
1679const SecDbSchema v8_schema = {
fa7225c8 1680 .majorVersion = 8,
e3d460c9
A
1681 .classes = {
1682 &v8genp_class,
1683 &v8inet_class,
1684 &v8cert_class,
1685 &v8keys_class,
fa7225c8 1686 &v5tversion_class,
e3d460c9
A
1687 0
1688 }
1689};
1690
1691// Version 7 (iOS 9 and OSX 10.11) database schema
1692const SecDbClass v7genp_class = {
1693 .name = CFSTR("genp7"),
866f8763 1694 .itemclass = true,
e3d460c9
A
1695 .attrs = {
1696 &v6rowid,
1697 &v6cdat,
1698 &v6mdat,
1699 &v6desc,
1700 &v6icmt,
1701 &v6crtr,
1702 &v6type,
1703 &v6scrp,
1704 &v6labl,
1705 &v6alis,
1706 &v6invi,
1707 &v6nega,
1708 &v6cusi,
1709 &v6prot,
1710 &v6acct,
1711 &v6svce,
1712 &v6gena,
1713 &v6data,
1714 &v6agrp,
1715 &v6pdmn,
1716 &v6sync,
1717 &v6tomb,
1718 &v6sha1,
1719 &v7vwht,
1720 &v7tkid,
1721 &v6v_Data,
1722 &v6v_pk,
1723 &v6accc,
1724 &v7utomb,
1725 0
1726 },
1727};
1728
1729const SecDbClass v7inet_class = {
1730 .name = CFSTR("inet7"),
866f8763 1731 .itemclass = true,
e3d460c9
A
1732 .attrs = {
1733 &v6rowid,
1734 &v6cdat,
1735 &v6mdat,
1736 &v6desc,
1737 &v6icmt,
1738 &v6crtr,
1739 &v6type,
1740 &v6scrp,
1741 &v6labl,
1742 &v6alis,
1743 &v6invi,
1744 &v6nega,
1745 &v6cusi,
1746 &v6prot,
1747 &v6acct,
1748 &v6sdmn,
1749 &v6srvr,
1750 &v6ptcl,
1751 &v6atyp,
1752 &v6port,
1753 &v6path,
1754 &v6data,
1755 &v6agrp,
1756 &v6pdmn,
1757 &v6sync,
1758 &v6tomb,
1759 &v6sha1,
1760 &v7vwht,
1761 &v7tkid,
1762 &v6v_Data,
1763 &v6v_pk,
1764 &v6accc,
1765 &v7utomb,
1766 0
1767 },
1768};
1769
1770const SecDbClass v7cert_class = {
1771 .name = CFSTR("cert7"),
866f8763 1772 .itemclass = true,
e3d460c9
A
1773 .attrs = {
1774 &v6rowid,
1775 &v6cdat,
1776 &v6mdat,
1777 &v6ctyp,
1778 &v6cenc,
1779 &v6labl,
1780 &v6certalis,
1781 &v6subj,
1782 &v6issr,
1783 &v6slnr,
1784 &v6skid,
1785 &v6pkhh,
1786 &v6data,
1787 &v6agrp,
1788 &v6pdmn,
1789 &v6sync,
1790 &v6tomb,
1791 &v6sha1,
1792 &v7vwht,
1793 &v7tkid,
1794 &v6v_Data,
1795 &v6v_pk,
1796 &v6accc,
1797 &v7utomb,
1798 0
1799 },
1800};
1801
1802const SecDbClass v7keys_class = {
1803 .name = CFSTR("keys7"),
866f8763 1804 .itemclass = true,
e3d460c9
A
1805 .attrs = {
1806 &v6rowid,
1807 &v6cdat,
1808 &v6mdat,
1809 &v6kcls,
1810 &v6labl,
1811 &v6alis,
1812 &v6perm,
1813 &v6priv,
1814 &v6modi,
1815 &v6klbl,
1816 &v6atag,
1817 &v6keycrtr,
1818 &v6keytype,
1819 &v6bsiz,
1820 &v6esiz,
1821 &v6sdat,
1822 &v6edat,
1823 &v6sens,
1824 &v6asen,
1825 &v6extr,
1826 &v6next,
1827 &v6encr,
1828 &v6decr,
1829 &v6drve,
1830 &v6sign,
1831 &v6vrfy,
1832 &v6snrc,
1833 &v6vyrc,
1834 &v6wrap,
1835 &v6unwp,
1836 &v6data,
1837 &v6agrp,
1838 &v6pdmn,
1839 &v6sync,
1840 &v6tomb,
1841 &v6sha1,
1842 &v7vwht,
1843 &v7tkid,
1844 &v6v_Data,
1845 &v6v_pk,
1846 &v6accc,
1847 &v7utomb,
1848 0
1849 }
1850};
1851
1852
1853const SecDbSchema v7_schema = {
fa7225c8 1854 .majorVersion = 7,
e3d460c9
A
1855 .classes = {
1856 &v7genp_class,
1857 &v7inet_class,
1858 &v7cert_class,
1859 &v7keys_class,
fa7225c8 1860 &v5tversion_class,
e3d460c9
A
1861 0
1862 }
1863};
1864
5c19dc3a
A
1865
1866// Version 6 (iOS 7 and OSX 10.9) database schema
1867static const SecDbClass v6genp_class = {
1868 .name = CFSTR("genp6"),
866f8763 1869 .itemclass = true,
5c19dc3a
A
1870 .attrs = {
1871 &v6rowid,
1872 &v6cdat,
1873 &v6mdat,
1874 &v6desc,
1875 &v6icmt,
1876 &v6crtr,
1877 &v6type,
1878 &v6scrp,
1879 &v6labl,
1880 &v6alis,
1881 &v6invi,
1882 &v6nega,
1883 &v6cusi,
1884 &v6prot,
1885 &v6acct,
1886 &v6svce,
1887 &v6gena,
1888 &v6data,
1889 &v6agrp,
1890 &v6pdmn,
1891 &v6sync,
1892 &v6tomb,
1893 &v6sha1,
1894 &v6v_Data,
1895 &v6v_pk,
1896 &v6accc,
1897 0
1898 },
1899};
1900
1901static const SecDbClass v6inet_class = {
1902 .name = CFSTR("inet6"),
866f8763 1903 .itemclass = true,
5c19dc3a
A
1904 .attrs = {
1905 &v6rowid,
1906 &v6cdat,
1907 &v6mdat,
1908 &v6desc,
1909 &v6icmt,
1910 &v6crtr,
1911 &v6type,
1912 &v6scrp,
1913 &v6labl,
1914 &v6alis,
1915 &v6invi,
1916 &v6nega,
1917 &v6cusi,
1918 &v6prot,
1919 &v6acct,
1920 &v6sdmn,
1921 &v6srvr,
1922 &v6ptcl,
1923 &v6atyp,
1924 &v6port,
1925 &v6path,
1926 &v6data,
1927 &v6agrp,
1928 &v6pdmn,
1929 &v6sync,
1930 &v6tomb,
1931 &v6sha1,
1932 &v6v_Data,
1933 &v6v_pk,
1934 &v6accc,
1935 0
1936 },
1937};
1938
1939static const SecDbClass v6cert_class = {
1940 .name = CFSTR("cert6"),
866f8763 1941 .itemclass = true,
5c19dc3a
A
1942 .attrs = {
1943 &v6rowid,
1944 &v6cdat,
1945 &v6mdat,
1946 &v6ctyp,
1947 &v6cenc,
1948 &v6labl,
1949 &v6certalis,
1950 &v6subj,
1951 &v6issr,
1952 &v6slnr,
1953 &v6skid,
1954 &v6pkhh,
1955 &v6data,
1956 &v6agrp,
1957 &v6pdmn,
1958 &v6sync,
1959 &v6tomb,
1960 &v6sha1,
1961 &v6v_Data,
1962 &v6v_pk,
1963 &v6accc,
1964 0
1965 },
1966};
1967
1968static const SecDbClass v6keys_class = {
1969 .name = CFSTR("keys6"),
866f8763 1970 .itemclass = true,
5c19dc3a
A
1971 .attrs = {
1972 &v6rowid,
1973 &v6cdat,
1974 &v6mdat,
1975 &v6kcls,
1976 &v6labl,
1977 &v6alis,
1978 &v6perm,
1979 &v6priv,
1980 &v6modi,
1981 &v6klbl,
1982 &v6atag,
1983 &v6keycrtr,
1984 &v6keytype,
1985 &v6bsiz,
1986 &v6esiz,
1987 &v6sdat,
1988 &v6edat,
1989 &v6sens,
1990 &v6asen,
1991 &v6extr,
1992 &v6next,
1993 &v6encr,
1994 &v6decr,
1995 &v6drve,
1996 &v6sign,
1997 &v6vrfy,
1998 &v6snrc,
1999 &v6vyrc,
2000 &v6wrap,
2001 &v6unwp,
2002 &v6data,
2003 &v6agrp,
2004 &v6pdmn,
2005 &v6sync,
2006 &v6tomb,
2007 &v6sha1,
2008 &v6v_Data,
2009 &v6v_pk,
2010 &v6accc,
2011 0
2012 }
2013};
2014
2015static const SecDbSchema v6_schema = {
fa7225c8 2016 .majorVersion = 6,
5c19dc3a
A
2017 .classes = {
2018 &v6genp_class,
2019 &v6inet_class,
2020 &v6cert_class,
2021 &v6keys_class,
fa7225c8 2022 &v5tversion_class,
5c19dc3a
A
2023 0
2024 }
2025};
2026
2027
2028// Version 5 (iOS 5 & iOS 6) database schema.
2029static const SecDbClass v5genp_class = {
2030 .name = CFSTR("genp5"),
866f8763 2031 .itemclass = true,
5c19dc3a
A
2032 .attrs = {
2033 &v6rowid,
2034 &v6cdat,
2035 &v6mdat,
2036 &v6desc,
2037 &v6icmt,
2038 &v6crtr,
2039 &v6type,
2040 &v6scrp,
2041 &v6labl,
2042 &v6alis,
2043 &v6invi,
2044 &v6nega,
2045 &v6cusi,
2046 &v6prot,
2047 &v6acct,
2048 &v6svce,
2049 &v6gena,
2050 &v6data,
2051 &v6agrp,
2052 &v6pdmn,
2053 &v6v_Data,
2054 0
2055 },
2056};
2057
2058static const SecDbClass v5inet_class = {
2059 .name = CFSTR("inet5"),
866f8763 2060 .itemclass = true,
5c19dc3a
A
2061 .attrs = {
2062 &v6rowid,
2063 &v6cdat,
2064 &v6mdat,
2065 &v6desc,
2066 &v6icmt,
2067 &v6crtr,
2068 &v6type,
2069 &v6scrp,
2070 &v6labl,
2071 &v6alis,
2072 &v6invi,
2073 &v6nega,
2074 &v6cusi,
2075 &v6prot,
2076 &v6acct,
2077 &v6sdmn,
2078 &v6srvr,
2079 &v6ptcl,
2080 &v6atyp,
2081 &v6port,
2082 &v6path,
2083 &v6data,
2084 &v6agrp,
2085 &v6pdmn,
2086 &v6v_Data,
2087 0
2088 },
2089};
2090
2091static const SecDbClass v5cert_class = {
2092 .name = CFSTR("cert5"),
866f8763 2093 .itemclass = true,
5c19dc3a
A
2094 .attrs = {
2095 &v6rowid,
2096 &v6cdat,
2097 &v6mdat,
2098 &v6ctyp,
2099 &v6cenc,
2100 &v6labl,
2101 &v6certalis,
2102 &v6subj,
2103 &v6issr,
2104 &v6slnr,
2105 &v6skid,
2106 &v6pkhh,
2107 &v6data,
2108 &v6agrp,
2109 &v6pdmn,
2110 &v6v_Data,
2111 0
2112 },
2113};
2114
2115static const SecDbClass v5keys_class = {
2116 .name = CFSTR("keys5"),
866f8763 2117 .itemclass = true,
5c19dc3a
A
2118 .attrs = {
2119 &v6rowid,
2120 &v6cdat,
2121 &v6mdat,
2122 &v6kcls,
2123 &v6labl,
2124 &v6alis,
2125 &v6perm,
2126 &v6priv,
2127 &v6modi,
2128 &v6klbl,
2129 &v6atag,
2130 &v6keycrtr,
2131 &v6keytype,
2132 &v6bsiz,
2133 &v6esiz,
2134 &v6sdat,
2135 &v6edat,
2136 &v6sens,
2137 &v6asen,
2138 &v6extr,
2139 &v6next,
2140 &v6encr,
2141 &v6decr,
2142 &v6drve,
2143 &v6sign,
2144 &v6vrfy,
2145 &v6snrc,
2146 &v6vyrc,
2147 &v6wrap,
2148 &v6unwp,
2149 &v6data,
2150 &v6agrp,
2151 &v6pdmn,
2152 &v6v_Data,
2153 0
2154 }
2155};
2156
2157static const SecDbSchema v5_schema = {
fa7225c8 2158 .majorVersion = 5,
5c19dc3a
A
2159 .classes = {
2160 &v5genp_class,
2161 &v5inet_class,
2162 &v5cert_class,
2163 &v5keys_class,
fa7225c8 2164 &v5tversion_class,
5c19dc3a
A
2165 0
2166 }
2167};
2168
866f8763
A
2169SecDbSchema const * const * kc_schemas = NULL;
2170
2171const SecDbSchema *v10_kc_schemas[] = {
2172 &v10_3_schema,
2173 &v10_2_schema,
2174 &v10_1_schema,
2175 &v10_0_schema,
fa7225c8 2176 &v9_1_schema,
e3d460c9
A
2177 &v9_schema,
2178 &v8_schema,
5c19dc3a
A
2179 &v7_schema,
2180 &v6_schema,
2181 &v5_schema,
2182 0
2183};
866f8763
A
2184
2185const SecDbSchema * const * all_schemas() {
2186 return v10_kc_schemas;
2187}
2188
2189const SecDbSchema* current_schema() {
2190 // For now, the current schema is the first in the list.
2191 return all_schemas()[0];
2192}
2193
2194// class accessors for current schema.
2195static const SecDbClass* find_class(const SecDbSchema* schema, CFStringRef class_name) {
2196 for (const SecDbClass * const *pclass = schema->classes; *pclass; ++pclass) {
2197 if( CFEqualSafe((*pclass)->name, class_name) ) {
2198 return *pclass;
2199 }
2200 }
2201 return NULL;
2202}
2203
2204const SecDbClass* genp_class() {
2205 static const SecDbClass* genp = NULL;
2206 static dispatch_once_t onceToken;
2207 dispatch_once(&onceToken, ^{
2208 genp = find_class(current_schema(), CFSTR("genp"));
2209 });
2210 return genp;
2211}
2212const SecDbClass* inet_class() {
2213 static const SecDbClass* inet = NULL;
2214 static dispatch_once_t onceToken;
2215 dispatch_once(&onceToken, ^{
2216 inet = find_class(current_schema(), CFSTR("inet"));
2217 });
2218 return inet;
2219}
2220const SecDbClass* cert_class() {
2221 static const SecDbClass* cert = NULL;
2222 static dispatch_once_t onceToken;
2223 dispatch_once(&onceToken, ^{
2224 cert = find_class(current_schema(), CFSTR("cert"));
2225 });
2226 return cert;
2227}
2228const SecDbClass* keys_class() {
2229 static const SecDbClass* keys = NULL;
2230 static dispatch_once_t onceToken;
2231 dispatch_once(&onceToken, ^{
2232 keys = find_class(current_schema(), CFSTR("keys"));
2233 });
2234 return keys;
2235}
2236
2237// Not really a class per-se
2238const SecDbClass* identity_class() {
2239 return &v_identity_class;
2240}
2241
2242// Class with 1 element in it which is the database version->
2243const SecDbClass* tversion_class() {
2244 static const SecDbClass* tversion = NULL;
2245 static dispatch_once_t onceToken;
2246 dispatch_once(&onceToken, ^{
2247 tversion = find_class(current_schema(), CFSTR("tversion"));
2248 });
2249 return tversion;
2250}
2251
2252