]> git.saurik.com Git - apple/security.git/blob - AppleCSP/open_ssl/opensslUtils/osKeyTemplates.cpp
Security-163.tar.gz
[apple/security.git] / AppleCSP / open_ssl / opensslUtils / osKeyTemplates.cpp
1 /*
2 * osKeyTemplate.h - ASN1 templates for openssl asymmetric keys
3 */
4
5 #include "osKeyTemplates.h"
6
7 /****
8 **** DSA support
9 ****/
10
11 /* X509 style DSA algorithm parameters */
12 const SEC_ASN1Template NSS_DSAAlgParamsTemplate[] = {
13 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAAlgParams) },
14 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParams,p) },
15 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParams,q) },
16 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParams,g) },
17 { 0, }
18 };
19
20 /* BSAFE style DSA algorithm parameters */
21 const SEC_ASN1Template NSS_DSAAlgParamsBSAFETemplate[] = {
22 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAAlgParamsBSAFE) },
23 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParamsBSAFE,keySizeInBits) },
24 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParamsBSAFE,p) },
25 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParamsBSAFE,q) },
26 { SEC_ASN1_INTEGER, offsetof(NSS_DSAAlgParamsBSAFE,g) },
27 { 0, }
28 };
29
30 /* DSA X509-style AlgorithmID */
31 const SEC_ASN1Template NSS_DSAAlgorithmIdX509Template[] = {
32 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAAlgorithmIdX509) },
33 { SEC_ASN1_OBJECT_ID, offsetof(NSS_DSAAlgorithmIdX509, algorithm) },
34 /* per CMS, this is optional */
35 { SEC_ASN1_POINTER | SEC_ASN1_OPTIONAL,
36 offsetof(NSS_DSAAlgorithmIdX509,params),
37 NSS_DSAAlgParamsTemplate },
38 { 0, }
39 };
40
41 /* DSA BSAFE-style AlgorithmID */
42 const SEC_ASN1Template NSS_DSAAlgorithmIdBSAFETemplate[] = {
43 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAAlgorithmIdBSAFE) },
44 { SEC_ASN1_OBJECT_ID, offsetof(NSS_DSAAlgorithmIdBSAFE, algorithm) },
45 { SEC_ASN1_INLINE,
46 offsetof(NSS_DSAAlgorithmIdBSAFE,params),
47 NSS_DSAAlgParamsBSAFETemplate },
48 { 0, }
49 };
50
51 /****
52 **** DSA public keys
53 ****/
54
55 /* DSA public key, openssl/X509 format */
56 const SEC_ASN1Template NSS_DSAPublicKeyX509Template[] = {
57 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPublicKeyX509) },
58 { SEC_ASN1_INLINE,
59 offsetof(NSS_DSAPublicKeyX509, dsaAlg),
60 NSS_DSAAlgorithmIdX509Template },
61 { SEC_ASN1_BIT_STRING,
62 offsetof(NSS_DSAPublicKeyX509, publicKey), },
63 { 0, }
64 };
65
66 /* DSA public key, BSAFE/FIPS186 format */
67 const SEC_ASN1Template NSS_DSAPublicKeyBSAFETemplate[] = {
68 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPublicKeyBSAFE) },
69 { SEC_ASN1_INLINE,
70 offsetof(NSS_DSAPublicKeyBSAFE, dsaAlg),
71 NSS_DSAAlgorithmIdBSAFETemplate },
72 { SEC_ASN1_BIT_STRING,
73 offsetof(NSS_DSAPublicKeyBSAFE, publicKey), },
74 { 0, }
75 };
76
77 /****
78 **** DSA private keys
79 ****/
80
81 /* DSA Private key, openssl custom format */
82 const SEC_ASN1Template NSS_DSAPrivateKeyOpensslTemplate[] = {
83 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPrivateKeyOpenssl) },
84 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,version) },
85 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,p) },
86 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,q) },
87 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,g) },
88 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,pub) },
89 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOpenssl,priv) },
90 { 0, }
91 };
92
93 /*
94 * DSA private key, BSAFE/FIPS186 style.
95 * This is basically a DSA-specific NSS_PrivateKeyInfo.
96 *
97 * NSS_DSAPrivateKeyBSAFE.privateKey is an octet string containing
98 * the DER encoding of this.
99 */
100 const SEC_ASN1Template NSS_DSAPrivateKeyOctsTemplate[] = {
101 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPrivateKeyOcts) },
102 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyOcts,privateKey) },
103 { 0, }
104 };
105
106 const SEC_ASN1Template NSS_DSAPrivateKeyBSAFETemplate[] = {
107 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPrivateKeyBSAFE) },
108 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyBSAFE,version) },
109 { SEC_ASN1_INLINE,
110 offsetof(NSS_DSAPrivateKeyBSAFE, dsaAlg),
111 NSS_DSAAlgorithmIdBSAFETemplate },
112 { SEC_ASN1_OCTET_STRING, offsetof(NSS_DSAPrivateKeyBSAFE,privateKey) },
113 { 0, }
114 };
115
116 /*
117 * DSA Private Key, PKCS8/SMIME style.
118 */
119 const SEC_ASN1Template NSS_DSAPrivateKeyPKCS8Template[] = {
120 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSAPrivateKeyPKCS8) },
121 { SEC_ASN1_INTEGER, offsetof(NSS_DSAPrivateKeyPKCS8,version) },
122 { SEC_ASN1_INLINE,
123 offsetof(NSS_DSAPrivateKeyPKCS8, dsaAlg),
124 NSS_DSAAlgorithmIdX509Template },
125 { SEC_ASN1_OCTET_STRING, offsetof(NSS_DSAPrivateKeyPKCS8,privateKey) },
126 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED |
127 SEC_ASN1_CONTEXT_SPECIFIC | 0,
128 offsetof(NSS_DSAPrivateKeyPKCS8,attributes),
129 NSS_SetOfAttributeTemplate },
130 { 0, }
131 };
132
133 const SEC_ASN1Template NSS_DSASignatureTemplate[] = {
134 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSS_DSASignature) },
135 { SEC_ASN1_INTEGER, offsetof(NSS_DSASignature,r) },
136 { SEC_ASN1_INTEGER, offsetof(NSS_DSASignature,s) },
137 { 0, }
138 };
139
140