andre@0: /* This Source Code Form is subject to the terms of the Mozilla Public andre@0: * License, v. 2.0. If a copy of the MPL was not distributed with this andre@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ andre@0: #ifndef _LOWKEYTI_H_ andre@0: #define _LOWKEYTI_H_ 1 andre@0: andre@0: #include "blapit.h" andre@0: #include "prtypes.h" andre@0: #include "plarena.h" andre@0: #include "secitem.h" andre@0: #include "secasn1t.h" andre@0: #include "secoidt.h" andre@0: andre@0: /* andre@0: ** Typedef for callback to get a password "key". andre@0: */ andre@0: extern const SEC_ASN1Template nsslowkey_PQGParamsTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_RSAPrivateKeyTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_DSAPrivateKeyTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_DSAPrivateKeyExportTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_DHPrivateKeyExportTemplate[]; andre@0: #ifndef NSS_DISABLE_ECC andre@0: #define NSSLOWKEY_EC_PRIVATE_KEY_VERSION 1 /* as per SECG 1 C.4 */ andre@0: extern const SEC_ASN1Template nsslowkey_ECParamsTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_ECPrivateKeyTemplate[]; andre@0: #endif /* NSS_DISABLE_ECC */ andre@0: andre@0: extern const SEC_ASN1Template nsslowkey_PrivateKeyInfoTemplate[]; andre@0: extern const SEC_ASN1Template nsslowkey_EncryptedPrivateKeyInfoTemplate[]; andre@0: andre@0: /* andre@0: * PKCS #8 attributes andre@0: */ andre@0: struct NSSLOWKEYAttributeStr { andre@0: SECItem attrType; andre@0: SECItem *attrValue; andre@0: }; andre@0: typedef struct NSSLOWKEYAttributeStr NSSLOWKEYAttribute; andre@0: andre@0: /* andre@0: ** A PKCS#8 private key info object andre@0: */ andre@0: struct NSSLOWKEYPrivateKeyInfoStr { andre@0: PLArenaPool *arena; andre@0: SECItem version; andre@0: SECAlgorithmID algorithm; andre@0: SECItem privateKey; andre@0: NSSLOWKEYAttribute **attributes; andre@0: }; andre@0: typedef struct NSSLOWKEYPrivateKeyInfoStr NSSLOWKEYPrivateKeyInfo; andre@0: #define NSSLOWKEY_PRIVATE_KEY_INFO_VERSION 0 /* what we *create* */ andre@0: andre@0: typedef enum { andre@0: NSSLOWKEYNullKey = 0, andre@0: NSSLOWKEYRSAKey = 1, andre@0: NSSLOWKEYDSAKey = 2, andre@0: NSSLOWKEYDHKey = 4, andre@0: NSSLOWKEYECKey = 5 andre@0: } NSSLOWKEYType; andre@0: andre@0: /* andre@0: ** An RSA public key object. andre@0: */ andre@0: struct NSSLOWKEYPublicKeyStr { andre@0: PLArenaPool *arena; andre@0: NSSLOWKEYType keyType ; andre@0: union { andre@0: RSAPublicKey rsa; andre@0: DSAPublicKey dsa; andre@0: DHPublicKey dh; andre@0: ECPublicKey ec; andre@0: } u; andre@0: }; andre@0: typedef struct NSSLOWKEYPublicKeyStr NSSLOWKEYPublicKey; andre@0: andre@0: /* andre@0: ** Low Level private key object andre@0: ** This is only used by the raw Crypto engines (crypto), keydb (keydb), andre@0: ** and PKCS #11. Everyone else uses the high level key structure. andre@0: */ andre@0: struct NSSLOWKEYPrivateKeyStr { andre@0: PLArenaPool *arena; andre@0: NSSLOWKEYType keyType; andre@0: union { andre@0: RSAPrivateKey rsa; andre@0: DSAPrivateKey dsa; andre@0: DHPrivateKey dh; andre@0: ECPrivateKey ec; andre@0: } u; andre@0: }; andre@0: typedef struct NSSLOWKEYPrivateKeyStr NSSLOWKEYPrivateKey; andre@0: andre@0: #endif /* _LOWKEYTI_H_ */