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: andre@0: #ifndef NSSPKI_H andre@0: #define NSSPKI_H andre@0: andre@0: /* andre@0: * nsspki.h andre@0: * andre@0: * This file prototypes the methods of the top-level PKI objects. andre@0: */ andre@0: andre@0: #ifndef NSSDEVT_H andre@0: #include "nssdevt.h" andre@0: #endif /* NSSDEVT_H */ andre@0: andre@0: #ifndef NSSPKIT_H andre@0: #include "nsspkit.h" andre@0: #endif /* NSSPKIT_H */ andre@0: andre@0: #ifndef BASE_H andre@0: #include "base.h" andre@0: #endif /* BASE_H */ andre@0: andre@0: PR_BEGIN_EXTERN_C andre@0: andre@0: /* andre@0: * A note about interfaces andre@0: * andre@0: * Although these APIs are specified in C, a language which does andre@0: * not have fancy support for abstract interfaces, this library andre@0: * was designed from an object-oriented perspective. It may be andre@0: * useful to consider the standard interfaces which went into andre@0: * the writing of these APIs. andre@0: * andre@0: * Basic operations on all objects: andre@0: * Destroy -- free a pointer to an object andre@0: * DeleteStoredObject -- delete an object permanently andre@0: * andre@0: * Public Key cryptographic operations: andre@0: * Encrypt andre@0: * Verify andre@0: * VerifyRecover andre@0: * Wrap andre@0: * Derive andre@0: * andre@0: * Private Key cryptographic operations: andre@0: * IsStillPresent andre@0: * Decrypt andre@0: * Sign andre@0: * SignRecover andre@0: * Unwrap andre@0: * Derive andre@0: * andre@0: * Symmetric Key cryptographic operations: andre@0: * IsStillPresent andre@0: * Encrypt andre@0: * Decrypt andre@0: * Sign andre@0: * SignRecover andre@0: * Verify andre@0: * VerifyRecover andre@0: * Wrap andre@0: * Unwrap andre@0: * Derive andre@0: * andre@0: */ andre@0: andre@0: /* andre@0: * NSSCertificate andre@0: * andre@0: * These things can do crypto ops like public keys, except that the trust, andre@0: * usage, and other constraints are checked. These objects are "high-level," andre@0: * so trust, usages, etc. are in the form we throw around (client auth, andre@0: * email signing, etc.). Remember that theoretically another implementation andre@0: * (think PGP) could be beneath this object. andre@0: */ andre@0: andre@0: /* andre@0: * NSSCertificate_Destroy andre@0: * andre@0: * Free a pointer to a certificate object. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCertificate_Destroy andre@0: ( andre@0: NSSCertificate *c andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_DeleteStoredObject andre@0: * andre@0: * Permanently remove this certificate from storage. If this is the andre@0: * only (remaining) certificate corresponding to a private key, andre@0: * public key, and/or other object; then that object (those objects) andre@0: * are deleted too. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCertificate_DeleteStoredObject andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_Validate andre@0: * andre@0: * Verify that this certificate is trusted, for the specified usage(s), andre@0: * at the specified time, {word word} the specified policies. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCertificate_Validate andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSTime *timeOpt, /* NULL for "now" */ andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt /* NULL for none */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_ValidateCompletely andre@0: * andre@0: * Verify that this certificate is trusted. The difference between andre@0: * this and the previous call is that NSSCertificate_Validate merely andre@0: * returns success or failure with an appropriate error stack. andre@0: * However, there may be (and often are) multiple problems with a andre@0: * certificate. This routine returns an array of errors, specifying andre@0: * every problem. andre@0: */ andre@0: andre@0: /* andre@0: * Return value must be an array of objects, each of which has andre@0: * an NSSError, and any corresponding certificate (in the chain) andre@0: * and/or policy. andre@0: */ andre@0: andre@0: NSS_EXTERN void ** /* void *[] */ andre@0: NSSCertificate_ValidateCompletely andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSTime *timeOpt, /* NULL for "now" */ andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, /* NULL for none */ andre@0: void **rvOpt, /* NULL for allocate */ andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt /* NULL for heap */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_ValidateAndDiscoverUsagesAndPolicies andre@0: * andre@0: * Returns PR_SUCCESS if the certificate is valid for at least something. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCertificate_ValidateAndDiscoverUsagesAndPolicies andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSTime **notBeforeOutOpt, andre@0: NSSTime **notAfterOutOpt, andre@0: void *allowedUsages, andre@0: void *disallowedUsages, andre@0: void *allowedPolicies, andre@0: void *disallowedPolicies, andre@0: /* more args.. work on this fgmr */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_Encode andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSDER * andre@0: NSSCertificate_Encode andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSDER *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_BuildChain andre@0: * andre@0: * This routine returns NSSCertificate *'s for each certificate andre@0: * in the "chain" starting from the specified one up to and andre@0: * including the root. The zeroth element in the array is the andre@0: * specified ("leaf") certificate. andre@0: * andre@0: * If statusOpt is supplied, and is returned as PR_FAILURE, possible andre@0: * error values are: andre@0: * andre@0: * NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND - the chain is incomplete andre@0: * andre@0: */ andre@0: andre@0: extern const NSSError NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND; andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCertificate_BuildChain andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt, andre@0: PRStatus *statusOpt, andre@0: NSSTrustDomain *td, andre@0: NSSCryptoContext *cc andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_GetTrustDomain andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSCertificate_GetTrustDomain andre@0: ( andre@0: NSSCertificate *c andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_GetToken andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSCertificate_GetToken andre@0: ( andre@0: NSSCertificate *c, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_GetSlot andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSlot * andre@0: NSSCertificate_GetSlot andre@0: ( andre@0: NSSCertificate *c, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_GetModule andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSModule * andre@0: NSSCertificate_GetModule andre@0: ( andre@0: NSSCertificate *c, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_Encrypt andre@0: * andre@0: * Encrypt a single chunk of data with the public key corresponding to andre@0: * this certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCertificate_Encrypt andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_Verify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCertificate_Verify andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSItem *signature, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_VerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCertificate_VerifyRecover andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *signature, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_WrapSymmetricKey andre@0: * andre@0: * This method tries very hard to to succeed, even in situations andre@0: * involving sensitive keys and multiple modules. andre@0: * { relyea: want to add verbiage? } andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCertificate_WrapSymmetricKey andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSSymmetricKey *keyToWrap, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_CreateCryptoContext andre@0: * andre@0: * Create a crypto context, in this certificate's trust domain, with this andre@0: * as the distinguished certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSCertificate_CreateCryptoContext andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_GetPublicKey andre@0: * andre@0: * Returns the public key corresponding to this certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPublicKey * andre@0: NSSCertificate_GetPublicKey andre@0: ( andre@0: NSSCertificate *c andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_FindPrivateKey andre@0: * andre@0: * Finds and returns the private key corresponding to this certificate, andre@0: * if it is available. andre@0: * andre@0: * { Should this hang off of NSSUserCertificate? } andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPrivateKey * andre@0: NSSCertificate_FindPrivateKey andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSCertificate_IsPrivateKeyAvailable andre@0: * andre@0: * Returns success if the private key corresponding to this certificate andre@0: * is available to be used. andre@0: * andre@0: * { Should *this* hang off of NSSUserCertificate?? } andre@0: */ andre@0: andre@0: NSS_EXTERN PRBool andre@0: NSSCertificate_IsPrivateKeyAvailable andre@0: ( andre@0: NSSCertificate *c, andre@0: NSSCallback *uhh, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * If we make NSSUserCertificate not a typedef of NSSCertificate, andre@0: * then we'll need implementations of the following: andre@0: * andre@0: * NSSUserCertificate_Destroy andre@0: * NSSUserCertificate_DeleteStoredObject andre@0: * NSSUserCertificate_Validate andre@0: * NSSUserCertificate_ValidateCompletely andre@0: * NSSUserCertificate_ValidateAndDiscoverUsagesAndPolicies andre@0: * NSSUserCertificate_Encode andre@0: * NSSUserCertificate_BuildChain andre@0: * NSSUserCertificate_GetTrustDomain andre@0: * NSSUserCertificate_GetToken andre@0: * NSSUserCertificate_GetSlot andre@0: * NSSUserCertificate_GetModule andre@0: * NSSUserCertificate_GetCryptoContext andre@0: * NSSUserCertificate_GetPublicKey andre@0: */ andre@0: andre@0: /* andre@0: * NSSUserCertificate_IsStillPresent andre@0: * andre@0: * Verify that if this certificate lives on a token, that the token andre@0: * is still present and the certificate still exists. This is a andre@0: * lightweight call which should be used whenever it should be andre@0: * verified that the user hasn't perhaps popped out his or her andre@0: * token and strolled away. andre@0: */ andre@0: andre@0: NSS_EXTERN PRBool andre@0: NSSUserCertificate_IsStillPresent andre@0: ( andre@0: NSSUserCertificate *uc, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSUserCertificate_Decrypt andre@0: * andre@0: * Decrypt a single chunk of data with the private key corresponding andre@0: * to this certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSUserCertificate_Decrypt andre@0: ( andre@0: NSSUserCertificate *uc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSUserCertificate_Sign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSUserCertificate_Sign andre@0: ( andre@0: NSSUserCertificate *uc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSUserCertificate_SignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSUserCertificate_SignRecover andre@0: ( andre@0: NSSUserCertificate *uc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSUserCertificate_UnwrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSUserCertificate_UnwrapSymmetricKey andre@0: ( andre@0: NSSUserCertificate *uc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *wrappedKey, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSUserCertificate_DeriveSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSUserCertificate_DeriveSymmetricKey andre@0: ( andre@0: NSSUserCertificate *uc, /* provides private key */ andre@0: NSSCertificate *c, /* provides public key */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSOID *target, andre@0: PRUint32 keySizeOpt, /* zero for best allowed */ andre@0: NSSOperations operations, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* filter-certs function(s) */ andre@0: andre@0: /** andre@0: ** fgmr -- trust objects andre@0: **/ andre@0: andre@0: /* andre@0: * NSSPrivateKey andre@0: * andre@0: */ andre@0: andre@0: /* andre@0: * NSSPrivateKey_Destroy andre@0: * andre@0: * Free a pointer to a private key object. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSPrivateKey_Destroy andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_DeleteStoredObject andre@0: * andre@0: * Permanently remove this object, and any related objects (such as the andre@0: * certificates corresponding to this key). andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSPrivateKey_DeleteStoredObject andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetSignatureLength andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRUint32 andre@0: NSSPrivateKey_GetSignatureLength andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetPrivateModulusLength andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRUint32 andre@0: NSSPrivateKey_GetPrivateModulusLength andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_IsStillPresent andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRBool andre@0: NSSPrivateKey_IsStillPresent andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_Encode andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPrivateKey_Encode andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSItem *passwordOpt, /* NULL will cause a callback; "" for no password */ andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetTrustDomain andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSPrivateKey_GetTrustDomain andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetToken andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSPrivateKey_GetToken andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetSlot andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSlot * andre@0: NSSPrivateKey_GetSlot andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_GetModule andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSModule * andre@0: NSSPrivateKey_GetModule andre@0: ( andre@0: NSSPrivateKey *vk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_Decrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPrivateKey_Decrypt andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *encryptedData, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_Sign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPrivateKey_Sign andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_SignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPrivateKey_SignRecover andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_UnwrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSPrivateKey_UnwrapSymmetricKey andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *wrappedKey, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_DeriveSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSPrivateKey_DeriveSymmetricKey andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSOID *target, andre@0: PRUint32 keySizeOpt, /* zero for best allowed */ andre@0: NSSOperations operations, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_FindPublicKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPublicKey * andre@0: NSSPrivateKey_FindPublicKey andre@0: ( andre@0: NSSPrivateKey *vk andre@0: /* { don't need the callback here, right? } */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_CreateCryptoContext andre@0: * andre@0: * Create a crypto context, in this key's trust domain, andre@0: * with this as the distinguished private key. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSPrivateKey_CreateCryptoContext andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_FindCertificates andre@0: * andre@0: * Note that there may be more than one certificate for this andre@0: * private key. { FilterCertificates function to further andre@0: * reduce the list. } andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSPrivateKey_FindCertificates andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_FindBestCertificate andre@0: * andre@0: * The parameters for this function will depend on what the users andre@0: * need. This is just a starting point. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSPrivateKey_FindBestCertificate andre@0: ( andre@0: NSSPrivateKey *vk, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usageOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey andre@0: * andre@0: * Once you generate, find, or derive one of these, you can use it andre@0: * to perform (simple) cryptographic operations. Though there may andre@0: * be certificates associated with these public keys, they are not andre@0: * verified. andre@0: */ andre@0: andre@0: /* andre@0: * NSSPublicKey_Destroy andre@0: * andre@0: * Free a pointer to a public key object. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSPublicKey_Destroy andre@0: ( andre@0: NSSPublicKey *bk andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_DeleteStoredObject andre@0: * andre@0: * Permanently remove this object, and any related objects (such as the andre@0: * corresponding private keys and certificates). andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSPublicKey_DeleteStoredObject andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_Encode andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPublicKey_Encode andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_GetTrustDomain andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSPublicKey_GetTrustDomain andre@0: ( andre@0: NSSPublicKey *bk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_GetToken andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSPublicKey_GetToken andre@0: ( andre@0: NSSPublicKey *bk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_GetSlot andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSlot * andre@0: NSSPublicKey_GetSlot andre@0: ( andre@0: NSSPublicKey *bk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_GetModule andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSModule * andre@0: NSSPublicKey_GetModule andre@0: ( andre@0: NSSPublicKey *bk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_Encrypt andre@0: * andre@0: * Encrypt a single chunk of data with the public key corresponding to andre@0: * this certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPublicKey_Encrypt andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_Verify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSPublicKey_Verify andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSItem *signature, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_VerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPublicKey_VerifyRecover andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *signature, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_WrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSPublicKey_WrapSymmetricKey andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSSymmetricKey *keyToWrap, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_CreateCryptoContext andre@0: * andre@0: * Create a crypto context, in this key's trust domain, with this andre@0: * as the distinguished public key. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSPublicKey_CreateCryptoContext andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_FindCertificates andre@0: * andre@0: * Note that there may be more than one certificate for this andre@0: * public key. The current implementation may not find every andre@0: * last certificate available for this public key: that would andre@0: * involve trolling e.g. huge ldap databases, which will be andre@0: * grossly inefficient and not generally useful. andre@0: * { FilterCertificates function to further reduce the list } andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSPublicKey_FindCertificates andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPrivateKey_FindBestCertificate andre@0: * andre@0: * The parameters for this function will depend on what the users andre@0: * need. This is just a starting point. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSPublicKey_FindBestCertificate andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usageOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSPublicKey_FindPrivateKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPrivateKey * andre@0: NSSPublicKey_FindPrivateKey andre@0: ( andre@0: NSSPublicKey *bk, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: /* andre@0: * NSSSymmetricKey_Destroy andre@0: * andre@0: * Free a pointer to a symmetric key object. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSSymmetricKey_Destroy andre@0: ( andre@0: NSSSymmetricKey *mk andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_DeleteStoredObject andre@0: * andre@0: * Permanently remove this object. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSSymmetricKey_DeleteStoredObject andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetKeyLength andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRUint32 andre@0: NSSSymmetricKey_GetKeyLength andre@0: ( andre@0: NSSSymmetricKey *mk andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetKeyStrength andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRUint32 andre@0: NSSSymmetricKey_GetKeyStrength andre@0: ( andre@0: NSSSymmetricKey *mk andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_IsStillPresent andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSSymmetricKey_IsStillPresent andre@0: ( andre@0: NSSSymmetricKey *mk andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetTrustDomain andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSSymmetricKey_GetTrustDomain andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetToken andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSSymmetricKey_GetToken andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetSlot andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSlot * andre@0: NSSSymmetricKey_GetSlot andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_GetModule andre@0: * andre@0: * There doesn't have to be one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSModule * andre@0: NSSSymmetricKey_GetModule andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_Encrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_Encrypt andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_Decrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_Decrypt andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *encryptedData, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_Sign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_Sign andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_SignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_SignRecover andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_Verify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSSymmetricKey_Verify andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSItem *signature, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_VerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_VerifyRecover andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *signature, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_WrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_WrapSymmetricKey andre@0: ( andre@0: NSSSymmetricKey *wrappingKey, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSSymmetricKey *keyToWrap, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_WrapPrivateKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSSymmetricKey_WrapPrivateKey andre@0: ( andre@0: NSSSymmetricKey *wrappingKey, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPrivateKey *keyToWrap, andre@0: NSSCallback *uhh, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_UnwrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSSymmetricKey_UnwrapSymmetricKey andre@0: ( andre@0: NSSSymmetricKey *wrappingKey, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *wrappedKey, andre@0: NSSOID *target, andre@0: PRUint32 keySizeOpt, andre@0: NSSOperations operations, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_UnwrapPrivateKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPrivateKey * andre@0: NSSSymmetricKey_UnwrapPrivateKey andre@0: ( andre@0: NSSSymmetricKey *wrappingKey, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *wrappedKey, andre@0: NSSUTF8 *labelOpt, andre@0: NSSItem *keyIDOpt, andre@0: PRBool persistant, andre@0: PRBool sensitive, andre@0: NSSToken *destinationOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_DeriveSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSSymmetricKey_DeriveSymmetricKey andre@0: ( andre@0: NSSSymmetricKey *originalKey, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSOID *target, andre@0: PRUint32 keySizeOpt, andre@0: NSSOperations operations, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSSymmetricKey_CreateCryptoContext andre@0: * andre@0: * Create a crypto context, in this key's trust domain, andre@0: * with this as the distinguished symmetric key. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSSymmetricKey_CreateCryptoContext andre@0: ( andre@0: NSSSymmetricKey *mk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhh andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain andre@0: * andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_Create andre@0: * andre@0: * This creates a trust domain, optionally with an initial cryptoki andre@0: * module. If the module name is not null, the module is loaded if andre@0: * needed (using the uriOpt argument), and initialized with the andre@0: * opaqueOpt argument. If mumble mumble priority settings, then andre@0: * module-specification objects in the module can cause the loading andre@0: * and initialization of further modules. andre@0: * andre@0: * The uriOpt is defined to take a URI. At present, we only andre@0: * support file: URLs pointing to platform-native shared libraries. andre@0: * However, by specifying this as a URI, this keeps open the andre@0: * possibility of supporting other, possibly remote, resources. andre@0: * andre@0: * The "reserved" arguments is held for when we figure out the andre@0: * module priority stuff. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSTrustDomain_Create andre@0: ( andre@0: NSSUTF8 *moduleOpt, andre@0: NSSUTF8 *uriOpt, andre@0: NSSUTF8 *opaqueOpt, andre@0: void *reserved andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_Destroy andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_Destroy andre@0: ( andre@0: NSSTrustDomain *td andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_SetDefaultCallback andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_SetDefaultCallback andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSCallback *newCallback, andre@0: NSSCallback **oldCallbackOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_GetDefaultCallback andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCallback * andre@0: NSSTrustDomain_GetDefaultCallback andre@0: ( andre@0: NSSTrustDomain *td, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * Default policies? andre@0: * Default usage? andre@0: * Default time, for completeness? andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_LoadModule andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_LoadModule andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *moduleOpt, andre@0: NSSUTF8 *uriOpt, andre@0: NSSUTF8 *opaqueOpt, andre@0: void *reserved andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_AddModule andre@0: * NSSTrustDomain_AddSlot andre@0: * NSSTrustDomain_UnloadModule andre@0: * Managing modules, slots, tokens; priorities; andre@0: * Traversing all of the above andre@0: * this needs more work andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_DisableToken andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_DisableToken andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSToken *token, andre@0: NSSError why andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_EnableToken andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_EnableToken andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSToken *token andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_IsTokenEnabled andre@0: * andre@0: * If disabled, "why" is always on the error stack. andre@0: * The optional argument is just for convenience. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_IsTokenEnabled andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSToken *token, andre@0: NSSError *whyOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindSlotByName andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSlot * andre@0: NSSTrustDomain_FindSlotByName andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *slotName andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindTokenByName andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSTrustDomain_FindTokenByName andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *tokenName andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindTokenBySlotName andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSTrustDomain_FindTokenBySlotName andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *slotName andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestTokenForAlgorithm andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSTrustDomain_FindTokenForAlgorithm andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSOID *algorithm andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestTokenForAlgorithms andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSToken * andre@0: NSSTrustDomain_FindBestTokenForAlgorithms andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSOID *algorithms[], /* may be null-terminated */ andre@0: PRUint32 nAlgorithmsOpt /* limits the array if nonzero */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_Login andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_Login andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_Logout andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_Logout andre@0: ( andre@0: NSSTrustDomain *td andre@0: ); andre@0: andre@0: /* Importing things */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportCertificate andre@0: * andre@0: * The implementation will pull some data out of the certificate andre@0: * (e.g. e-mail address) for use in pkcs#11 object attributes. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_ImportCertificate andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSCertificate *c andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportPKIXCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_ImportPKIXCertificate andre@0: ( andre@0: NSSTrustDomain *td, andre@0: /* declared as a struct until these "data types" are defined */ andre@0: struct NSSPKIXCertificateStr *pc andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportEncodedCertificate andre@0: * andre@0: * Imports any type of certificate we support. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_ImportEncodedCertificate andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSBER *ber andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportEncodedCertificateChain andre@0: * andre@0: * If you just want the leaf, pass in a maximum of one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_ImportEncodedCertificateChain andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSBER *ber, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportEncodedPrivateKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPrivateKey * andre@0: NSSTrustDomain_ImportEncodedPrivateKey andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSBER *ber, andre@0: NSSItem *passwordOpt, /* NULL will cause a callback */ andre@0: NSSCallback *uhhOpt, andre@0: NSSToken *destination andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_ImportEncodedPublicKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSPublicKey * andre@0: NSSTrustDomain_ImportEncodedPublicKey andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSBER *ber andre@0: ); andre@0: andre@0: /* Other importations: S/MIME capabilities */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestCertificateByNickname andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestCertificateByNickname andre@0: ( andre@0: NSSTrustDomain *td, andre@0: const NSSUTF8 *name, andre@0: NSSTime *timeOpt, /* NULL for "now" */ andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt /* NULL for none */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificatesByNickname andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindCertificatesByNickname andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *name, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificateByIssuerAndSerialNumber andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindCertificateByIssuerAndSerialNumber andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSDER *issuer, andre@0: NSSDER *serialNumber andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificatesByIssuerAndSerialNumber andre@0: * andre@0: * Theoretically, this should never happen. However, some companies andre@0: * we know have issued duplicate certificates with the same issuer andre@0: * and serial number. Do we just ignore them? I'm thinking yes. andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestCertificateBySubject andre@0: * andre@0: * This does not search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestCertificateBySubject andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSDER /*NSSUTF8*/ *subject, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificatesBySubject andre@0: * andre@0: * This does not search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindCertificatesBySubject andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSDER /*NSSUTF8*/ *subject, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestCertificateByNameComponents andre@0: * andre@0: * This call does try several tricks, including a pseudo pkcs#11 andre@0: * attribute for the ldap module to try as a query. Eventually andre@0: * this call falls back to a traversal if that's what's required. andre@0: * It will search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestCertificateByNameComponents andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *nameComponents, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificatesByNameComponents andre@0: * andre@0: * This call, too, tries several tricks. It will stop on the first andre@0: * attempt that generates results, so it won't e.g. traverse the andre@0: * entire ldap database. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindCertificatesByNameComponents andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *nameComponents, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificateByEncodedCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindCertificateByEncodedCertificate andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSBER *encodedCertificate andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestCertificateByEmail andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindCertificateByEmail andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSASCII7 *email, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificatesByEmail andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindCertificatesByEmail andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSASCII7 *email, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindCertificateByOCSPHash andre@0: * andre@0: * There can be only one. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindCertificateByOCSPHash andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSItem *hash andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_TraverseCertificates andre@0: * andre@0: * This function descends from one in older versions of NSS which andre@0: * traverses the certs in the permanent database. That function andre@0: * was used to implement selection routines, but was directly andre@0: * available too. Trust domains are going to contain a lot more andre@0: * certs now (e.g., an ldap server), so we'd really like to andre@0: * discourage traversal. Thus for now, this is commented out. andre@0: * If it's needed, let's look at the situation more closely to andre@0: * find out what the actual requirements are. andre@0: */ andre@0: andre@0: /* For now, adding this function. This may only be for debugging andre@0: * purposes. andre@0: * Perhaps some equivalent function, on a specified token, will be andre@0: * needed in a "friend" header file? andre@0: */ andre@0: NSS_EXTERN PRStatus * andre@0: NSSTrustDomain_TraverseCertificates andre@0: ( andre@0: NSSTrustDomain *td, andre@0: PRStatus (*callback)(NSSCertificate *c, void *arg), andre@0: void *arg andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestUserCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestUserCertificate andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindUserCertificates andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindUserCertificates andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usageOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestUserCertificateForSSLClientAuth andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestUserCertificateForSSLClientAuth andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *sslHostOpt, andre@0: NSSDER *rootCAsOpt[], /* null pointer for none */ andre@0: PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindUserCertificatesForSSLClientAuth andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindUserCertificatesForSSLClientAuth andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSUTF8 *sslHostOpt, andre@0: NSSDER *rootCAsOpt[], /* null pointer for none */ andre@0: PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindBestUserCertificateForEmailSigning andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSTrustDomain_FindBestUserCertificateForEmailSigning andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSASCII7 *signerOpt, andre@0: NSSASCII7 *recipientOpt, andre@0: /* anything more here? */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindUserCertificatesForEmailSigning andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSTrustDomain_FindUserCertificatesForEmailSigning andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSASCII7 *signerOpt, andre@0: NSSASCII7 *recipientOpt, andre@0: /* anything more here? */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * Here is where we'd add more Find[Best]UserCertificate[s]For andre@0: * routines. andre@0: */ andre@0: andre@0: /* Private Keys */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_GenerateKeyPair andre@0: * andre@0: * Creates persistant objects. If you want session objects, use andre@0: * NSSCryptoContext_GenerateKeyPair. The destination token is where andre@0: * the keys are stored. If that token can do the required math, then andre@0: * that's where the keys are generated too. Otherwise, the keys are andre@0: * generated elsewhere and moved to that token. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSTrustDomain_GenerateKeyPair andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSPrivateKey **pvkOpt, andre@0: NSSPublicKey **pbkOpt, andre@0: PRBool privateKeyIsSensitive, andre@0: NSSToken *destination, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_TraversePrivateKeys andre@0: * andre@0: * andre@0: * NSS_EXTERN PRStatus * andre@0: * NSSTrustDomain_TraversePrivateKeys andre@0: * ( andre@0: * NSSTrustDomain *td, andre@0: * PRStatus (*callback)(NSSPrivateKey *vk, void *arg), andre@0: * void *arg andre@0: * ); andre@0: */ andre@0: andre@0: /* Symmetric Keys */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_GenerateSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSTrustDomain_GenerateSymmetricKey andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSAlgorithmAndParameters *ap, andre@0: PRUint32 keysize, andre@0: NSSToken *destination, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_GenerateSymmetricKeyFromPassword andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSTrustDomain_GenerateSymmetricKeyFromPassword andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSUTF8 *passwordOpt, /* if null, prompt */ andre@0: NSSToken *destinationOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindSymmetricKeyByAlgorithm andre@0: * andre@0: * Is this still needed? andre@0: * andre@0: * NSS_EXTERN NSSSymmetricKey * andre@0: * NSSTrustDomain_FindSymmetricKeyByAlgorithm andre@0: * ( andre@0: * NSSTrustDomain *td, andre@0: * NSSOID *algorithm, andre@0: * NSSCallback *uhhOpt andre@0: * ); andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSOID *algorithm, andre@0: NSSItem *keyID, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_TraverseSymmetricKeys andre@0: * andre@0: * andre@0: * NSS_EXTERN PRStatus * andre@0: * NSSTrustDomain_TraverseSymmetricKeys andre@0: * ( andre@0: * NSSTrustDomain *td, andre@0: * PRStatus (*callback)(NSSSymmetricKey *mk, void *arg), andre@0: * void *arg andre@0: * ); andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_CreateCryptoContext andre@0: * andre@0: * If a callback object is specified, it becomes the for the crypto andre@0: * context; otherwise, this trust domain's default (if any) is andre@0: * inherited. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSTrustDomain_CreateCryptoContext andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_CreateCryptoContextForAlgorithm andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSTrustDomain_CreateCryptoContextForAlgorithm andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSOID *algorithm andre@0: ); andre@0: andre@0: /* andre@0: * NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters andre@0: ( andre@0: NSSTrustDomain *td, andre@0: NSSAlgorithmAndParameters *ap andre@0: ); andre@0: andre@0: /* find/traverse other objects, e.g. s/mime profiles */ andre@0: andre@0: /* andre@0: * NSSCryptoContext andre@0: * andre@0: * A crypto context is sort of a short-term snapshot of a trust domain, andre@0: * used for the life of "one crypto operation." You can also think of andre@0: * it as a "temporary database." andre@0: * andre@0: * Just about all of the things you can do with a trust domain -- importing andre@0: * or creating certs, keys, etc. -- can be done with a crypto context. andre@0: * The difference is that the objects will be temporary ("session") objects. andre@0: * andre@0: * Also, if the context was created for a key, cert, and/or algorithm; or andre@0: * if such objects have been "associated" with the context, then the context andre@0: * can do everything the keys can, like crypto operations. andre@0: * andre@0: * And finally, because it keeps the state of the crypto operations, it andre@0: * can do streaming crypto ops. andre@0: */ andre@0: andre@0: /* andre@0: * NSSTrustDomain_Destroy andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_Destroy andre@0: ( andre@0: NSSCryptoContext *cc andre@0: ); andre@0: andre@0: /* establishing a default callback */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_SetDefaultCallback andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_SetDefaultCallback andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSCallback *newCallback, andre@0: NSSCallback **oldCallbackOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_GetDefaultCallback andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCallback * andre@0: NSSCryptoContext_GetDefaultCallback andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: PRStatus *statusOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_GetTrustDomain andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSTrustDomain * andre@0: NSSCryptoContext_GetTrustDomain andre@0: ( andre@0: NSSCryptoContext *cc andre@0: ); andre@0: andre@0: /* AddModule, etc: should we allow "temporary" changes here? */ andre@0: /* DisableToken, etc: ditto */ andre@0: /* Ordering of tokens? */ andre@0: /* Finding slots+token etc. */ andre@0: /* login+logout */ andre@0: andre@0: /* Importing things */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindOrImportCertificate andre@0: * andre@0: * If the certificate store already contains this DER cert, return the andre@0: * address of the matching NSSCertificate that is already in the store, andre@0: * and bump its reference count. andre@0: * andre@0: * If this DER cert is NOT already in the store, then add the new andre@0: * NSSCertificate to the store and bump its reference count, andre@0: * then return its address. andre@0: * andre@0: * if this DER cert is not in the store and cannot be added to it, andre@0: * return NULL; andre@0: * andre@0: * Record the associated crypto context in the certificate. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindOrImportCertificate ( andre@0: NSSCryptoContext *cc, andre@0: NSSCertificate *c andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ImportPKIXCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_ImportPKIXCertificate andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: struct NSSPKIXCertificateStr *pc andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ImportEncodedCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_ImportEncodedCertificate andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSBER *ber andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ImportEncodedPKIXCertificateChain andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_ImportEncodedPKIXCertificateChain andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSBER *ber andre@0: ); andre@0: andre@0: /* Other importations: S/MIME capabilities andre@0: */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestCertificateByNickname andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestCertificateByNickname andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: const NSSUTF8 *name, andre@0: NSSTime *timeOpt, /* NULL for "now" */ andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt /* NULL for none */ andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificatesByNickname andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindCertificatesByNickname andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSUTF8 *name, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificateByIssuerAndSerialNumber andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindCertificateByIssuerAndSerialNumber andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSDER *issuer, andre@0: NSSDER *serialNumber andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestCertificateBySubject andre@0: * andre@0: * This does not search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestCertificateBySubject andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSDER /*NSSUTF8*/ *subject, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificatesBySubject andre@0: * andre@0: * This does not search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindCertificatesBySubject andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSDER /*NSSUTF8*/ *subject, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestCertificateByNameComponents andre@0: * andre@0: * This call does try several tricks, including a pseudo pkcs#11 andre@0: * attribute for the ldap module to try as a query. Eventually andre@0: * this call falls back to a traversal if that's what's required. andre@0: * It will search through alternate names hidden in extensions. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestCertificateByNameComponents andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSUTF8 *nameComponents, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificatesByNameComponents andre@0: * andre@0: * This call, too, tries several tricks. It will stop on the first andre@0: * attempt that generates results, so it won't e.g. traverse the andre@0: * entire ldap database. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindCertificatesByNameComponents andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSUTF8 *nameComponents, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificateByEncodedCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindCertificateByEncodedCertificate andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSBER *encodedCertificate andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestCertificateByEmail andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestCertificateByEmail andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSASCII7 *email, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificatesByEmail andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindCertificatesByEmail andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSASCII7 *email, andre@0: NSSCertificate *rvOpt[], andre@0: PRUint32 maximumOpt, /* 0 for no max */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindCertificateByOCSPHash andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindCertificateByOCSPHash andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *hash andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_TraverseCertificates andre@0: * andre@0: * andre@0: * NSS_EXTERN PRStatus * andre@0: * NSSCryptoContext_TraverseCertificates andre@0: * ( andre@0: * NSSCryptoContext *cc, andre@0: * PRStatus (*callback)(NSSCertificate *c, void *arg), andre@0: * void *arg andre@0: * ); andre@0: */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestUserCertificate andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestUserCertificate andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usage, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindUserCertificates andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindUserCertificates andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSTime *timeOpt, andre@0: NSSUsage *usageOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestUserCertificateForSSLClientAuth andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestUserCertificateForSSLClientAuth andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSUTF8 *sslHostOpt, andre@0: NSSDER *rootCAsOpt[], /* null pointer for none */ andre@0: PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindUserCertificatesForSSLClientAuth andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate ** andre@0: NSSCryptoContext_FindUserCertificatesForSSLClientAuth andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSUTF8 *sslHostOpt, andre@0: NSSDER *rootCAsOpt[], /* null pointer for none */ andre@0: PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindBestUserCertificateForEmailSigning andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindBestUserCertificateForEmailSigning andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSASCII7 *signerOpt, andre@0: NSSASCII7 *recipientOpt, andre@0: /* anything more here? */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindUserCertificatesForEmailSigning andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCertificate * andre@0: NSSCryptoContext_FindUserCertificatesForEmailSigning andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSASCII7 *signerOpt, /* fgmr or a more general name? */ andre@0: NSSASCII7 *recipientOpt, andre@0: /* anything more here? */ andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSPolicies *policiesOpt, andre@0: NSSCertificate **rvOpt, andre@0: PRUint32 rvLimit, /* zero for no limit */ andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* Private Keys */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_GenerateKeyPair andre@0: * andre@0: * Creates session objects. If you want persistant objects, use andre@0: * NSSTrustDomain_GenerateKeyPair. The destination token is where andre@0: * the keys are stored. If that token can do the required math, then andre@0: * that's where the keys are generated too. Otherwise, the keys are andre@0: * generated elsewhere and moved to that token. andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_GenerateKeyPair andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSPrivateKey **pvkOpt, andre@0: NSSPublicKey **pbkOpt, andre@0: PRBool privateKeyIsSensitive, andre@0: NSSToken *destination, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_TraversePrivateKeys andre@0: * andre@0: * andre@0: * NSS_EXTERN PRStatus * andre@0: * NSSCryptoContext_TraversePrivateKeys andre@0: * ( andre@0: * NSSCryptoContext *cc, andre@0: * PRStatus (*callback)(NSSPrivateKey *vk, void *arg), andre@0: * void *arg andre@0: * ); andre@0: */ andre@0: andre@0: /* Symmetric Keys */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_GenerateSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSCryptoContext_GenerateSymmetricKey andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *ap, andre@0: PRUint32 keysize, andre@0: NSSToken *destination, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_GenerateSymmetricKeyFromPassword andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSCryptoContext_GenerateSymmetricKeyFromPassword andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *ap, andre@0: NSSUTF8 *passwordOpt, /* if null, prompt */ andre@0: NSSToken *destinationOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindSymmetricKeyByAlgorithm andre@0: * andre@0: * andre@0: * NSS_EXTERN NSSSymmetricKey * andre@0: * NSSCryptoContext_FindSymmetricKeyByType andre@0: * ( andre@0: * NSSCryptoContext *cc, andre@0: * NSSOID *type, andre@0: * NSSCallback *uhhOpt andre@0: * ); andre@0: */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSOID *algorithm, andre@0: NSSItem *keyID, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_TraverseSymmetricKeys andre@0: * andre@0: * andre@0: * NSS_EXTERN PRStatus * andre@0: * NSSCryptoContext_TraverseSymmetricKeys andre@0: * ( andre@0: * NSSCryptoContext *cc, andre@0: * PRStatus (*callback)(NSSSymmetricKey *mk, void *arg), andre@0: * void *arg andre@0: * ); andre@0: */ andre@0: andre@0: /* Crypto ops on distinguished keys */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_Decrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_Decrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *encryptedData, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginDecrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginDecrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueDecrypt andre@0: * andre@0: */ andre@0: andre@0: /* andre@0: * NSSItem semantics: andre@0: * andre@0: * If rvOpt is NULL, a new NSSItem and buffer are allocated. andre@0: * If rvOpt is not null, but the buffer pointer is null, andre@0: * then rvOpt is returned but a new buffer is allocated. andre@0: * In this case, if the length value is not zero, then andre@0: * no more than that much space will be allocated. andre@0: * If rvOpt is not null and the buffer pointer is not null, andre@0: * then that buffer is re-used. No more than the buffer andre@0: * length value will be used; if it's not enough, an andre@0: * error is returned. If less is used, the number is andre@0: * adjusted downwards. andre@0: * andre@0: * Note that although this is short of some ideal "Item" andre@0: * definition, we can usually tell how big these buffers andre@0: * have to be. andre@0: * andre@0: * Feedback is requested; and earlier is better than later. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_ContinueDecrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishDecrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishDecrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_Sign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_Sign andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginSign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginSign andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueSign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_ContinueSign andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishSign andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishSign andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_SignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_SignRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginSignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginSignRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueSignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_ContinueSignRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishSignRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishSignRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_UnwrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSCryptoContext_UnwrapSymmetricKey andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *wrappedKey, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_DeriveSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSSymmetricKey * andre@0: NSSCryptoContext_DeriveSymmetricKey andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSPublicKey *bk, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSOID *target, andre@0: PRUint32 keySizeOpt, /* zero for best allowed */ andre@0: NSSOperations operations, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_Encrypt andre@0: * andre@0: * Encrypt a single chunk of data with the distinguished public key andre@0: * of this crypto context. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_Encrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginEncrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginEncrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueEncrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_ContinueEncrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishEncrypt andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishEncrypt andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_Verify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_Verify andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSItem *signature, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginVerify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginVerify andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *signature, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueVerify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_ContinueVerify andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishVerify andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_FinishVerify andre@0: ( andre@0: NSSCryptoContext *cc andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_VerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_VerifyRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *signature, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginVerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginVerifyRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueVerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_ContinueVerifyRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *data, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishVerifyRecover andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishVerifyRecover andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_WrapSymmetricKey andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_WrapSymmetricKey andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSSymmetricKey *keyToWrap, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_Digest andre@0: * andre@0: * Digest a single chunk of data with the distinguished digest key andre@0: * of this crypto context. andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_Digest andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *data, andre@0: NSSCallback *uhhOpt, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_BeginDigest andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_BeginDigest andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSCallback *uhhOpt andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_ContinueDigest andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN PRStatus andre@0: NSSCryptoContext_ContinueDigest andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSAlgorithmAndParameters *apOpt, andre@0: NSSItem *item andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_FinishDigest andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSItem * andre@0: NSSCryptoContext_FinishDigest andre@0: ( andre@0: NSSCryptoContext *cc, andre@0: NSSItem *rvOpt, andre@0: NSSArena *arenaOpt andre@0: ); andre@0: andre@0: /* andre@0: * tbd: Combination ops andre@0: */ andre@0: andre@0: /* andre@0: * NSSCryptoContext_Clone andre@0: * andre@0: */ andre@0: andre@0: NSS_EXTERN NSSCryptoContext * andre@0: NSSCryptoContext_Clone andre@0: ( andre@0: NSSCryptoContext *cc andre@0: ); andre@0: andre@0: /* andre@0: * NSSCryptoContext_Save andre@0: * NSSCryptoContext_Restore andre@0: * andre@0: * We need to be able to save and restore the state of contexts. andre@0: * Perhaps a mark-and-release mechanism would be better? andre@0: */ andre@0: andre@0: /* andre@0: * ..._SignTBSCertificate andre@0: * andre@0: * This requires feedback from the cert server team. andre@0: */ andre@0: andre@0: /* andre@0: * PRBool NSSCertificate_GetIsTrustedFor{xxx}(NSSCertificate *c); andre@0: * PRStatus NSSCertificate_SetIsTrustedFor{xxx}(NSSCertificate *c, PRBool trusted); andre@0: * andre@0: * These will be helper functions which get the trust object for a cert, andre@0: * and then call the corresponding function(s) on it. andre@0: * andre@0: * PKIX trust objects will have methods to manipulate the low-level trust andre@0: * bits (which are based on key usage and extended key usage), and also the andre@0: * conceptual high-level usages (e.g. ssl client auth, email encryption, etc.) andre@0: * andre@0: * Other types of trust objects (if any) might have different low-level andre@0: * representations, but hopefully high-level concepts would map. andre@0: * andre@0: * Only these high-level general routines would be promoted to the andre@0: * general certificate level here. Hence the {xxx} above would be things andre@0: * like "EmailSigning." andre@0: * andre@0: * andre@0: * NSSPKIXTrust *NSSCertificate_GetPKIXTrustObject(NSSCertificate *c); andre@0: * PRStatus NSSCertificate_SetPKIXTrustObject(NSSCertificate *c, NSPKIXTrust *t); andre@0: * andre@0: * I want to hold off on any general trust object until we've investigated andre@0: * other models more thoroughly. andre@0: */ andre@0: andre@0: PR_END_EXTERN_C andre@0: andre@0: #endif /* NSSPKI_H */