| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
| 2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 #ifndef _KEYTHI_H_ | 4 #ifndef _KEYTHI_H_ |
| 5 #define _KEYTHI_H_ 1 | 5 #define _KEYTHI_H_ 1 |
| 6 | 6 |
| 7 #include "plarena.h" | 7 #include "plarena.h" |
| 8 #include "pkcs11t.h" | 8 #include "pkcs11t.h" |
| 9 #include "secmodt.h" | 9 #include "secmodt.h" |
| 10 #include "prclist.h" | 10 #include "prclist.h" |
| 11 | 11 |
| 12 /* | 12 /* |
| 13 ** RFC 4055 Section 1.2 specifies three different RSA key types. | 13 ** RFC 4055 Section 1.2 specifies three different RSA key types. |
| 14 ** | 14 ** |
| 15 ** rsaKey maps to keys with SEC_OID_PKCS1_RSA_ENCRYPTION and can be used for | 15 ** rsaKey maps to keys with SEC_OID_PKCS1_RSA_ENCRYPTION and can be used for |
| 16 ** both encryption and signatures with old (PKCS #1 v1.5) and new (PKCS #1 | 16 ** both encryption and signatures with old (PKCS #1 v1.5) and new (PKCS #1 |
| 17 ** v2.1) padding schemes. | 17 ** v2.1) padding schemes. |
| 18 ** | 18 ** |
| 19 ** rsaPssKey maps to keys with SEC_OID_PKCS1_RSA_PSS_SIGNATURE and may only | 19 ** rsaPssKey maps to keys with SEC_OID_PKCS1_RSA_PSS_SIGNATURE and may only |
| 20 ** be used for signatures with PSS padding (PKCS #1 v2.1). | 20 ** be used for signatures with PSS padding (PKCS #1 v2.1). |
| 21 ** | 21 ** |
| 22 ** rsaOaepKey maps to keys with SEC_OID_PKCS1_RSA_OAEP_ENCRYPTION and may only | 22 ** rsaOaepKey maps to keys with SEC_OID_PKCS1_RSA_OAEP_ENCRYPTION and may only |
| 23 ** be used for encryption with OAEP padding (PKCS #1 v2.1). | 23 ** be used for encryption with OAEP padding (PKCS #1 v2.1). |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 typedef enum { | 26 typedef enum { |
| 27 nullKey = 0, | 27 nullKey = 0, |
| 28 rsaKey = 1, | 28 rsaKey = 1, |
| 29 dsaKey = 2, | 29 dsaKey = 2, |
| 30 fortezzaKey = 3, /* deprecated */ | 30 fortezzaKey = 3, /* deprecated */ |
| 31 dhKey = 4, | 31 dhKey = 4, |
| 32 keaKey = 5, /* deprecated */ | 32 keaKey = 5, /* deprecated */ |
| 33 ecKey = 6, | 33 ecKey = 6, |
| 34 rsaPssKey = 7, | 34 rsaPssKey = 7, |
| 35 rsaOaepKey = 8 | 35 rsaOaepKey = 8 |
| 36 } KeyType; | 36 } KeyType; |
| 37 | 37 |
| 38 /* | 38 /* |
| 39 ** Template Definitions | 39 ** Template Definitions |
| 40 **/ | 40 **/ |
| 41 | 41 |
| 42 SEC_BEGIN_PROTOS | 42 SEC_BEGIN_PROTOS |
| 43 extern const SEC_ASN1Template SECKEY_RSAPublicKeyTemplate[]; | 43 extern const SEC_ASN1Template SECKEY_RSAPublicKeyTemplate[]; |
| 44 extern const SEC_ASN1Template SECKEY_RSAPSSParamsTemplate[]; | 44 extern const SEC_ASN1Template SECKEY_RSAPSSParamsTemplate[]; |
| 45 extern const SEC_ASN1Template SECKEY_DSAPublicKeyTemplate[]; | 45 extern const SEC_ASN1Template SECKEY_DSAPublicKeyTemplate[]; |
| 46 extern const SEC_ASN1Template SECKEY_DHPublicKeyTemplate[]; | 46 extern const SEC_ASN1Template SECKEY_DHPublicKeyTemplate[]; |
| 47 extern const SEC_ASN1Template SECKEY_DHParamKeyTemplate[]; | 47 extern const SEC_ASN1Template SECKEY_DHParamKeyTemplate[]; |
| 48 extern const SEC_ASN1Template SECKEY_PQGParamsTemplate[]; | 48 extern const SEC_ASN1Template SECKEY_PQGParamsTemplate[]; |
| 49 extern const SEC_ASN1Template SECKEY_DSAPrivateKeyExportTemplate[]; | 49 extern const SEC_ASN1Template SECKEY_DSAPrivateKeyExportTemplate[]; |
| 50 | 50 |
| 51 /* Windows DLL accessor functions */ | 51 /* Windows DLL accessor functions */ |
| 52 SEC_ASN1_CHOOSER_DECLARE(SECKEY_DSAPublicKeyTemplate) | 52 SEC_ASN1_CHOOSER_DECLARE(SECKEY_DSAPublicKeyTemplate) |
| 53 SEC_ASN1_CHOOSER_DECLARE(SECKEY_RSAPublicKeyTemplate) | 53 SEC_ASN1_CHOOSER_DECLARE(SECKEY_RSAPublicKeyTemplate) |
| 54 SEC_ASN1_CHOOSER_DECLARE(SECKEY_RSAPSSParamsTemplate) | 54 SEC_ASN1_CHOOSER_DECLARE(SECKEY_RSAPSSParamsTemplate) |
| 55 SEC_END_PROTOS | 55 SEC_END_PROTOS |
| 56 | 56 |
| 57 | |
| 58 /* | 57 /* |
| 59 ** RSA Public Key structures | 58 ** RSA Public Key structures |
| 60 ** member names from PKCS#1, section 7.1 | 59 ** member names from PKCS#1, section 7.1 |
| 61 */ | 60 */ |
| 62 | 61 |
| 63 struct SECKEYRSAPublicKeyStr { | 62 struct SECKEYRSAPublicKeyStr { |
| 64 PLArenaPool * arena; | 63 PLArenaPool *arena; |
| 65 SECItem modulus; | 64 SECItem modulus; |
| 66 SECItem publicExponent; | 65 SECItem publicExponent; |
| 67 }; | 66 }; |
| 68 typedef struct SECKEYRSAPublicKeyStr SECKEYRSAPublicKey; | 67 typedef struct SECKEYRSAPublicKeyStr SECKEYRSAPublicKey; |
| 69 | 68 |
| 70 /* | 69 /* |
| 71 ** RSA-PSS parameters | 70 ** RSA-PSS parameters |
| 72 */ | 71 */ |
| 73 struct SECKEYRSAPSSParamsStr { | 72 struct SECKEYRSAPSSParamsStr { |
| 74 SECAlgorithmID *hashAlg; | 73 SECAlgorithmID *hashAlg; |
| 75 SECAlgorithmID *maskAlg; | 74 SECAlgorithmID *maskAlg; |
| 76 SECItem saltLength; | 75 SECItem saltLength; |
| 77 SECItem trailerField; | 76 SECItem trailerField; |
| 78 }; | 77 }; |
| 79 typedef struct SECKEYRSAPSSParamsStr SECKEYRSAPSSParams; | 78 typedef struct SECKEYRSAPSSParamsStr SECKEYRSAPSSParams; |
| 80 | 79 |
| 81 /* | 80 /* |
| 82 ** DSA Public Key and related structures | 81 ** DSA Public Key and related structures |
| 83 */ | 82 */ |
| 84 | 83 |
| 85 struct SECKEYPQGParamsStr { | 84 struct SECKEYPQGParamsStr { |
| 86 PLArenaPool *arena; | 85 PLArenaPool *arena; |
| 87 SECItem prime; /* p */ | 86 SECItem prime; /* p */ |
| 88 SECItem subPrime; /* q */ | 87 SECItem subPrime; /* q */ |
| 89 SECItem base; /* g */ | 88 SECItem base; /* g */ |
| 90 /* XXX chrisk: this needs to be expanded to hold j and validationParms (RFC2
459 7.3.2) */ | 89 /* XXX chrisk: this needs to be expanded to hold j and validationParms (RFC2
459 7.3.2) */ |
| 91 }; | 90 }; |
| 92 typedef struct SECKEYPQGParamsStr SECKEYPQGParams; | 91 typedef struct SECKEYPQGParamsStr SECKEYPQGParams; |
| 93 | 92 |
| 94 struct SECKEYDSAPublicKeyStr { | 93 struct SECKEYDSAPublicKeyStr { |
| 95 SECKEYPQGParams params; | 94 SECKEYPQGParams params; |
| 96 SECItem publicValue; | 95 SECItem publicValue; |
| 97 }; | 96 }; |
| 98 typedef struct SECKEYDSAPublicKeyStr SECKEYDSAPublicKey; | 97 typedef struct SECKEYDSAPublicKeyStr SECKEYDSAPublicKey; |
| 99 | 98 |
| 100 | |
| 101 /* | 99 /* |
| 102 ** Diffie-Hellman Public Key structure | 100 ** Diffie-Hellman Public Key structure |
| 103 ** Structure member names suggested by PKCS#3. | 101 ** Structure member names suggested by PKCS#3. |
| 104 */ | 102 */ |
| 105 struct SECKEYDHParamsStr { | 103 struct SECKEYDHParamsStr { |
| 106 PLArenaPool * arena; | 104 PLArenaPool *arena; |
| 107 SECItem prime; /* p */ | 105 SECItem prime; /* p */ |
| 108 SECItem base; /* g */ | 106 SECItem base; /* g */ |
| 109 }; | 107 }; |
| 110 typedef struct SECKEYDHParamsStr SECKEYDHParams; | 108 typedef struct SECKEYDHParamsStr SECKEYDHParams; |
| 111 | 109 |
| 112 struct SECKEYDHPublicKeyStr { | 110 struct SECKEYDHPublicKeyStr { |
| 113 PLArenaPool * arena; | 111 PLArenaPool *arena; |
| 114 SECItem prime; | 112 SECItem prime; |
| 115 SECItem base; | 113 SECItem base; |
| 116 SECItem publicValue; | 114 SECItem publicValue; |
| 117 }; | 115 }; |
| 118 typedef struct SECKEYDHPublicKeyStr SECKEYDHPublicKey; | 116 typedef struct SECKEYDHPublicKeyStr SECKEYDHPublicKey; |
| 119 | 117 |
| 120 /* | 118 /* |
| 121 ** Elliptic curve Public Key structure | 119 ** Elliptic curve Public Key structure |
| 122 ** The PKCS#11 layer needs DER encoding of ANSI X9.62 | 120 ** The PKCS#11 layer needs DER encoding of ANSI X9.62 |
| 123 ** parameters value | 121 ** parameters value |
| 124 */ | 122 */ |
| 125 typedef SECItem SECKEYECParams; | 123 typedef SECItem SECKEYECParams; |
| 126 | 124 |
| 127 struct SECKEYECPublicKeyStr { | 125 struct SECKEYECPublicKeyStr { |
| 128 SECKEYECParams DEREncodedParams; | 126 SECKEYECParams DEREncodedParams; |
| 129 int size; /* size in bits */ | 127 int size; /* size in bits */ |
| 130 SECItem publicValue; /* encoded point */ | 128 SECItem publicValue; /* encoded point */ |
| 131 /* XXX Even though the PKCS#11 interface takes encoded parameters, | 129 /* XXX Even though the PKCS#11 interface takes encoded parameters, |
| 132 * we may still wish to decode them above PKCS#11 for things like | 130 * we may still wish to decode them above PKCS#11 for things like |
| 133 * printing key information. For named curves, which is what | 131 * printing key information. For named curves, which is what |
| 134 * we initially support, we ought to have the curve name at the | 132 * we initially support, we ought to have the curve name at the |
| 135 * very least. | 133 * very least. |
| 136 */ | 134 */ |
| 137 }; | 135 }; |
| 138 typedef struct SECKEYECPublicKeyStr SECKEYECPublicKey; | 136 typedef struct SECKEYECPublicKeyStr SECKEYECPublicKey; |
| 139 | 137 |
| 140 /* | 138 /* |
| 141 ** FORTEZZA Public Key structures | 139 ** FORTEZZA Public Key structures |
| 142 */ | 140 */ |
| 143 struct SECKEYFortezzaPublicKeyStr { | 141 struct SECKEYFortezzaPublicKeyStr { |
| 144 int KEAversion; | 142 int KEAversion; |
| 145 int DSSversion; | 143 int DSSversion; |
| 146 unsigned char KMID[8]; | 144 unsigned char KMID[8]; |
| 147 SECItem clearance; | 145 SECItem clearance; |
| 148 SECItem KEApriviledge; | 146 SECItem KEApriviledge; |
| 149 SECItem DSSpriviledge; | 147 SECItem DSSpriviledge; |
| 150 SECItem KEAKey; | 148 SECItem KEAKey; |
| 151 SECItem DSSKey; | 149 SECItem DSSKey; |
| 152 SECKEYPQGParams params; | 150 SECKEYPQGParams params; |
| 153 SECKEYPQGParams keaParams; | 151 SECKEYPQGParams keaParams; |
| 154 }; | 152 }; |
| 155 typedef struct SECKEYFortezzaPublicKeyStr SECKEYFortezzaPublicKey; | 153 typedef struct SECKEYFortezzaPublicKeyStr SECKEYFortezzaPublicKey; |
| 156 #define KEAprivilege KEApriviledge /* corrected spelling */ | 154 #define KEAprivilege KEApriviledge /* corrected spelling */ |
| 157 #define DSSprivilege DSSpriviledge /* corrected spelling */ | 155 #define DSSprivilege DSSpriviledge /* corrected spelling */ |
| 158 | 156 |
| 159 struct SECKEYDiffPQGParamsStr { | 157 struct SECKEYDiffPQGParamsStr { |
| 160 SECKEYPQGParams DiffKEAParams; | 158 SECKEYPQGParams DiffKEAParams; |
| 161 SECKEYPQGParams DiffDSAParams; | 159 SECKEYPQGParams DiffDSAParams; |
| 162 }; | 160 }; |
| 163 typedef struct SECKEYDiffPQGParamsStr SECKEYDiffPQGParams; | 161 typedef struct SECKEYDiffPQGParamsStr SECKEYDiffPQGParams; |
| 164 | 162 |
| 165 struct SECKEYPQGDualParamsStr { | 163 struct SECKEYPQGDualParamsStr { |
| 166 SECKEYPQGParams CommParams; | 164 SECKEYPQGParams CommParams; |
| 167 SECKEYDiffPQGParams DiffParams; | 165 SECKEYDiffPQGParams DiffParams; |
| 168 }; | 166 }; |
| 169 typedef struct SECKEYPQGDualParamsStr SECKEYPQGDualParams; | 167 typedef struct SECKEYPQGDualParamsStr SECKEYPQGDualParams; |
| 170 | 168 |
| 171 struct SECKEYKEAParamsStr { | 169 struct SECKEYKEAParamsStr { |
| 172 PLArenaPool *arena; | 170 PLArenaPool *arena; |
| 173 SECItem hash; | 171 SECItem hash; |
| 174 }; | 172 }; |
| 175 typedef struct SECKEYKEAParamsStr SECKEYKEAParams; | 173 typedef struct SECKEYKEAParamsStr SECKEYKEAParams; |
| 176 | 174 |
| 177 struct SECKEYKEAPublicKeyStr { | 175 struct SECKEYKEAPublicKeyStr { |
| 178 SECKEYKEAParams params; | 176 SECKEYKEAParams params; |
| 179 SECItem publicValue; | 177 SECItem publicValue; |
| 180 }; | 178 }; |
| 181 typedef struct SECKEYKEAPublicKeyStr SECKEYKEAPublicKey; | 179 typedef struct SECKEYKEAPublicKeyStr SECKEYKEAPublicKey; |
| 182 | 180 |
| 183 /* | 181 /* |
| 184 ** A Generic public key object. | 182 ** A Generic public key object. |
| 185 */ | 183 */ |
| 186 struct SECKEYPublicKeyStr { | 184 struct SECKEYPublicKeyStr { |
| 187 PLArenaPool *arena; | 185 PLArenaPool *arena; |
| 188 KeyType keyType; | 186 KeyType keyType; |
| 189 PK11SlotInfo *pkcs11Slot; | 187 PK11SlotInfo *pkcs11Slot; |
| 190 CK_OBJECT_HANDLE pkcs11ID; | 188 CK_OBJECT_HANDLE pkcs11ID; |
| 191 union { | 189 union { |
| 192 SECKEYRSAPublicKey rsa; | 190 SECKEYRSAPublicKey rsa; |
| 193 » SECKEYDSAPublicKey dsa; | 191 SECKEYDSAPublicKey dsa; |
| 194 » SECKEYDHPublicKey dh; | 192 SECKEYDHPublicKey dh; |
| 195 SECKEYKEAPublicKey kea; | 193 SECKEYKEAPublicKey kea; |
| 196 SECKEYFortezzaPublicKey fortezza; | 194 SECKEYFortezzaPublicKey fortezza; |
| 197 » SECKEYECPublicKey ec; | 195 SECKEYECPublicKey ec; |
| 198 } u; | 196 } u; |
| 199 }; | 197 }; |
| 200 typedef struct SECKEYPublicKeyStr SECKEYPublicKey; | 198 typedef struct SECKEYPublicKeyStr SECKEYPublicKey; |
| 201 | 199 |
| 202 /* bit flag definitions for staticflags */ | 200 /* bit flag definitions for staticflags */ |
| 203 #define SECKEY_Attributes_Cached 0x1 /* bit 0 states | 201 #define SECKEY_Attributes_Cached 0x1 /* bit 0 states \ |
| 204 whether attributes are cached */ | 202 whether attributes are cached */ |
| 205 #define SECKEY_CKA_PRIVATE (1U << 1) /* bit 1 is the value of CKA_PRIVATE */ | 203 #define SECKEY_CKA_PRIVATE (1U << 1) /* bit 1 is the value of CKA_PRIVATE */ |
| 206 #define SECKEY_CKA_ALWAYS_AUTHENTICATE (1U << 2) | 204 #define SECKEY_CKA_ALWAYS_AUTHENTICATE (1U << 2) |
| 207 | 205 |
| 208 #define SECKEY_ATTRIBUTES_CACHED(key) \ | 206 #define SECKEY_ATTRIBUTES_CACHED(key) \ |
| 209 (0 != (key->staticflags & SECKEY_Attributes_Cached)) | 207 (0 != (key->staticflags & SECKEY_Attributes_Cached)) |
| 210 | 208 |
| 211 #define SECKEY_ATTRIBUTE_VALUE(key,attribute) \ | 209 #define SECKEY_ATTRIBUTE_VALUE(key,attribute) \ |
| 212 (0 != (key->staticflags & SECKEY_##attribute)) | 210 (0 != (key->staticflags & SECKEY_##attribute)) |
| 213 | 211 |
| 214 #define SECKEY_HAS_ATTRIBUTE_SET(key,attribute) \ | 212 #define SECKEY_HAS_ATTRIBUTE_SET(key,attribute) \ |
| 215 (0 != (key->staticflags & SECKEY_Attributes_Cached)) ? \ | 213 (0 != (key->staticflags & SECKEY_Attributes_Cached)) ? \ |
| 216 (0 != (key->staticflags & SECKEY_##attribute)) : \ | 214 (0 != (key->staticflags & SECKEY_##attribute)) : \ |
| 217 PK11_HasAttributeSet(key->pkcs11Slot,key->pkcs11ID,attribute, PR_FALSE) | 215 PK11_HasAttributeSet(key->pkcs11Slot,key->pkcs11ID,attribute, PR_FALSE) |
| 218 | 216 |
| 219 #define SECKEY_HAS_ATTRIBUTE_SET_LOCK(key,attribute, haslock) \ | 217 #define SECKEY_HAS_ATTRIBUTE_SET_LOCK(key,attribute, haslock) \ |
| 220 (0 != (key->staticflags & SECKEY_Attributes_Cached)) ? \ | 218 (0 != (key->staticflags & SECKEY_Attributes_Cached)) ? \ |
| 221 (0 != (key->staticflags & SECKEY_##attribute)) : \ | 219 (0 != (key->staticflags & SECKEY_##attribute)) : \ |
| 222 PK11_HasAttributeSet(key->pkcs11Slot,key->pkcs11ID,attribute, haslock) | 220 PK11_HasAttributeSet(key->pkcs11Slot,key->pkcs11ID,attribute, haslock) |
| 223 | 221 |
| 224 /* | 222 /* |
| 225 ** A generic key structure | 223 ** A generic key structure |
| 226 */ | 224 */ |
| 227 struct SECKEYPrivateKeyStr { | 225 struct SECKEYPrivateKeyStr { |
| 228 PLArenaPool *arena; | 226 PLArenaPool *arena; |
| 229 KeyType keyType; | 227 KeyType keyType; |
| 230 PK11SlotInfo *pkcs11Slot;» /* pkcs11 slot this key lives in */ | 228 PK11SlotInfo *pkcs11Slot; /* pkcs11 slot this key lives in */ |
| 231 CK_OBJECT_HANDLE pkcs11ID; /* ID of pkcs11 object */ | 229 CK_OBJECT_HANDLE pkcs11ID; /* ID of pkcs11 object */ |
| 232 PRBool pkcs11IsTemp;» /* temp pkcs11 object, delete it when done */ | 230 PRBool pkcs11IsTemp; /* temp pkcs11 object, delete it when done */ |
| 233 void *wincx;» » /* context for errors and pw prompts */ | 231 void *wincx; /* context for errors and pw prompts */ |
| 234 PRUint32 staticflags; /* bit flag of cached PKCS#11 attributes */ | 232 PRUint32 staticflags; /* bit flag of cached PKCS#11 attributes */ |
| 235 }; | 233 }; |
| 236 typedef struct SECKEYPrivateKeyStr SECKEYPrivateKey; | 234 typedef struct SECKEYPrivateKeyStr SECKEYPrivateKey; |
| 237 | 235 |
| 238 typedef struct { | 236 typedef struct { |
| 239 PRCList links; | 237 PRCList links; |
| 240 SECKEYPrivateKey *key; | 238 SECKEYPrivateKey *key; |
| 241 } SECKEYPrivateKeyListNode; | 239 } SECKEYPrivateKeyListNode; |
| 242 | 240 |
| 243 typedef struct { | 241 typedef struct { |
| 244 PRCList list; | 242 PRCList list; |
| 245 PLArenaPool *arena; | 243 PLArenaPool *arena; |
| 246 } SECKEYPrivateKeyList; | 244 } SECKEYPrivateKeyList; |
| 247 | 245 |
| 248 typedef struct { | 246 typedef struct { |
| 249 PRCList links; | 247 PRCList links; |
| 250 SECKEYPublicKey *key; | 248 SECKEYPublicKey *key; |
| 251 } SECKEYPublicKeyListNode; | 249 } SECKEYPublicKeyListNode; |
| 252 | 250 |
| 253 typedef struct { | 251 typedef struct { |
| 254 PRCList list; | 252 PRCList list; |
| 255 PLArenaPool *arena; | 253 PLArenaPool *arena; |
| 256 } SECKEYPublicKeyList; | 254 } SECKEYPublicKeyList; |
| 257 #endif /* _KEYTHI_H_ */ | 255 #endif /* _KEYTHI_H_ */ |
| 258 | |
| OLD | NEW |