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 DEV_H
andre@0: #include "dev.h"
andre@0: #endif /* DEV_H */
andre@0: 
andre@0: #ifndef PKIM_H
andre@0: #include "pkim.h"
andre@0: #endif /* PKIM_H */
andre@0: 
andre@0: #ifndef PKISTORE_H
andre@0: #include "pkistore.h"
andre@0: #endif /* PKISTORE_H */
andre@0: 
andre@0: extern const NSSError NSS_ERROR_NOT_FOUND;
andre@0: extern const NSSError NSS_ERROR_INVALID_ARGUMENT;
andre@0: 
andre@0: NSS_IMPLEMENT NSSCryptoContext *
andre@0: nssCryptoContext_Create (
andre@0:   NSSTrustDomain *td,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     NSSArena *arena;
andre@0:     NSSCryptoContext *rvCC;
andre@0:     arena = NSSArena_Create();
andre@0:     if (!arena) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     rvCC = nss_ZNEW(arena, NSSCryptoContext);
andre@0:     if (!rvCC) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     rvCC->td = td;
andre@0:     rvCC->arena = arena;
andre@0:     rvCC->certStore = nssCertificateStore_Create(rvCC->arena);
andre@0:     if (!rvCC->certStore) {
andre@0: 	nssArena_Destroy(arena);
andre@0: 	return NULL;
andre@0:     }
andre@0: 
andre@0:     return rvCC;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_Destroy (
andre@0:   NSSCryptoContext *cc
andre@0: )
andre@0: {
andre@0:     PRStatus status = PR_SUCCESS;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (cc->certStore) {
andre@0: 	status = nssCertificateStore_Destroy(cc->certStore);
andre@0: 	if (status == PR_FAILURE) {
andre@0: 	    return status;
andre@0: 	}
andre@0:     } else {
andre@0: 	status = PR_FAILURE;
andre@0:     }
andre@0:     nssArena_Destroy(cc->arena);
andre@0:     return status;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_SetDefaultCallback (
andre@0:   NSSCryptoContext *td,
andre@0:   NSSCallback *newCallback,
andre@0:   NSSCallback **oldCallbackOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCallback *
andre@0: NSSCryptoContext_GetDefaultCallback (
andre@0:   NSSCryptoContext *td,
andre@0:   PRStatus *statusOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSTrustDomain *
andre@0: NSSCryptoContext_GetTrustDomain (
andre@0:   NSSCryptoContext *td
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindOrImportCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSCertificate *c
andre@0: )
andre@0: {
andre@0:     NSSCertificate *rvCert = NULL;
andre@0: 
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
andre@0: 	return rvCert;
andre@0:     }
andre@0:     rvCert = nssCertificateStore_FindOrAdd(cc->certStore, c);
andre@0:     if (rvCert == c && c->object.cryptoContext != cc) {
andre@0: 	PORT_Assert(!c->object.cryptoContext);
andre@0: 	c->object.cryptoContext = cc;
andre@0:     } 
andre@0:     if (rvCert) {
andre@0: 	/* an NSSCertificate cannot be part of two crypto contexts
andre@0: 	** simultaneously.  If this assertion fails, then there is 
andre@0: 	** a serious Stan design flaw.
andre@0: 	*/
andre@0: 	PORT_Assert(cc == c->object.cryptoContext);
andre@0:     }
andre@0:     return rvCert;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_ImportPKIXCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   struct NSSPKIXCertificateStr *pc
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_ImportEncodedCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSBER *ber
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_ImportEncodedPKIXCertificateChain (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSBER *ber
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: nssCryptoContext_ImportTrust (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSTrust *trust
andre@0: )
andre@0: {
andre@0:     PRStatus nssrv;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return PR_FAILURE;
andre@0:     }
andre@0:     nssrv = nssCertificateStore_AddTrust(cc->certStore, trust);
andre@0: #if 0
andre@0:     if (nssrv == PR_SUCCESS) {
andre@0: 	trust->object.cryptoContext = cc;
andre@0:     }
andre@0: #endif
andre@0:     return nssrv;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: nssCryptoContext_ImportSMIMEProfile (
andre@0:   NSSCryptoContext *cc,
andre@0:   nssSMIMEProfile *profile
andre@0: )
andre@0: {
andre@0:     PRStatus nssrv;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return PR_FAILURE;
andre@0:     }
andre@0:     nssrv = nssCertificateStore_AddSMIMEProfile(cc->certStore, profile);
andre@0: #if 0
andre@0:     if (nssrv == PR_SUCCESS) {
andre@0: 	profile->object.cryptoContext = cc;
andre@0:     }
andre@0: #endif
andre@0:     return nssrv;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestCertificateByNickname (
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:     NSSCertificate **certs;
andre@0:     NSSCertificate *rvCert = NULL;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     certs = nssCertificateStore_FindCertificatesByNickname(cc->certStore,
andre@0:                                                            name,
andre@0:                                                            NULL, 0, NULL);
andre@0:     if (certs) {
andre@0: 	rvCert = nssCertificateArray_FindBestCertificate(certs,
andre@0: 	                                                 timeOpt,
andre@0: 	                                                 usage,
andre@0: 	                                                 policiesOpt);
andre@0: 	nssCertificateArray_Destroy(certs);
andre@0:     }
andre@0:     return rvCert;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindCertificatesByNickname (
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:     NSSCertificate **rvCerts;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     rvCerts = nssCertificateStore_FindCertificatesByNickname(cc->certStore,
andre@0:                                                              name,
andre@0:                                                              rvOpt,
andre@0:                                                              maximumOpt,
andre@0:                                                              arenaOpt);
andre@0:     return rvCerts;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindCertificateByIssuerAndSerialNumber (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSDER *issuer,
andre@0:   NSSDER *serialNumber
andre@0: )
andre@0: {
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     return nssCertificateStore_FindCertificateByIssuerAndSerialNumber(
andre@0:                                                                cc->certStore,
andre@0:                                                                issuer,
andre@0:                                                                serialNumber);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestCertificateBySubject (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSDER *subject,
andre@0:   NSSTime *timeOpt,
andre@0:   NSSUsage *usage,
andre@0:   NSSPolicies *policiesOpt
andre@0: )
andre@0: {
andre@0:     NSSCertificate **certs;
andre@0:     NSSCertificate *rvCert = NULL;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     certs = nssCertificateStore_FindCertificatesBySubject(cc->certStore,
andre@0:                                                           subject,
andre@0:                                                           NULL, 0, NULL);
andre@0:     if (certs) {
andre@0: 	rvCert = nssCertificateArray_FindBestCertificate(certs,
andre@0: 	                                                 timeOpt,
andre@0: 	                                                 usage,
andre@0: 	                                                 policiesOpt);
andre@0: 	nssCertificateArray_Destroy(certs);
andre@0:     }
andre@0:     return rvCert;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: nssCryptoContext_FindCertificatesBySubject (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSDER *subject,
andre@0:   NSSCertificate *rvOpt[],
andre@0:   PRUint32 maximumOpt, /* 0 for no max */
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     NSSCertificate **rvCerts;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     rvCerts = nssCertificateStore_FindCertificatesBySubject(cc->certStore,
andre@0:                                                             subject,
andre@0:                                                             rvOpt,
andre@0:                                                             maximumOpt,
andre@0:                                                             arenaOpt);
andre@0:     return rvCerts;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindCertificatesBySubject (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSDER *subject,
andre@0:   NSSCertificate *rvOpt[],
andre@0:   PRUint32 maximumOpt, /* 0 for no max */
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     return nssCryptoContext_FindCertificatesBySubject(cc, subject,
andre@0:                                                       rvOpt, maximumOpt,
andre@0:                                                       arenaOpt);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestCertificateByNameComponents (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindCertificatesByNameComponents (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindCertificateByEncodedCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSBER *encodedCertificate
andre@0: )
andre@0: {
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     return nssCertificateStore_FindCertificateByEncodedCertificate(
andre@0:                                                            cc->certStore,
andre@0:                                                            encodedCertificate);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestCertificateByEmail (
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:     NSSCertificate **certs;
andre@0:     NSSCertificate *rvCert = NULL;
andre@0: 
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     certs = nssCertificateStore_FindCertificatesByEmail(cc->certStore,
andre@0:                                                         email,
andre@0:                                                         NULL, 0, NULL);
andre@0:     if (certs) {
andre@0: 	rvCert = nssCertificateArray_FindBestCertificate(certs,
andre@0: 	                                                 timeOpt,
andre@0: 	                                                 usage,
andre@0: 	                                                 policiesOpt);
andre@0: 	nssCertificateArray_Destroy(certs);
andre@0:     }
andre@0:     return rvCert;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindCertificatesByEmail (
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:     NSSCertificate **rvCerts;
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     rvCerts = nssCertificateStore_FindCertificatesByEmail(cc->certStore,
andre@0:                                                           email,
andre@0:                                                           rvOpt,
andre@0:                                                           maximumOpt,
andre@0:                                                           arenaOpt);
andre@0:     return rvCerts;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindCertificateByOCSPHash (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *hash
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestUserCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSTime *timeOpt,
andre@0:   NSSUsage *usage,
andre@0:   NSSPolicies *policiesOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindUserCertificates (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestUserCertificateForSSLClientAuth (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate **
andre@0: NSSCryptoContext_FindUserCertificatesForSSLClientAuth (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindBestUserCertificateForEmailSigning (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCertificate *
andre@0: NSSCryptoContext_FindUserCertificatesForEmailSigning (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSTrust *
andre@0: nssCryptoContext_FindTrustForCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSCertificate *cert
andre@0: )
andre@0: {
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     return nssCertificateStore_FindTrustForCertificate(cc->certStore, cert);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT nssSMIMEProfile *
andre@0: nssCryptoContext_FindSMIMEProfileForCertificate (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSCertificate *cert
andre@0: )
andre@0: {
andre@0:     PORT_Assert(cc->certStore);
andre@0:     if (!cc->certStore) {
andre@0: 	return NULL;
andre@0:     }
andre@0:     return nssCertificateStore_FindSMIMEProfileForCertificate(cc->certStore, 
andre@0:                                                               cert);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_GenerateKeyPair (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSSymmetricKey *
andre@0: NSSCryptoContext_GenerateSymmetricKey (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSSymmetricKey *
andre@0: NSSCryptoContext_GenerateSymmetricKeyFromPassword (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSSymmetricKey *
andre@0: NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSOID *algorithm,
andre@0:   NSSItem *keyID,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: struct token_session_str {
andre@0:     NSSToken *token;
andre@0:     nssSession *session;
andre@0: };
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_Decrypt (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginDecrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_ContinueDecrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishDecrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_Sign (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginSign (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_ContinueSign (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishSign (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_SignRecover (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginSignRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_ContinueSignRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishSignRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSSymmetricKey *
andre@0: NSSCryptoContext_UnwrapSymmetricKey (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSItem *wrappedKey,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSSymmetricKey *
andre@0: NSSCryptoContext_DeriveSymmetricKey (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_Encrypt (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginEncrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_ContinueEncrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishEncrypt (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_Verify (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginVerify (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSItem *signature,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_ContinueVerify (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_FinishVerify (
andre@0:   NSSCryptoContext *cc
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_VerifyRecover (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginVerifyRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return PR_FAILURE;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_ContinueVerifyRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *data,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishVerifyRecover (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_WrapSymmetricKey (
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:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_Digest (
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:     return nssToken_Digest(cc->token, cc->session, apOpt, 
andre@0:                            data, rvOpt, arenaOpt);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_BeginDigest (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSCallback *uhhOpt
andre@0: )
andre@0: {
andre@0:     return nssToken_BeginDigest(cc->token, cc->session, apOpt);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT PRStatus
andre@0: NSSCryptoContext_ContinueDigest (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSAlgorithmAndParameters *apOpt,
andre@0:   NSSItem *item
andre@0: )
andre@0: {
andre@0: 	/*
andre@0:     NSSAlgorithmAndParameters *ap;
andre@0:     ap = (apOpt) ? apOpt : cc->ap;
andre@0:     */
andre@0: 	/* why apOpt?  can't change it at this point... */
andre@0:     return nssToken_ContinueDigest(cc->token, cc->session, item);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSItem *
andre@0: NSSCryptoContext_FinishDigest (
andre@0:   NSSCryptoContext *cc,
andre@0:   NSSItem *rvOpt,
andre@0:   NSSArena *arenaOpt
andre@0: )
andre@0: {
andre@0:     return nssToken_FinishDigest(cc->token, cc->session, rvOpt, arenaOpt);
andre@0: }
andre@0: 
andre@0: NSS_IMPLEMENT NSSCryptoContext *
andre@0: NSSCryptoContext_Clone (
andre@0:   NSSCryptoContext *cc
andre@0: )
andre@0: {
andre@0:     nss_SetError(NSS_ERROR_NOT_FOUND);
andre@0:     return NULL;
andre@0: }
andre@0: