Import from 1.9a8 tarball
[mozilla-nss.git] / security / nss / lib / softoken / legacydb / lowkeyti.h
blob57f8105e3dd34317778a845f619787048e59e241
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
14 * The Original Code is the Netscape security libraries.
16 * The Initial Developer of the Original Code is
17 * Netscape Communications Corporation.
18 * Portions created by the Initial Developer are Copyright (C) 1994-2000
19 * the Initial Developer. All Rights Reserved.
21 * Contributor(s):
22 * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
37 #ifndef _LOWKEYTI_H_
38 #define _LOWKEYTI_H_ 1
40 #include "blapit.h"
41 #include "prtypes.h"
42 #include "plarena.h"
43 #include "secitem.h"
44 #include "secasn1t.h"
45 #include "secoidt.h"
49 * a key in/for the data base
51 struct NSSLOWKEYDBKeyStr {
52 PLArenaPool *arena;
53 int version;
54 char *nickname;
55 SECItem salt;
56 SECItem derPK;
58 typedef struct NSSLOWKEYDBKeyStr NSSLOWKEYDBKey;
60 typedef struct NSSLOWKEYDBHandleStr NSSLOWKEYDBHandle;
62 #ifdef NSS_USE_KEY4_DB
63 #define NSSLOWKEY_DB_FILE_VERSION 4
64 #else
65 #define NSSLOWKEY_DB_FILE_VERSION 3
66 #endif
68 #define NSSLOWKEY_VERSION 0 /* what we *create* */
71 ** Typedef for callback to get a password "key".
73 extern const SEC_ASN1Template nsslowkey_PQGParamsTemplate[];
74 extern const SEC_ASN1Template nsslowkey_RSAPrivateKeyTemplate[];
75 extern const SEC_ASN1Template nsslowkey_DSAPrivateKeyTemplate[];
76 extern const SEC_ASN1Template nsslowkey_DSAPrivateKeyExportTemplate[];
77 extern const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[];
78 extern const SEC_ASN1Template nsslowkey_DHPrivateKeyExportTemplate[];
79 #ifdef NSS_ENABLE_ECC
80 #define NSSLOWKEY_EC_PRIVATE_KEY_VERSION 1 /* as per SECG 1 C.4 */
81 extern const SEC_ASN1Template nsslowkey_ECParamsTemplate[];
82 extern const SEC_ASN1Template nsslowkey_ECPrivateKeyTemplate[];
83 #endif /* NSS_ENABLE_ECC */
85 extern const SEC_ASN1Template nsslowkey_PrivateKeyInfoTemplate[];
86 extern const SEC_ASN1Template nsslowkey_EncryptedPrivateKeyInfoTemplate[];
89 * PKCS #8 attributes
91 struct NSSLOWKEYAttributeStr {
92 SECItem attrType;
93 SECItem *attrValue;
95 typedef struct NSSLOWKEYAttributeStr NSSLOWKEYAttribute;
98 ** A PKCS#8 private key info object
100 struct NSSLOWKEYPrivateKeyInfoStr {
101 PLArenaPool *arena;
102 SECItem version;
103 SECAlgorithmID algorithm;
104 SECItem privateKey;
105 NSSLOWKEYAttribute **attributes;
107 typedef struct NSSLOWKEYPrivateKeyInfoStr NSSLOWKEYPrivateKeyInfo;
108 #define NSSLOWKEY_PRIVATE_KEY_INFO_VERSION 0 /* what we *create* */
111 ** A PKCS#8 private key info object
113 struct NSSLOWKEYEncryptedPrivateKeyInfoStr {
114 PLArenaPool *arena;
115 SECAlgorithmID algorithm;
116 SECItem encryptedData;
118 typedef struct NSSLOWKEYEncryptedPrivateKeyInfoStr NSSLOWKEYEncryptedPrivateKeyInfo;
121 typedef enum {
122 NSSLOWKEYNullKey = 0,
123 NSSLOWKEYRSAKey = 1,
124 NSSLOWKEYDSAKey = 2,
125 NSSLOWKEYDHKey = 4,
126 NSSLOWKEYECKey = 5
127 } NSSLOWKEYType;
130 ** An RSA public key object.
132 struct NSSLOWKEYPublicKeyStr {
133 PLArenaPool *arena;
134 NSSLOWKEYType keyType ;
135 union {
136 RSAPublicKey rsa;
137 DSAPublicKey dsa;
138 DHPublicKey dh;
139 ECPublicKey ec;
140 } u;
142 typedef struct NSSLOWKEYPublicKeyStr NSSLOWKEYPublicKey;
145 ** Low Level private key object
146 ** This is only used by the raw Crypto engines (crypto), keydb (keydb),
147 ** and PKCS #11. Everyone else uses the high level key structure.
149 struct NSSLOWKEYPrivateKeyStr {
150 PLArenaPool *arena;
151 NSSLOWKEYType keyType;
152 union {
153 RSAPrivateKey rsa;
154 DSAPrivateKey dsa;
155 DHPrivateKey dh;
156 ECPrivateKey ec;
157 } u;
159 typedef struct NSSLOWKEYPrivateKeyStr NSSLOWKEYPrivateKey;
161 #endif /* _LOWKEYTI_H_ */