security/nss/lib/pki/nsspki.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/nss/lib/pki/nsspki.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,3164 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +#ifndef NSSPKI_H
     1.9 +#define NSSPKI_H
    1.10 +
    1.11 +/*
    1.12 + * nsspki.h
    1.13 + *
    1.14 + * This file prototypes the methods of the top-level PKI objects.
    1.15 + */
    1.16 +
    1.17 +#ifndef NSSDEVT_H
    1.18 +#include "nssdevt.h"
    1.19 +#endif /* NSSDEVT_H */
    1.20 +
    1.21 +#ifndef NSSPKIT_H
    1.22 +#include "nsspkit.h"
    1.23 +#endif /* NSSPKIT_H */
    1.24 +
    1.25 +#ifndef BASE_H
    1.26 +#include "base.h"
    1.27 +#endif /* BASE_H */
    1.28 +
    1.29 +PR_BEGIN_EXTERN_C
    1.30 +
    1.31 +/*
    1.32 + * A note about interfaces
    1.33 + *
    1.34 + * Although these APIs are specified in C, a language which does
    1.35 + * not have fancy support for abstract interfaces, this library
    1.36 + * was designed from an object-oriented perspective.  It may be
    1.37 + * useful to consider the standard interfaces which went into
    1.38 + * the writing of these APIs.
    1.39 + *
    1.40 + * Basic operations on all objects:
    1.41 + *  Destroy -- free a pointer to an object
    1.42 + *  DeleteStoredObject -- delete an object permanently
    1.43 + *
    1.44 + * Public Key cryptographic operations:
    1.45 + *  Encrypt
    1.46 + *  Verify
    1.47 + *  VerifyRecover
    1.48 + *  Wrap
    1.49 + *  Derive
    1.50 + *
    1.51 + * Private Key cryptographic operations:
    1.52 + *  IsStillPresent
    1.53 + *  Decrypt
    1.54 + *  Sign
    1.55 + *  SignRecover
    1.56 + *  Unwrap
    1.57 + *  Derive
    1.58 + *
    1.59 + * Symmetric Key cryptographic operations:
    1.60 + *  IsStillPresent
    1.61 + *  Encrypt
    1.62 + *  Decrypt
    1.63 + *  Sign
    1.64 + *  SignRecover
    1.65 + *  Verify
    1.66 + *  VerifyRecover
    1.67 + *  Wrap
    1.68 + *  Unwrap
    1.69 + *  Derive
    1.70 + *
    1.71 + */
    1.72 +
    1.73 +/*
    1.74 + * NSSCertificate
    1.75 + *
    1.76 + * These things can do crypto ops like public keys, except that the trust, 
    1.77 + * usage, and other constraints are checked.  These objects are "high-level,"
    1.78 + * so trust, usages, etc. are in the form we throw around (client auth,
    1.79 + * email signing, etc.).  Remember that theoretically another implementation
    1.80 + * (think PGP) could be beneath this object.
    1.81 + */
    1.82 +
    1.83 +/*
    1.84 + * NSSCertificate_Destroy
    1.85 + *
    1.86 + * Free a pointer to a certificate object.
    1.87 + */
    1.88 +
    1.89 +NSS_EXTERN PRStatus
    1.90 +NSSCertificate_Destroy
    1.91 +(
    1.92 +  NSSCertificate *c
    1.93 +);
    1.94 +
    1.95 +/*
    1.96 + * NSSCertificate_DeleteStoredObject
    1.97 + *
    1.98 + * Permanently remove this certificate from storage.  If this is the
    1.99 + * only (remaining) certificate corresponding to a private key, 
   1.100 + * public key, and/or other object; then that object (those objects)
   1.101 + * are deleted too.
   1.102 + */
   1.103 +
   1.104 +NSS_EXTERN PRStatus
   1.105 +NSSCertificate_DeleteStoredObject
   1.106 +(
   1.107 +  NSSCertificate *c,
   1.108 +  NSSCallback *uhh
   1.109 +);
   1.110 +
   1.111 +/*
   1.112 + * NSSCertificate_Validate
   1.113 + *
   1.114 + * Verify that this certificate is trusted, for the specified usage(s), 
   1.115 + * at the specified time, {word word} the specified policies.
   1.116 + */
   1.117 +
   1.118 +NSS_EXTERN PRStatus
   1.119 +NSSCertificate_Validate
   1.120 +(
   1.121 +  NSSCertificate *c,
   1.122 +  NSSTime *timeOpt, /* NULL for "now" */
   1.123 +  NSSUsage *usage,
   1.124 +  NSSPolicies *policiesOpt /* NULL for none */
   1.125 +);
   1.126 +
   1.127 +/*
   1.128 + * NSSCertificate_ValidateCompletely
   1.129 + *
   1.130 + * Verify that this certificate is trusted.  The difference between
   1.131 + * this and the previous call is that NSSCertificate_Validate merely
   1.132 + * returns success or failure with an appropriate error stack.
   1.133 + * However, there may be (and often are) multiple problems with a
   1.134 + * certificate.  This routine returns an array of errors, specifying
   1.135 + * every problem.
   1.136 + */
   1.137 +
   1.138 +/* 
   1.139 + * Return value must be an array of objects, each of which has
   1.140 + * an NSSError, and any corresponding certificate (in the chain)
   1.141 + * and/or policy.
   1.142 + */
   1.143 +
   1.144 +NSS_EXTERN void ** /* void *[] */
   1.145 +NSSCertificate_ValidateCompletely
   1.146 +(
   1.147 +  NSSCertificate *c,
   1.148 +  NSSTime *timeOpt, /* NULL for "now" */
   1.149 +  NSSUsage *usage,
   1.150 +  NSSPolicies *policiesOpt, /* NULL for none */
   1.151 +  void **rvOpt, /* NULL for allocate */
   1.152 +  PRUint32 rvLimit, /* zero for no limit */
   1.153 +  NSSArena *arenaOpt /* NULL for heap */
   1.154 +);
   1.155 +
   1.156 +/*
   1.157 + * NSSCertificate_ValidateAndDiscoverUsagesAndPolicies
   1.158 + *
   1.159 + * Returns PR_SUCCESS if the certificate is valid for at least something.
   1.160 + */
   1.161 +
   1.162 +NSS_EXTERN PRStatus
   1.163 +NSSCertificate_ValidateAndDiscoverUsagesAndPolicies
   1.164 +(
   1.165 +  NSSCertificate *c,
   1.166 +  NSSTime **notBeforeOutOpt,
   1.167 +  NSSTime **notAfterOutOpt,
   1.168 +  void *allowedUsages,
   1.169 +  void *disallowedUsages,
   1.170 +  void *allowedPolicies,
   1.171 +  void *disallowedPolicies,
   1.172 +  /* more args.. work on this fgmr */
   1.173 +  NSSArena *arenaOpt
   1.174 +);
   1.175 +
   1.176 +/*
   1.177 + * NSSCertificate_Encode
   1.178 + *
   1.179 + */
   1.180 +
   1.181 +NSS_EXTERN NSSDER *
   1.182 +NSSCertificate_Encode
   1.183 +(
   1.184 +  NSSCertificate *c,
   1.185 +  NSSDER *rvOpt,
   1.186 +  NSSArena *arenaOpt
   1.187 +);
   1.188 +
   1.189 +/*
   1.190 + * NSSCertificate_BuildChain
   1.191 + *
   1.192 + * This routine returns NSSCertificate *'s for each certificate
   1.193 + * in the "chain" starting from the specified one up to and
   1.194 + * including the root.  The zeroth element in the array is the
   1.195 + * specified ("leaf") certificate.
   1.196 + *
   1.197 + * If statusOpt is supplied, and is returned as PR_FAILURE, possible
   1.198 + * error values are:
   1.199 + *
   1.200 + * NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND - the chain is incomplete
   1.201 + *
   1.202 + */
   1.203 +
   1.204 +extern const NSSError NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND;
   1.205 +
   1.206 +NSS_EXTERN NSSCertificate **
   1.207 +NSSCertificate_BuildChain
   1.208 +(
   1.209 +  NSSCertificate *c,
   1.210 +  NSSTime *timeOpt,
   1.211 +  NSSUsage *usage,
   1.212 +  NSSPolicies *policiesOpt,
   1.213 +  NSSCertificate **rvOpt,
   1.214 +  PRUint32 rvLimit, /* zero for no limit */
   1.215 +  NSSArena *arenaOpt,
   1.216 +  PRStatus *statusOpt,
   1.217 +  NSSTrustDomain *td,
   1.218 +  NSSCryptoContext *cc 
   1.219 +);
   1.220 +
   1.221 +/*
   1.222 + * NSSCertificate_GetTrustDomain
   1.223 + *
   1.224 + */
   1.225 +
   1.226 +NSS_EXTERN NSSTrustDomain *
   1.227 +NSSCertificate_GetTrustDomain
   1.228 +(
   1.229 +  NSSCertificate *c
   1.230 +);
   1.231 +
   1.232 +/*
   1.233 + * NSSCertificate_GetToken
   1.234 + *
   1.235 + * There doesn't have to be one.
   1.236 + */
   1.237 +
   1.238 +NSS_EXTERN NSSToken *
   1.239 +NSSCertificate_GetToken
   1.240 +(
   1.241 +  NSSCertificate *c,
   1.242 +  PRStatus *statusOpt
   1.243 +);
   1.244 +
   1.245 +/*
   1.246 + * NSSCertificate_GetSlot
   1.247 + *
   1.248 + * There doesn't have to be one.
   1.249 + */
   1.250 +
   1.251 +NSS_EXTERN NSSSlot *
   1.252 +NSSCertificate_GetSlot
   1.253 +(
   1.254 +  NSSCertificate *c,
   1.255 +  PRStatus *statusOpt
   1.256 +);
   1.257 +
   1.258 +/*
   1.259 + * NSSCertificate_GetModule
   1.260 + *
   1.261 + * There doesn't have to be one.
   1.262 + */
   1.263 +
   1.264 +NSS_EXTERN NSSModule *
   1.265 +NSSCertificate_GetModule
   1.266 +(
   1.267 +  NSSCertificate *c,
   1.268 +  PRStatus *statusOpt
   1.269 +);
   1.270 +
   1.271 +/*
   1.272 + * NSSCertificate_Encrypt
   1.273 + *
   1.274 + * Encrypt a single chunk of data with the public key corresponding to
   1.275 + * this certificate.
   1.276 + */
   1.277 +
   1.278 +NSS_EXTERN NSSItem *
   1.279 +NSSCertificate_Encrypt
   1.280 +(
   1.281 +  NSSCertificate *c,
   1.282 +  NSSAlgorithmAndParameters *apOpt,
   1.283 +  NSSItem *data,
   1.284 +  NSSTime *timeOpt,
   1.285 +  NSSUsage *usage,
   1.286 +  NSSPolicies *policiesOpt,
   1.287 +  NSSCallback *uhh,
   1.288 +  NSSItem *rvOpt,
   1.289 +  NSSArena *arenaOpt
   1.290 +);
   1.291 +
   1.292 +/*
   1.293 + * NSSCertificate_Verify
   1.294 + *
   1.295 + */
   1.296 +
   1.297 +NSS_EXTERN PRStatus
   1.298 +NSSCertificate_Verify
   1.299 +(
   1.300 +  NSSCertificate *c,
   1.301 +  NSSAlgorithmAndParameters *apOpt,
   1.302 +  NSSItem *data,
   1.303 +  NSSItem *signature,
   1.304 +  NSSTime *timeOpt,
   1.305 +  NSSUsage *usage,
   1.306 +  NSSPolicies *policiesOpt,
   1.307 +  NSSCallback *uhh
   1.308 +);
   1.309 +
   1.310 +/*
   1.311 + * NSSCertificate_VerifyRecover
   1.312 + *
   1.313 + */
   1.314 +
   1.315 +NSS_EXTERN NSSItem *
   1.316 +NSSCertificate_VerifyRecover
   1.317 +(
   1.318 +  NSSCertificate *c,
   1.319 +  NSSAlgorithmAndParameters *apOpt,
   1.320 +  NSSItem *signature,
   1.321 +  NSSTime *timeOpt,
   1.322 +  NSSUsage *usage,
   1.323 +  NSSPolicies *policiesOpt,
   1.324 +  NSSCallback *uhh,
   1.325 +  NSSItem *rvOpt,
   1.326 +  NSSArena *arenaOpt
   1.327 +);
   1.328 +
   1.329 +/*
   1.330 + * NSSCertificate_WrapSymmetricKey
   1.331 + *
   1.332 + * This method tries very hard to to succeed, even in situations 
   1.333 + * involving sensitive keys and multiple modules.
   1.334 + * { relyea: want to add verbiage? }
   1.335 + */
   1.336 +
   1.337 +NSS_EXTERN NSSItem *
   1.338 +NSSCertificate_WrapSymmetricKey
   1.339 +(
   1.340 +  NSSCertificate *c,
   1.341 +  NSSAlgorithmAndParameters *apOpt,
   1.342 +  NSSSymmetricKey *keyToWrap,
   1.343 +  NSSTime *timeOpt,
   1.344 +  NSSUsage *usage,
   1.345 +  NSSPolicies *policiesOpt,
   1.346 +  NSSCallback *uhh,
   1.347 +  NSSItem *rvOpt,
   1.348 +  NSSArena *arenaOpt
   1.349 +);
   1.350 +
   1.351 +/*
   1.352 + * NSSCertificate_CreateCryptoContext
   1.353 + *
   1.354 + * Create a crypto context, in this certificate's trust domain, with this
   1.355 + * as the distinguished certificate.
   1.356 + */
   1.357 +
   1.358 +NSS_EXTERN NSSCryptoContext *
   1.359 +NSSCertificate_CreateCryptoContext
   1.360 +(
   1.361 +  NSSCertificate *c,
   1.362 +  NSSAlgorithmAndParameters *apOpt,
   1.363 +  NSSTime *timeOpt,
   1.364 +  NSSUsage *usage,
   1.365 +  NSSPolicies *policiesOpt,
   1.366 +  NSSCallback *uhh  
   1.367 +);
   1.368 +
   1.369 +/*
   1.370 + * NSSCertificate_GetPublicKey
   1.371 + *
   1.372 + * Returns the public key corresponding to this certificate.
   1.373 + */
   1.374 +
   1.375 +NSS_EXTERN NSSPublicKey *
   1.376 +NSSCertificate_GetPublicKey
   1.377 +(
   1.378 +  NSSCertificate *c
   1.379 +);
   1.380 +
   1.381 +/*
   1.382 + * NSSCertificate_FindPrivateKey
   1.383 + *
   1.384 + * Finds and returns the private key corresponding to this certificate,
   1.385 + * if it is available.
   1.386 + *
   1.387 + * { Should this hang off of NSSUserCertificate? }
   1.388 + */
   1.389 +
   1.390 +NSS_EXTERN NSSPrivateKey *
   1.391 +NSSCertificate_FindPrivateKey
   1.392 +(
   1.393 +  NSSCertificate *c,
   1.394 +  NSSCallback *uhh
   1.395 +);
   1.396 +
   1.397 +/*
   1.398 + * NSSCertificate_IsPrivateKeyAvailable
   1.399 + *
   1.400 + * Returns success if the private key corresponding to this certificate
   1.401 + * is available to be used.
   1.402 + *
   1.403 + * { Should *this* hang off of NSSUserCertificate?? }
   1.404 + */
   1.405 +
   1.406 +NSS_EXTERN PRBool
   1.407 +NSSCertificate_IsPrivateKeyAvailable
   1.408 +(
   1.409 +  NSSCertificate *c,
   1.410 +  NSSCallback *uhh,
   1.411 +  PRStatus *statusOpt
   1.412 +);
   1.413 +
   1.414 +/*
   1.415 + * If we make NSSUserCertificate not a typedef of NSSCertificate, 
   1.416 + * then we'll need implementations of the following:
   1.417 + *
   1.418 + *  NSSUserCertificate_Destroy
   1.419 + *  NSSUserCertificate_DeleteStoredObject
   1.420 + *  NSSUserCertificate_Validate
   1.421 + *  NSSUserCertificate_ValidateCompletely
   1.422 + *  NSSUserCertificate_ValidateAndDiscoverUsagesAndPolicies
   1.423 + *  NSSUserCertificate_Encode
   1.424 + *  NSSUserCertificate_BuildChain
   1.425 + *  NSSUserCertificate_GetTrustDomain
   1.426 + *  NSSUserCertificate_GetToken
   1.427 + *  NSSUserCertificate_GetSlot
   1.428 + *  NSSUserCertificate_GetModule
   1.429 + *  NSSUserCertificate_GetCryptoContext
   1.430 + *  NSSUserCertificate_GetPublicKey
   1.431 + */
   1.432 +
   1.433 +/*
   1.434 + * NSSUserCertificate_IsStillPresent
   1.435 + *
   1.436 + * Verify that if this certificate lives on a token, that the token
   1.437 + * is still present and the certificate still exists.  This is a
   1.438 + * lightweight call which should be used whenever it should be
   1.439 + * verified that the user hasn't perhaps popped out his or her
   1.440 + * token and strolled away.
   1.441 + */
   1.442 +
   1.443 +NSS_EXTERN PRBool
   1.444 +NSSUserCertificate_IsStillPresent
   1.445 +(
   1.446 +  NSSUserCertificate *uc,
   1.447 +  PRStatus *statusOpt
   1.448 +);
   1.449 +
   1.450 +/*
   1.451 + * NSSUserCertificate_Decrypt
   1.452 + *
   1.453 + * Decrypt a single chunk of data with the private key corresponding
   1.454 + * to this certificate.
   1.455 + */
   1.456 +
   1.457 +NSS_EXTERN NSSItem *
   1.458 +NSSUserCertificate_Decrypt
   1.459 +(
   1.460 +  NSSUserCertificate *uc,
   1.461 +  NSSAlgorithmAndParameters *apOpt,
   1.462 +  NSSItem *data,
   1.463 +  NSSTime *timeOpt,
   1.464 +  NSSUsage *usage,
   1.465 +  NSSPolicies *policiesOpt,
   1.466 +  NSSCallback *uhh,
   1.467 +  NSSItem *rvOpt,
   1.468 +  NSSArena *arenaOpt
   1.469 +);
   1.470 +
   1.471 +/*
   1.472 + * NSSUserCertificate_Sign
   1.473 + *
   1.474 + */
   1.475 +
   1.476 +NSS_EXTERN NSSItem *
   1.477 +NSSUserCertificate_Sign
   1.478 +(
   1.479 +  NSSUserCertificate *uc,
   1.480 +  NSSAlgorithmAndParameters *apOpt,
   1.481 +  NSSItem *data,
   1.482 +  NSSTime *timeOpt,
   1.483 +  NSSUsage *usage,
   1.484 +  NSSPolicies *policiesOpt,
   1.485 +  NSSCallback *uhh,
   1.486 +  NSSItem *rvOpt,
   1.487 +  NSSArena *arenaOpt
   1.488 +);
   1.489 +
   1.490 +/*
   1.491 + * NSSUserCertificate_SignRecover
   1.492 + *
   1.493 + */
   1.494 +
   1.495 +NSS_EXTERN NSSItem *
   1.496 +NSSUserCertificate_SignRecover
   1.497 +(
   1.498 +  NSSUserCertificate *uc,
   1.499 +  NSSAlgorithmAndParameters *apOpt,
   1.500 +  NSSItem *data,
   1.501 +  NSSTime *timeOpt,
   1.502 +  NSSUsage *usage,
   1.503 +  NSSPolicies *policiesOpt,
   1.504 +  NSSCallback *uhh,
   1.505 +  NSSItem *rvOpt,
   1.506 +  NSSArena *arenaOpt
   1.507 +);
   1.508 +
   1.509 +/*
   1.510 + * NSSUserCertificate_UnwrapSymmetricKey
   1.511 + *
   1.512 + */
   1.513 +
   1.514 +NSS_EXTERN NSSSymmetricKey *
   1.515 +NSSUserCertificate_UnwrapSymmetricKey
   1.516 +(
   1.517 +  NSSUserCertificate *uc,
   1.518 +  NSSAlgorithmAndParameters *apOpt,
   1.519 +  NSSItem *wrappedKey,
   1.520 +  NSSTime *timeOpt,
   1.521 +  NSSUsage *usage,
   1.522 +  NSSPolicies *policiesOpt,
   1.523 +  NSSCallback *uhh,
   1.524 +  NSSItem *rvOpt,
   1.525 +  NSSArena *arenaOpt
   1.526 +);
   1.527 +
   1.528 +/*
   1.529 + * NSSUserCertificate_DeriveSymmetricKey
   1.530 + *
   1.531 + */
   1.532 +
   1.533 +NSS_EXTERN NSSSymmetricKey *
   1.534 +NSSUserCertificate_DeriveSymmetricKey
   1.535 +(
   1.536 +  NSSUserCertificate *uc, /* provides private key */
   1.537 +  NSSCertificate *c, /* provides public key */
   1.538 +  NSSAlgorithmAndParameters *apOpt,
   1.539 +  NSSOID *target,
   1.540 +  PRUint32 keySizeOpt, /* zero for best allowed */
   1.541 +  NSSOperations operations,
   1.542 +  NSSCallback *uhh
   1.543 +);
   1.544 +
   1.545 +/* filter-certs function(s) */
   1.546 +
   1.547 +/**
   1.548 + ** fgmr -- trust objects
   1.549 + **/
   1.550 +
   1.551 +/*
   1.552 + * NSSPrivateKey
   1.553 + *
   1.554 + */
   1.555 +
   1.556 +/*
   1.557 + * NSSPrivateKey_Destroy
   1.558 + *
   1.559 + * Free a pointer to a private key object.
   1.560 + */
   1.561 +
   1.562 +NSS_EXTERN PRStatus
   1.563 +NSSPrivateKey_Destroy
   1.564 +(
   1.565 +  NSSPrivateKey *vk
   1.566 +);
   1.567 +
   1.568 +/*
   1.569 + * NSSPrivateKey_DeleteStoredObject
   1.570 + *
   1.571 + * Permanently remove this object, and any related objects (such as the
   1.572 + * certificates corresponding to this key).
   1.573 + */
   1.574 +
   1.575 +NSS_EXTERN PRStatus
   1.576 +NSSPrivateKey_DeleteStoredObject
   1.577 +(
   1.578 +  NSSPrivateKey *vk,
   1.579 +  NSSCallback *uhh
   1.580 +);
   1.581 +
   1.582 +/*
   1.583 + * NSSPrivateKey_GetSignatureLength
   1.584 + *
   1.585 + */
   1.586 +
   1.587 +NSS_EXTERN PRUint32
   1.588 +NSSPrivateKey_GetSignatureLength
   1.589 +(
   1.590 +  NSSPrivateKey *vk
   1.591 +);
   1.592 +
   1.593 +/*
   1.594 + * NSSPrivateKey_GetPrivateModulusLength
   1.595 + *
   1.596 + */
   1.597 +
   1.598 +NSS_EXTERN PRUint32
   1.599 +NSSPrivateKey_GetPrivateModulusLength
   1.600 +(
   1.601 +  NSSPrivateKey *vk
   1.602 +);
   1.603 +
   1.604 +/*
   1.605 + * NSSPrivateKey_IsStillPresent
   1.606 + *
   1.607 + */
   1.608 +
   1.609 +NSS_EXTERN PRBool
   1.610 +NSSPrivateKey_IsStillPresent
   1.611 +(
   1.612 +  NSSPrivateKey *vk,
   1.613 +  PRStatus *statusOpt
   1.614 +);
   1.615 +
   1.616 +/*
   1.617 + * NSSPrivateKey_Encode
   1.618 + *
   1.619 + */
   1.620 +
   1.621 +NSS_EXTERN NSSItem *
   1.622 +NSSPrivateKey_Encode
   1.623 +(
   1.624 +  NSSPrivateKey *vk,
   1.625 +  NSSAlgorithmAndParameters *ap,
   1.626 +  NSSItem *passwordOpt, /* NULL will cause a callback; "" for no password */
   1.627 +  NSSCallback *uhhOpt,
   1.628 +  NSSItem *rvOpt,
   1.629 +  NSSArena *arenaOpt
   1.630 +);
   1.631 +
   1.632 +/*
   1.633 + * NSSPrivateKey_GetTrustDomain
   1.634 + *
   1.635 + * There doesn't have to be one.
   1.636 + */
   1.637 +
   1.638 +NSS_EXTERN NSSTrustDomain *
   1.639 +NSSPrivateKey_GetTrustDomain
   1.640 +(
   1.641 +  NSSPrivateKey *vk,
   1.642 +  PRStatus *statusOpt
   1.643 +);
   1.644 +
   1.645 +/*
   1.646 + * NSSPrivateKey_GetToken
   1.647 + *
   1.648 + */
   1.649 +
   1.650 +NSS_EXTERN NSSToken *
   1.651 +NSSPrivateKey_GetToken
   1.652 +(
   1.653 +  NSSPrivateKey *vk
   1.654 +);
   1.655 +
   1.656 +/*
   1.657 + * NSSPrivateKey_GetSlot
   1.658 + *
   1.659 + */
   1.660 +
   1.661 +NSS_EXTERN NSSSlot *
   1.662 +NSSPrivateKey_GetSlot
   1.663 +(
   1.664 +  NSSPrivateKey *vk
   1.665 +);
   1.666 +
   1.667 +/*
   1.668 + * NSSPrivateKey_GetModule
   1.669 + *
   1.670 + */
   1.671 +
   1.672 +NSS_EXTERN NSSModule *
   1.673 +NSSPrivateKey_GetModule
   1.674 +(
   1.675 +  NSSPrivateKey *vk
   1.676 +);
   1.677 +
   1.678 +/*
   1.679 + * NSSPrivateKey_Decrypt
   1.680 + *
   1.681 + */
   1.682 +
   1.683 +NSS_EXTERN NSSItem *
   1.684 +NSSPrivateKey_Decrypt
   1.685 +(
   1.686 +  NSSPrivateKey *vk,
   1.687 +  NSSAlgorithmAndParameters *apOpt,
   1.688 +  NSSItem *encryptedData,
   1.689 +  NSSCallback *uhh,
   1.690 +  NSSItem *rvOpt,
   1.691 +  NSSArena *arenaOpt
   1.692 +);
   1.693 +
   1.694 +/*
   1.695 + * NSSPrivateKey_Sign
   1.696 + *
   1.697 + */
   1.698 +
   1.699 +NSS_EXTERN NSSItem *
   1.700 +NSSPrivateKey_Sign
   1.701 +(
   1.702 +  NSSPrivateKey *vk,
   1.703 +  NSSAlgorithmAndParameters *apOpt,
   1.704 +  NSSItem *data,
   1.705 +  NSSCallback *uhh,
   1.706 +  NSSItem *rvOpt,
   1.707 +  NSSArena *arenaOpt
   1.708 +);
   1.709 +
   1.710 +/*
   1.711 + * NSSPrivateKey_SignRecover
   1.712 + *
   1.713 + */
   1.714 +
   1.715 +NSS_EXTERN NSSItem *
   1.716 +NSSPrivateKey_SignRecover
   1.717 +(
   1.718 +  NSSPrivateKey *vk,
   1.719 +  NSSAlgorithmAndParameters *apOpt,
   1.720 +  NSSItem *data,
   1.721 +  NSSCallback *uhh,
   1.722 +  NSSItem *rvOpt,
   1.723 +  NSSArena *arenaOpt
   1.724 +);
   1.725 +
   1.726 +/*
   1.727 + * NSSPrivateKey_UnwrapSymmetricKey
   1.728 + *
   1.729 + */
   1.730 +
   1.731 +NSS_EXTERN NSSSymmetricKey *
   1.732 +NSSPrivateKey_UnwrapSymmetricKey
   1.733 +(
   1.734 +  NSSPrivateKey *vk,
   1.735 +  NSSAlgorithmAndParameters *apOpt,
   1.736 +  NSSItem *wrappedKey,
   1.737 +  NSSCallback *uhh
   1.738 +);
   1.739 +
   1.740 +/*
   1.741 + * NSSPrivateKey_DeriveSymmetricKey
   1.742 + *
   1.743 + */
   1.744 +
   1.745 +NSS_EXTERN NSSSymmetricKey *
   1.746 +NSSPrivateKey_DeriveSymmetricKey
   1.747 +(
   1.748 +  NSSPrivateKey *vk,
   1.749 +  NSSPublicKey *bk,
   1.750 +  NSSAlgorithmAndParameters *apOpt,
   1.751 +  NSSOID *target,
   1.752 +  PRUint32 keySizeOpt, /* zero for best allowed */
   1.753 +  NSSOperations operations,
   1.754 +  NSSCallback *uhh
   1.755 +);
   1.756 +
   1.757 +/*
   1.758 + * NSSPrivateKey_FindPublicKey
   1.759 + *
   1.760 + */
   1.761 +
   1.762 +NSS_EXTERN NSSPublicKey *
   1.763 +NSSPrivateKey_FindPublicKey
   1.764 +(
   1.765 +  NSSPrivateKey *vk
   1.766 +  /* { don't need the callback here, right? } */
   1.767 +);
   1.768 +
   1.769 +/*
   1.770 + * NSSPrivateKey_CreateCryptoContext
   1.771 + *
   1.772 + * Create a crypto context, in this key's trust domain,
   1.773 + * with this as the distinguished private key.
   1.774 + */
   1.775 +
   1.776 +NSS_EXTERN NSSCryptoContext *
   1.777 +NSSPrivateKey_CreateCryptoContext
   1.778 +(
   1.779 +  NSSPrivateKey *vk,
   1.780 +  NSSAlgorithmAndParameters *apOpt,
   1.781 +  NSSCallback *uhh
   1.782 +);
   1.783 +
   1.784 +/*
   1.785 + * NSSPrivateKey_FindCertificates
   1.786 + *
   1.787 + * Note that there may be more than one certificate for this
   1.788 + * private key.  { FilterCertificates function to further
   1.789 + * reduce the list. }
   1.790 + */
   1.791 +
   1.792 +NSS_EXTERN NSSCertificate **
   1.793 +NSSPrivateKey_FindCertificates
   1.794 +(
   1.795 +  NSSPrivateKey *vk,
   1.796 +  NSSCertificate *rvOpt[],
   1.797 +  PRUint32 maximumOpt, /* 0 for no max */
   1.798 +  NSSArena *arenaOpt
   1.799 +);
   1.800 +
   1.801 +/*
   1.802 + * NSSPrivateKey_FindBestCertificate
   1.803 + *
   1.804 + * The parameters for this function will depend on what the users
   1.805 + * need.  This is just a starting point.
   1.806 + */
   1.807 +
   1.808 +NSS_EXTERN NSSCertificate *
   1.809 +NSSPrivateKey_FindBestCertificate
   1.810 +(
   1.811 +  NSSPrivateKey *vk,
   1.812 +  NSSTime *timeOpt,
   1.813 +  NSSUsage *usageOpt,
   1.814 +  NSSPolicies *policiesOpt
   1.815 +);
   1.816 +
   1.817 +/*
   1.818 + * NSSPublicKey
   1.819 + *
   1.820 + * Once you generate, find, or derive one of these, you can use it
   1.821 + * to perform (simple) cryptographic operations.  Though there may
   1.822 + * be certificates associated with these public keys, they are not
   1.823 + * verified.
   1.824 + */
   1.825 +
   1.826 +/*
   1.827 + * NSSPublicKey_Destroy
   1.828 + *
   1.829 + * Free a pointer to a public key object.
   1.830 + */
   1.831 +
   1.832 +NSS_EXTERN PRStatus
   1.833 +NSSPublicKey_Destroy
   1.834 +(
   1.835 +  NSSPublicKey *bk
   1.836 +);
   1.837 +
   1.838 +/*
   1.839 + * NSSPublicKey_DeleteStoredObject
   1.840 + *
   1.841 + * Permanently remove this object, and any related objects (such as the
   1.842 + * corresponding private keys and certificates).
   1.843 + */
   1.844 +
   1.845 +NSS_EXTERN PRStatus
   1.846 +NSSPublicKey_DeleteStoredObject
   1.847 +(
   1.848 +  NSSPublicKey *bk,
   1.849 +  NSSCallback *uhh
   1.850 +);
   1.851 +
   1.852 +/*
   1.853 + * NSSPublicKey_Encode
   1.854 + *
   1.855 + */
   1.856 +
   1.857 +NSS_EXTERN NSSItem *
   1.858 +NSSPublicKey_Encode
   1.859 +(
   1.860 +  NSSPublicKey *bk,
   1.861 +  NSSAlgorithmAndParameters *ap,
   1.862 +  NSSCallback *uhhOpt,
   1.863 +  NSSItem *rvOpt,
   1.864 +  NSSArena *arenaOpt
   1.865 +);
   1.866 +
   1.867 +/*
   1.868 + * NSSPublicKey_GetTrustDomain
   1.869 + *
   1.870 + * There doesn't have to be one.
   1.871 + */
   1.872 +
   1.873 +NSS_EXTERN NSSTrustDomain *
   1.874 +NSSPublicKey_GetTrustDomain
   1.875 +(
   1.876 +  NSSPublicKey *bk,
   1.877 +  PRStatus *statusOpt
   1.878 +);
   1.879 +
   1.880 +/*
   1.881 + * NSSPublicKey_GetToken
   1.882 + *
   1.883 + * There doesn't have to be one.
   1.884 + */
   1.885 +
   1.886 +NSS_EXTERN NSSToken *
   1.887 +NSSPublicKey_GetToken
   1.888 +(
   1.889 +  NSSPublicKey *bk,
   1.890 +  PRStatus *statusOpt
   1.891 +);
   1.892 +
   1.893 +/*
   1.894 + * NSSPublicKey_GetSlot
   1.895 + *
   1.896 + * There doesn't have to be one.
   1.897 + */
   1.898 +
   1.899 +NSS_EXTERN NSSSlot *
   1.900 +NSSPublicKey_GetSlot
   1.901 +(
   1.902 +  NSSPublicKey *bk,
   1.903 +  PRStatus *statusOpt
   1.904 +);
   1.905 +
   1.906 +/*
   1.907 + * NSSPublicKey_GetModule
   1.908 + *
   1.909 + * There doesn't have to be one.
   1.910 + */
   1.911 +
   1.912 +NSS_EXTERN NSSModule *
   1.913 +NSSPublicKey_GetModule
   1.914 +(
   1.915 +  NSSPublicKey *bk,
   1.916 +  PRStatus *statusOpt
   1.917 +);
   1.918 +
   1.919 +/*
   1.920 + * NSSPublicKey_Encrypt
   1.921 + *
   1.922 + * Encrypt a single chunk of data with the public key corresponding to
   1.923 + * this certificate.
   1.924 + */
   1.925 +
   1.926 +NSS_EXTERN NSSItem *
   1.927 +NSSPublicKey_Encrypt
   1.928 +(
   1.929 +  NSSPublicKey *bk,
   1.930 +  NSSAlgorithmAndParameters *apOpt,
   1.931 +  NSSItem *data,
   1.932 +  NSSCallback *uhh,
   1.933 +  NSSItem *rvOpt,
   1.934 +  NSSArena *arenaOpt
   1.935 +);
   1.936 +
   1.937 +/*
   1.938 + * NSSPublicKey_Verify
   1.939 + *
   1.940 + */
   1.941 +
   1.942 +NSS_EXTERN PRStatus
   1.943 +NSSPublicKey_Verify
   1.944 +(
   1.945 +  NSSPublicKey *bk,
   1.946 +  NSSAlgorithmAndParameters *apOpt,
   1.947 +  NSSItem *data,
   1.948 +  NSSItem *signature,
   1.949 +  NSSCallback *uhh
   1.950 +);
   1.951 +
   1.952 +/*
   1.953 + * NSSPublicKey_VerifyRecover
   1.954 + *
   1.955 + */
   1.956 +
   1.957 +NSS_EXTERN NSSItem *
   1.958 +NSSPublicKey_VerifyRecover
   1.959 +(
   1.960 +  NSSPublicKey *bk,
   1.961 +  NSSAlgorithmAndParameters *apOpt,
   1.962 +  NSSItem *signature,
   1.963 +  NSSCallback *uhh,
   1.964 +  NSSItem *rvOpt,
   1.965 +  NSSArena *arenaOpt
   1.966 +);
   1.967 +
   1.968 +/*
   1.969 + * NSSPublicKey_WrapSymmetricKey
   1.970 + *
   1.971 + */
   1.972 +
   1.973 +NSS_EXTERN NSSItem *
   1.974 +NSSPublicKey_WrapSymmetricKey
   1.975 +(
   1.976 +  NSSPublicKey *bk,
   1.977 +  NSSAlgorithmAndParameters *apOpt,
   1.978 +  NSSSymmetricKey *keyToWrap,
   1.979 +  NSSCallback *uhh,
   1.980 +  NSSItem *rvOpt,
   1.981 +  NSSArena *arenaOpt
   1.982 +);
   1.983 +
   1.984 +/*
   1.985 + * NSSPublicKey_CreateCryptoContext
   1.986 + *
   1.987 + * Create a crypto context, in this key's trust domain, with this
   1.988 + * as the distinguished public key.
   1.989 + */
   1.990 +
   1.991 +NSS_EXTERN NSSCryptoContext *
   1.992 +NSSPublicKey_CreateCryptoContext
   1.993 +(
   1.994 +  NSSPublicKey *bk,
   1.995 +  NSSAlgorithmAndParameters *apOpt,
   1.996 +  NSSCallback *uhh
   1.997 +);
   1.998 +
   1.999 +/*
  1.1000 + * NSSPublicKey_FindCertificates
  1.1001 + *
  1.1002 + * Note that there may be more than one certificate for this
  1.1003 + * public key.  The current implementation may not find every
  1.1004 + * last certificate available for this public key: that would
  1.1005 + * involve trolling e.g. huge ldap databases, which will be
  1.1006 + * grossly inefficient and not generally useful.
  1.1007 + * { FilterCertificates function to further reduce the list }
  1.1008 + */
  1.1009 +
  1.1010 +NSS_EXTERN NSSCertificate **
  1.1011 +NSSPublicKey_FindCertificates
  1.1012 +(
  1.1013 +  NSSPublicKey *bk,
  1.1014 +  NSSCertificate *rvOpt[],
  1.1015 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1016 +  NSSArena *arenaOpt
  1.1017 +);
  1.1018 +
  1.1019 +/*
  1.1020 + * NSSPrivateKey_FindBestCertificate
  1.1021 + *
  1.1022 + * The parameters for this function will depend on what the users
  1.1023 + * need.  This is just a starting point.
  1.1024 + */
  1.1025 +
  1.1026 +NSS_EXTERN NSSCertificate *
  1.1027 +NSSPublicKey_FindBestCertificate
  1.1028 +(
  1.1029 +  NSSPublicKey *bk,
  1.1030 +  NSSTime *timeOpt,
  1.1031 +  NSSUsage *usageOpt,
  1.1032 +  NSSPolicies *policiesOpt
  1.1033 +);
  1.1034 +
  1.1035 +/*
  1.1036 + * NSSPublicKey_FindPrivateKey
  1.1037 + *
  1.1038 + */
  1.1039 +
  1.1040 +NSS_EXTERN NSSPrivateKey *
  1.1041 +NSSPublicKey_FindPrivateKey
  1.1042 +(
  1.1043 +  NSSPublicKey *bk,
  1.1044 +  NSSCallback *uhh
  1.1045 +);
  1.1046 +
  1.1047 +/*
  1.1048 + * NSSSymmetricKey
  1.1049 + *
  1.1050 + */
  1.1051 +
  1.1052 +/*
  1.1053 + * NSSSymmetricKey_Destroy
  1.1054 + *
  1.1055 + * Free a pointer to a symmetric key object.
  1.1056 + */
  1.1057 +
  1.1058 +NSS_EXTERN PRStatus
  1.1059 +NSSSymmetricKey_Destroy
  1.1060 +(
  1.1061 +  NSSSymmetricKey *mk
  1.1062 +);
  1.1063 +
  1.1064 +/*
  1.1065 + * NSSSymmetricKey_DeleteStoredObject
  1.1066 + *
  1.1067 + * Permanently remove this object.
  1.1068 + */
  1.1069 +
  1.1070 +NSS_EXTERN PRStatus
  1.1071 +NSSSymmetricKey_DeleteStoredObject
  1.1072 +(
  1.1073 +  NSSSymmetricKey *mk,
  1.1074 +  NSSCallback *uhh
  1.1075 +);
  1.1076 +
  1.1077 +/*
  1.1078 + * NSSSymmetricKey_GetKeyLength
  1.1079 + *
  1.1080 + */
  1.1081 +
  1.1082 +NSS_EXTERN PRUint32
  1.1083 +NSSSymmetricKey_GetKeyLength
  1.1084 +(
  1.1085 +  NSSSymmetricKey *mk
  1.1086 +);
  1.1087 +
  1.1088 +/*
  1.1089 + * NSSSymmetricKey_GetKeyStrength
  1.1090 + *
  1.1091 + */
  1.1092 +
  1.1093 +NSS_EXTERN PRUint32
  1.1094 +NSSSymmetricKey_GetKeyStrength
  1.1095 +(
  1.1096 +  NSSSymmetricKey *mk
  1.1097 +);
  1.1098 +
  1.1099 +/*
  1.1100 + * NSSSymmetricKey_IsStillPresent
  1.1101 + *
  1.1102 + */
  1.1103 +
  1.1104 +NSS_EXTERN PRStatus
  1.1105 +NSSSymmetricKey_IsStillPresent
  1.1106 +(
  1.1107 +  NSSSymmetricKey *mk
  1.1108 +);
  1.1109 +
  1.1110 +/*
  1.1111 + * NSSSymmetricKey_GetTrustDomain
  1.1112 + *
  1.1113 + * There doesn't have to be one.
  1.1114 + */
  1.1115 +
  1.1116 +NSS_EXTERN NSSTrustDomain *
  1.1117 +NSSSymmetricKey_GetTrustDomain
  1.1118 +(
  1.1119 +  NSSSymmetricKey *mk,
  1.1120 +  PRStatus *statusOpt
  1.1121 +);
  1.1122 +
  1.1123 +/*
  1.1124 + * NSSSymmetricKey_GetToken
  1.1125 + *
  1.1126 + * There doesn't have to be one.
  1.1127 + */
  1.1128 +
  1.1129 +NSS_EXTERN NSSToken *
  1.1130 +NSSSymmetricKey_GetToken
  1.1131 +(
  1.1132 +  NSSSymmetricKey *mk,
  1.1133 +  PRStatus *statusOpt
  1.1134 +);
  1.1135 +
  1.1136 +/*
  1.1137 + * NSSSymmetricKey_GetSlot
  1.1138 + *
  1.1139 + * There doesn't have to be one.
  1.1140 + */
  1.1141 +
  1.1142 +NSS_EXTERN NSSSlot *
  1.1143 +NSSSymmetricKey_GetSlot
  1.1144 +(
  1.1145 +  NSSSymmetricKey *mk,
  1.1146 +  PRStatus *statusOpt
  1.1147 +);
  1.1148 +
  1.1149 +/*
  1.1150 + * NSSSymmetricKey_GetModule
  1.1151 + *
  1.1152 + * There doesn't have to be one.
  1.1153 + */
  1.1154 +
  1.1155 +NSS_EXTERN NSSModule *
  1.1156 +NSSSymmetricKey_GetModule
  1.1157 +(
  1.1158 +  NSSSymmetricKey *mk,
  1.1159 +  PRStatus *statusOpt
  1.1160 +);
  1.1161 +
  1.1162 +/*
  1.1163 + * NSSSymmetricKey_Encrypt
  1.1164 + *
  1.1165 + */
  1.1166 +
  1.1167 +NSS_EXTERN NSSItem *
  1.1168 +NSSSymmetricKey_Encrypt
  1.1169 +(
  1.1170 +  NSSSymmetricKey *mk,
  1.1171 +  NSSAlgorithmAndParameters *apOpt,
  1.1172 +  NSSItem *data,
  1.1173 +  NSSCallback *uhh,
  1.1174 +  NSSItem *rvOpt,
  1.1175 +  NSSArena *arenaOpt
  1.1176 +);
  1.1177 +
  1.1178 +/*
  1.1179 + * NSSSymmetricKey_Decrypt
  1.1180 + *
  1.1181 + */
  1.1182 +
  1.1183 +NSS_EXTERN NSSItem *
  1.1184 +NSSSymmetricKey_Decrypt
  1.1185 +(
  1.1186 +  NSSSymmetricKey *mk,
  1.1187 +  NSSAlgorithmAndParameters *apOpt,
  1.1188 +  NSSItem *encryptedData,
  1.1189 +  NSSCallback *uhh,
  1.1190 +  NSSItem *rvOpt,
  1.1191 +  NSSArena *arenaOpt
  1.1192 +);
  1.1193 +
  1.1194 +/*
  1.1195 + * NSSSymmetricKey_Sign
  1.1196 + *
  1.1197 + */
  1.1198 +
  1.1199 +NSS_EXTERN NSSItem *
  1.1200 +NSSSymmetricKey_Sign
  1.1201 +(
  1.1202 +  NSSSymmetricKey *mk,
  1.1203 +  NSSAlgorithmAndParameters *apOpt,
  1.1204 +  NSSItem *data,
  1.1205 +  NSSCallback *uhh,
  1.1206 +  NSSItem *rvOpt,
  1.1207 +  NSSArena *arenaOpt
  1.1208 +);
  1.1209 +
  1.1210 +/*
  1.1211 + * NSSSymmetricKey_SignRecover
  1.1212 + *
  1.1213 + */
  1.1214 +
  1.1215 +NSS_EXTERN NSSItem *
  1.1216 +NSSSymmetricKey_SignRecover
  1.1217 +(
  1.1218 +  NSSSymmetricKey *mk,
  1.1219 +  NSSAlgorithmAndParameters *apOpt,
  1.1220 +  NSSItem *data,
  1.1221 +  NSSCallback *uhh,
  1.1222 +  NSSItem *rvOpt,
  1.1223 +  NSSArena *arenaOpt
  1.1224 +);
  1.1225 +
  1.1226 +/*
  1.1227 + * NSSSymmetricKey_Verify
  1.1228 + *
  1.1229 + */
  1.1230 +
  1.1231 +NSS_EXTERN PRStatus
  1.1232 +NSSSymmetricKey_Verify
  1.1233 +(
  1.1234 +  NSSSymmetricKey *mk,
  1.1235 +  NSSAlgorithmAndParameters *apOpt,
  1.1236 +  NSSItem *data,
  1.1237 +  NSSItem *signature,
  1.1238 +  NSSCallback *uhh
  1.1239 +);
  1.1240 +
  1.1241 +/*
  1.1242 + * NSSSymmetricKey_VerifyRecover
  1.1243 + *
  1.1244 + */
  1.1245 +
  1.1246 +NSS_EXTERN NSSItem *
  1.1247 +NSSSymmetricKey_VerifyRecover
  1.1248 +(
  1.1249 +  NSSSymmetricKey *mk,
  1.1250 +  NSSAlgorithmAndParameters *apOpt,
  1.1251 +  NSSItem *signature,
  1.1252 +  NSSCallback *uhh,
  1.1253 +  NSSItem *rvOpt,
  1.1254 +  NSSArena *arenaOpt
  1.1255 +);
  1.1256 +
  1.1257 +/*
  1.1258 + * NSSSymmetricKey_WrapSymmetricKey
  1.1259 + *
  1.1260 + */
  1.1261 +
  1.1262 +NSS_EXTERN NSSItem *
  1.1263 +NSSSymmetricKey_WrapSymmetricKey
  1.1264 +(
  1.1265 +  NSSSymmetricKey *wrappingKey,
  1.1266 +  NSSAlgorithmAndParameters *apOpt,
  1.1267 +  NSSSymmetricKey *keyToWrap,
  1.1268 +  NSSCallback *uhh,
  1.1269 +  NSSItem *rvOpt,
  1.1270 +  NSSArena *arenaOpt
  1.1271 +);
  1.1272 +
  1.1273 +/*
  1.1274 + * NSSSymmetricKey_WrapPrivateKey
  1.1275 + *
  1.1276 + */
  1.1277 +
  1.1278 +NSS_EXTERN NSSItem *
  1.1279 +NSSSymmetricKey_WrapPrivateKey
  1.1280 +(
  1.1281 +  NSSSymmetricKey *wrappingKey,
  1.1282 +  NSSAlgorithmAndParameters *apOpt,
  1.1283 +  NSSPrivateKey *keyToWrap,
  1.1284 +  NSSCallback *uhh,
  1.1285 +  NSSItem *rvOpt,
  1.1286 +  NSSArena *arenaOpt
  1.1287 +);
  1.1288 +
  1.1289 +/*
  1.1290 + * NSSSymmetricKey_UnwrapSymmetricKey
  1.1291 + *
  1.1292 + */
  1.1293 +
  1.1294 +NSS_EXTERN NSSSymmetricKey *
  1.1295 +NSSSymmetricKey_UnwrapSymmetricKey
  1.1296 +(
  1.1297 +  NSSSymmetricKey *wrappingKey,
  1.1298 +  NSSAlgorithmAndParameters *apOpt,
  1.1299 +  NSSItem *wrappedKey,
  1.1300 +  NSSOID *target,
  1.1301 +  PRUint32 keySizeOpt,
  1.1302 +  NSSOperations operations,
  1.1303 +  NSSCallback *uhh
  1.1304 +);
  1.1305 +
  1.1306 +/*
  1.1307 + * NSSSymmetricKey_UnwrapPrivateKey
  1.1308 + *
  1.1309 + */
  1.1310 +
  1.1311 +NSS_EXTERN NSSPrivateKey *
  1.1312 +NSSSymmetricKey_UnwrapPrivateKey
  1.1313 +(
  1.1314 +  NSSSymmetricKey *wrappingKey,
  1.1315 +  NSSAlgorithmAndParameters *apOpt,
  1.1316 +  NSSItem *wrappedKey,
  1.1317 +  NSSUTF8 *labelOpt,
  1.1318 +  NSSItem *keyIDOpt,
  1.1319 +  PRBool persistant,
  1.1320 +  PRBool sensitive,
  1.1321 +  NSSToken *destinationOpt,
  1.1322 +  NSSCallback *uhh
  1.1323 +);
  1.1324 +
  1.1325 +/*
  1.1326 + * NSSSymmetricKey_DeriveSymmetricKey
  1.1327 + *
  1.1328 + */
  1.1329 +
  1.1330 +NSS_EXTERN NSSSymmetricKey *
  1.1331 +NSSSymmetricKey_DeriveSymmetricKey
  1.1332 +(
  1.1333 +  NSSSymmetricKey *originalKey,
  1.1334 +  NSSAlgorithmAndParameters *apOpt,
  1.1335 +  NSSOID *target,
  1.1336 +  PRUint32 keySizeOpt,
  1.1337 +  NSSOperations operations,
  1.1338 +  NSSCallback *uhh
  1.1339 +);
  1.1340 +
  1.1341 +/*
  1.1342 + * NSSSymmetricKey_CreateCryptoContext
  1.1343 + *
  1.1344 + * Create a crypto context, in this key's trust domain,
  1.1345 + * with this as the distinguished symmetric key.
  1.1346 + */
  1.1347 +
  1.1348 +NSS_EXTERN NSSCryptoContext *
  1.1349 +NSSSymmetricKey_CreateCryptoContext
  1.1350 +(
  1.1351 +  NSSSymmetricKey *mk,
  1.1352 +  NSSAlgorithmAndParameters *apOpt,
  1.1353 +  NSSCallback *uhh
  1.1354 +);
  1.1355 +
  1.1356 +/*
  1.1357 + * NSSTrustDomain
  1.1358 + *
  1.1359 + */
  1.1360 +
  1.1361 +/*
  1.1362 + * NSSTrustDomain_Create
  1.1363 + *
  1.1364 + * This creates a trust domain, optionally with an initial cryptoki
  1.1365 + * module.  If the module name is not null, the module is loaded if
  1.1366 + * needed (using the uriOpt argument), and initialized with the
  1.1367 + * opaqueOpt argument.  If mumble mumble priority settings, then
  1.1368 + * module-specification objects in the module can cause the loading
  1.1369 + * and initialization of further modules.
  1.1370 + *
  1.1371 + * The uriOpt is defined to take a URI.  At present, we only
  1.1372 + * support file: URLs pointing to platform-native shared libraries.
  1.1373 + * However, by specifying this as a URI, this keeps open the 
  1.1374 + * possibility of supporting other, possibly remote, resources.
  1.1375 + *
  1.1376 + * The "reserved" arguments is held for when we figure out the
  1.1377 + * module priority stuff.
  1.1378 + */
  1.1379 +
  1.1380 +NSS_EXTERN NSSTrustDomain *
  1.1381 +NSSTrustDomain_Create
  1.1382 +(
  1.1383 +  NSSUTF8 *moduleOpt,
  1.1384 +  NSSUTF8 *uriOpt,
  1.1385 +  NSSUTF8 *opaqueOpt,
  1.1386 +  void *reserved
  1.1387 +);
  1.1388 +
  1.1389 +/*
  1.1390 + * NSSTrustDomain_Destroy
  1.1391 + *
  1.1392 + */
  1.1393 +
  1.1394 +NSS_EXTERN PRStatus
  1.1395 +NSSTrustDomain_Destroy
  1.1396 +(
  1.1397 +  NSSTrustDomain *td
  1.1398 +);
  1.1399 +
  1.1400 +/*
  1.1401 + * NSSTrustDomain_SetDefaultCallback
  1.1402 + *
  1.1403 + */
  1.1404 +
  1.1405 +NSS_EXTERN PRStatus
  1.1406 +NSSTrustDomain_SetDefaultCallback
  1.1407 +(
  1.1408 +  NSSTrustDomain *td,
  1.1409 +  NSSCallback *newCallback,
  1.1410 +  NSSCallback **oldCallbackOpt
  1.1411 +);
  1.1412 +
  1.1413 +/*
  1.1414 + * NSSTrustDomain_GetDefaultCallback
  1.1415 + *
  1.1416 + */
  1.1417 +
  1.1418 +NSS_EXTERN NSSCallback *
  1.1419 +NSSTrustDomain_GetDefaultCallback
  1.1420 +(
  1.1421 +  NSSTrustDomain *td,
  1.1422 +  PRStatus *statusOpt
  1.1423 +);
  1.1424 +
  1.1425 +/*
  1.1426 + * Default policies?
  1.1427 + * Default usage?
  1.1428 + * Default time, for completeness?
  1.1429 + */
  1.1430 +
  1.1431 +/*
  1.1432 + * NSSTrustDomain_LoadModule
  1.1433 + *
  1.1434 + */
  1.1435 +
  1.1436 +NSS_EXTERN PRStatus
  1.1437 +NSSTrustDomain_LoadModule
  1.1438 +(
  1.1439 +  NSSTrustDomain *td,
  1.1440 +  NSSUTF8 *moduleOpt,
  1.1441 +  NSSUTF8 *uriOpt,
  1.1442 +  NSSUTF8 *opaqueOpt,
  1.1443 +  void *reserved
  1.1444 +);
  1.1445 +
  1.1446 +/*
  1.1447 + * NSSTrustDomain_AddModule
  1.1448 + * NSSTrustDomain_AddSlot
  1.1449 + * NSSTrustDomain_UnloadModule
  1.1450 + * Managing modules, slots, tokens; priorities;
  1.1451 + * Traversing all of the above
  1.1452 + * this needs more work
  1.1453 + */
  1.1454 +
  1.1455 +/*
  1.1456 + * NSSTrustDomain_DisableToken
  1.1457 + *
  1.1458 + */
  1.1459 +
  1.1460 +NSS_EXTERN PRStatus
  1.1461 +NSSTrustDomain_DisableToken
  1.1462 +(
  1.1463 +  NSSTrustDomain *td,
  1.1464 +  NSSToken *token,
  1.1465 +  NSSError why
  1.1466 +);
  1.1467 +
  1.1468 +/*
  1.1469 + * NSSTrustDomain_EnableToken
  1.1470 + *
  1.1471 + */
  1.1472 +
  1.1473 +NSS_EXTERN PRStatus
  1.1474 +NSSTrustDomain_EnableToken
  1.1475 +(
  1.1476 +  NSSTrustDomain *td,
  1.1477 +  NSSToken *token
  1.1478 +);
  1.1479 +
  1.1480 +/*
  1.1481 + * NSSTrustDomain_IsTokenEnabled
  1.1482 + *
  1.1483 + * If disabled, "why" is always on the error stack.
  1.1484 + * The optional argument is just for convenience.
  1.1485 + */
  1.1486 +
  1.1487 +NSS_EXTERN PRStatus
  1.1488 +NSSTrustDomain_IsTokenEnabled
  1.1489 +(
  1.1490 +  NSSTrustDomain *td,
  1.1491 +  NSSToken *token,
  1.1492 +  NSSError *whyOpt
  1.1493 +);
  1.1494 +
  1.1495 +/*
  1.1496 + * NSSTrustDomain_FindSlotByName
  1.1497 + *
  1.1498 + */
  1.1499 +
  1.1500 +NSS_EXTERN NSSSlot *
  1.1501 +NSSTrustDomain_FindSlotByName
  1.1502 +(
  1.1503 +  NSSTrustDomain *td,
  1.1504 +  NSSUTF8 *slotName
  1.1505 +);
  1.1506 +
  1.1507 +/*
  1.1508 + * NSSTrustDomain_FindTokenByName
  1.1509 + *
  1.1510 + */
  1.1511 +
  1.1512 +NSS_EXTERN NSSToken *
  1.1513 +NSSTrustDomain_FindTokenByName
  1.1514 +(
  1.1515 +  NSSTrustDomain *td,
  1.1516 +  NSSUTF8 *tokenName
  1.1517 +);
  1.1518 +
  1.1519 +/*
  1.1520 + * NSSTrustDomain_FindTokenBySlotName
  1.1521 + *
  1.1522 + */
  1.1523 +
  1.1524 +NSS_EXTERN NSSToken *
  1.1525 +NSSTrustDomain_FindTokenBySlotName
  1.1526 +(
  1.1527 +  NSSTrustDomain *td,
  1.1528 +  NSSUTF8 *slotName
  1.1529 +);
  1.1530 +
  1.1531 +/*
  1.1532 + * NSSTrustDomain_FindBestTokenForAlgorithm
  1.1533 + *
  1.1534 + */
  1.1535 +
  1.1536 +NSS_EXTERN NSSToken *
  1.1537 +NSSTrustDomain_FindTokenForAlgorithm
  1.1538 +(
  1.1539 +  NSSTrustDomain *td,
  1.1540 +  NSSOID *algorithm
  1.1541 +);
  1.1542 +
  1.1543 +/*
  1.1544 + * NSSTrustDomain_FindBestTokenForAlgorithms
  1.1545 + *
  1.1546 + */
  1.1547 +
  1.1548 +NSS_EXTERN NSSToken *
  1.1549 +NSSTrustDomain_FindBestTokenForAlgorithms
  1.1550 +(
  1.1551 +  NSSTrustDomain *td,
  1.1552 +  NSSOID *algorithms[], /* may be null-terminated */
  1.1553 +  PRUint32 nAlgorithmsOpt /* limits the array if nonzero */
  1.1554 +);
  1.1555 +
  1.1556 +/*
  1.1557 + * NSSTrustDomain_Login
  1.1558 + *
  1.1559 + */
  1.1560 +
  1.1561 +NSS_EXTERN PRStatus
  1.1562 +NSSTrustDomain_Login
  1.1563 +(
  1.1564 +  NSSTrustDomain *td,
  1.1565 +  NSSCallback *uhhOpt
  1.1566 +);
  1.1567 +
  1.1568 +/*
  1.1569 + * NSSTrustDomain_Logout
  1.1570 + *
  1.1571 + */
  1.1572 +
  1.1573 +NSS_EXTERN PRStatus
  1.1574 +NSSTrustDomain_Logout
  1.1575 +(
  1.1576 +  NSSTrustDomain *td
  1.1577 +);
  1.1578 +
  1.1579 +/* Importing things */
  1.1580 +
  1.1581 +/*
  1.1582 + * NSSTrustDomain_ImportCertificate
  1.1583 + *
  1.1584 + * The implementation will pull some data out of the certificate
  1.1585 + * (e.g. e-mail address) for use in pkcs#11 object attributes.
  1.1586 + */
  1.1587 +
  1.1588 +NSS_EXTERN NSSCertificate *
  1.1589 +NSSTrustDomain_ImportCertificate
  1.1590 +(
  1.1591 +  NSSTrustDomain *td,
  1.1592 +  NSSCertificate *c
  1.1593 +);
  1.1594 +
  1.1595 +/*
  1.1596 + * NSSTrustDomain_ImportPKIXCertificate
  1.1597 + *
  1.1598 + */
  1.1599 +
  1.1600 +NSS_EXTERN NSSCertificate *
  1.1601 +NSSTrustDomain_ImportPKIXCertificate
  1.1602 +(
  1.1603 +  NSSTrustDomain *td,
  1.1604 +  /* declared as a struct until these "data types" are defined */
  1.1605 +  struct NSSPKIXCertificateStr *pc
  1.1606 +);
  1.1607 +
  1.1608 +/*
  1.1609 + * NSSTrustDomain_ImportEncodedCertificate
  1.1610 + *
  1.1611 + * Imports any type of certificate we support.
  1.1612 + */
  1.1613 +
  1.1614 +NSS_EXTERN NSSCertificate *
  1.1615 +NSSTrustDomain_ImportEncodedCertificate
  1.1616 +(
  1.1617 +  NSSTrustDomain *td,
  1.1618 +  NSSBER *ber
  1.1619 +);
  1.1620 +
  1.1621 +/*
  1.1622 + * NSSTrustDomain_ImportEncodedCertificateChain
  1.1623 + *
  1.1624 + * If you just want the leaf, pass in a maximum of one.
  1.1625 + */
  1.1626 +
  1.1627 +NSS_EXTERN NSSCertificate **
  1.1628 +NSSTrustDomain_ImportEncodedCertificateChain
  1.1629 +(
  1.1630 +  NSSTrustDomain *td,
  1.1631 +  NSSBER *ber,
  1.1632 +  NSSCertificate *rvOpt[],
  1.1633 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1634 +  NSSArena *arenaOpt
  1.1635 +);
  1.1636 +
  1.1637 +/*
  1.1638 + * NSSTrustDomain_ImportEncodedPrivateKey
  1.1639 + *
  1.1640 + */
  1.1641 +
  1.1642 +NSS_EXTERN NSSPrivateKey *
  1.1643 +NSSTrustDomain_ImportEncodedPrivateKey
  1.1644 +(
  1.1645 +  NSSTrustDomain *td,
  1.1646 +  NSSBER *ber,
  1.1647 +  NSSItem *passwordOpt, /* NULL will cause a callback */
  1.1648 +  NSSCallback *uhhOpt,
  1.1649 +  NSSToken *destination
  1.1650 +);
  1.1651 +
  1.1652 +/*
  1.1653 + * NSSTrustDomain_ImportEncodedPublicKey
  1.1654 + *
  1.1655 + */
  1.1656 +
  1.1657 +NSS_EXTERN NSSPublicKey *
  1.1658 +NSSTrustDomain_ImportEncodedPublicKey
  1.1659 +(
  1.1660 +  NSSTrustDomain *td,
  1.1661 +  NSSBER *ber
  1.1662 +);
  1.1663 +
  1.1664 +/* Other importations: S/MIME capabilities */
  1.1665 +
  1.1666 +/*
  1.1667 + * NSSTrustDomain_FindBestCertificateByNickname
  1.1668 + *
  1.1669 + */
  1.1670 +
  1.1671 +NSS_EXTERN NSSCertificate *
  1.1672 +NSSTrustDomain_FindBestCertificateByNickname
  1.1673 +(
  1.1674 +  NSSTrustDomain *td,
  1.1675 +  const NSSUTF8 *name,
  1.1676 +  NSSTime *timeOpt, /* NULL for "now" */
  1.1677 +  NSSUsage *usage,
  1.1678 +  NSSPolicies *policiesOpt /* NULL for none */
  1.1679 +);
  1.1680 +
  1.1681 +/*
  1.1682 + * NSSTrustDomain_FindCertificatesByNickname
  1.1683 + *
  1.1684 + */
  1.1685 +
  1.1686 +NSS_EXTERN NSSCertificate **
  1.1687 +NSSTrustDomain_FindCertificatesByNickname
  1.1688 +(
  1.1689 +  NSSTrustDomain *td,
  1.1690 +  NSSUTF8 *name,
  1.1691 +  NSSCertificate *rvOpt[],
  1.1692 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1693 +  NSSArena *arenaOpt
  1.1694 +);
  1.1695 +
  1.1696 +/*
  1.1697 + * NSSTrustDomain_FindCertificateByIssuerAndSerialNumber
  1.1698 + *
  1.1699 + */
  1.1700 +
  1.1701 +NSS_EXTERN NSSCertificate *
  1.1702 +NSSTrustDomain_FindCertificateByIssuerAndSerialNumber
  1.1703 +(
  1.1704 +  NSSTrustDomain *td,
  1.1705 +  NSSDER *issuer,
  1.1706 +  NSSDER *serialNumber
  1.1707 +);
  1.1708 +
  1.1709 +/*
  1.1710 + * NSSTrustDomain_FindCertificatesByIssuerAndSerialNumber
  1.1711 + *
  1.1712 + * Theoretically, this should never happen.  However, some companies
  1.1713 + * we know have issued duplicate certificates with the same issuer
  1.1714 + * and serial number.  Do we just ignore them?  I'm thinking yes.
  1.1715 + */
  1.1716 +
  1.1717 +/*
  1.1718 + * NSSTrustDomain_FindBestCertificateBySubject
  1.1719 + *
  1.1720 + * This does not search through alternate names hidden in extensions.
  1.1721 + */
  1.1722 +
  1.1723 +NSS_EXTERN NSSCertificate *
  1.1724 +NSSTrustDomain_FindBestCertificateBySubject
  1.1725 +(
  1.1726 +  NSSTrustDomain *td,
  1.1727 +  NSSDER /*NSSUTF8*/ *subject,
  1.1728 +  NSSTime *timeOpt,
  1.1729 +  NSSUsage *usage,
  1.1730 +  NSSPolicies *policiesOpt
  1.1731 +);
  1.1732 +
  1.1733 +/*
  1.1734 + * NSSTrustDomain_FindCertificatesBySubject
  1.1735 + *
  1.1736 + * This does not search through alternate names hidden in extensions.
  1.1737 + */
  1.1738 +
  1.1739 +NSS_EXTERN NSSCertificate **
  1.1740 +NSSTrustDomain_FindCertificatesBySubject
  1.1741 +(
  1.1742 +  NSSTrustDomain *td,
  1.1743 +  NSSDER /*NSSUTF8*/ *subject,
  1.1744 +  NSSCertificate *rvOpt[],
  1.1745 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1746 +  NSSArena *arenaOpt
  1.1747 +);
  1.1748 +
  1.1749 +/*
  1.1750 + * NSSTrustDomain_FindBestCertificateByNameComponents
  1.1751 + *
  1.1752 + * This call does try several tricks, including a pseudo pkcs#11 
  1.1753 + * attribute for the ldap module to try as a query.  Eventually
  1.1754 + * this call falls back to a traversal if that's what's required.
  1.1755 + * It will search through alternate names hidden in extensions.
  1.1756 + */
  1.1757 +
  1.1758 +NSS_EXTERN NSSCertificate *
  1.1759 +NSSTrustDomain_FindBestCertificateByNameComponents
  1.1760 +(
  1.1761 +  NSSTrustDomain *td,
  1.1762 +  NSSUTF8 *nameComponents,
  1.1763 +  NSSTime *timeOpt,
  1.1764 +  NSSUsage *usage,
  1.1765 +  NSSPolicies *policiesOpt
  1.1766 +);
  1.1767 +
  1.1768 +/*
  1.1769 + * NSSTrustDomain_FindCertificatesByNameComponents
  1.1770 + *
  1.1771 + * This call, too, tries several tricks.  It will stop on the first
  1.1772 + * attempt that generates results, so it won't e.g. traverse the
  1.1773 + * entire ldap database.
  1.1774 + */
  1.1775 +
  1.1776 +NSS_EXTERN NSSCertificate **
  1.1777 +NSSTrustDomain_FindCertificatesByNameComponents
  1.1778 +(
  1.1779 +  NSSTrustDomain *td,
  1.1780 +  NSSUTF8 *nameComponents,
  1.1781 +  NSSCertificate *rvOpt[],
  1.1782 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1783 +  NSSArena *arenaOpt
  1.1784 +);
  1.1785 +
  1.1786 +/*
  1.1787 + * NSSTrustDomain_FindCertificateByEncodedCertificate
  1.1788 + *
  1.1789 + */
  1.1790 +
  1.1791 +NSS_EXTERN NSSCertificate *
  1.1792 +NSSTrustDomain_FindCertificateByEncodedCertificate
  1.1793 +(
  1.1794 +  NSSTrustDomain *td,
  1.1795 +  NSSBER *encodedCertificate
  1.1796 +);
  1.1797 +
  1.1798 +/*
  1.1799 + * NSSTrustDomain_FindBestCertificateByEmail
  1.1800 + *
  1.1801 + */
  1.1802 +
  1.1803 +NSS_EXTERN NSSCertificate *
  1.1804 +NSSTrustDomain_FindCertificateByEmail
  1.1805 +(
  1.1806 +  NSSTrustDomain *td,
  1.1807 +  NSSASCII7 *email,
  1.1808 +  NSSTime *timeOpt,
  1.1809 +  NSSUsage *usage,
  1.1810 +  NSSPolicies *policiesOpt
  1.1811 +);
  1.1812 +
  1.1813 +/*
  1.1814 + * NSSTrustDomain_FindCertificatesByEmail
  1.1815 + *
  1.1816 + */
  1.1817 +
  1.1818 +NSS_EXTERN NSSCertificate **
  1.1819 +NSSTrustDomain_FindCertificatesByEmail
  1.1820 +(
  1.1821 +  NSSTrustDomain *td,
  1.1822 +  NSSASCII7 *email,
  1.1823 +  NSSCertificate *rvOpt[],
  1.1824 +  PRUint32 maximumOpt, /* 0 for no max */
  1.1825 +  NSSArena *arenaOpt
  1.1826 +);
  1.1827 +
  1.1828 +/*
  1.1829 + * NSSTrustDomain_FindCertificateByOCSPHash
  1.1830 + *
  1.1831 + * There can be only one.
  1.1832 + */
  1.1833 +
  1.1834 +NSS_EXTERN NSSCertificate *
  1.1835 +NSSTrustDomain_FindCertificateByOCSPHash
  1.1836 +(
  1.1837 +  NSSTrustDomain *td,
  1.1838 +  NSSItem *hash
  1.1839 +);
  1.1840 +
  1.1841 +/*
  1.1842 + * NSSTrustDomain_TraverseCertificates
  1.1843 + *
  1.1844 + * This function descends from one in older versions of NSS which
  1.1845 + * traverses the certs in the permanent database.  That function
  1.1846 + * was used to implement selection routines, but was directly
  1.1847 + * available too.  Trust domains are going to contain a lot more
  1.1848 + * certs now (e.g., an ldap server), so we'd really like to
  1.1849 + * discourage traversal.  Thus for now, this is commented out.
  1.1850 + * If it's needed, let's look at the situation more closely to
  1.1851 + * find out what the actual requirements are.
  1.1852 + */
  1.1853 + 
  1.1854 +/* For now, adding this function.  This may only be for debugging
  1.1855 + * purposes.
  1.1856 + * Perhaps some equivalent function, on a specified token, will be
  1.1857 + * needed in a "friend" header file?
  1.1858 + */
  1.1859 +NSS_EXTERN PRStatus *
  1.1860 +NSSTrustDomain_TraverseCertificates
  1.1861 +(
  1.1862 +  NSSTrustDomain *td,
  1.1863 +  PRStatus (*callback)(NSSCertificate *c, void *arg),
  1.1864 +  void *arg
  1.1865 +);
  1.1866 +
  1.1867 +/*
  1.1868 + * NSSTrustDomain_FindBestUserCertificate
  1.1869 + *
  1.1870 + */
  1.1871 +
  1.1872 +NSS_EXTERN NSSCertificate *
  1.1873 +NSSTrustDomain_FindBestUserCertificate
  1.1874 +(
  1.1875 +  NSSTrustDomain *td,
  1.1876 +  NSSTime *timeOpt,
  1.1877 +  NSSUsage *usage,
  1.1878 +  NSSPolicies *policiesOpt
  1.1879 +);
  1.1880 +
  1.1881 +/*
  1.1882 + * NSSTrustDomain_FindUserCertificates
  1.1883 + *
  1.1884 + */
  1.1885 +
  1.1886 +NSS_EXTERN NSSCertificate **
  1.1887 +NSSTrustDomain_FindUserCertificates
  1.1888 +(
  1.1889 +  NSSTrustDomain *td,
  1.1890 +  NSSTime *timeOpt,
  1.1891 +  NSSUsage *usageOpt,
  1.1892 +  NSSPolicies *policiesOpt,
  1.1893 +  NSSCertificate **rvOpt,
  1.1894 +  PRUint32 rvLimit, /* zero for no limit */
  1.1895 +  NSSArena *arenaOpt
  1.1896 +);
  1.1897 +
  1.1898 +/*
  1.1899 + * NSSTrustDomain_FindBestUserCertificateForSSLClientAuth
  1.1900 + *
  1.1901 + */
  1.1902 +
  1.1903 +NSS_EXTERN NSSCertificate *
  1.1904 +NSSTrustDomain_FindBestUserCertificateForSSLClientAuth
  1.1905 +(
  1.1906 +  NSSTrustDomain *td,
  1.1907 +  NSSUTF8 *sslHostOpt,
  1.1908 +  NSSDER *rootCAsOpt[], /* null pointer for none */
  1.1909 +  PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1.1910 +  NSSAlgorithmAndParameters *apOpt,
  1.1911 +  NSSPolicies *policiesOpt
  1.1912 +);
  1.1913 +
  1.1914 +/*
  1.1915 + * NSSTrustDomain_FindUserCertificatesForSSLClientAuth
  1.1916 + *
  1.1917 + */
  1.1918 +
  1.1919 +NSS_EXTERN NSSCertificate **
  1.1920 +NSSTrustDomain_FindUserCertificatesForSSLClientAuth
  1.1921 +(
  1.1922 +  NSSTrustDomain *td,
  1.1923 +  NSSUTF8 *sslHostOpt,
  1.1924 +  NSSDER *rootCAsOpt[], /* null pointer for none */
  1.1925 +  PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1.1926 +  NSSAlgorithmAndParameters *apOpt,
  1.1927 +  NSSPolicies *policiesOpt,
  1.1928 +  NSSCertificate **rvOpt,
  1.1929 +  PRUint32 rvLimit, /* zero for no limit */
  1.1930 +  NSSArena *arenaOpt
  1.1931 +);
  1.1932 +
  1.1933 +/*
  1.1934 + * NSSTrustDomain_FindBestUserCertificateForEmailSigning
  1.1935 + *
  1.1936 + */
  1.1937 +
  1.1938 +NSS_EXTERN NSSCertificate *
  1.1939 +NSSTrustDomain_FindBestUserCertificateForEmailSigning
  1.1940 +(
  1.1941 +  NSSTrustDomain *td,
  1.1942 +  NSSASCII7 *signerOpt,
  1.1943 +  NSSASCII7 *recipientOpt,
  1.1944 +  /* anything more here? */
  1.1945 +  NSSAlgorithmAndParameters *apOpt,
  1.1946 +  NSSPolicies *policiesOpt
  1.1947 +);
  1.1948 +
  1.1949 +/*
  1.1950 + * NSSTrustDomain_FindUserCertificatesForEmailSigning
  1.1951 + *
  1.1952 + */
  1.1953 +
  1.1954 +NSS_EXTERN NSSCertificate **
  1.1955 +NSSTrustDomain_FindUserCertificatesForEmailSigning
  1.1956 +(
  1.1957 +  NSSTrustDomain *td,
  1.1958 +  NSSASCII7 *signerOpt,
  1.1959 +  NSSASCII7 *recipientOpt,
  1.1960 +  /* anything more here? */
  1.1961 +  NSSAlgorithmAndParameters *apOpt,
  1.1962 +  NSSPolicies *policiesOpt,
  1.1963 +  NSSCertificate **rvOpt,
  1.1964 +  PRUint32 rvLimit, /* zero for no limit */
  1.1965 +  NSSArena *arenaOpt
  1.1966 +);
  1.1967 +
  1.1968 +/*
  1.1969 + * Here is where we'd add more Find[Best]UserCertificate[s]For<usage>
  1.1970 + * routines.
  1.1971 + */
  1.1972 +
  1.1973 +/* Private Keys */
  1.1974 +
  1.1975 +/*
  1.1976 + * NSSTrustDomain_GenerateKeyPair
  1.1977 + *
  1.1978 + * Creates persistant objects.  If you want session objects, use
  1.1979 + * NSSCryptoContext_GenerateKeyPair.  The destination token is where
  1.1980 + * the keys are stored.  If that token can do the required math, then
  1.1981 + * that's where the keys are generated too.  Otherwise, the keys are
  1.1982 + * generated elsewhere and moved to that token.
  1.1983 + */
  1.1984 +
  1.1985 +NSS_EXTERN PRStatus
  1.1986 +NSSTrustDomain_GenerateKeyPair
  1.1987 +(
  1.1988 +  NSSTrustDomain *td,
  1.1989 +  NSSAlgorithmAndParameters *ap,
  1.1990 +  NSSPrivateKey **pvkOpt,
  1.1991 +  NSSPublicKey **pbkOpt,
  1.1992 +  PRBool privateKeyIsSensitive,
  1.1993 +  NSSToken *destination,
  1.1994 +  NSSCallback *uhhOpt
  1.1995 +);
  1.1996 +
  1.1997 +/*
  1.1998 + * NSSTrustDomain_TraversePrivateKeys
  1.1999 + *
  1.2000 + * 
  1.2001 + * NSS_EXTERN PRStatus *
  1.2002 + * NSSTrustDomain_TraversePrivateKeys
  1.2003 + * (
  1.2004 + *   NSSTrustDomain *td,
  1.2005 + *   PRStatus (*callback)(NSSPrivateKey *vk, void *arg),
  1.2006 + *   void *arg
  1.2007 + * );
  1.2008 + */
  1.2009 +
  1.2010 +/* Symmetric Keys */
  1.2011 +
  1.2012 +/*
  1.2013 + * NSSTrustDomain_GenerateSymmetricKey
  1.2014 + *
  1.2015 + */
  1.2016 +
  1.2017 +NSS_EXTERN NSSSymmetricKey *
  1.2018 +NSSTrustDomain_GenerateSymmetricKey
  1.2019 +(
  1.2020 +  NSSTrustDomain *td,
  1.2021 +  NSSAlgorithmAndParameters *ap,
  1.2022 +  PRUint32 keysize,
  1.2023 +  NSSToken *destination,
  1.2024 +  NSSCallback *uhhOpt
  1.2025 +);
  1.2026 +
  1.2027 +/*
  1.2028 + * NSSTrustDomain_GenerateSymmetricKeyFromPassword
  1.2029 + *
  1.2030 + */
  1.2031 +
  1.2032 +NSS_EXTERN NSSSymmetricKey *
  1.2033 +NSSTrustDomain_GenerateSymmetricKeyFromPassword
  1.2034 +(
  1.2035 +  NSSTrustDomain *td,
  1.2036 +  NSSAlgorithmAndParameters *ap,
  1.2037 +  NSSUTF8 *passwordOpt, /* if null, prompt */
  1.2038 +  NSSToken *destinationOpt,
  1.2039 +  NSSCallback *uhhOpt
  1.2040 +);
  1.2041 +
  1.2042 +/*
  1.2043 + * NSSTrustDomain_FindSymmetricKeyByAlgorithm
  1.2044 + *
  1.2045 + * Is this still needed?
  1.2046 + * 
  1.2047 + * NSS_EXTERN NSSSymmetricKey *
  1.2048 + * NSSTrustDomain_FindSymmetricKeyByAlgorithm
  1.2049 + * (
  1.2050 + *   NSSTrustDomain *td,
  1.2051 + *   NSSOID *algorithm,
  1.2052 + *   NSSCallback *uhhOpt
  1.2053 + * );
  1.2054 + */
  1.2055 +
  1.2056 +/*
  1.2057 + * NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID
  1.2058 + *
  1.2059 + */
  1.2060 +
  1.2061 +NSS_EXTERN NSSSymmetricKey *
  1.2062 +NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID
  1.2063 +(
  1.2064 +  NSSTrustDomain *td,
  1.2065 +  NSSOID *algorithm,
  1.2066 +  NSSItem *keyID,
  1.2067 +  NSSCallback *uhhOpt
  1.2068 +);
  1.2069 +
  1.2070 +/*
  1.2071 + * NSSTrustDomain_TraverseSymmetricKeys
  1.2072 + *
  1.2073 + * 
  1.2074 + * NSS_EXTERN PRStatus *
  1.2075 + * NSSTrustDomain_TraverseSymmetricKeys
  1.2076 + * (
  1.2077 + *   NSSTrustDomain *td,
  1.2078 + *   PRStatus (*callback)(NSSSymmetricKey *mk, void *arg),
  1.2079 + *   void *arg
  1.2080 + * );
  1.2081 + */
  1.2082 +
  1.2083 +/*
  1.2084 + * NSSTrustDomain_CreateCryptoContext
  1.2085 + *
  1.2086 + * If a callback object is specified, it becomes the for the crypto
  1.2087 + * context; otherwise, this trust domain's default (if any) is
  1.2088 + * inherited.
  1.2089 + */
  1.2090 +
  1.2091 +NSS_EXTERN NSSCryptoContext *
  1.2092 +NSSTrustDomain_CreateCryptoContext
  1.2093 +(
  1.2094 +  NSSTrustDomain *td,
  1.2095 +  NSSCallback *uhhOpt
  1.2096 +);
  1.2097 +
  1.2098 +/*
  1.2099 + * NSSTrustDomain_CreateCryptoContextForAlgorithm
  1.2100 + *
  1.2101 + */
  1.2102 +
  1.2103 +NSS_EXTERN NSSCryptoContext *
  1.2104 +NSSTrustDomain_CreateCryptoContextForAlgorithm
  1.2105 +(
  1.2106 +  NSSTrustDomain *td,
  1.2107 +  NSSOID *algorithm
  1.2108 +);
  1.2109 +
  1.2110 +/*
  1.2111 + * NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters
  1.2112 + *
  1.2113 + */
  1.2114 +
  1.2115 +NSS_EXTERN NSSCryptoContext *
  1.2116 +NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters
  1.2117 +(
  1.2118 +  NSSTrustDomain *td,
  1.2119 +  NSSAlgorithmAndParameters *ap
  1.2120 +);
  1.2121 +
  1.2122 +/* find/traverse other objects, e.g. s/mime profiles */
  1.2123 +
  1.2124 +/*
  1.2125 + * NSSCryptoContext
  1.2126 + *
  1.2127 + * A crypto context is sort of a short-term snapshot of a trust domain,
  1.2128 + * used for the life of "one crypto operation."  You can also think of
  1.2129 + * it as a "temporary database."
  1.2130 + * 
  1.2131 + * Just about all of the things you can do with a trust domain -- importing
  1.2132 + * or creating certs, keys, etc. -- can be done with a crypto context.
  1.2133 + * The difference is that the objects will be temporary ("session") objects.
  1.2134 + * 
  1.2135 + * Also, if the context was created for a key, cert, and/or algorithm; or
  1.2136 + * if such objects have been "associated" with the context, then the context
  1.2137 + * can do everything the keys can, like crypto operations.
  1.2138 + * 
  1.2139 + * And finally, because it keeps the state of the crypto operations, it
  1.2140 + * can do streaming crypto ops.
  1.2141 + */
  1.2142 +
  1.2143 +/*
  1.2144 + * NSSTrustDomain_Destroy
  1.2145 + *
  1.2146 + */
  1.2147 +
  1.2148 +NSS_EXTERN PRStatus
  1.2149 +NSSCryptoContext_Destroy
  1.2150 +(
  1.2151 +  NSSCryptoContext *cc
  1.2152 +);
  1.2153 +
  1.2154 +/* establishing a default callback */
  1.2155 +
  1.2156 +/*
  1.2157 + * NSSCryptoContext_SetDefaultCallback
  1.2158 + *
  1.2159 + */
  1.2160 +
  1.2161 +NSS_EXTERN PRStatus
  1.2162 +NSSCryptoContext_SetDefaultCallback
  1.2163 +(
  1.2164 +  NSSCryptoContext *cc,
  1.2165 +  NSSCallback *newCallback,
  1.2166 +  NSSCallback **oldCallbackOpt
  1.2167 +);
  1.2168 +
  1.2169 +/*
  1.2170 + * NSSCryptoContext_GetDefaultCallback
  1.2171 + *
  1.2172 + */
  1.2173 +
  1.2174 +NSS_EXTERN NSSCallback *
  1.2175 +NSSCryptoContext_GetDefaultCallback
  1.2176 +(
  1.2177 +  NSSCryptoContext *cc,
  1.2178 +  PRStatus *statusOpt
  1.2179 +);
  1.2180 +
  1.2181 +/*
  1.2182 + * NSSCryptoContext_GetTrustDomain
  1.2183 + *
  1.2184 + */
  1.2185 +
  1.2186 +NSS_EXTERN NSSTrustDomain *
  1.2187 +NSSCryptoContext_GetTrustDomain
  1.2188 +(
  1.2189 +  NSSCryptoContext *cc
  1.2190 +);
  1.2191 +
  1.2192 +/* AddModule, etc: should we allow "temporary" changes here? */
  1.2193 +/* DisableToken, etc: ditto */
  1.2194 +/* Ordering of tokens? */
  1.2195 +/* Finding slots+token etc. */
  1.2196 +/* login+logout */
  1.2197 +
  1.2198 +/* Importing things */
  1.2199 +
  1.2200 +/*
  1.2201 + * NSSCryptoContext_FindOrImportCertificate
  1.2202 + *
  1.2203 + * If the certificate store already contains this DER cert, return the 
  1.2204 + * address of the matching NSSCertificate that is already in the store,
  1.2205 + * and bump its reference count.
  1.2206 + *
  1.2207 + * If this DER cert is NOT already in the store, then add the new
  1.2208 + * NSSCertificate to the store and bump its reference count, 
  1.2209 + * then return its address. 
  1.2210 + *
  1.2211 + * if this DER cert is not in the store and cannot be added to it, 
  1.2212 + * return NULL;
  1.2213 + *
  1.2214 + * Record the associated crypto context in the certificate.
  1.2215 + */
  1.2216 +
  1.2217 +NSS_EXTERN NSSCertificate *
  1.2218 +NSSCryptoContext_FindOrImportCertificate (
  1.2219 +  NSSCryptoContext *cc,
  1.2220 +  NSSCertificate *c
  1.2221 +);
  1.2222 +
  1.2223 +/*
  1.2224 + * NSSCryptoContext_ImportPKIXCertificate
  1.2225 + *
  1.2226 + */
  1.2227 +
  1.2228 +NSS_EXTERN NSSCertificate *
  1.2229 +NSSCryptoContext_ImportPKIXCertificate
  1.2230 +(
  1.2231 +  NSSCryptoContext *cc,
  1.2232 +  struct NSSPKIXCertificateStr *pc
  1.2233 +);
  1.2234 +
  1.2235 +/*
  1.2236 + * NSSCryptoContext_ImportEncodedCertificate
  1.2237 + *
  1.2238 + */
  1.2239 +
  1.2240 +NSS_EXTERN NSSCertificate *
  1.2241 +NSSCryptoContext_ImportEncodedCertificate
  1.2242 +(
  1.2243 +  NSSCryptoContext *cc,
  1.2244 +  NSSBER *ber
  1.2245 +);
  1.2246 +
  1.2247 +/*
  1.2248 + * NSSCryptoContext_ImportEncodedPKIXCertificateChain
  1.2249 + *
  1.2250 + */
  1.2251 +
  1.2252 +NSS_EXTERN PRStatus
  1.2253 +NSSCryptoContext_ImportEncodedPKIXCertificateChain
  1.2254 +(
  1.2255 +  NSSCryptoContext *cc,
  1.2256 +  NSSBER *ber
  1.2257 +);
  1.2258 +
  1.2259 +/* Other importations: S/MIME capabilities
  1.2260 + */
  1.2261 +
  1.2262 +/*
  1.2263 + * NSSCryptoContext_FindBestCertificateByNickname
  1.2264 + *
  1.2265 + */
  1.2266 +
  1.2267 +NSS_EXTERN NSSCertificate *
  1.2268 +NSSCryptoContext_FindBestCertificateByNickname
  1.2269 +(
  1.2270 +  NSSCryptoContext *cc,
  1.2271 +  const NSSUTF8 *name,
  1.2272 +  NSSTime *timeOpt, /* NULL for "now" */
  1.2273 +  NSSUsage *usage,
  1.2274 +  NSSPolicies *policiesOpt /* NULL for none */
  1.2275 +);
  1.2276 +
  1.2277 +/*
  1.2278 + * NSSCryptoContext_FindCertificatesByNickname
  1.2279 + *
  1.2280 + */
  1.2281 +
  1.2282 +NSS_EXTERN NSSCertificate **
  1.2283 +NSSCryptoContext_FindCertificatesByNickname
  1.2284 +(
  1.2285 +  NSSCryptoContext *cc,
  1.2286 +  NSSUTF8 *name,
  1.2287 +  NSSCertificate *rvOpt[],
  1.2288 +  PRUint32 maximumOpt, /* 0 for no max */
  1.2289 +  NSSArena *arenaOpt
  1.2290 +);
  1.2291 +
  1.2292 +/*
  1.2293 + * NSSCryptoContext_FindCertificateByIssuerAndSerialNumber
  1.2294 + *
  1.2295 + */
  1.2296 +
  1.2297 +NSS_EXTERN NSSCertificate *
  1.2298 +NSSCryptoContext_FindCertificateByIssuerAndSerialNumber
  1.2299 +(
  1.2300 +  NSSCryptoContext *cc,
  1.2301 +  NSSDER *issuer,
  1.2302 +  NSSDER *serialNumber
  1.2303 +);
  1.2304 +
  1.2305 +/*
  1.2306 + * NSSCryptoContext_FindBestCertificateBySubject
  1.2307 + *
  1.2308 + * This does not search through alternate names hidden in extensions.
  1.2309 + */
  1.2310 +
  1.2311 +NSS_EXTERN NSSCertificate *
  1.2312 +NSSCryptoContext_FindBestCertificateBySubject
  1.2313 +(
  1.2314 +  NSSCryptoContext *cc,
  1.2315 +  NSSDER /*NSSUTF8*/ *subject,
  1.2316 +  NSSTime *timeOpt,
  1.2317 +  NSSUsage *usage,
  1.2318 +  NSSPolicies *policiesOpt
  1.2319 +);
  1.2320 +
  1.2321 +/*
  1.2322 + * NSSCryptoContext_FindCertificatesBySubject
  1.2323 + *
  1.2324 + * This does not search through alternate names hidden in extensions.
  1.2325 + */
  1.2326 +
  1.2327 +NSS_EXTERN NSSCertificate **
  1.2328 +NSSCryptoContext_FindCertificatesBySubject
  1.2329 +(
  1.2330 +  NSSCryptoContext *cc,
  1.2331 +  NSSDER /*NSSUTF8*/ *subject,
  1.2332 +  NSSCertificate *rvOpt[],
  1.2333 +  PRUint32 maximumOpt, /* 0 for no max */
  1.2334 +  NSSArena *arenaOpt
  1.2335 +);
  1.2336 +
  1.2337 +/*
  1.2338 + * NSSCryptoContext_FindBestCertificateByNameComponents
  1.2339 + *
  1.2340 + * This call does try several tricks, including a pseudo pkcs#11 
  1.2341 + * attribute for the ldap module to try as a query.  Eventually
  1.2342 + * this call falls back to a traversal if that's what's required.
  1.2343 + * It will search through alternate names hidden in extensions.
  1.2344 + */
  1.2345 +
  1.2346 +NSS_EXTERN NSSCertificate *
  1.2347 +NSSCryptoContext_FindBestCertificateByNameComponents
  1.2348 +(
  1.2349 +  NSSCryptoContext *cc,
  1.2350 +  NSSUTF8 *nameComponents,
  1.2351 +  NSSTime *timeOpt,
  1.2352 +  NSSUsage *usage,
  1.2353 +  NSSPolicies *policiesOpt
  1.2354 +);
  1.2355 +
  1.2356 +/*
  1.2357 + * NSSCryptoContext_FindCertificatesByNameComponents
  1.2358 + *
  1.2359 + * This call, too, tries several tricks.  It will stop on the first
  1.2360 + * attempt that generates results, so it won't e.g. traverse the
  1.2361 + * entire ldap database.
  1.2362 + */
  1.2363 +
  1.2364 +NSS_EXTERN NSSCertificate **
  1.2365 +NSSCryptoContext_FindCertificatesByNameComponents
  1.2366 +(
  1.2367 +  NSSCryptoContext *cc,
  1.2368 +  NSSUTF8 *nameComponents,
  1.2369 +  NSSCertificate *rvOpt[],
  1.2370 +  PRUint32 maximumOpt, /* 0 for no max */
  1.2371 +  NSSArena *arenaOpt
  1.2372 +);
  1.2373 +
  1.2374 +/*
  1.2375 + * NSSCryptoContext_FindCertificateByEncodedCertificate
  1.2376 + *
  1.2377 + */
  1.2378 +
  1.2379 +NSS_EXTERN NSSCertificate *
  1.2380 +NSSCryptoContext_FindCertificateByEncodedCertificate
  1.2381 +(
  1.2382 +  NSSCryptoContext *cc,
  1.2383 +  NSSBER *encodedCertificate
  1.2384 +);
  1.2385 +
  1.2386 +/*
  1.2387 + * NSSCryptoContext_FindBestCertificateByEmail
  1.2388 + *
  1.2389 + */
  1.2390 +
  1.2391 +NSS_EXTERN NSSCertificate *
  1.2392 +NSSCryptoContext_FindBestCertificateByEmail
  1.2393 +(
  1.2394 +  NSSCryptoContext *cc,
  1.2395 +  NSSASCII7 *email,
  1.2396 +  NSSTime *timeOpt,
  1.2397 +  NSSUsage *usage,
  1.2398 +  NSSPolicies *policiesOpt
  1.2399 +);
  1.2400 +
  1.2401 +/*
  1.2402 + * NSSCryptoContext_FindCertificatesByEmail
  1.2403 + *
  1.2404 + */
  1.2405 +
  1.2406 +NSS_EXTERN NSSCertificate **
  1.2407 +NSSCryptoContext_FindCertificatesByEmail
  1.2408 +(
  1.2409 +  NSSCryptoContext *cc,
  1.2410 +  NSSASCII7 *email,
  1.2411 +  NSSCertificate *rvOpt[],
  1.2412 +  PRUint32 maximumOpt, /* 0 for no max */
  1.2413 +  NSSArena *arenaOpt
  1.2414 +);
  1.2415 +
  1.2416 +/*
  1.2417 + * NSSCryptoContext_FindCertificateByOCSPHash
  1.2418 + *
  1.2419 + */
  1.2420 +
  1.2421 +NSS_EXTERN NSSCertificate *
  1.2422 +NSSCryptoContext_FindCertificateByOCSPHash
  1.2423 +(
  1.2424 +  NSSCryptoContext *cc,
  1.2425 +  NSSItem *hash
  1.2426 +);
  1.2427 +
  1.2428 +/*
  1.2429 + * NSSCryptoContext_TraverseCertificates
  1.2430 + *
  1.2431 + * 
  1.2432 + * NSS_EXTERN PRStatus *
  1.2433 + * NSSCryptoContext_TraverseCertificates
  1.2434 + * (
  1.2435 + *   NSSCryptoContext *cc,
  1.2436 + *   PRStatus (*callback)(NSSCertificate *c, void *arg),
  1.2437 + *   void *arg
  1.2438 + * );
  1.2439 + */
  1.2440 +
  1.2441 +/*
  1.2442 + * NSSCryptoContext_FindBestUserCertificate
  1.2443 + *
  1.2444 + */
  1.2445 +
  1.2446 +NSS_EXTERN NSSCertificate *
  1.2447 +NSSCryptoContext_FindBestUserCertificate
  1.2448 +(
  1.2449 +  NSSCryptoContext *cc,
  1.2450 +  NSSTime *timeOpt,
  1.2451 +  NSSUsage *usage,
  1.2452 +  NSSPolicies *policiesOpt
  1.2453 +);
  1.2454 +
  1.2455 +/*
  1.2456 + * NSSCryptoContext_FindUserCertificates
  1.2457 + *
  1.2458 + */
  1.2459 +
  1.2460 +NSS_EXTERN NSSCertificate **
  1.2461 +NSSCryptoContext_FindUserCertificates
  1.2462 +(
  1.2463 +  NSSCryptoContext *cc,
  1.2464 +  NSSTime *timeOpt,
  1.2465 +  NSSUsage *usageOpt,
  1.2466 +  NSSPolicies *policiesOpt,
  1.2467 +  NSSCertificate **rvOpt,
  1.2468 +  PRUint32 rvLimit, /* zero for no limit */
  1.2469 +  NSSArena *arenaOpt
  1.2470 +);
  1.2471 +
  1.2472 +/*
  1.2473 + * NSSCryptoContext_FindBestUserCertificateForSSLClientAuth
  1.2474 + *
  1.2475 + */
  1.2476 +
  1.2477 +NSS_EXTERN NSSCertificate *
  1.2478 +NSSCryptoContext_FindBestUserCertificateForSSLClientAuth
  1.2479 +(
  1.2480 +  NSSCryptoContext *cc,
  1.2481 +  NSSUTF8 *sslHostOpt,
  1.2482 +  NSSDER *rootCAsOpt[], /* null pointer for none */
  1.2483 +  PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1.2484 +  NSSAlgorithmAndParameters *apOpt,
  1.2485 +  NSSPolicies *policiesOpt
  1.2486 +);
  1.2487 +
  1.2488 +/*
  1.2489 + * NSSCryptoContext_FindUserCertificatesForSSLClientAuth
  1.2490 + *
  1.2491 + */
  1.2492 +
  1.2493 +NSS_EXTERN NSSCertificate **
  1.2494 +NSSCryptoContext_FindUserCertificatesForSSLClientAuth
  1.2495 +(
  1.2496 +  NSSCryptoContext *cc,
  1.2497 +  NSSUTF8 *sslHostOpt,
  1.2498 +  NSSDER *rootCAsOpt[], /* null pointer for none */
  1.2499 +  PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1.2500 +  NSSAlgorithmAndParameters *apOpt,
  1.2501 +  NSSPolicies *policiesOpt,
  1.2502 +  NSSCertificate **rvOpt,
  1.2503 +  PRUint32 rvLimit, /* zero for no limit */
  1.2504 +  NSSArena *arenaOpt
  1.2505 +);
  1.2506 +
  1.2507 +/*
  1.2508 + * NSSCryptoContext_FindBestUserCertificateForEmailSigning
  1.2509 + *
  1.2510 + */
  1.2511 +
  1.2512 +NSS_EXTERN NSSCertificate *
  1.2513 +NSSCryptoContext_FindBestUserCertificateForEmailSigning
  1.2514 +(
  1.2515 +  NSSCryptoContext *cc,
  1.2516 +  NSSASCII7 *signerOpt,
  1.2517 +  NSSASCII7 *recipientOpt,
  1.2518 +  /* anything more here? */
  1.2519 +  NSSAlgorithmAndParameters *apOpt,
  1.2520 +  NSSPolicies *policiesOpt
  1.2521 +);
  1.2522 +
  1.2523 +/*
  1.2524 + * NSSCryptoContext_FindUserCertificatesForEmailSigning
  1.2525 + *
  1.2526 + */
  1.2527 +
  1.2528 +NSS_EXTERN NSSCertificate *
  1.2529 +NSSCryptoContext_FindUserCertificatesForEmailSigning
  1.2530 +(
  1.2531 +  NSSCryptoContext *cc,
  1.2532 +  NSSASCII7 *signerOpt, /* fgmr or a more general name? */
  1.2533 +  NSSASCII7 *recipientOpt,
  1.2534 +  /* anything more here? */
  1.2535 +  NSSAlgorithmAndParameters *apOpt,
  1.2536 +  NSSPolicies *policiesOpt,
  1.2537 +  NSSCertificate **rvOpt,
  1.2538 +  PRUint32 rvLimit, /* zero for no limit */
  1.2539 +  NSSArena *arenaOpt
  1.2540 +);
  1.2541 +
  1.2542 +/* Private Keys */
  1.2543 +
  1.2544 +/*
  1.2545 + * NSSCryptoContext_GenerateKeyPair
  1.2546 + *
  1.2547 + * Creates session objects.  If you want persistant objects, use
  1.2548 + * NSSTrustDomain_GenerateKeyPair.  The destination token is where
  1.2549 + * the keys are stored.  If that token can do the required math, then
  1.2550 + * that's where the keys are generated too.  Otherwise, the keys are
  1.2551 + * generated elsewhere and moved to that token.
  1.2552 + */
  1.2553 +
  1.2554 +NSS_EXTERN PRStatus
  1.2555 +NSSCryptoContext_GenerateKeyPair
  1.2556 +(
  1.2557 +  NSSCryptoContext *cc,
  1.2558 +  NSSAlgorithmAndParameters *ap,
  1.2559 +  NSSPrivateKey **pvkOpt,
  1.2560 +  NSSPublicKey **pbkOpt,
  1.2561 +  PRBool privateKeyIsSensitive,
  1.2562 +  NSSToken *destination,
  1.2563 +  NSSCallback *uhhOpt
  1.2564 +);
  1.2565 +
  1.2566 +/*
  1.2567 + * NSSCryptoContext_TraversePrivateKeys
  1.2568 + *
  1.2569 + * 
  1.2570 + * NSS_EXTERN PRStatus *
  1.2571 + * NSSCryptoContext_TraversePrivateKeys
  1.2572 + * (
  1.2573 + *   NSSCryptoContext *cc,
  1.2574 + *   PRStatus (*callback)(NSSPrivateKey *vk, void *arg),
  1.2575 + *   void *arg
  1.2576 + * );
  1.2577 + */
  1.2578 +
  1.2579 +/* Symmetric Keys */
  1.2580 +
  1.2581 +/*
  1.2582 + * NSSCryptoContext_GenerateSymmetricKey
  1.2583 + *
  1.2584 + */
  1.2585 +
  1.2586 +NSS_EXTERN NSSSymmetricKey *
  1.2587 +NSSCryptoContext_GenerateSymmetricKey
  1.2588 +(
  1.2589 +  NSSCryptoContext *cc,
  1.2590 +  NSSAlgorithmAndParameters *ap,
  1.2591 +  PRUint32 keysize,
  1.2592 +  NSSToken *destination,
  1.2593 +  NSSCallback *uhhOpt
  1.2594 +);
  1.2595 +
  1.2596 +/*
  1.2597 + * NSSCryptoContext_GenerateSymmetricKeyFromPassword
  1.2598 + *
  1.2599 + */
  1.2600 +
  1.2601 +NSS_EXTERN NSSSymmetricKey *
  1.2602 +NSSCryptoContext_GenerateSymmetricKeyFromPassword
  1.2603 +(
  1.2604 +  NSSCryptoContext *cc,
  1.2605 +  NSSAlgorithmAndParameters *ap,
  1.2606 +  NSSUTF8 *passwordOpt, /* if null, prompt */
  1.2607 +  NSSToken *destinationOpt,
  1.2608 +  NSSCallback *uhhOpt
  1.2609 +);
  1.2610 +
  1.2611 +/*
  1.2612 + * NSSCryptoContext_FindSymmetricKeyByAlgorithm
  1.2613 + *
  1.2614 + * 
  1.2615 + * NSS_EXTERN NSSSymmetricKey *
  1.2616 + * NSSCryptoContext_FindSymmetricKeyByType
  1.2617 + * (
  1.2618 + *   NSSCryptoContext *cc,
  1.2619 + *   NSSOID *type,
  1.2620 + *   NSSCallback *uhhOpt
  1.2621 + * );
  1.2622 + */
  1.2623 +
  1.2624 +/*
  1.2625 + * NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID
  1.2626 + *
  1.2627 + */
  1.2628 +
  1.2629 +NSS_EXTERN NSSSymmetricKey *
  1.2630 +NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID
  1.2631 +(
  1.2632 +  NSSCryptoContext *cc,
  1.2633 +  NSSOID *algorithm,
  1.2634 +  NSSItem *keyID,
  1.2635 +  NSSCallback *uhhOpt
  1.2636 +);
  1.2637 +
  1.2638 +/*
  1.2639 + * NSSCryptoContext_TraverseSymmetricKeys
  1.2640 + *
  1.2641 + * 
  1.2642 + * NSS_EXTERN PRStatus *
  1.2643 + * NSSCryptoContext_TraverseSymmetricKeys
  1.2644 + * (
  1.2645 + *   NSSCryptoContext *cc,
  1.2646 + *   PRStatus (*callback)(NSSSymmetricKey *mk, void *arg),
  1.2647 + *   void *arg
  1.2648 + * );
  1.2649 + */
  1.2650 +
  1.2651 +/* Crypto ops on distinguished keys */
  1.2652 +
  1.2653 +/*
  1.2654 + * NSSCryptoContext_Decrypt
  1.2655 + *
  1.2656 + */
  1.2657 +
  1.2658 +NSS_EXTERN NSSItem *
  1.2659 +NSSCryptoContext_Decrypt
  1.2660 +(
  1.2661 +  NSSCryptoContext *cc,
  1.2662 +  NSSAlgorithmAndParameters *apOpt,
  1.2663 +  NSSItem *encryptedData,
  1.2664 +  NSSCallback *uhhOpt,
  1.2665 +  NSSItem *rvOpt,
  1.2666 +  NSSArena *arenaOpt
  1.2667 +);
  1.2668 +
  1.2669 +/*
  1.2670 + * NSSCryptoContext_BeginDecrypt
  1.2671 + *
  1.2672 + */
  1.2673 +
  1.2674 +NSS_EXTERN PRStatus
  1.2675 +NSSCryptoContext_BeginDecrypt
  1.2676 +(
  1.2677 +  NSSCryptoContext *cc,
  1.2678 +  NSSAlgorithmAndParameters *apOpt,
  1.2679 +  NSSCallback *uhhOpt
  1.2680 +);
  1.2681 +
  1.2682 +/*
  1.2683 + * NSSCryptoContext_ContinueDecrypt
  1.2684 + *
  1.2685 + */
  1.2686 +
  1.2687 +/*
  1.2688 + * NSSItem semantics:
  1.2689 + *
  1.2690 + *   If rvOpt is NULL, a new NSSItem and buffer are allocated.
  1.2691 + *   If rvOpt is not null, but the buffer pointer is null,
  1.2692 + *     then rvOpt is returned but a new buffer is allocated.
  1.2693 + *     In this case, if the length value is not zero, then
  1.2694 + *     no more than that much space will be allocated.
  1.2695 + *   If rvOpt is not null and the buffer pointer is not null,
  1.2696 + *     then that buffer is re-used.  No more than the buffer
  1.2697 + *     length value will be used; if it's not enough, an
  1.2698 + *     error is returned.  If less is used, the number is
  1.2699 + *     adjusted downwards.
  1.2700 + *
  1.2701 + *  Note that although this is short of some ideal "Item"
  1.2702 + *  definition, we can usually tell how big these buffers
  1.2703 + *  have to be.
  1.2704 + *
  1.2705 + *  Feedback is requested; and earlier is better than later.
  1.2706 + */
  1.2707 +
  1.2708 +NSS_EXTERN NSSItem *
  1.2709 +NSSCryptoContext_ContinueDecrypt
  1.2710 +(
  1.2711 +  NSSCryptoContext *cc,
  1.2712 +  NSSItem *data,
  1.2713 +  NSSItem *rvOpt,
  1.2714 +  NSSArena *arenaOpt
  1.2715 +);
  1.2716 +
  1.2717 +/*
  1.2718 + * NSSCryptoContext_FinishDecrypt
  1.2719 + *
  1.2720 + */
  1.2721 +
  1.2722 +NSS_EXTERN NSSItem *
  1.2723 +NSSCryptoContext_FinishDecrypt
  1.2724 +(
  1.2725 +  NSSCryptoContext *cc,
  1.2726 +  NSSItem *rvOpt,
  1.2727 +  NSSArena *arenaOpt
  1.2728 +);
  1.2729 +
  1.2730 +/*
  1.2731 + * NSSCryptoContext_Sign
  1.2732 + *
  1.2733 + */
  1.2734 +
  1.2735 +NSS_EXTERN NSSItem *
  1.2736 +NSSCryptoContext_Sign
  1.2737 +(
  1.2738 +  NSSCryptoContext *cc,
  1.2739 +  NSSAlgorithmAndParameters *apOpt,
  1.2740 +  NSSItem *data,
  1.2741 +  NSSCallback *uhhOpt,
  1.2742 +  NSSItem *rvOpt,
  1.2743 +  NSSArena *arenaOpt
  1.2744 +);
  1.2745 +
  1.2746 +/*
  1.2747 + * NSSCryptoContext_BeginSign
  1.2748 + *
  1.2749 + */
  1.2750 +
  1.2751 +NSS_EXTERN PRStatus
  1.2752 +NSSCryptoContext_BeginSign
  1.2753 +(
  1.2754 +  NSSCryptoContext *cc,
  1.2755 +  NSSAlgorithmAndParameters *apOpt,
  1.2756 +  NSSCallback *uhhOpt
  1.2757 +);
  1.2758 +
  1.2759 +/*
  1.2760 + * NSSCryptoContext_ContinueSign
  1.2761 + *
  1.2762 + */
  1.2763 +
  1.2764 +NSS_EXTERN PRStatus
  1.2765 +NSSCryptoContext_ContinueSign
  1.2766 +(
  1.2767 +  NSSCryptoContext *cc,
  1.2768 +  NSSItem *data
  1.2769 +);
  1.2770 +
  1.2771 +/*
  1.2772 + * NSSCryptoContext_FinishSign
  1.2773 + *
  1.2774 + */
  1.2775 +
  1.2776 +NSS_EXTERN NSSItem *
  1.2777 +NSSCryptoContext_FinishSign
  1.2778 +(
  1.2779 +  NSSCryptoContext *cc,
  1.2780 +  NSSItem *rvOpt,
  1.2781 +  NSSArena *arenaOpt
  1.2782 +);
  1.2783 +
  1.2784 +/*
  1.2785 + * NSSCryptoContext_SignRecover
  1.2786 + *
  1.2787 + */
  1.2788 +
  1.2789 +NSS_EXTERN NSSItem *
  1.2790 +NSSCryptoContext_SignRecover
  1.2791 +(
  1.2792 +  NSSCryptoContext *cc,
  1.2793 +  NSSAlgorithmAndParameters *apOpt,
  1.2794 +  NSSItem *data,
  1.2795 +  NSSCallback *uhhOpt,
  1.2796 +  NSSItem *rvOpt,
  1.2797 +  NSSArena *arenaOpt
  1.2798 +);
  1.2799 +
  1.2800 +/*
  1.2801 + * NSSCryptoContext_BeginSignRecover
  1.2802 + *
  1.2803 + */
  1.2804 +
  1.2805 +NSS_EXTERN PRStatus
  1.2806 +NSSCryptoContext_BeginSignRecover
  1.2807 +(
  1.2808 +  NSSCryptoContext *cc,
  1.2809 +  NSSAlgorithmAndParameters *apOpt,
  1.2810 +  NSSCallback *uhhOpt
  1.2811 +);
  1.2812 +
  1.2813 +/*
  1.2814 + * NSSCryptoContext_ContinueSignRecover
  1.2815 + *
  1.2816 + */
  1.2817 +
  1.2818 +NSS_EXTERN NSSItem *
  1.2819 +NSSCryptoContext_ContinueSignRecover
  1.2820 +(
  1.2821 +  NSSCryptoContext *cc,
  1.2822 +  NSSItem *data,
  1.2823 +  NSSItem *rvOpt,
  1.2824 +  NSSArena *arenaOpt
  1.2825 +);
  1.2826 +
  1.2827 +/*
  1.2828 + * NSSCryptoContext_FinishSignRecover
  1.2829 + *
  1.2830 + */
  1.2831 +
  1.2832 +NSS_EXTERN NSSItem *
  1.2833 +NSSCryptoContext_FinishSignRecover
  1.2834 +(
  1.2835 +  NSSCryptoContext *cc,
  1.2836 +  NSSItem *rvOpt,
  1.2837 +  NSSArena *arenaOpt
  1.2838 +);
  1.2839 +
  1.2840 +/*
  1.2841 + * NSSCryptoContext_UnwrapSymmetricKey
  1.2842 + *
  1.2843 + */
  1.2844 +
  1.2845 +NSS_EXTERN NSSSymmetricKey *
  1.2846 +NSSCryptoContext_UnwrapSymmetricKey
  1.2847 +(
  1.2848 +  NSSCryptoContext *cc,
  1.2849 +  NSSAlgorithmAndParameters *apOpt,
  1.2850 +  NSSItem *wrappedKey,
  1.2851 +  NSSCallback *uhhOpt
  1.2852 +);
  1.2853 +
  1.2854 +/*
  1.2855 + * NSSCryptoContext_DeriveSymmetricKey
  1.2856 + *
  1.2857 + */
  1.2858 +
  1.2859 +NSS_EXTERN NSSSymmetricKey *
  1.2860 +NSSCryptoContext_DeriveSymmetricKey
  1.2861 +(
  1.2862 +  NSSCryptoContext *cc,
  1.2863 +  NSSPublicKey *bk,
  1.2864 +  NSSAlgorithmAndParameters *apOpt,
  1.2865 +  NSSOID *target,
  1.2866 +  PRUint32 keySizeOpt, /* zero for best allowed */
  1.2867 +  NSSOperations operations,
  1.2868 +  NSSCallback *uhhOpt
  1.2869 +);
  1.2870 +
  1.2871 +/*
  1.2872 + * NSSCryptoContext_Encrypt
  1.2873 + *
  1.2874 + * Encrypt a single chunk of data with the distinguished public key
  1.2875 + * of this crypto context.
  1.2876 + */
  1.2877 +
  1.2878 +NSS_EXTERN NSSItem *
  1.2879 +NSSCryptoContext_Encrypt
  1.2880 +(
  1.2881 +  NSSCryptoContext *cc,
  1.2882 +  NSSAlgorithmAndParameters *apOpt,
  1.2883 +  NSSItem *data,
  1.2884 +  NSSCallback *uhhOpt,
  1.2885 +  NSSItem *rvOpt,
  1.2886 +  NSSArena *arenaOpt
  1.2887 +);
  1.2888 +
  1.2889 +/*
  1.2890 + * NSSCryptoContext_BeginEncrypt
  1.2891 + *
  1.2892 + */
  1.2893 +
  1.2894 +NSS_EXTERN PRStatus
  1.2895 +NSSCryptoContext_BeginEncrypt
  1.2896 +(
  1.2897 +  NSSCryptoContext *cc,
  1.2898 +  NSSAlgorithmAndParameters *apOpt,
  1.2899 +  NSSCallback *uhhOpt
  1.2900 +);
  1.2901 +
  1.2902 +/*
  1.2903 + * NSSCryptoContext_ContinueEncrypt
  1.2904 + *
  1.2905 + */
  1.2906 +
  1.2907 +NSS_EXTERN NSSItem *
  1.2908 +NSSCryptoContext_ContinueEncrypt
  1.2909 +(
  1.2910 +  NSSCryptoContext *cc,
  1.2911 +  NSSItem *data,
  1.2912 +  NSSItem *rvOpt,
  1.2913 +  NSSArena *arenaOpt
  1.2914 +);
  1.2915 +
  1.2916 +/*
  1.2917 + * NSSCryptoContext_FinishEncrypt
  1.2918 + *
  1.2919 + */
  1.2920 +
  1.2921 +NSS_EXTERN NSSItem *
  1.2922 +NSSCryptoContext_FinishEncrypt
  1.2923 +(
  1.2924 +  NSSCryptoContext *cc,
  1.2925 +  NSSItem *rvOpt,
  1.2926 +  NSSArena *arenaOpt
  1.2927 +);
  1.2928 +
  1.2929 +/*
  1.2930 + * NSSCryptoContext_Verify
  1.2931 + *
  1.2932 + */
  1.2933 +
  1.2934 +NSS_EXTERN PRStatus
  1.2935 +NSSCryptoContext_Verify
  1.2936 +(
  1.2937 +  NSSCryptoContext *cc,
  1.2938 +  NSSAlgorithmAndParameters *apOpt,
  1.2939 +  NSSItem *data,
  1.2940 +  NSSItem *signature,
  1.2941 +  NSSCallback *uhhOpt
  1.2942 +);
  1.2943 +
  1.2944 +/*
  1.2945 + * NSSCryptoContext_BeginVerify
  1.2946 + *
  1.2947 + */
  1.2948 +
  1.2949 +NSS_EXTERN PRStatus
  1.2950 +NSSCryptoContext_BeginVerify
  1.2951 +(
  1.2952 +  NSSCryptoContext *cc,
  1.2953 +  NSSAlgorithmAndParameters *apOpt,
  1.2954 +  NSSItem *signature,
  1.2955 +  NSSCallback *uhhOpt
  1.2956 +);
  1.2957 +
  1.2958 +/*
  1.2959 + * NSSCryptoContext_ContinueVerify
  1.2960 + *
  1.2961 + */
  1.2962 +
  1.2963 +NSS_EXTERN PRStatus
  1.2964 +NSSCryptoContext_ContinueVerify
  1.2965 +(
  1.2966 +  NSSCryptoContext *cc,
  1.2967 +  NSSItem *data
  1.2968 +);
  1.2969 +
  1.2970 +/*
  1.2971 + * NSSCryptoContext_FinishVerify
  1.2972 + *
  1.2973 + */
  1.2974 +
  1.2975 +NSS_EXTERN PRStatus
  1.2976 +NSSCryptoContext_FinishVerify
  1.2977 +(
  1.2978 +  NSSCryptoContext *cc
  1.2979 +);
  1.2980 +
  1.2981 +/*
  1.2982 + * NSSCryptoContext_VerifyRecover
  1.2983 + *
  1.2984 + */
  1.2985 +
  1.2986 +NSS_EXTERN NSSItem *
  1.2987 +NSSCryptoContext_VerifyRecover
  1.2988 +(
  1.2989 +  NSSCryptoContext *cc,
  1.2990 +  NSSAlgorithmAndParameters *apOpt,
  1.2991 +  NSSItem *signature,
  1.2992 +  NSSCallback *uhhOpt,
  1.2993 +  NSSItem *rvOpt,
  1.2994 +  NSSArena *arenaOpt
  1.2995 +);
  1.2996 +
  1.2997 +/*
  1.2998 + * NSSCryptoContext_BeginVerifyRecover
  1.2999 + *
  1.3000 + */
  1.3001 +
  1.3002 +NSS_EXTERN PRStatus
  1.3003 +NSSCryptoContext_BeginVerifyRecover
  1.3004 +(
  1.3005 +  NSSCryptoContext *cc,
  1.3006 +  NSSAlgorithmAndParameters *apOpt,
  1.3007 +  NSSCallback *uhhOpt
  1.3008 +);
  1.3009 +
  1.3010 +/*
  1.3011 + * NSSCryptoContext_ContinueVerifyRecover
  1.3012 + *
  1.3013 + */
  1.3014 +
  1.3015 +NSS_EXTERN NSSItem *
  1.3016 +NSSCryptoContext_ContinueVerifyRecover
  1.3017 +(
  1.3018 +  NSSCryptoContext *cc,
  1.3019 +  NSSItem *data,
  1.3020 +  NSSItem *rvOpt,
  1.3021 +  NSSArena *arenaOpt
  1.3022 +);
  1.3023 +
  1.3024 +/*
  1.3025 + * NSSCryptoContext_FinishVerifyRecover
  1.3026 + *
  1.3027 + */
  1.3028 +
  1.3029 +NSS_EXTERN NSSItem *
  1.3030 +NSSCryptoContext_FinishVerifyRecover
  1.3031 +(
  1.3032 +  NSSCryptoContext *cc,
  1.3033 +  NSSItem *rvOpt,
  1.3034 +  NSSArena *arenaOpt
  1.3035 +);
  1.3036 +
  1.3037 +/*
  1.3038 + * NSSCryptoContext_WrapSymmetricKey
  1.3039 + *
  1.3040 + */
  1.3041 +
  1.3042 +NSS_EXTERN NSSItem *
  1.3043 +NSSCryptoContext_WrapSymmetricKey
  1.3044 +(
  1.3045 +  NSSCryptoContext *cc,
  1.3046 +  NSSAlgorithmAndParameters *apOpt,
  1.3047 +  NSSSymmetricKey *keyToWrap,
  1.3048 +  NSSCallback *uhhOpt,
  1.3049 +  NSSItem *rvOpt,
  1.3050 +  NSSArena *arenaOpt
  1.3051 +);
  1.3052 +
  1.3053 +/*
  1.3054 + * NSSCryptoContext_Digest
  1.3055 + *
  1.3056 + * Digest a single chunk of data with the distinguished digest key
  1.3057 + * of this crypto context.
  1.3058 + */
  1.3059 +
  1.3060 +NSS_EXTERN NSSItem *
  1.3061 +NSSCryptoContext_Digest
  1.3062 +(
  1.3063 +  NSSCryptoContext *cc,
  1.3064 +  NSSAlgorithmAndParameters *apOpt,
  1.3065 +  NSSItem *data,
  1.3066 +  NSSCallback *uhhOpt,
  1.3067 +  NSSItem *rvOpt,
  1.3068 +  NSSArena *arenaOpt
  1.3069 +);
  1.3070 +
  1.3071 +/*
  1.3072 + * NSSCryptoContext_BeginDigest
  1.3073 + *
  1.3074 + */
  1.3075 +
  1.3076 +NSS_EXTERN PRStatus
  1.3077 +NSSCryptoContext_BeginDigest
  1.3078 +(
  1.3079 +  NSSCryptoContext *cc,
  1.3080 +  NSSAlgorithmAndParameters *apOpt,
  1.3081 +  NSSCallback *uhhOpt
  1.3082 +);
  1.3083 +
  1.3084 +/*
  1.3085 + * NSSCryptoContext_ContinueDigest
  1.3086 + *
  1.3087 + */
  1.3088 +
  1.3089 +NSS_EXTERN PRStatus
  1.3090 +NSSCryptoContext_ContinueDigest
  1.3091 +(
  1.3092 +  NSSCryptoContext *cc,
  1.3093 +  NSSAlgorithmAndParameters *apOpt,
  1.3094 +  NSSItem *item
  1.3095 +);
  1.3096 +
  1.3097 +/*
  1.3098 + * NSSCryptoContext_FinishDigest
  1.3099 + *
  1.3100 + */
  1.3101 +
  1.3102 +NSS_EXTERN NSSItem *
  1.3103 +NSSCryptoContext_FinishDigest
  1.3104 +(
  1.3105 +  NSSCryptoContext *cc,
  1.3106 +  NSSItem *rvOpt,
  1.3107 +  NSSArena *arenaOpt
  1.3108 +);
  1.3109 +
  1.3110 +/*
  1.3111 + * tbd: Combination ops
  1.3112 + */
  1.3113 +
  1.3114 +/*
  1.3115 + * NSSCryptoContext_Clone
  1.3116 + *
  1.3117 + */
  1.3118 +
  1.3119 +NSS_EXTERN NSSCryptoContext *
  1.3120 +NSSCryptoContext_Clone
  1.3121 +(
  1.3122 +  NSSCryptoContext *cc
  1.3123 +);
  1.3124 +
  1.3125 +/*
  1.3126 + * NSSCryptoContext_Save
  1.3127 + * NSSCryptoContext_Restore
  1.3128 + *
  1.3129 + * We need to be able to save and restore the state of contexts.
  1.3130 + * Perhaps a mark-and-release mechanism would be better?
  1.3131 + */
  1.3132 +
  1.3133 +/*
  1.3134 + * ..._SignTBSCertificate
  1.3135 + *
  1.3136 + * This requires feedback from the cert server team.
  1.3137 + */
  1.3138 +
  1.3139 +/*
  1.3140 + * PRBool NSSCertificate_GetIsTrustedFor{xxx}(NSSCertificate *c);
  1.3141 + * PRStatus NSSCertificate_SetIsTrustedFor{xxx}(NSSCertificate *c, PRBool trusted);
  1.3142 + *
  1.3143 + * These will be helper functions which get the trust object for a cert,
  1.3144 + * and then call the corresponding function(s) on it.
  1.3145 + *
  1.3146 + * PKIX trust objects will have methods to manipulate the low-level trust
  1.3147 + * bits (which are based on key usage and extended key usage), and also the
  1.3148 + * conceptual high-level usages (e.g. ssl client auth, email encryption, etc.)
  1.3149 + *
  1.3150 + * Other types of trust objects (if any) might have different low-level
  1.3151 + * representations, but hopefully high-level concepts would map.
  1.3152 + *
  1.3153 + * Only these high-level general routines would be promoted to the
  1.3154 + * general certificate level here.  Hence the {xxx} above would be things
  1.3155 + * like "EmailSigning."
  1.3156 + *
  1.3157 + *
  1.3158 + * NSSPKIXTrust *NSSCertificate_GetPKIXTrustObject(NSSCertificate *c);
  1.3159 + * PRStatus NSSCertificate_SetPKIXTrustObject(NSSCertificate *c, NSPKIXTrust *t);
  1.3160 + *
  1.3161 + * I want to hold off on any general trust object until we've investigated
  1.3162 + * other models more thoroughly.
  1.3163 + */
  1.3164 +
  1.3165 +PR_END_EXTERN_C
  1.3166 +
  1.3167 +#endif /* NSSPKI_H */

mercurial