security/nss/lib/cryptohi/keyhi.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #ifndef _KEYHI_H_
     6 #define _KEYHI_H_
     8 #include "plarena.h"
    10 #include "seccomon.h"
    11 #include "secoidt.h"
    12 #include "secdert.h"
    13 #include "keythi.h"
    14 #include "certt.h"
    15 /*#include "secpkcs5.h" */
    17 SEC_BEGIN_PROTOS
    20 /*
    21 ** Destroy a subject-public-key-info object.
    22 */
    23 extern void SECKEY_DestroySubjectPublicKeyInfo(CERTSubjectPublicKeyInfo *spki);
    25 /*
    26 ** Copy subject-public-key-info "src" to "dst". "dst" is filled in
    27 ** appropriately (memory is allocated for each of the sub objects).
    28 */
    29 extern SECStatus SECKEY_CopySubjectPublicKeyInfo(PLArenaPool *arena,
    30 					     CERTSubjectPublicKeyInfo *dst,
    31 					     CERTSubjectPublicKeyInfo *src);
    33 /*
    34 ** Update the PQG parameters for a cert's public key.
    35 ** Only done for DSA certs
    36 */
    37 extern SECStatus
    38 SECKEY_UpdateCertPQG(CERTCertificate * subjectCert);
    41 /*
    42 ** Return the strength of the public key in bytes
    43 */
    44 extern unsigned SECKEY_PublicKeyStrength(const SECKEYPublicKey *pubk);
    46 /*
    47 ** Return the strength of the public key in bits
    48 */
    49 extern unsigned SECKEY_PublicKeyStrengthInBits(const SECKEYPublicKey *pubk);
    51 /*
    52 ** Return the length of the signature in bytes
    53 */
    54 extern unsigned SECKEY_SignatureLen(const SECKEYPublicKey *pubk);
    56 /*
    57 ** Make a copy of the private key "privKey"
    58 */
    59 extern SECKEYPrivateKey *SECKEY_CopyPrivateKey(const SECKEYPrivateKey *privKey);
    61 /*
    62 ** Make a copy of the public key "pubKey"
    63 */
    64 extern SECKEYPublicKey *SECKEY_CopyPublicKey(const SECKEYPublicKey *pubKey);
    66 /*
    67 ** Convert a private key "privateKey" into a public key
    68 */
    69 extern SECKEYPublicKey *SECKEY_ConvertToPublicKey(SECKEYPrivateKey *privateKey);
    71 /*
    72  * create a new RSA key pair. The private Key is returned...
    73  */
    74 SECKEYPrivateKey *SECKEY_CreateRSAPrivateKey(int keySizeInBits,
    75 					   SECKEYPublicKey **pubk, void *cx);
    77 /*
    78  * create a new DH key pair. The private Key is returned...
    79  */
    80 SECKEYPrivateKey *SECKEY_CreateDHPrivateKey(SECKEYDHParams *param,
    81 					   SECKEYPublicKey **pubk, void *cx);
    83 /*
    84  * create a new EC key pair. The private Key is returned...
    85  */
    86 SECKEYPrivateKey *SECKEY_CreateECPrivateKey(SECKEYECParams *param,
    87                                            SECKEYPublicKey **pubk, void *cx);
    89 /*
    90 ** Create a subject-public-key-info based on a public key.
    91 */
    92 extern CERTSubjectPublicKeyInfo *
    93 SECKEY_CreateSubjectPublicKeyInfo(const SECKEYPublicKey *k);
    95 /*
    96 ** Convert a base64 ascii encoded DER public key and challenge to spki,
    97 ** and verify the signature and challenge data are correct
    98 */
    99 extern CERTSubjectPublicKeyInfo *
   100 SECKEY_ConvertAndDecodePublicKeyAndChallenge(char *pkacstr, char *challenge,
   101 								void *cx);
   103 /*
   104 ** Encode a  CERTSubjectPublicKeyInfo structure. into a
   105 ** DER encoded subject public key info. 
   106 */
   107 SECItem *
   108 SECKEY_EncodeDERSubjectPublicKeyInfo(const SECKEYPublicKey *pubk);
   110 /*
   111 ** Decode a DER encoded subject public key info into a
   112 ** CERTSubjectPublicKeyInfo structure.
   113 */
   114 extern CERTSubjectPublicKeyInfo *
   115 SECKEY_DecodeDERSubjectPublicKeyInfo(const SECItem *spkider);
   117 /*
   118 ** Convert a base64 ascii encoded DER subject public key info to our
   119 ** internal format.
   120 */
   121 extern CERTSubjectPublicKeyInfo *
   122 SECKEY_ConvertAndDecodeSubjectPublicKeyInfo(const char *spkistr);
   124 /*
   125  * extract the public key from a subject Public Key info structure.
   126  * (used by JSS).
   127  */
   128 extern SECKEYPublicKey *
   129 SECKEY_ExtractPublicKey(const CERTSubjectPublicKeyInfo *);
   131 /*
   132 ** Destroy a private key object.
   133 **	"key" the object
   134 */
   135 extern void SECKEY_DestroyPrivateKey(SECKEYPrivateKey *key);
   138 /*
   139 ** Destroy a public key object.
   140 **	"key" the object
   141 */
   142 extern void SECKEY_DestroyPublicKey(SECKEYPublicKey *key);
   144 /* Destroy and zero out a private key info structure.  for now this
   145  * function zero's out memory allocated in an arena for the key 
   146  * since PORT_FreeArena does not currently do this.  
   147  *
   148  * NOTE -- If a private key info is allocated in an arena, one should 
   149  * not call this function with freeit = PR_FALSE.  The function should 
   150  * destroy the arena.  
   151  */
   152 extern void
   153 SECKEY_DestroyPrivateKeyInfo(SECKEYPrivateKeyInfo *pvk, PRBool freeit);
   155 /* Destroy and zero out an encrypted private key info.
   156  *
   157  * NOTE -- If a encrypted private key info is allocated in an arena, one should 
   158  * not call this function with freeit = PR_FALSE.  The function should 
   159  * destroy the arena.  
   160  */
   161 extern void
   162 SECKEY_DestroyEncryptedPrivateKeyInfo(SECKEYEncryptedPrivateKeyInfo *epki,
   163 				      PRBool freeit);
   165 /* Copy private key info structure.  
   166  *  poolp is the arena into which the contents of from is to be copied.
   167  *	NULL is a valid entry.
   168  *  to is the destination private key info
   169  *  from is the source private key info
   170  * if either from or to is NULL or an error occurs, SECFailure is 
   171  * returned.  otherwise, SECSuccess is returned.
   172  */
   173 extern SECStatus
   174 SECKEY_CopyPrivateKeyInfo(PLArenaPool *poolp,
   175 			  SECKEYPrivateKeyInfo *to,
   176 			  const SECKEYPrivateKeyInfo *from);
   178 extern SECStatus
   179 SECKEY_CacheStaticFlags(SECKEYPrivateKey* key);
   181 /* Copy encrypted private key info structure.  
   182  *  poolp is the arena into which the contents of from is to be copied.
   183  *	NULL is a valid entry.
   184  *  to is the destination encrypted private key info
   185  *  from is the source encrypted private key info
   186  * if either from or to is NULL or an error occurs, SECFailure is 
   187  * returned.  otherwise, SECSuccess is returned.
   188  */
   189 extern SECStatus
   190 SECKEY_CopyEncryptedPrivateKeyInfo(PLArenaPool *poolp,
   191 				   SECKEYEncryptedPrivateKeyInfo *to,
   192 				   const SECKEYEncryptedPrivateKeyInfo *from);
   193 /*
   194  * Accessor functions for key type of public and private keys.
   195  */
   196 KeyType SECKEY_GetPrivateKeyType(const SECKEYPrivateKey *privKey);
   197 KeyType SECKEY_GetPublicKeyType(const SECKEYPublicKey *pubKey);
   199 /*
   200  * Creates a PublicKey from its DER encoding.
   201  * Currently only supports RSA, DSA, and DH keys.
   202  */
   203 SECKEYPublicKey*
   204 SECKEY_ImportDERPublicKey(const SECItem *derKey, CK_KEY_TYPE type);
   206 SECKEYPrivateKeyList*
   207 SECKEY_NewPrivateKeyList(void);
   209 void
   210 SECKEY_DestroyPrivateKeyList(SECKEYPrivateKeyList *keys);
   212 void
   213 SECKEY_RemovePrivateKeyListNode(SECKEYPrivateKeyListNode *node);
   215 SECStatus
   216 SECKEY_AddPrivateKeyToListTail( SECKEYPrivateKeyList *list,
   217                                 SECKEYPrivateKey *key);
   219 #define PRIVKEY_LIST_HEAD(l) ((SECKEYPrivateKeyListNode*)PR_LIST_HEAD(&l->list))
   220 #define PRIVKEY_LIST_NEXT(n) ((SECKEYPrivateKeyListNode *)n->links.next)
   221 #define PRIVKEY_LIST_END(n,l) (((void *)n) == ((void *)&l->list))
   223 SECKEYPublicKeyList*
   224 SECKEY_NewPublicKeyList(void);
   226 void
   227 SECKEY_DestroyPublicKeyList(SECKEYPublicKeyList *keys);
   229 void
   230 SECKEY_RemovePublicKeyListNode(SECKEYPublicKeyListNode *node);
   232 SECStatus
   233 SECKEY_AddPublicKeyToListTail( SECKEYPublicKeyList *list,
   234                                 SECKEYPublicKey *key);
   236 #define PUBKEY_LIST_HEAD(l) ((SECKEYPublicKeyListNode*)PR_LIST_HEAD(&l->list))
   237 #define PUBKEY_LIST_NEXT(n) ((SECKEYPublicKeyListNode *)n->links.next)
   238 #define PUBKEY_LIST_END(n,l) (((void *)n) == ((void *)&l->list))
   240 /*
   241  * Length in bits of the EC's field size.  This is also the length of
   242  * the x and y coordinates of EC points, such as EC public keys and
   243  * base points.
   244  *
   245  * Return 0 on failure (unknown EC domain parameters).
   246  */
   247 extern int SECKEY_ECParamsToKeySize(const SECItem *params);
   249 /*
   250  * Length in bits of the EC base point order, usually denoted n.  This
   251  * is also the length of EC private keys and ECDSA signature components
   252  * r and s.
   253  *
   254  * Return 0 on failure (unknown EC domain parameters).
   255  */
   256 extern int SECKEY_ECParamsToBasePointOrderLen(const SECItem *params);
   258 SEC_END_PROTOS
   260 #endif /* _KEYHI_H_ */

mercurial