tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pkix_pl_pki.h (95280B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 /*
      5 * This file defines several platform independent functions to
      6 * manipulate certificates and CRLs in a portable manner.
      7 *
      8 */
      9 
     10 #ifndef _PKIX_PL_PKI_H
     11 #define _PKIX_PL_PKI_H
     12 
     13 #include "pkixt.h"
     14 #include "seccomon.h"
     15 #include "certt.h"
     16 
     17 #ifdef __cplusplus
     18 extern "C" {
     19 #endif
     20 
     21 /* General
     22 *
     23 * Please refer to the libpkix Programmer's Guide for detailed information
     24 * about how to use the libpkix library. Certain key warnings and notices from
     25 * that document are repeated here for emphasis.
     26 *
     27 * All identifiers in this file (and all public identifiers defined in
     28 * libpkix) begin with "PKIX_". Private identifiers only intended for use
     29 * within the library begin with "pkix_".
     30 *
     31 * A function returns NULL upon success, and a PKIX_Error pointer upon failure.
     32 *
     33 * Unless otherwise noted, for all accessor (gettor) functions that return a
     34 * PKIX_PL_Object pointer, callers should assume that this pointer refers to a
     35 * shared object. Therefore, the caller should treat this shared object as
     36 * read-only and should not modify this shared object. When done using the
     37 * shared object, the caller should release the reference to the object by
     38 * using the PKIX_PL_Object_DecRef function.
     39 *
     40 * While a function is executing, if its arguments (or anything referred to by
     41 * its arguments) are modified, free'd, or destroyed, the function's behavior
     42 * is undefined.
     43 *
     44 */
     45 
     46 /*
     47 * Cert
     48 *
     49 * A Cert represents an X.509 certificate. It can be created using the bytes
     50 * of a valid ASN.1 DER encoding. Once created, a Cert is immutable. The
     51 * following functions include accessors (gettors) for the various components
     52 * of an X.509 certificate. Also included are functions to perform various
     53 * checks on a certificate, including name constraints, key usage, validity
     54 * (expiration), and signature verification.
     55 */
     56 
     57 /*
     58 * FUNCTION: PKIX_PL_Cert_Create
     59 * DESCRIPTION:
     60 *
     61 *  Creates a new certificate using the bytes in the ByteArray pointed to by
     62 *  "byteArray" and stores it at "pCert". If the bytes are not a valid ASN.1
     63 *  DER encoding of a certificate, a PKIX_Error pointer is returned. Once
     64 *  created, a Cert is immutable.
     65 *
     66 *  Certificate  ::=  SEQUENCE  {
     67 *      tbsCertificate          TBSCertificate,
     68 *      signatureAlgorithm      AlgorithmIdentifier,
     69 *      signatureValue          BIT STRING  }
     70 *
     71 *  AlgorithmIdentifier  ::=  SEQUENCE  {
     72 *      algorithm               OBJECT IDENTIFIER,
     73 *      parameters              ANY DEFINED BY algorithm OPTIONAL  }
     74 *
     75 *  TBSCertificate  ::=  SEQUENCE  {
     76 *      version         [0]  EXPLICIT Version DEFAULT v1,
     77 *      serialNumber    CertificateSerialNumber,
     78 *      signature       AlgorithmIdentifier,
     79 *      issuer          Name,
     80 *      validity        Validity,
     81 *      subject         Name,
     82 *      subjectPublicKeyInfo SubjectPublicKeyInfo,
     83 *      issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
     84 *                          -- If present, version MUST be v2 or v3
     85 *      subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
     86 *                              -- If present, version MUST be v2 or v3
     87 *      extensions      [3]  EXPLICIT Extensions OPTIONAL
     88 *                              -- If present, version MUST be v3
     89 *      }
     90 *
     91 *  Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
     92 *
     93 *  CertificateSerialNumber  ::=  INTEGER
     94 *
     95 *  Validity ::= SEQUENCE {
     96 *      notBefore       Time,
     97 *      notAfter        Time }
     98 *
     99 *  Time ::= CHOICE {
    100 *      utcTime         UTCTime,
    101 *      generalTime     GeneralizedTime }
    102 *
    103 *  UniqueIdentifier  ::=  BIT STRING
    104 *
    105 *  SubjectPublicKeyInfo  ::=  SEQUENCE  {
    106 *      algorithm               AlgorithmIdentifier,
    107 *      subjectPublicKey        BIT STRING  }
    108 *
    109 *  Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
    110 *
    111 *  Extension  ::=  SEQUENCE  {
    112 *      extnID          OBJECT IDENTIFIER,
    113 *      critical        BOOLEAN DEFAULT FALSE,
    114 *      extnValue       OCTET STRING  }
    115 *
    116 * PARAMETERS:
    117 *  "byteArray"
    118 *      Address of ByteArray representing the CERT's DER encoding.
    119 *      Must be non-NULL.
    120 *  "pCert"
    121 *      Address where object pointer will be stored. Must be non-NULL.
    122 *  "plContext"
    123 *      Platform-specific context pointer.
    124 * THREAD SAFETY:
    125 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    126 * RETURNS:
    127 *  Returns NULL if the function succeeds.
    128 *  Returns a Cert Error if the function fails in a non-fatal way.
    129 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    130 */
    131 PKIX_Error *
    132 PKIX_PL_Cert_Create(
    133        PKIX_PL_ByteArray *byteArray,
    134        PKIX_PL_Cert **pCert,
    135        void *plContext);
    136 
    137 /*
    138 * FUNCTION: PKIX_PL_Cert_CreateFromCERTCertificate
    139 * DESCRIPTION:
    140 *
    141 * Creates a new certificate using passed in CERTCertificate object.
    142 *
    143 * PARAMETERS:
    144 *  "nssCert"
    145 *      The object that will be used to create new PKIX_PL_Cert.
    146 *  "pCert"
    147 *      Address where object pointer will be stored. Must be non-NULL.
    148 *  "plContext"
    149 *      Platform-specific context pointer.
    150 * THREAD SAFETY:
    151 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    152 * RETURNS:
    153 *  Returns NULL if the function succeeds.
    154 *  Returns a Cert Error if the function fails in a non-fatal way.
    155 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    156 */
    157 PKIX_Error *
    158 PKIX_PL_Cert_CreateFromCERTCertificate(
    159        const CERTCertificate *nssCert,
    160        PKIX_PL_Cert **pCert,
    161        void *plContext);
    162 
    163 /*
    164 * FUNCTION: PKIX_PL_Cert_GetCERTCertificate
    165 * DESCRIPTION:
    166 *
    167 * Returns underlying CERTCertificate structure. Return CERTCertificate
    168 * object is duplicated and should be destroyed by caller.
    169 *
    170 * PARAMETERS:
    171 *  "cert"
    172 *      Address of PKIX_PL_Cert. Must be non-NULL.
    173 *  "pCert"
    174 *      Address where object pointer will be stored. Must be non-NULL.
    175 *  "plContext"
    176 *      Platform-specific context pointer.
    177 * THREAD SAFETY:
    178 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    179 * RETURNS:
    180 *  Returns NULL if the function succeeds.
    181 *  Returns a Cert Error if the function fails in a non-fatal way.
    182 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    183 */
    184 PKIX_Error *
    185 PKIX_PL_Cert_GetCERTCertificate(
    186        PKIX_PL_Cert *cert,
    187        CERTCertificate **pnssCert, 
    188        void *plContext);
    189 
    190 /*
    191 * FUNCTION: PKIX_PL_Cert_GetVersion
    192 * DESCRIPTION:
    193 *
    194 *  Retrieves the version of the Cert pointed to by "cert" and stores it at
    195 *  "pVersion". The version number will either be 0, 1, or 2 (corresponding to
    196 *  v1, v2, or v3, respectively).
    197 *
    198 *  Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
    199 *
    200 * PARAMETERS:
    201 *  "cert"
    202 *      Address of Cert whose version is to be stored. Must be non-NULL.
    203 *  "pVersion"
    204 *      Address where PKIX_UInt32 will be stored. Must be non-NULL.
    205 *  "plContext"
    206 *      Platform-specific context pointer.
    207 * THREAD SAFETY:
    208 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    209 * RETURNS:
    210 *  Returns NULL if the function succeeds.
    211 *  Returns a Cert Error if the function fails in a non-fatal way.
    212 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    213 */
    214 PKIX_Error *
    215 PKIX_PL_Cert_GetVersion(
    216        PKIX_PL_Cert *cert,
    217        PKIX_UInt32 *pVersion,
    218        void *plContext);
    219 
    220 /*
    221 * FUNCTION: PKIX_PL_Cert_GetSerialNumber
    222 * DESCRIPTION:
    223 *
    224 *  Retrieves a pointer to the BigInt that represents the serial number of the
    225 *  Cert pointed to by "cert" and stores it at "pSerialNumber".
    226 *
    227 *  CertificateSerialNumber  ::=  INTEGER
    228 *
    229 * PARAMETERS:
    230 *  "cert"
    231 *      Address of Cert whose serial number is to be stored. Must be non-NULL.
    232 *  "pSerial"
    233 *      Address where object pointer will be stored. Must be non-NULL.
    234 *  "plContext"
    235 *      Platform-specific context pointer.
    236 * THREAD SAFETY:
    237 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    238 * RETURNS:
    239 *  Returns NULL if the function succeeds.
    240 *  Returns a Cert Error if the function fails in a non-fatal way.
    241 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    242 */
    243 PKIX_Error *
    244 PKIX_PL_Cert_GetSerialNumber(
    245        PKIX_PL_Cert *cert,
    246        PKIX_PL_BigInt **pSerial,
    247        void *plContext);
    248 
    249 /*
    250 * FUNCTION: PKIX_PL_Cert_GetIssuer
    251 * DESCRIPTION:
    252 *
    253 *  Retrieves a pointer to the X500Name that represents the issuer DN of the
    254 *  Cert pointed to by "cert" and stores it at "pIssuer".
    255 *
    256 * PARAMETERS:
    257 *  "cert"
    258 *      Address of Cert whose issuer is to be stored. Must be non-NULL.
    259 *  "pIssuer"
    260 *      Address where object pointer will be stored. Must be non-NULL.
    261 *  "plContext"
    262 *      Platform-specific context pointer.
    263 * THREAD SAFETY:
    264 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    265 * RETURNS:
    266 *  Returns NULL if the function succeeds.
    267 *  Returns a Cert Error if the function fails in a non-fatal way.
    268 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    269 */
    270 PKIX_Error *
    271 PKIX_PL_Cert_GetIssuer(
    272        PKIX_PL_Cert *cert,
    273        PKIX_PL_X500Name **pIssuer,
    274        void *plContext);
    275 
    276 /*
    277 * FUNCTION: PKIX_PL_Cert_GetSubject
    278 * DESCRIPTION:
    279 *
    280 *  Retrieves a pointer to the X500Name that represents the subject DN of the
    281 *  Cert pointed to by "cert" and stores it at "pSubject". If the Cert does not
    282 *  have a subject DN, this function stores NULL at "pSubject".
    283 *
    284 * PARAMETERS:
    285 *  "cert"
    286 *      Address of Cert whose subject is to be stored. Must be non-NULL.
    287 *  "pSubject"
    288 *      Address where object pointer will be stored. Must be non-NULL.
    289 *  "plContext"
    290 *      Platform-specific context pointer.
    291 * THREAD SAFETY:
    292 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    293 * RETURNS:
    294 *  Returns NULL if the function succeeds.
    295 *  Returns a Cert Error if the function fails in a non-fatal way.
    296 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    297 */
    298 PKIX_Error *
    299 PKIX_PL_Cert_GetSubject(
    300        PKIX_PL_Cert *cert,
    301        PKIX_PL_X500Name **pSubject,
    302        void *plContext);
    303 
    304 /*
    305 * FUNCTION: PKIX_PL_Cert_GetSubjectPublicKeyAlgId
    306 * DESCRIPTION:
    307 *
    308 *  Retrieves a pointer to the OID that represents the subject public key
    309 *  algorithm of the Cert pointed to by "cert" and stores it at
    310 *  "pSubjKeyAlgId".
    311 *
    312 *  SubjectPublicKeyInfo  ::=  SEQUENCE  {
    313 *      algorithm               AlgorithmIdentifier,
    314 *      subjectPublicKey        BIT STRING  }
    315 *
    316 *  AlgorithmIdentifier  ::=  SEQUENCE  {
    317 *      algorithm               OBJECT IDENTIFIER,
    318 *      parameters              ANY DEFINED BY algorithm OPTIONAL  }
    319 *
    320 * PARAMETERS:
    321 *  "cert"
    322 *      Address of Cert whose subject public key algorithm OID is to be stored.
    323 *      Must be non-NULL.
    324 *  "pSubjKeyAlgId"
    325 *      Address where object pointer will be stored. Must be non-NULL.
    326 *  "plContext"
    327 *      Platform-specific context pointer.
    328 * THREAD SAFETY:
    329 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    330 * RETURNS:
    331 *  Returns NULL if the function succeeds.
    332 *  Returns a Cert Error if the function fails in a non-fatal way.
    333 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    334 */
    335 PKIX_Error *
    336 PKIX_PL_Cert_GetSubjectPublicKeyAlgId(
    337        PKIX_PL_Cert *cert,
    338        PKIX_PL_OID **pSubjKeyAlgId,
    339        void *plContext);
    340 
    341 /*
    342 * FUNCTION: PKIX_PL_Cert_GetSubjectPublicKey
    343 * DESCRIPTION:
    344 *
    345 *  Retrieves a pointer to the PublicKey that represents the subject public key
    346 *  of the Cert pointed to by "cert" and stores it at "pPublicKey".
    347 *
    348 *  SubjectPublicKeyInfo  ::=  SEQUENCE  {
    349 *      algorithm               AlgorithmIdentifier,
    350 *      subjectPublicKey        BIT STRING  }
    351 *
    352 * PARAMETERS:
    353 *  "cert"
    354 *      Address of Cert whose subject public key is to be stored.
    355 *      Must be non-NULL.
    356 *  "pPublicKey"
    357 *      Address where object pointer will be stored. Must be non-NULL.
    358 *  "plContext"
    359 *      Platform-specific context pointer.
    360 * THREAD SAFETY:
    361 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    362 * RETURNS:
    363 *  Returns NULL if the function succeeds.
    364 *  Returns a Cert Error if the function fails in a non-fatal way.
    365 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    366 */
    367 PKIX_Error *
    368 PKIX_PL_Cert_GetSubjectPublicKey(
    369        PKIX_PL_Cert *cert,
    370        PKIX_PL_PublicKey **pPublicKey,
    371        void *plContext);
    372 
    373 /*
    374 * FUNCTION: PKIX_PL_PublicKey_NeedsDSAParameters
    375 * DESCRIPTION:
    376 *
    377 * Determines if the PublicKey pointed to by "pubKey" is a DSA Key with null
    378 * parameters and stores the result at "pNeedsParams". 
    379 *
    380 * PARAMETERS:
    381 *  "pubKey"
    382 *      Address of the Public Key of interest. Must be non-NULL.
    383 *  "pNeedsParams"
    384 *      Address where object pointer will be stored. Must be non-NULL.
    385 *  "plContext"
    386 *      Platform-specific context pointer.
    387 * THREAD SAFETY:
    388 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    389 * RETURNS:
    390 *  Returns NULL if the function succeeds.
    391 *  Returns a PublicKey Error if the function fails in a non-fatal way.
    392 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    393 */
    394 PKIX_Error *
    395 PKIX_PL_PublicKey_NeedsDSAParameters(
    396        PKIX_PL_PublicKey *pubKey,
    397        PKIX_Boolean *pNeedsParams,
    398        void *plContext);
    399 
    400 /*
    401 * FUNCTION: PKIX_PL_PublicKey_MakeInheritedDSAPublicKey
    402 * DESCRIPTION:
    403 *
    404 * This function is used for DSA key parameter inheritance, which allows a
    405 * first DSA key with omitted parameters (pointed to by "firstKey") to inherit
    406 * the PQG parameters of a second DSA key that does have parameters. (pointed
    407 * to by "secondKey"). Once created, a PublicKey is immutable.
    408 *
    409 * Specifically, the algorithm used by the function is:
    410 *
    411 * If the first PublicKey is not a DSA public key with omitted parameters,
    412 *      the function stores NULL at "pResultKey". (No Error is returned)
    413 * Else if the second PublicKey is not a DSA public key with non-NULL,
    414 *      parameters, the function returns an Error.
    415 * Else
    416 *      the function creates a third PublicKey with a "Y" value from the
    417 *      first PublicKey and the DSA parameters from the second PublicKey,
    418 *      and stores it at "pResultKey".
    419 *
    420 * PARAMETERS:
    421 *  "firstKey"
    422 *      Address of a Public Key that needs to inherit DSA parameters.
    423 *      Must be non-NULL.
    424 *  "secondKey"
    425 *      Address of a Public Key that has DSA parameters that will be inherited
    426 *      by "firstKey". Must be non-NULL.
    427 *  "pResultKey"
    428 *      Address where object pointer will be stored. Must be non-NULL.
    429 *  "plContext"
    430 *      Platform-specific context pointer.
    431 * THREAD SAFETY:
    432 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    433 * RETURNS:
    434 *  Returns NULL if the function succeeds.
    435 *  Returns a PublicKey Error if the function fails in a non-fatal way.
    436 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    437 */
    438 PKIX_Error *
    439 PKIX_PL_PublicKey_MakeInheritedDSAPublicKey(
    440        PKIX_PL_PublicKey *firstKey,
    441        PKIX_PL_PublicKey *secondKey,
    442        PKIX_PL_PublicKey **pResultKey,
    443        void *plContext);
    444 
    445 /*
    446 * FUNCTION: PKIX_PL_Cert_GetCriticalExtensionOIDs
    447 * DESCRIPTION:
    448 *
    449 *  Retrieves a pointer to the List of OIDs (each OID corresponding to a
    450 *  critical extension of the Cert pointed to by "cert") and stores it at
    451 *  "pExtensions". If "cert" does not have any critical extensions, this
    452 *  function stores an empty List at "pExtensions".
    453 *
    454 *  Note that the List returned by this function is immutable.
    455 *
    456 * PARAMETERS:
    457 *  "cert"
    458 *      Address of Cert whose critical extension OIDs are to be stored.
    459 *      Must be non-NULL.
    460 *  "pExtensions"
    461 *      Address where object pointer will be stored. Must be non-NULL.
    462 *  "plContext"
    463 *      Platform-specific context pointer.
    464 * THREAD SAFETY:
    465 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    466 * RETURNS:
    467 *  Returns NULL if the function succeeds.
    468 *  Returns a Cert Error if the function fails in a non-fatal way.
    469 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    470 */
    471 PKIX_Error *
    472 PKIX_PL_Cert_GetCriticalExtensionOIDs(
    473        PKIX_PL_Cert *cert,
    474        PKIX_List **pExtensions,  /* list of PKIX_PL_OID */
    475        void *plContext);
    476 
    477 /*
    478 * FUNCTION: PKIX_PL_Cert_GetAuthorityKeyIdentifier
    479 * DESCRIPTION:
    480 *
    481 *  Retrieves a pointer to a ByteArray representing the authority key
    482 *  identifier extension of the Cert pointed to by "cert" and stores it at
    483 *  "pAuthKeyId".
    484 *
    485 *  Note that this function only retrieves the keyIdentifier component
    486 *  (OCTET STRING) of the AuthorityKeyIdentifier extension, when present.
    487 *
    488 *  If "cert" does not have an AuthorityKeyIdentifier extension or if the
    489 *  keyIdentifier component of the AuthorityKeyIdentifier extension is not
    490 *  present, this function stores NULL at "pAuthKeyId".
    491 *
    492 *  AuthorityKeyIdentifier ::= SEQUENCE {
    493 *      keyIdentifier                   [0] KeyIdentifier           OPTIONAL,
    494 *      authorityCertIssuer             [1] GeneralNames            OPTIONAL,
    495 *      authorityCertSerialNumber       [2] CertificateSerialNumber OPTIONAL  }
    496 *
    497 * PARAMETERS:
    498 *  "cert"
    499 *      Address of Cert whose authority key identifier is to be stored.
    500 *      Must be non-NULL.
    501 *  "pAuthKeyId"
    502 *      Address where object pointer will be stored. Must be non-NULL.
    503 *  "plContext"
    504 *      Platform-specific context pointer.
    505 * THREAD SAFETY:
    506 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    507 * RETURNS:
    508 *  Returns NULL if the function succeeds.
    509 *  Returns a Cert Error if the function fails in a non-fatal way.
    510 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    511 */
    512 PKIX_Error *
    513 PKIX_PL_Cert_GetAuthorityKeyIdentifier(
    514        PKIX_PL_Cert *cert,
    515        PKIX_PL_ByteArray **pAuthKeyId,
    516        void *plContext);
    517 
    518 /*
    519 * FUNCTION: PKIX_PL_Cert_GetSubjectKeyIdentifier
    520 * DESCRIPTION:
    521 *
    522 *  Retrieves a pointer to a ByteArray representing the subject key identifier
    523 *  extension of the Cert pointed to by "cert" and stores it at "pSubjKeyId".
    524 *  If "cert" does not have a SubjectKeyIdentifier extension, this function
    525 *  stores NULL at "pSubjKeyId".
    526 *
    527 *  SubjectKeyIdentifier ::= KeyIdentifier
    528 *
    529 * PARAMETERS:
    530 *  "cert"
    531 *      Address of Cert whose subject key identifier is to be stored.
    532 *      Must be non-NULL.
    533 *  "pSubjKeyId"
    534 *      Address where object pointer will be stored. Must be non-NULL.
    535 *  "plContext"
    536 *      Platform-specific context pointer.
    537 * THREAD SAFETY:
    538 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    539 * RETURNS:
    540 *  Returns NULL if the function succeeds.
    541 *  Returns a Cert Error if the function fails in a non-fatal way.
    542 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    543 */
    544 PKIX_Error *
    545 PKIX_PL_Cert_GetSubjectKeyIdentifier(
    546        PKIX_PL_Cert *cert,
    547        PKIX_PL_ByteArray **pSubjKeyId,
    548        void *plContext);
    549 
    550 /*
    551 * FUNCTION: PKIX_PL_Cert_GetSubjectAltNames
    552 * DESCRIPTION:
    553 *
    554 *  Retrieves a pointer to the List of GeneralNames (each GeneralName
    555 *  representing a subject alternative name found in the subject alternative
    556 *  names extension of the Cert pointed to by "cert") and stores it at
    557 *  "pSubjectAltNames". If "cert" does not have a SubjectAlternativeNames
    558 *  extension, this function stores NULL at "pSubjectAltNames".
    559 *
    560 *  Note that the List returned by this function is immutable.
    561 *
    562 *  SubjectAltName ::= GeneralNames
    563 *
    564 *  GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
    565 *
    566 *  GeneralName ::= CHOICE {
    567 *      otherName                       [0]     OtherName,
    568 *      rfc822Name                      [1]     IA5String,
    569 *      dNSName                         [2]     IA5String,
    570 *      x400Address                     [3]     ORAddress,
    571 *      directoryName                   [4]     Name,
    572 *      ediPartyName                    [5]     EDIPartyName,
    573 *      uniformResourceIdentifier       [6]     IA5String,
    574 *      iPAddress                       [7]     OCTET STRING,
    575 *      registeredID                    [8]     OBJECT IDENTIFIER }
    576 *
    577 *  OtherName ::= SEQUENCE {
    578 *      type-id                         OBJECT IDENTIFIER,
    579 *      value                           [0] EXPLICIT ANY DEFINED BY type-id }
    580 *
    581 *  EDIPartyName ::= SEQUENCE {
    582 *      nameAssigner                    [0]     DirectoryString OPTIONAL,
    583 *      partyName                       [1]     DirectoryString }
    584 *
    585 * PARAMETERS:
    586 *  "cert"
    587 *      Address of Cert whose subjectAltNames are to be stored.
    588 *      Must be non-NULL.
    589 *  "pSubjectAltNames"
    590 *      Address where object pointer will be stored. Must be non-NULL.
    591 *  "plContext"
    592 *      Platform-specific context pointer.
    593 * THREAD SAFETY:
    594 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    595 * RETURNS:
    596 *  Returns NULL if the function succeeds.
    597 *  Returns a Cert Error if the function fails in a non-fatal way.
    598 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    599 */
    600 PKIX_Error *
    601 PKIX_PL_Cert_GetSubjectAltNames(
    602        PKIX_PL_Cert *cert,
    603        PKIX_List **pSubjectAltNames,  /* list of PKIX_PL_GeneralName */
    604        void *plContext);
    605 
    606 /*
    607 * FUNCTION: PKIX_PL_Cert_GetAllSubjectNames
    608 * DESCRIPTION:
    609 *
    610 *  Retrieves a pointer to the List of GeneralNames (each GeneralName
    611 *  representing a subject DN or a subject alternative name found in the
    612 *  subject alternative names extension of the Cert pointed to by "cert") and
    613 *  stores it at "pAllSubjectNames".If the Subject DN of "cert" is empty and
    614 *  it does not have a SubjectAlternativeNames extension, this function stores
    615 *  NULL at "pAllSubjectNames".
    616 *
    617 *  Note that the List returned by this function is immutable.
    618 *
    619 * PARAMETERS:
    620 *  "cert"
    621 *      Address of Cert whose subject DN and subjectAltNames are to be stored.
    622 *      Must be non-NULL.
    623 *  "pAllSubjectNames"
    624 *      Address where object pointer will be stored. Must be non-NULL.
    625 *  "plContext"
    626 *      Platform-specific context pointer.
    627 * THREAD SAFETY:
    628 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    629 * RETURNS:
    630 *  Returns NULL if the function succeeds.
    631 *  Returns a Cert Error if the function fails in a non-fatal way.
    632 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    633 */
    634 PKIX_Error *
    635 PKIX_PL_Cert_GetAllSubjectNames(
    636        PKIX_PL_Cert *cert,
    637        PKIX_List **pAllSubjectNames,  /* list of PKIX_PL_GeneralName */
    638        void *plContext);
    639 
    640 /*
    641 * FUNCTION: PKIX_PL_Cert_GetExtendedKeyUsage
    642 * DESCRIPTION:
    643 *
    644 *  Retrieves a pointer to a List of OIDs (each OID corresponding to an
    645 *  extended key usage of the Cert pointed to by "cert") and stores it at
    646 *  "pKeyUsage". If "cert" does not have an extended key usage extension, this
    647 *  function stores a NULL at "pKeyUsage".
    648 *
    649 *  Note that the List returned by this function is immutable.
    650 *
    651 *  ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
    652 *
    653 *  KeyPurposeId ::= OBJECT IDENTIFIER
    654 *
    655 * PARAMETERS:
    656 *  "cert"
    657 *      Address of Cert whose extended key usage OIDs are to be stored.
    658 *      Must be non-NULL.
    659 *  "pKeyUsage"
    660 *      Address where object pointer will be stored. Must be non-NULL.
    661 *  "plContext"
    662 *      Platform-specific context pointer.
    663 * THREAD SAFETY:
    664 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    665 * RETURNS:
    666 *  Returns NULL if the function succeeds.
    667 *  Returns a Cert Error if the function fails in a non-fatal way.
    668 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    669 */
    670 PKIX_Error *
    671 PKIX_PL_Cert_GetExtendedKeyUsage(
    672        PKIX_PL_Cert *cert,
    673        PKIX_List **pKeyUsage,  /* list of PKIX_PL_OID */
    674        void *plContext);
    675 
    676 /*
    677 * FUNCTION: PKIX_PL_Cert_GetNameConstraints
    678 * DESCRIPTION:
    679 *
    680 *  Retrieves a pointer to a CertNameConstraints object representing the name
    681 *  constraints extension of the Cert pointed to by "cert" and stores it at
    682 *  "pNameConstraints".
    683 *
    684 *  If "cert" does not have a name constraints extension, this function stores
    685 *  NULL at "pNameConstraints".
    686 *
    687 *  NameConstraints ::= SEQUENCE {
    688 *      permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
    689 *      excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
    690 *
    691 *  GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
    692 *
    693 *  GeneralSubtree ::= SEQUENCE {
    694 *      base                    GeneralName,
    695 *      minimum         [0]     BaseDistance DEFAULT 0,
    696 *      maximum         [1]     BaseDistance OPTIONAL }
    697 *
    698 *  BaseDistance ::= INTEGER (0..MAX)
    699 *
    700 * PARAMETERS:
    701 *  "cert"
    702 *      Address of Cert whose name constraints extension is to be stored.
    703 *      Must be non-NULL.
    704 *  "pNameConstraints"
    705 *      Address where object pointer will be stored. Must be non-NULL.
    706 *  "plContext"
    707 *      Platform-specific context pointer.
    708 * THREAD SAFETY:
    709 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    710 * RETURNS:
    711 *  Returns NULL if the function succeeds.
    712 *  Returns a Cert Error if the function fails in a non-fatal way.
    713 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    714 */
    715 PKIX_Error *
    716 PKIX_PL_Cert_GetNameConstraints(
    717        PKIX_PL_Cert *cert,
    718        PKIX_PL_CertNameConstraints **pNameConstraints,
    719        void *plContext);
    720 
    721 /*
    722 * FUNCTION: PKIX_PL_Cert_GetBasicConstraints
    723 * DESCRIPTION:
    724 *
    725 *  Retrieves a pointer to a CertBasicConstraints object representing the basic
    726 *  constraints extension of the Cert pointed to by "cert" and stores it at
    727 *  "pBasicConstraints".
    728 *
    729 *  If "cert" does not have a basic constraints extension, this function stores
    730 *  NULL at "pBasicConstraints". Once created, a CertBasicConstraints object
    731 *  is immutable.
    732 *
    733 *  BasicConstraints ::= SEQUENCE {
    734 *      cA                      BOOLEAN DEFAULT FALSE,
    735 *      pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
    736 *
    737 * PARAMETERS:
    738 *  "cert"
    739 *      Address of Cert whose basic constraints extension is to be stored.
    740 *      Must be non-NULL.
    741 *  "pBasicConstraints"
    742 *      Address where object pointer will be stored. Must be non-NULL.
    743 *  "plContext"
    744 *      Platform-specific context pointer.
    745 * THREAD SAFETY:
    746 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    747 * RETURNS:
    748 *  Returns NULL if the function succeeds.
    749 *  Returns a Cert Error if the function fails in a non-fatal way.
    750 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    751 */
    752 PKIX_Error *
    753 PKIX_PL_Cert_GetBasicConstraints(
    754        PKIX_PL_Cert *cert,
    755        PKIX_PL_CertBasicConstraints **pBasicConstraints,
    756        void *plContext);
    757 
    758 /*
    759 * FUNCTION: PKIX_PL_BasicConstraints_GetCAFlag
    760 * DESCRIPTION:
    761 *
    762 *  Retrieves a pointer to a Boolean value representing the cA Flag component
    763 *  of the CertBasicConstraints object pointed to by "basicConstraints" and
    764 *  stores it at "pResult".
    765 *
    766 *  BasicConstraints ::= SEQUENCE {
    767 *      cA                      BOOLEAN DEFAULT FALSE,
    768 *      pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
    769 *
    770 * PARAMETERS:
    771 *  "basicConstraints"
    772 *      Address of CertBasicConstraints whose cA Flag is to be stored.
    773 *      Must be non-NULL.
    774 *  "pResult"
    775 *      Address where object pointer will be stored. Must be non-NULL.
    776 *  "plContext"
    777 *      Platform-specific context pointer.
    778 * THREAD SAFETY:
    779 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    780 * RETURNS:
    781 *  Returns NULL if the function succeeds.
    782 *  Returns a Cert Error if the function fails in a non-fatal way.
    783 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    784 */
    785 PKIX_Error *
    786 PKIX_PL_BasicConstraints_GetCAFlag(
    787        PKIX_PL_CertBasicConstraints *basicConstraints,
    788        PKIX_Boolean *pResult,
    789        void *plContext);
    790 
    791 /*
    792 * FUNCTION: PKIX_PL_BasicConstraints_GetPathLenConstraint
    793 * DESCRIPTION:
    794 *
    795 *  Retrieves a pointer to an integer value representing the pathLenConstraint
    796 *  component of the CertBasicConstraints object pointed to by
    797 *  "basicConstraints" and stores it at "pPathLenConstraint". If the
    798 *  pathLenConstraint component is not present, this function stores -1 at
    799 *  "pPathLenConstraint".
    800 *
    801 * PARAMETERS:
    802 *  "basicConstraints"
    803 *      Address of CertBasicConstraints whose pathLen is to be stored.
    804 *      Must be non-NULL.
    805 *  "pPathLenConstraint"
    806 *      Address where PKIX_Int32 will be stored. Must be non-NULL.
    807 *  "plContext"
    808 *      Platform-specific context pointer.
    809 * THREAD SAFETY:
    810 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    811 * RETURNS:
    812 *  Returns NULL if the function succeeds.
    813 *  Returns a Cert Error if the function fails in a non-fatal way.
    814 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    815 */
    816 PKIX_Error *
    817 PKIX_PL_BasicConstraints_GetPathLenConstraint(
    818        PKIX_PL_CertBasicConstraints *basicConstraints,
    819        PKIX_Int32 *pPathLenConstraint,
    820        void *plContext);
    821 
    822 /*
    823 * FUNCTION: PKIX_PL_Cert_GetPolicyInformation
    824 * DESCRIPTION:
    825 *
    826 *  Retrieves a pointer to a List of CertPolicyInfos found in the certificate
    827 *  policies extension of the Cert pointed to by "cert" and stores it at
    828 *  "pPolicyInfo". If "cert" does not have a certificate policies extension,
    829 *  this function stores NULL at "pPolicyInfo". Once created, a CertPolicyInfo
    830 *  object is immutable.
    831 *
    832 *  Note that the List returned by this function is immutable.
    833 *
    834 *  certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
    835 *
    836 *  PolicyInformation ::= SEQUENCE {
    837 *      policyIdentifier   CertPolicyId,
    838 *      policyQualifiers   SEQUENCE SIZE (1..MAX) OF
    839 *                              PolicyQualifierInfo OPTIONAL }
    840 *
    841 * PARAMETERS:
    842 *  "cert"
    843 *      Address of Cert whose CertPolicyInfos are to be stored.
    844 *      Must be non-NULL.
    845 *  "pPolicyInfo"
    846 *      Address where object pointer will be stored. Must be non-NULL.
    847 *  "plContext"
    848 *      Platform-specific context pointer.
    849 * THREAD SAFETY:
    850 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    851 * RETURNS:
    852 *  Returns NULL if the function succeeds.
    853 *  Returns a Cert Error if the function fails in a non-fatal way.
    854 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    855 */
    856 PKIX_Error *
    857 PKIX_PL_Cert_GetPolicyInformation(
    858        PKIX_PL_Cert *cert,
    859        PKIX_List **pPolicyInfo, /* list of PKIX_PL_CertPolicyInfo */
    860        void *plContext);
    861 
    862 /*
    863 * FUNCTION: PKIX_PL_CertPolicyInfo_GetPolicyId
    864 * DESCRIPTION:
    865 *
    866 *  Retrieves a pointer to an OID representing the policyIdentifier of the
    867 *  CertPolicyInfo pointed to by "policyInfo" and stores it at "pCertPolicyId".
    868 *
    869 *  certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
    870 *
    871 *  PolicyInformation ::= SEQUENCE {
    872 *      policyIdentifier   CertPolicyId,
    873 *      policyQualifiers   SEQUENCE SIZE (1..MAX) OF
    874 *                              PolicyQualifierInfo OPTIONAL }
    875 *
    876 *  CertPolicyId ::= OBJECT IDENTIFIER
    877 *
    878 * PARAMETERS:
    879 *  "policyInfo"
    880 *      Address of CertPolicyInfo whose policy identifier is to be stored.
    881 *      Must be non-NULL.
    882 *  "pCertPolicyId"
    883 *      Address where object pointer will be stored. Must be non-NULL.
    884 *  "plContext"
    885 *      Platform-specific context pointer.
    886 * THREAD SAFETY:
    887 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    888 * RETURNS:
    889 *  Returns NULL if the function succeeds.
    890 *  Returns a Cert Error if the function fails in a non-fatal way.
    891 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    892 */
    893 PKIX_Error *
    894 PKIX_PL_CertPolicyInfo_GetPolicyId(
    895        PKIX_PL_CertPolicyInfo *policyInfo,
    896        PKIX_PL_OID **pCertPolicyId,
    897        void *plContext);
    898 
    899 /*
    900 * FUNCTION: PKIX_PL_CertPolicyInfo_GetPolQualifiers
    901 * DESCRIPTION:
    902 *
    903 *  Retrieves a pointer to a List of the CertPolicyQualifiers representing
    904 *  the policyQualifiers of the CertPolicyInfo pointed to by "policyInfo" and
    905 *  stores it at "pPolicyQualifiers". If "policyInfo" does not have any
    906 *  policyQualifiers, this function stores NULL at "pPolicyQualifiers". Once
    907 *  created, a CertPolicyQualifier is immutable.
    908 *
    909 *  Note that the List returned by this function is immutable.
    910 *
    911 *  certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
    912 *
    913 *  PolicyInformation ::= SEQUENCE {
    914 *      policyIdentifier   CertPolicyId,
    915 *      policyQualifiers   SEQUENCE SIZE (1..MAX) OF
    916 *                              PolicyQualifierInfo OPTIONAL }
    917 *
    918 *  PolicyQualifierInfo ::= SEQUENCE {
    919 *      policyQualifierId  PolicyQualifierId,
    920 *      qualifier       ANY DEFINED BY policyQualifierId }
    921 *
    922 * PARAMETERS:
    923 *  "policyInfo"
    924 *      Address of CertPolicyInfo whose policy qualifiers List is to be stored.
    925 *      Must be non-NULL.
    926 *  "pPolicyQualifiers"
    927 *      Address where object pointer will be stored. Must be non-NULL.
    928 *  "plContext"
    929 *      Platform-specific context pointer.
    930 * THREAD SAFETY:
    931 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    932 * RETURNS:
    933 *  Returns NULL if the function succeeds.
    934 *  Returns a Cert Error if the function fails in a non-fatal way.
    935 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    936 */
    937 PKIX_Error *
    938 PKIX_PL_CertPolicyInfo_GetPolQualifiers(
    939        PKIX_PL_CertPolicyInfo *policyInfo,
    940        PKIX_List **pPolicyQualifiers, /* list of PKIX_PL_CertPolicyQualifier */
    941        void *plContext);
    942 
    943 /*
    944 * FUNCTION: PKIX_PL_PolicyQualifier_GetPolicyQualifierId
    945 * DESCRIPTION:
    946 *
    947 *  Retrieves a pointer to an OID representing the policyQualifierId of the
    948 *  CertPolicyQualifier pointed to by "policyQualifier" and stores it at
    949 *  "pPolicyQualifierId".
    950 *
    951 *  PolicyQualifierInfo ::= SEQUENCE {
    952 *      policyQualifierId       PolicyQualifierId,
    953 *      qualifier               ANY DEFINED BY policyQualifierId }
    954 *
    955 *  PolicyQualifierId ::=
    956 *      OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
    957 *
    958 * PARAMETERS:
    959 *  "policyQualifier"
    960 *      Address of CertPolQualifier whose policyQualifierId is to be stored.
    961 *      Must be non-NULL.
    962 *  "pPolicyQualifierId"
    963 *      Address where object pointer will be stored. Must be non-NULL.
    964 *  "plContext"
    965 *      Platform-specific context pointer.
    966 * THREAD SAFETY:
    967 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
    968 * RETURNS:
    969 *  Returns NULL if the function succeeds.
    970 *  Returns a Cert Error if the function fails in a non-fatal way.
    971 *  Returns a Fatal Error if the function fails in an unrecoverable way.
    972 */
    973 PKIX_Error *
    974 PKIX_PL_PolicyQualifier_GetPolicyQualifierId(
    975        PKIX_PL_CertPolicyQualifier *policyQualifier,
    976        PKIX_PL_OID **pPolicyQualifierId,
    977        void *plContext);
    978 
    979 /*
    980 * FUNCTION: PKIX_PL_PolicyQualifier_GetQualifier
    981 * DESCRIPTION:
    982 *
    983 *  Retrieves a pointer to a ByteArray representing the qualifier of the
    984 *  CertPolicyQualifier pointed to by "policyQualifier" and stores it at
    985 *  "pQualifier".
    986 *
    987 *  PolicyQualifierInfo ::= SEQUENCE {
    988 *      policyQualifierId       PolicyQualifierId,
    989 *      qualifier               ANY DEFINED BY policyQualifierId }
    990 *
    991 * PARAMETERS:
    992 *  "policyQualifier"
    993 *      Address of CertPolicyQualifier whose qualifier is to be stored.
    994 *      Must be non-NULL.
    995 *  "pQualifier"
    996 *      Address where object pointer will be stored. Must be non-NULL.
    997 *  "plContext"
    998 *      Platform-specific context pointer.
    999 * THREAD SAFETY:
   1000 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1001 * RETURNS:
   1002 *  Returns NULL if the function succeeds.
   1003 *  Returns a Cert Error if the function fails in a non-fatal way.
   1004 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1005 */
   1006 PKIX_Error *
   1007 PKIX_PL_PolicyQualifier_GetQualifier(
   1008        PKIX_PL_CertPolicyQualifier *policyQualifier,
   1009        PKIX_PL_ByteArray **pQualifier,
   1010        void *plContext);
   1011 
   1012 /*
   1013 * FUNCTION: PKIX_PL_Cert_GetPolicyMappings
   1014 * DESCRIPTION:
   1015 *
   1016 *  Retrieves a pointer to a List of CertPolicyMaps found in the policy
   1017 *  mappings extension of the Cert pointed to by "cert" and stores it at
   1018 *  "pPolicyMappings". If "cert" does not have a policy mappings extension,
   1019 *  this function stores NULL at "pPolicyMappings". Once created, a
   1020 *  CertPolicyMap is immutable.
   1021 *
   1022 *  Note that the List returned by this function is immutable.
   1023 *
   1024 *  PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
   1025 *      issuerDomainPolicy      CertPolicyId,
   1026 *      subjectDomainPolicy     CertPolicyId }
   1027 *
   1028 * PARAMETERS:
   1029 *  "cert"
   1030 *      Address of Cert whose CertPolicyMaps are to be stored.
   1031 *      Must be non-NULL.
   1032 *  "pPolicyMappings"
   1033 *      Address where object pointer will be stored. Must be non-NULL.
   1034 *  "plContext"
   1035 *      Platform-specific context pointer.
   1036 * THREAD SAFETY:
   1037 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1038 * RETURNS:
   1039 *  Returns NULL if the function succeeds.
   1040 *  Returns a Cert Error if the function fails in a non-fatal way.
   1041 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1042 */
   1043 PKIX_Error *
   1044 PKIX_PL_Cert_GetPolicyMappings(
   1045        PKIX_PL_Cert *cert,
   1046        PKIX_List **pPolicyMappings, /* list of PKIX_PL_CertPolicyMap */
   1047        void *plContext);
   1048 
   1049 /*
   1050 * FUNCTION: PKIX_PL_CertPolicyMap_GetIssuerDomainPolicy
   1051 * DESCRIPTION:
   1052 *
   1053 *  Retrieves a pointer to an OID representing the issuerDomainPolicy of the
   1054 *  CertPolicyMap pointed to by "policyMapping" and stores it at
   1055 *  "pIssuerDomainPolicy".
   1056 *
   1057 *  PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
   1058 *      issuerDomainPolicy      CertPolicyId,
   1059 *      subjectDomainPolicy     CertPolicyId }
   1060 *
   1061 * PARAMETERS:
   1062 *  "policyMapping"
   1063 *      Address of CertPolicyMap whose issuerDomainPolicy is to be stored.
   1064 *      Must be non-NULL.
   1065 *  "pIssuerDomainPolicy"
   1066 *      Address where object pointer will be stored. Must be non-NULL.
   1067 *  "plContext"
   1068 *      Platform-specific context pointer.
   1069 * THREAD SAFETY:
   1070 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1071 * RETURNS:
   1072 *  Returns NULL if the function succeeds.
   1073 *  Returns a Cert Error if the function fails in a non-fatal way.
   1074 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1075 */
   1076 PKIX_Error *
   1077 PKIX_PL_CertPolicyMap_GetIssuerDomainPolicy(
   1078        PKIX_PL_CertPolicyMap *policyMapping,
   1079        PKIX_PL_OID **pIssuerDomainPolicy,
   1080        void *plContext);
   1081 
   1082 /*
   1083 * FUNCTION: PKIX_PL_CertPolicyMap_GetSubjectDomainPolicy
   1084 * DESCRIPTION:
   1085 *
   1086 *  Retrieves a pointer to an OID representing the subjectDomainPolicy of the
   1087 *  CertPolicyMap pointed to by "policyMapping" and stores it at
   1088 *  "pSubjectDomainPolicy".
   1089 *
   1090 *  PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
   1091 *      issuerDomainPolicy      CertPolicyId,
   1092 *      subjectDomainPolicy     CertPolicyId }
   1093 *
   1094 * PARAMETERS:
   1095 *  "policyMapping"
   1096 *      Address of CertPolicyMap whose subjectDomainPolicy is to be stored.
   1097 *      Must be non-NULL.
   1098 *  "pSubjectDomainPolicy"
   1099 *      Address where object pointer will be stored. Must be non-NULL.
   1100 *  "plContext"
   1101 *      Platform-specific context pointer.
   1102 * THREAD SAFETY:
   1103 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1104 * RETURNS:
   1105 *  Returns NULL if the function succeeds.
   1106 *  Returns a Cert Error if the function fails in a non-fatal way.
   1107 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1108 */
   1109 PKIX_Error *
   1110 PKIX_PL_CertPolicyMap_GetSubjectDomainPolicy(
   1111        PKIX_PL_CertPolicyMap *policyMapping,
   1112        PKIX_PL_OID **pSubjectDomainPolicy,
   1113        void *plContext);
   1114 
   1115 /*
   1116 * FUNCTION: PKIX_PL_Cert_GetRequireExplicitPolicy
   1117 * DESCRIPTION:
   1118 *
   1119 *  Retrieves the requireExplicitPolicy value of the policy constraints
   1120 *  extension of the Cert pointed to by "cert" and stores it at "pSkipCerts".
   1121 *  If "cert" does not have a policy constraints extension or the
   1122 *  requireExplicitPolicy component is not populated, this function stores -1
   1123 *  at "pSkipCerts".
   1124 *
   1125 *  PolicyConstraints ::= SEQUENCE {
   1126 *      requireExplicitPolicy   [0] SkipCerts OPTIONAL,
   1127 *      inhibitPolicyMapping    [1] SkipCerts OPTIONAL }
   1128 *
   1129 *  SkipCerts ::= INTEGER (0..MAX)
   1130 *
   1131 * PARAMETERS:
   1132 *  "cert"
   1133 *      Address of Cert whose requireExplicitPolicy value is to be stored.
   1134 *      Must be non-NULL.
   1135 *  "pSkipCerts"
   1136 *      Address where PKIX_Int32 will be stored. Must be non-NULL.
   1137 *  "plContext"
   1138 *      Platform-specific context pointer.
   1139 * THREAD SAFETY:
   1140 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1141 * RETURNS:
   1142 *  Returns NULL if the function succeeds.
   1143 *  Returns a Cert Error if the function fails in a non-fatal way.
   1144 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1145 */
   1146 PKIX_Error *
   1147 PKIX_PL_Cert_GetRequireExplicitPolicy(
   1148        PKIX_PL_Cert *cert,
   1149        PKIX_Int32 *pSkipCerts,
   1150        void *plContext);
   1151 
   1152 /*
   1153 * FUNCTION: PKIX_PL_Cert_GetPolicyMappingInhibited
   1154 * DESCRIPTION:
   1155 *
   1156 *  Retrieves the inhibitPolicyMapping value of the policy constraints
   1157 *  extension of the Cert pointed to by "cert" and stores it at "pSkipCerts".
   1158 *  If "cert" does not have a policy constraints extension or the
   1159 *  inhibitPolicyMapping component is not populated, this function stores -1
   1160 *  at "pSkipCerts".
   1161 *
   1162 *  PolicyConstraints ::= SEQUENCE {
   1163 *      requireExplicitPolicy   [0] SkipCerts OPTIONAL,
   1164 *      inhibitPolicyMapping    [1] SkipCerts OPTIONAL }
   1165 *
   1166 *  SkipCerts ::= INTEGER (0..MAX)
   1167 *
   1168 * PARAMETERS:
   1169 *  "cert"
   1170 *      Address of Cert whose requireExplicitPolicy value is to be stored.
   1171 *      Must be non-NULL.
   1172 *  "pSkipCerts"
   1173 *      Address where PKIX_Int32 will be stored. Must be non-NULL.
   1174 *  "plContext"
   1175 *      Platform-specific context pointer.
   1176 * THREAD SAFETY:
   1177 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1178 * RETURNS:
   1179 *  Returns NULL if the function succeeds.
   1180 *  Returns a Cert Error if the function fails in a non-fatal way.
   1181 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1182 */
   1183 PKIX_Error *
   1184 PKIX_PL_Cert_GetPolicyMappingInhibited(
   1185        PKIX_PL_Cert *cert,
   1186        PKIX_Int32 *pSkipCerts,
   1187        void *plContext);
   1188 
   1189 /*
   1190 * FUNCTION: PKIX_PL_Cert_GetInhibitAnyPolicy
   1191 * DESCRIPTION:
   1192 *
   1193 *  Retrieves the value of the inhibit any-policy extension of the Cert
   1194 *  pointed to by "cert" and stores it at "pSkipCerts". If "cert" does not have
   1195 *  an inhibit any-policy extension, this function stores -1 at "pSkipCerts".
   1196 *
   1197 *  InhibitAnyPolicy ::= SkipCerts
   1198 *
   1199 *  SkipCerts ::= INTEGER (0..MAX)
   1200 *
   1201 * PARAMETERS:
   1202 *  "cert"
   1203 *      Address of Cert whose inhibit any-policy extensions value is to be
   1204 *      stored. Must be non-NULL.
   1205 *  "pSkipCerts"
   1206 *      Address where PKIX_Int32 will be stored. Must be non-NULL.
   1207 *  "plContext"
   1208 *      Platform-specific context pointer.
   1209 * THREAD SAFETY:
   1210 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1211 * RETURNS:
   1212 *  Returns NULL if the function succeeds.
   1213 *  Returns a Cert Error if the function fails in a non-fatal way.
   1214 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1215 */
   1216 PKIX_Error *
   1217 PKIX_PL_Cert_GetInhibitAnyPolicy(
   1218        PKIX_PL_Cert *cert,
   1219        PKIX_Int32 *pSkipCerts,
   1220        void *plContext);
   1221 
   1222 /* policy processing functions */
   1223 
   1224 /*
   1225 * FUNCTION: PKIX_PL_Cert_AreCertPoliciesCritical
   1226 * DESCRIPTION:
   1227 *
   1228 *  Checks whether the certificate policies extension of the Cert pointed to
   1229 *  by "cert" is critical and stores the Boolean result at "pCritical". If
   1230 *  "cert" does not have a certificate policies extension, this function
   1231 *  stores NULL at "pCritical".
   1232 *
   1233 *  XXX what distinguishes NULL from PKIX_FALSE?
   1234 *
   1235 * PARAMETERS:
   1236 *  "cert"
   1237 *      Address of Cert whose certificate policies extension's criticality is
   1238 *      to be determined. Must be non-NULL.
   1239 *  "pCritical"
   1240 *      Address where PKIX_Boolean will be stored. Must be non-NULL.
   1241 *  "plContext"
   1242 *      Platform-specific context pointer.
   1243 * THREAD SAFETY:
   1244 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1245 * RETURNS:
   1246 *  Returns NULL if the function succeeds.
   1247 *  Returns a Cert Error if the function fails in a non-fatal way.
   1248 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1249 */
   1250 PKIX_Error *
   1251 PKIX_PL_Cert_AreCertPoliciesCritical(
   1252        PKIX_PL_Cert *cert,
   1253        PKIX_Boolean *pCritical,
   1254        void *plContext);
   1255 
   1256 /*
   1257 * FUNCTION: PKIX_PL_Cert_CheckNameConstraints
   1258 * DESCRIPTION:
   1259 *
   1260 *  Checks whether the subject distinguished name and subject alternative names
   1261 *  of the Cert pointed to by "cert" satisfy the CertNameConstraints pointed
   1262 *  to by "nameConstraints". If the CertNameConstraints are not satisfied, a
   1263 *  PKIX_Error pointer is returned. If "nameConstraints" is NULL, the function
   1264 *  does nothing.
   1265 *
   1266 * PARAMETERS:
   1267 *  "cert"
   1268 *      Address of Cert whose subject names are to be checked.
   1269 *      Must be non-NULL.
   1270 *  "nameConstraints"
   1271 *      Address of CertNameConstraints that need to be satisfied.
   1272 *  "treatCommonNameAsDNSName"
   1273 *      PKIX_TRUE if the subject common name should be considered a dNSName
   1274 *      when evaluating name constraints.
   1275 *  "plContext"
   1276 *      Platform-specific context pointer.
   1277 * THREAD SAFETY:
   1278 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1279 * RETURNS:
   1280 *  Returns NULL if the function succeeds.
   1281 *  Returns a Cert Error if the function fails in a non-fatal way.
   1282 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1283 */
   1284 PKIX_Error *
   1285 PKIX_PL_Cert_CheckNameConstraints(
   1286        PKIX_PL_Cert *cert,
   1287        PKIX_PL_CertNameConstraints *nameConstraints,
   1288        PKIX_Boolean treatCommonNameAsDNSName,
   1289        void *plContext);
   1290 
   1291 /*
   1292 * FUNCTION: PKIX_PL_Cert_MergeNameConstraints
   1293 * DESCRIPTION:
   1294 *
   1295 *  Merges the CertNameConstraints pointed to by "firstNC" and the
   1296 *  CertNameConstraints pointed to by "secondNC" and stores the merged
   1297 *  CertNameConstraints at "pResultNC". If "secondNC" is NULL, the
   1298 *  CertNameConstraints pointed to by "firstNC" is stored at "pResultNC".
   1299 *
   1300 *  Once created, a CertNameConstraints object is immutable.
   1301 *
   1302 * PARAMETERS:
   1303 *  "firstNC"
   1304 *      Address of first CertNameConstraints to be merged. Must be non-NULL.
   1305 *  "secondNC"
   1306 *      Address of second CertNameConstraints to be merged
   1307 *  "pResultNC"
   1308 *      Address where object pointer will be stored. Must be non-NULL.
   1309 *  "plContext"
   1310 *      Platform-specific context pointer.
   1311 * THREAD SAFETY:
   1312 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1313 * RETURNS:
   1314 *  Returns NULL if the function succeeds.
   1315 *  Returns a Cert Error if the function fails in a non-fatal way.
   1316 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1317 */
   1318 PKIX_Error *
   1319 PKIX_PL_Cert_MergeNameConstraints(
   1320        PKIX_PL_CertNameConstraints *firstNC,
   1321        PKIX_PL_CertNameConstraints *secondNC,
   1322        PKIX_PL_CertNameConstraints **pResultNC,
   1323        void *plContext);
   1324 
   1325 /*
   1326 * FUNCTION: PKIX_PL_Cert_VerifyKeyUsage
   1327 * DESCRIPTION:
   1328 *
   1329 *  Verifies that the keyUsage bit(s) specified by "keyUsage" appear in the
   1330 *  keyUsage extension of the Cert pointed to by "cert". The keyUsage bit
   1331 *  values specified in pkixt.h are supported, and can be bitwise or'ed if
   1332 *  multiple bit values are to be verified. If the keyUsages do not all appear
   1333 *  in the keyUsage extension of "cert", a PKIX_Error pointer is returned.
   1334 *
   1335 *  KeyUsage ::= BIT STRING {
   1336 *      digitalSignature        (0),
   1337 *      nonRepudiation          (1),
   1338 *      keyEncipherment         (2),
   1339 *      dataEncipherment        (3),
   1340 *      keyAgreement            (4),
   1341 *      keyCertSign             (5),
   1342 *      cRLSign                 (6),
   1343 *      encipherOnly            (7),
   1344 *      decipherOnly            (8) }
   1345 *
   1346 * PARAMETERS:
   1347 *  "cert"
   1348 *      Address of Cert whose keyUsage bits are to be verified.
   1349 *      Must be non-NULL.
   1350 *  "keyUsage"
   1351 *      Constant representing keyUsage bit(s) that all must appear in keyUsage
   1352 *      extension of "cert".
   1353 *  "plContext" - Platform-specific context pointer.
   1354 * THREAD SAFETY:
   1355 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1356 * RETURNS:
   1357 *  Returns NULL if the function succeeds.
   1358 *  Returns a Cert Error if the function fails in a non-fatal way.
   1359 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1360 */
   1361 PKIX_Error *
   1362 PKIX_PL_Cert_VerifyKeyUsage(
   1363        PKIX_PL_Cert *cert,
   1364        PKIX_UInt32 keyUsage,
   1365        void *plContext);
   1366 
   1367 /*
   1368 * FUNCTION: PKIX_PL_Cert_VerifyCertAndKeyType
   1369 * DESCRIPTION:
   1370 *
   1371 * Verifies cert and key types against certificate usage that is
   1372 * a part of plContext(pkix_pl_nsscontext) structure. Throws an error
   1373 * if cert or key types does not match.
   1374 *
   1375 * PARAMETERS:
   1376 *  "cert"
   1377 *      Address of Cert whose keyUsage bits are to be verified.
   1378 *      Must be non-NULL.
   1379 *  "isLeafCert"
   1380 *      What type of a cert has been verified.
   1381 *  "plContext" - Platform-specific context pointer.
   1382 * THREAD SAFETY:
   1383 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1384 * RETURNS:
   1385 *  Returns NULL if the function succeeds.
   1386 *  Returns a Cert Error if the function fails in a non-fatal way.
   1387 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1388 */
   1389 PKIX_Error *
   1390 PKIX_PL_Cert_VerifyCertAndKeyType(
   1391        PKIX_PL_Cert *cert,
   1392        PKIX_Boolean isChainCert,
   1393        void *plContext);
   1394 
   1395 /*
   1396 * FUNCTION: PKIX_PL_Cert_CheckValidity
   1397 * DESCRIPTION:
   1398 *
   1399 *  Checks whether the Cert pointed to by "cert" would be valid at the time
   1400 *  represented by the Date pointed to by "date". If "date" is NULL, then this
   1401 *  function checks whether the Cert would be valid at the current time. If the
   1402 *  Cert would not be valid at the specified Date, a PKIX_Error pointer is
   1403 *  returned.
   1404 *
   1405 *  Validity ::= SEQUENCE {
   1406 *      notBefore       Time,
   1407 *      notAfter        Time }
   1408 *
   1409 *  Time ::= CHOICE {
   1410 *      utcTime         UTCTime,
   1411 *      generalTime     GeneralizedTime }
   1412 *
   1413 * PARAMETERS:
   1414 *  "cert"
   1415 *      Address of Cert whose validity is to be checked. Must be non-NULL.
   1416 *  "date"
   1417 *      Address of Date at which the Cert is being checked for validity.
   1418 *      If NULL, the current time is used for the Date.
   1419 *  "plContext"
   1420 *      Platform-specific context pointer.
   1421 * THREAD SAFETY:
   1422 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1423 * RETURNS:
   1424 *  Returns NULL if the function succeeds.
   1425 *  Returns a Cert Error if the function fails in a non-fatal way.
   1426 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1427 */
   1428 PKIX_Error *
   1429 PKIX_PL_Cert_CheckValidity(
   1430        PKIX_PL_Cert *cert,
   1431        PKIX_PL_Date *date,
   1432        void *plContext);
   1433 
   1434 /*
   1435 * FUNCTION: PKIX_PL_Cert_GetValidityNotAfter
   1436 * DESCRIPTION:
   1437 *
   1438 *  Retrieves a pointer to the Date that represents the notAfter time of the
   1439 *  Certificate pointed to by "cert" and stores it at "pDate".
   1440 *
   1441 *  Validity ::= SEQUENCE {
   1442 *      notBefore       Time,
   1443 *      notAfter        Time }
   1444 *
   1445 * PARAMETERS:
   1446 *  "cert"
   1447 *      Address of Cert whose validity time is to be retrieved. Must be
   1448 *      non-NULL.
   1449 *  "date"
   1450 *      Address of Date at which the Cert's notAfter time is being retrieved.
   1451 *      Must be non-NULL.
   1452 *  "plContext"
   1453 *      Platform-specific context pointer.
   1454 * THREAD SAFETY:
   1455 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1456 * RETURNS:
   1457 *  Returns NULL if the function succeeds.
   1458 *  Returns a Cert Error if the function fails in a non-fatal way.
   1459 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1460 */
   1461 PKIX_Error *
   1462 PKIX_PL_Cert_GetValidityNotAfter(
   1463        PKIX_PL_Cert *cert,
   1464        PKIX_PL_Date **pDate,
   1465        void *plContext);
   1466 
   1467 /*
   1468 * FUNCTION: PKIX_PL_Cert_VerifySignature
   1469 * DESCRIPTION:
   1470 *
   1471 *  Verifies the signature on the Cert pointed to by "cert" using the
   1472 *  PublicKey pointed to by "pubKey". If the signature doesn't verify, an
   1473 *  Error pointer is returned.
   1474 *
   1475 * PARAMETERS:
   1476 *  "cert"
   1477 *      Address of Cert whose signature is to be verified. Must be non-NULL.
   1478 *  "pubKey"
   1479 *      Address of a Public Key used to verify the signature. Must be non-NULL.
   1480 *  "plContext"
   1481 *      Platform-specific context pointer.
   1482 * THREAD SAFETY:
   1483 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1484 * RETURNS:
   1485 *  Returns NULL if the function succeeds.
   1486 *  Returns a Cert Error if the function fails in a non-fatal way.
   1487 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1488 */
   1489 PKIX_Error *
   1490 PKIX_PL_Cert_VerifySignature(
   1491        PKIX_PL_Cert *cert,
   1492        PKIX_PL_PublicKey *pubKey,
   1493        void *plContext);
   1494 
   1495 /* A set of flags to indicate how explicitly configured trust anchors should be
   1496 * handled by PKIX_PL_Cert_IsCertTrusted
   1497 */
   1498 typedef enum PKIX_PL_TrustAnchorModeEnum {
   1499        /* Indicates trust anchors should be ignored; only the underlying
   1500         * platform's trust settings should be used.
   1501         */
   1502        PKIX_PL_TrustAnchorMode_Ignore,
   1503 
   1504        /* Indicates that explicitly configured trust anchors may be considered
   1505         * trustworthy, if present.
   1506         * Note: If the underlying platform supports marking a certificate as
   1507         *       explicitly untrustworthy, explicitly configured trust anchors
   1508         *       MAY be ignored/rejected.
   1509         */
   1510        PKIX_PL_TrustAnchorMode_Additive,
   1511 
   1512        /* Indicates that ONLY trust anchors should be considered as
   1513         * trustworthy.
   1514         * Note: If the underlying platform supports marking a certificate as
   1515         *       explicitly untrustworthy, explicitly configured trust anchors
   1516         *       MAY be ignored/rejected.
   1517         */
   1518        PKIX_PL_TrustAnchorMode_Exclusive
   1519 } PKIX_PL_TrustAnchorMode;
   1520 
   1521 /*
   1522 * FUNCTION: PKIX_PL_Cert_IsCertTrusted
   1523 * DESCRIPTION:
   1524 *
   1525 *  Checks the Cert specified by "cert" to determine, in a manner that depends
   1526 *  on the underlying platform, whether it is trusted, and stores the result in
   1527 *  "pTrusted". If a certificate is trusted it means that a chain built to that
   1528 *  certificate, and satisfying all the usage, policy, validity, and other
   1529 *  tests, is a valid chain and the End Entity certificate from which it was
   1530 *  built can be trusted.
   1531 *
   1532 *  If the Certificate is not intrinsically trustworthy, it still might end up a
   1533 *  component in a successful chain.
   1534 *
   1535 *  If the Certificate is intrinsically untrustworthy, this function will return
   1536 *  an error. 
   1537 *
   1538 * PARAMETERS
   1539 *  "cert"
   1540 *      Address of Cert whose trustworthiness is to be determined. Must be
   1541 *      non-NULL.
   1542 *  "trustAnchorMode"
   1543 *      A PKIX_PL_TrustAnchorMode that indicates how explicitly defined user
   1544 *      trust anchors should be handled.
   1545 *  "pTrusted"
   1546 *      Address where the Boolean value will be stored. Must be non-NULL.
   1547 *  "plContext"
   1548 *      Platform-specific context pointer.
   1549 * THREAD SAFETY:
   1550 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1551 * RETURNS:
   1552 *  Returns NULL if the function succeeds.
   1553 *  Returns a CERT Error if the function fails in a non-fatal way.
   1554 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1555 */
   1556 PKIX_Error *
   1557 PKIX_PL_Cert_IsCertTrusted(
   1558        PKIX_PL_Cert *cert,
   1559        PKIX_PL_TrustAnchorMode trustAnchorMode,
   1560        PKIX_Boolean *pTrusted,
   1561        void *plContext);
   1562 
   1563 /*
   1564 * FUNCTION: PKIX_PL_Cert_IsLeafCertTrusted
   1565 * DESCRIPTION:
   1566 *
   1567 *  Checks the Leaf Cert specified by "cert" to determine, in a manner that 
   1568 *  depends on the underlying platform, whether it is trusted, and stores the 
   1569 *  result in "pTrusted". If a certificate is trusted it means that this
   1570 *  End Entify certificate has been marked as trusted for the requested usage,
   1571 *  policy, validity, and other tests.
   1572 *
   1573 *  If the Certificate is not intrinsically trustworthy, we can still try to 
   1574 *  build a successful chain.
   1575 *
   1576 *  If the Certificate is intrinsically untrustworthy, this function will return
   1577 *  an error. 
   1578 *
   1579 * PARAMETERS
   1580 *  "cert"
   1581 *      Address of Cert whose trustworthiness is to be determined. Must be
   1582 *      non-NULL.
   1583 *  "pTrusted"
   1584 *      Address where the Boolean value will be stored. Must be non-NULL.
   1585 *  "plContext"
   1586 *      Platform-specific context pointer.
   1587 * THREAD SAFETY:
   1588 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1589 * RETURNS:
   1590 *  Returns NULL if the function succeeds.
   1591 *  Returns a CERT Error if the function fails in a non-fatal way.
   1592 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1593 */
   1594 PKIX_Error *
   1595 PKIX_PL_Cert_IsLeafCertTrusted(
   1596        PKIX_PL_Cert *cert,
   1597        PKIX_Boolean *pTrusted,
   1598        void *plContext);
   1599 
   1600 /* FUNCTION: PKIX_PL_Cert_SetAsTrustAnchor */
   1601 PKIX_Error*
   1602 PKIX_PL_Cert_SetAsTrustAnchor(PKIX_PL_Cert *cert, 
   1603                              void *plContext);
   1604 
   1605 /*
   1606 * FUNCTION: PKIX_PL_Cert_GetCacheFlag
   1607 * DESCRIPTION:
   1608 *
   1609 *  Retrieves the value of the cache flag in "cert" and return it at address
   1610 *  pointed by "pCacheFlag". The initila cache flag is determined by the
   1611 *  CertStore this "cert" is fetched from. When CertStore is created, user
   1612 *  need to specify if the data should be cached.
   1613 *
   1614 * PARAMETERS:
   1615 *  "cert"
   1616 *      Address of Cert whose cache flag is fetched. Must be non-NULL.
   1617 *  "pCacheFlag"
   1618 *      Address where PKIX_Boolean will be stored. Must be non-NULL.
   1619 *  "plContext"
   1620 *      Platform-specific context pointer.
   1621 * THREAD SAFETY:
   1622 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1623 * RETURNS:
   1624 *  Returns NULL if the function succeeds.
   1625 *  Returns a Cert Error if the function fails in a non-fatal way.
   1626 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1627 */
   1628 PKIX_Error *
   1629 PKIX_PL_Cert_GetCacheFlag(
   1630        PKIX_PL_Cert *cert,
   1631        PKIX_Boolean *pCacheFlag,
   1632        void *plContext);
   1633 
   1634 /*
   1635 * FUNCTION: PKIX_PL_Cert_SetCacheFlag
   1636 * DESCRIPTION:
   1637 *
   1638 *  Set the value of the cache flag in "cert" base on the boolean value stored
   1639 *  at "cacheFlag". This function is meant to be used by CertStore after a
   1640 *  Cert is created.
   1641 *
   1642 * PARAMETERS:
   1643 *  "cert"
   1644 *      Address of Cert where "cacheFlag" is stored. Must be non-NULL.
   1645 *  "cacheFlag"
   1646 *      PKIX_Boolean flag for cache flag.
   1647 *  "plContext"
   1648 *      Platform-specific context pointer.
   1649 * THREAD SAFETY:
   1650 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1651 * RETURNS:
   1652 *  Returns NULL if the function succeeds.
   1653 *  Returns a Cert Error if the function fails in a non-fatal way.
   1654 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1655 */
   1656 PKIX_Error *
   1657 PKIX_PL_Cert_SetCacheFlag(
   1658        PKIX_PL_Cert *cert,
   1659        PKIX_Boolean cacheFlag,
   1660        void *plContext);
   1661 
   1662 /*
   1663 * FUNCTION: PKIX_PL_Cert_GetTrustCertStore
   1664 * DESCRIPTION:
   1665 *
   1666 *  Retrieves the value of the CertStore in "cert" and return it at address
   1667 *  pointed by "pCertStore".
   1668 *
   1669 * PARAMETERS:
   1670 *  "cert"
   1671 *      Address of Cert whose CertStore is fetched. Must be non-NULL.
   1672 *  "pTrustCertStore"
   1673 *      Address where CertStore will be stored and returned. Must be non-NULL.
   1674 *  "plContext"
   1675 *      Platform-specific context pointer.
   1676 * THREAD SAFETY:
   1677 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1678 * RETURNS:
   1679 *  Returns NULL if the function succeeds.
   1680 *  Returns a Cert Error if the function fails in a non-fatal way.
   1681 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1682 */
   1683 PKIX_Error *
   1684 PKIX_PL_Cert_GetTrustCertStore(
   1685        PKIX_PL_Cert *cert,
   1686        PKIX_CertStore **pTrustCertStore,
   1687        void *plContext);
   1688 
   1689 /*
   1690 * FUNCTION: PKIX_PL_Cert_SetTrustCertStore
   1691 * DESCRIPTION:
   1692 *
   1693 *  Set the value of the CertStore "certStore" in "cert".
   1694 *
   1695 * PARAMETERS:
   1696 *  "cert"
   1697 *      Address of Cert where "certStore" will be stored. Must be non-NULL.
   1698 *  "trustCertStore"
   1699 *      Address where the CertStore is. Must be non-NULL.
   1700 *  "plContext"
   1701 *      Platform-specific context pointer.
   1702 * THREAD SAFETY:
   1703 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1704 * RETURNS:
   1705 *  Returns NULL if the function succeeds.
   1706 *  Returns a Cert Error if the function fails in a non-fatal way.
   1707 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1708 */
   1709 PKIX_Error *
   1710 PKIX_PL_Cert_SetTrustCertStore(
   1711        PKIX_PL_Cert *cert,
   1712        PKIX_CertStore *trustCertStore,
   1713        void *plContext);
   1714 
   1715 
   1716 /*
   1717 * FUNCTION: PKIX_PL_Cert_GetAuthorityInfoAccess
   1718 * DESCRIPTION:
   1719 *
   1720 *  Retrieves the value(s) of the Authority Information Access in "cert" and
   1721 *  returns it in a list at address pointed by "pAuthorityInfoAccess".
   1722 *
   1723 *  SubjectInfoAccess ::=
   1724 *    SEQUENCE SIZE (1..MAX) of AccessDescription
   1725 *    AccessDescription ::= SEQUENCE {
   1726 *        accessMethod     OBJECT IDENTIFIER,
   1727 *        accessLocation   GeneralName
   1728 *    }
   1729 *
   1730 * PARAMETERS:
   1731 *  "cert"
   1732 *      Address of Cert whose Authority Information Access is fetched.
   1733 *      Must be non-NULL.
   1734 *  "pAuthorityInfoAccess"
   1735 *      Address where Authority InfoAccess will be stored and returned.
   1736 *      Must be non-NULL.
   1737 *  "plContext"
   1738 *      Platform-specific context pointer.
   1739 * THREAD SAFETY:
   1740 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1741 * RETURNS:
   1742 *  Returns NULL if the function succeeds.
   1743 *  Returns a Cert Error if the function fails in a non-fatal way.
   1744 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1745 */
   1746 PKIX_Error *
   1747 PKIX_PL_Cert_GetAuthorityInfoAccess(
   1748        PKIX_PL_Cert *cert,
   1749        PKIX_List **pAiaList, /* of PKIX_PL_InfoAccess */
   1750        void *plContext);
   1751 
   1752 
   1753 /*
   1754 * FUNCTION: PKIX_PL_Cert_GetSubjectInfoAccess
   1755 * DESCRIPTION:
   1756 *
   1757 *  Retrieves the value(s) of the Subject Information Access in "cert" and
   1758 *  returns it in a list at address pointed by "pSubjectInfoAccess".
   1759 *
   1760 *  SubjectInfoAccess ::=
   1761 *    SEQUENCE SIZE (1..MAX) of AccessDescription
   1762 *    AccessDescription ::= SEQUENCE {
   1763 *        accessMethod     OBJECT IDENTIFIER,
   1764 *        accessLocation   GeneralName
   1765 *    }
   1766 *
   1767 * PARAMETERS:
   1768 *  "cert"
   1769 *      Address of Cert whose Subject Information Access is fetched.
   1770 *      Must be non-NULL.
   1771 *  "pSubjectInfoAccess"
   1772 *      Address where Subject InfoAccess will be stored and returned.
   1773 *      Must be non-NULL.
   1774 *  "plContext"
   1775 *      Platform-specific context pointer.
   1776 * THREAD SAFETY:
   1777 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1778 * RETURNS:
   1779 *  Returns NULL if the function succeeds.
   1780 *  Returns a Cert Error if the function fails in a non-fatal way.
   1781 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1782 */
   1783 PKIX_Error *
   1784 PKIX_PL_Cert_GetSubjectInfoAccess(
   1785        PKIX_PL_Cert *cert,
   1786        PKIX_List **pSiaList, /* of PKIX_PL_InfoAccess */
   1787        void *plContext);
   1788 
   1789 
   1790 
   1791 /*
   1792 * FUNCTION: PKIX_PL_Cert_GetCrlDp
   1793 * DESCRIPTION:
   1794 *
   1795 *  Retrieves the value(s) of the CRL Distribution Point Extension and
   1796 *  returns it in a list at address pointed by "pDpList".
   1797 *
   1798 * PARAMETERS:
   1799 *  "cert"
   1800 *      Address of Cert whose Subject Information Access is fetched.
   1801 *      Must be non-NULL.
   1802 *  "pDpList"
   1803 *      Address where CRL DP will be stored and returned.
   1804 *      Must be non-NULL.
   1805 *  "plContext"
   1806 *      Platform-specific context pointer.
   1807 * THREAD SAFETY:
   1808 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1809 * RETURNS:
   1810 *  Returns NULL if the function succeeds.
   1811 *  Returns a Cert Error if the function fails in a non-fatal way.
   1812 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1813 */
   1814 PKIX_Error *
   1815 PKIX_PL_Cert_GetCrlDp(PKIX_PL_Cert *cert,
   1816                      PKIX_List **pDpList,
   1817                      void *plContext);
   1818 
   1819 
   1820 /*
   1821 * InfoAccess 
   1822 *
   1823 * To hold Authority Information Access or Subject Information Access
   1824 * retrieved from a Certificate.
   1825 */
   1826 
   1827 #define PKIX_INFOACCESS_OCSP          1
   1828 #define PKIX_INFOACCESS_CA_ISSUERS    2
   1829 #define PKIX_INFOACCESS_TIMESTAMPING  3
   1830 #define PKIX_INFOACCESS_CA_REPOSITORY 5
   1831 
   1832 #define PKIX_INFOACCESS_LOCATION_UNKNOWN 0
   1833 #define PKIX_INFOACCESS_LOCATION_HTTP    1
   1834 #ifndef NSS_PKIX_NO_LDAP
   1835 #define PKIX_INFOACCESS_LOCATION_LDAP    2
   1836 #endif
   1837 
   1838 /*
   1839 * FUNCTION: PKIX_PL_InfoAccess_GetMethod
   1840 * DESCRIPTION:
   1841 *
   1842 *  Stores the method of the Information Access from "infoAccess" and
   1843 *  returns in "pMethod".
   1844 *
   1845 *  SubjectInfoAccess ::=
   1846 *    AccessDescription ::= SEQUENCE {
   1847 *        accessMethod     OBJECT IDENTIFIER,
   1848 *        accessLocation   GeneralName
   1849 *    }
   1850 *
   1851 * PARAMETERS:
   1852 *  "infoAccess"
   1853 *      Address of PKIX_PL_InfoAccess that has the access data.
   1854 *      Must be non-NULL.
   1855 *  "pMethod"
   1856 *      Address where access method will be stored and returned.
   1857 *      Must be non-NULL.
   1858 *  "plContext"
   1859 *      Platform-specific context pointer.
   1860 * THREAD SAFETY:
   1861 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1862 * RETURNS:
   1863 *  Returns NULL if the function succeeds.
   1864 *  Returns a Cert Error if the function fails in a non-fatal way.
   1865 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1866 */
   1867 PKIX_Error *
   1868 PKIX_PL_InfoAccess_GetMethod(
   1869        PKIX_PL_InfoAccess *infoAccess,
   1870        PKIX_UInt32 *pMethod,
   1871        void *plContext);
   1872 
   1873 /*
   1874 * FUNCTION: PKIX_PL_InfoAccess_GetLocation
   1875 * DESCRIPTION:
   1876 *
   1877 *  Stores the location of the Information Access from "infoAccess" and
   1878 *  returns in "pLocation".
   1879 *
   1880 *  SubjectInfoAccess ::=
   1881 *    AccessDescription ::= SEQUENCE {
   1882 *        accessMethod     OBJECT IDENTIFIER,
   1883 *        accessLocation   GeneralName
   1884 *    }
   1885 *
   1886 * PARAMETERS:
   1887 *  "infoAccess"
   1888 *      Address of PKIX_PL_InfoAccess that has the access data.
   1889 *      Must be non-NULL.
   1890 *  "pLocation"
   1891 *      Address where access location will be stored and returned.
   1892 *      Must be non-NULL.
   1893 *  "plContext"
   1894 *      Platform-specific context pointer.
   1895 * THREAD SAFETY:
   1896 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1897 * RETURNS:
   1898 *  Returns NULL if the function succeeds.
   1899 *  Returns a Cert Error if the function fails in a non-fatal way.
   1900 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1901 */
   1902 PKIX_Error *
   1903 PKIX_PL_InfoAccess_GetLocation(
   1904        PKIX_PL_InfoAccess *infoAccess,
   1905        PKIX_PL_GeneralName **pLocation,
   1906        void *plContext);
   1907 
   1908 /*
   1909 * FUNCTION: PKIX_PL_InfoAccess_GetLocationType
   1910 * DESCRIPTION:
   1911 *
   1912 *  Stores the type of location of the Information Access from "infoAccess" and
   1913 *  returns in "pType".
   1914 *
   1915 *  SubjectInfoAccess ::=
   1916 *    AccessDescription ::= SEQUENCE {
   1917 *        accessMethod     OBJECT IDENTIFIER,
   1918 *        accessLocation   GeneralName
   1919 *    }
   1920 *
   1921 * PARAMETERS:
   1922 *  "infoAccess"
   1923 *      Address of PKIX_PL_InfoAccess that has the access data.
   1924 *      Must be non-NULL.
   1925 *  "pType"
   1926 *      Address where access location type will be stored and returned.
   1927 *      Must be non-NULL.
   1928 *  "plContext"
   1929 *      Platform-specific context pointer.
   1930 * THREAD SAFETY:
   1931 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   1932 * RETURNS:
   1933 *  Returns NULL if the function succeeds.
   1934 *  Returns a Cert Error if the function fails in a non-fatal way.
   1935 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   1936 */
   1937 PKIX_Error *
   1938 PKIX_PL_InfoAccess_GetLocationType(
   1939        PKIX_PL_InfoAccess *infoAccess,
   1940        PKIX_UInt32 *pType,
   1941        void *plContext);
   1942 
   1943 PKIX_Error *
   1944 pkix_pl_InfoAccess_GetAIACerts(
   1945        PKIX_PL_InfoAccess *ia,
   1946        void **pNBIOContext,
   1947        void **pHandle,
   1948        PKIX_List **pCerts,
   1949        void *plContext);
   1950 
   1951 /*
   1952 * CRL
   1953 *
   1954 * A CRL represents an X.509 certificate revocation list. It can be created
   1955 * using the bytes of a valid ASN.1 DER encoding. Once created, a CRL is
   1956 * immutable. The following functions include accessors (gettors) for the
   1957 * various components of an X.509 CRL, as well as a function for signature
   1958 * verification.
   1959 */
   1960 
   1961 /*
   1962 * FUNCTION: PKIX_PL_CRL_Create
   1963 * DESCRIPTION:
   1964 *
   1965 *  Creates a new CRL using the bytes in the ByteArray pointed to by
   1966 *  "byteArray" and stores it at "pCRL". If the bytes are not a valid ASN.1
   1967 *  DER encoding of a CRL, a PKIX_Error pointer is returned. Once created, a
   1968 *  CRL is immutable.
   1969 *
   1970 *  CertificateList  ::=  SEQUENCE  {
   1971 *      tbsCertList             TBSCertList,
   1972 *      signatureAlgorithm      AlgorithmIdentifier,
   1973 *      signatureValue          BIT STRING  }
   1974 *
   1975 *  TBSCertList  ::=  SEQUENCE  {
   1976 *      version                 Version OPTIONAL,
   1977 *                              -- if present, MUST be v2
   1978 *      signature               AlgorithmIdentifier,
   1979 *      issuer                  Name,
   1980 *      thisUpdate              Time,
   1981 *      nextUpdate              Time OPTIONAL,
   1982 *      revokedCertificates     SEQUENCE OF SEQUENCE  {
   1983 *              userCertificate         CertificateSerialNumber,
   1984 *              revocationDate          Time,
   1985 *              crlEntryExtensions      Extensions OPTIONAL
   1986 *                                      -- if present, MUST be v2
   1987 *                              }  OPTIONAL,
   1988 *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
   1989 *                                      -- if present, MUST be v2
   1990 *      }
   1991 *
   1992 * PARAMETERS:
   1993 *  "byteArray"
   1994 *      Address of ByteArray representing the CRL's DER encoding.
   1995 *      Must be non-NULL.
   1996 *  "pCRL"
   1997 *      Address where object pointer will be stored. Must be non-NULL.
   1998 *  "plContext"
   1999 *      Platform-specific context pointer.
   2000 * THREAD SAFETY:
   2001 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2002 * RETURNS:
   2003 *  Returns NULL if the function succeeds.
   2004 *  Returns a CRL Error if the function fails in a non-fatal way.
   2005 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2006 */
   2007 PKIX_Error *
   2008 PKIX_PL_CRL_Create(
   2009        PKIX_PL_ByteArray *byteArray,
   2010        PKIX_PL_CRL **pCRL,
   2011        void *plContext);
   2012 
   2013 /*
   2014 * FUNCTION: PKIX_PL_CRL_GetIssuer
   2015 * DESCRIPTION:
   2016 *
   2017 *  Retrieves a pointer to the X500Name that represents the issuer of the CRL
   2018 *  pointed to by "crl" and stores it at "pCRLIssuer".
   2019 *
   2020 * PARAMETERS:
   2021 *  "crl"
   2022 *      Address of CRL whose issuer is to be stored. Must be non-NULL.
   2023 *  "pCRLIssuer"
   2024 *      Address where object pointer will be stored. Must be non-NULL.
   2025 *  "plContext"
   2026 *      Platform-specific context pointer.
   2027 * THREAD SAFETY:
   2028 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2029 * RETURNS:
   2030 *  Returns NULL if the function succeeds.
   2031 *  Returns a CRL Error if the function fails in a non-fatal way.
   2032 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2033 */
   2034 PKIX_Error *
   2035 PKIX_PL_CRL_GetIssuer(
   2036        PKIX_PL_CRL *crl,
   2037        PKIX_PL_X500Name **pCRLIssuer,
   2038        void *plContext);
   2039 
   2040 /*
   2041 * FUNCTION: PKIX_PL_CRL_GetCriticalExtensionOIDs
   2042 * DESCRIPTION:
   2043 *
   2044 *  Retrieves a pointer to the List of OIDs (each OID corresponding to a
   2045 *  critical extension of the CRL pointed to by "crl") and stores it at
   2046 *  "pExtensions". If "crl" does not have any critical extensions, this
   2047 *  function stores an empty List at "pExtensions".
   2048 *
   2049 *  Note that the List returned by this function is immutable.
   2050 *
   2051 * PARAMETERS:
   2052 *  "crl"
   2053 *      Address of CRL whose critical extension OIDs are to be stored.
   2054 *      Must be non-NULL.
   2055 *  "pExtensions"
   2056 *      Address where object pointer will be stored. Must be non-NULL.
   2057 *  "plContext"
   2058 *      Platform-specific context pointer.
   2059 * THREAD SAFETY:
   2060 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2061 * RETURNS:
   2062 *  Returns NULL if the function succeeds.
   2063 *  Returns a CRL Error if the function fails in a non-fatal way.
   2064 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2065 */
   2066 PKIX_Error *
   2067 PKIX_PL_CRL_GetCriticalExtensionOIDs(
   2068        PKIX_PL_CRL *crl,
   2069        PKIX_List **pExtensions,   /* list of PKIX_PL_OID */
   2070        void *plContext);
   2071 
   2072 /*
   2073 * FUNCTION: PKIX_PL_CRL_GetCRLEntryForSerialNumber
   2074 * DESCRIPTION:
   2075 *
   2076 *  Retrieves a pointer to the CRLEntry (found in the CRL pointed to by "crl")
   2077 *  corresponding to the BigInt pointed to by "serialNumber" and stores it at
   2078 *  "pCRLEntry". If there is no such CRLEntry, this functions stores NULL at
   2079 *  "pCRLEntry". Once created, a CRLEntry is immutable.
   2080 *
   2081 * PARAMETERS:
   2082 *  "crl"
   2083 *      Address of CRL whose CRL Entries are to be searched. Must be non-NULL.
   2084 *  "serialNumber"
   2085 *      Address of BigInt representing serial number of certificate whose
   2086 *      CRLEntry is to be found. Must be non-NULL.
   2087 *  "pCRLEntry"
   2088 *      Address where object pointer will be stored. Must be non-NULL.
   2089 *  "plContext"
   2090 *      Platform-specific context pointer.
   2091 * THREAD SAFETY:
   2092 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2093 * RETURNS:
   2094 *  Returns NULL if the function succeeds.
   2095 *  Returns a CRL Error if the function fails in a non-fatal way.
   2096 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2097 */
   2098 PKIX_Error *
   2099 PKIX_PL_CRL_GetCRLEntryForSerialNumber(
   2100        PKIX_PL_CRL *crl,
   2101        PKIX_PL_BigInt *serialNumber,
   2102        PKIX_PL_CRLEntry **pCRLEntry,
   2103        void *plContext);
   2104 
   2105 /*
   2106 * FUNCTION: PKIX_PL_CRL_GetCRLNumber
   2107 * DESCRIPTION:
   2108 *  Retrieves the CRL Number from extension. This is non-critical extension.
   2109 *
   2110 * PARAMETERS:
   2111 *  "crl"
   2112 *      Address of CRL whose version is to be stored. Must be non-NULL.
   2113 *  "pCrlNumber"
   2114 *      Address where a CRL Number will be stored. Must be non-NULL.
   2115 *  "plContext"
   2116 *      Platform-specific context pointer.
   2117 * THREAD SAFETY:
   2118 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2119 * RETURNS:
   2120 *  Returns NULL if the function succeeds.
   2121 *  Returns a CRL Error if the function fails in a non-fatal way.
   2122 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2123 */
   2124 PKIX_Error *
   2125 PKIX_PL_CRL_GetCRLNumber(
   2126        PKIX_PL_CRL *crl,
   2127        PKIX_PL_BigInt **pCrlNumber,
   2128        void *plContext);
   2129 
   2130 /*
   2131 * FUNCTION: PKIX_PL_CRL_VerifyUpdateTime
   2132 * DESCRIPTION:
   2133 *
   2134 *  Checks whether the CRL pointed to by "crl" would be valid at the time
   2135 *  represented by the Date pointed to by "date" and stores the Boolean result
   2136 *  at "pResult". This check is done only when NIST policy is enforced.
   2137 *
   2138 *  Time ::= CHOICE {
   2139 *      utcTime         UTCTime,
   2140 *      generalTime     GeneralizedTime }
   2141 *
   2142 * PARAMETERS:
   2143 *  "crl"
   2144 *      Address of CRL whose validity is to be checked. Must be non-NULL.
   2145 *  "date"
   2146 *      Address of Date at which the CRL is being checked for validity.
   2147 *      Must be non-NULL.
   2148 *  "pResult"
   2149 *      Address of Boolean result. Must be non-NULL.
   2150 *  "plContext"
   2151 *      Platform-specific context pointer.
   2152 * THREAD SAFETY:
   2153 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2154 * RETURNS:
   2155 *  Returns NULL if the function succeeds.
   2156 *  Returns a CRL Error if the function fails in a non-fatal way.
   2157 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2158 */
   2159 PKIX_Error *
   2160 PKIX_PL_CRL_VerifyUpdateTime(
   2161        PKIX_PL_CRL *crl,
   2162        PKIX_PL_Date *date,
   2163        PKIX_Boolean *pResult,
   2164        void *plContext);
   2165 
   2166 /*
   2167 * FUNCTION: PKIX_PL_CRL_VerifySignature
   2168 * DESCRIPTION:
   2169 *
   2170 *  Verifies the signature on the CRL pointed to by "crl" using the PublicKey
   2171 *  pointed to by "pubKey". If the signature doesn't verify, a PKIX_Error
   2172 *  pointer is returned.
   2173 *
   2174 * PARAMETERS:
   2175 *  "crl"
   2176 *      Address of CRL whose signature is to be verified. Must be non-NULL.
   2177 *  "pubKey"
   2178 *      Address of a Public Key used to verify the signature. Must be non-NULL.
   2179 *  "plContext"
   2180 *      Platform-specific context pointer.
   2181 * THREAD SAFETY:
   2182 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2183 * RETURNS:
   2184 *  Returns NULL if the function succeeds.
   2185 *  Returns a CRL Error if the function fails in a non-fatal way.
   2186 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2187 */
   2188 PKIX_Error *
   2189 PKIX_PL_CRL_VerifySignature(
   2190        PKIX_PL_CRL *crl,
   2191        PKIX_PL_PublicKey *pubKey,
   2192        void *plContext);
   2193 
   2194 /*
   2195 * FUNCTION: PKIX_PL_CRL_ReleaseDerCrl
   2196 * DESCRIPTION:
   2197 *
   2198 * Relinguish the ownership for the crl der. The operation will succeed if
   2199 * a crl owns the der. If the crl was created from existing crl and does not
   2200 * own the der, then the function will return null.
   2201 *
   2202 * PARAMETERS:
   2203 *  "crl"
   2204 *      Address of CRL whose signature is to be verified. Must be non-NULL.
   2205 *  "derCrl"
   2206 *      Pointer to a SECItem that has der crl.
   2207 *  "plContext"
   2208 *      Platform-specific context pointer.
   2209 * THREAD SAFETY:
   2210 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2211 * RETURNS:
   2212 *  Returns NULL if the function succeeds.
   2213 *  Returns a CRL Error if the function fails in a non-fatal way.
   2214 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2215 */
   2216 PKIX_Error *
   2217 PKIX_PL_CRL_ReleaseDerCrl(PKIX_PL_CRL *crl,
   2218                         SECItem **derCrl,
   2219                         void *plContext);
   2220 /*
   2221 * FUNCTION: PKIX_PL_CRL_AdoptDerCrl
   2222 * DESCRIPTION:
   2223 *
   2224 * Adopt memory of the der. The secItem that contains der will be
   2225 * freed with destruction of parent pkix crl structure.
   2226 *
   2227 * * PARAMETERS:
   2228 *  "crl"
   2229 *      Address of CRL whose signature is to be verified. Must be non-NULL.
   2230 *  "derCrl"
   2231 *      Pointer to a SECItem that has der crl.
   2232 *  "plContext"
   2233 *      Platform-specific context pointer.
   2234 * THREAD SAFETY:
   2235 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2236 * RETURNS:
   2237 *  Returns NULL if the function succeeds.
   2238 *  Returns a CRL Error if the function fails in a non-fatal way.
   2239 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2240 */
   2241 PKIX_Error *
   2242 PKIX_PL_CRL_AdoptDerCrl(PKIX_PL_CRL *crl,
   2243                        SECItem *derCrl,
   2244                        void *plContext);
   2245 
   2246 /*
   2247 * FUNCTION: PKIX_PL_CRLEntry_GetCRLEntryReasonCode
   2248 * DESCRIPTION:
   2249 *
   2250 *  Retrieves the value of the reason code extension of the CRLEntry pointed
   2251 *  to by "crlEntry" and stores it at "pReason". If the "crlEntry" has no
   2252 *  reason code extension, this function stores -1 at "pReason".
   2253 *
   2254 *  CRLReason ::= ENUMERATED {
   2255 *      unspecified             (0),
   2256 *      keyCompromise           (1),
   2257 *      cACompromise            (2),
   2258 *      affiliationChanged      (3),
   2259 *      superseded              (4),
   2260 *      cessationOfOperation    (5),
   2261 *      certificateHold         (6),
   2262 *      removeFromCRL           (8),
   2263 *      privilegeWithdrawn      (9),
   2264 *      aACompromise            (10) }
   2265 *
   2266 * PARAMETERS:
   2267 *  "crlEntry"
   2268 *      Address of CRLEntry whose reason code bit values are to be returned
   2269 *      at "pReason". Must be non-NULL.
   2270 *  "pReason"
   2271 *      Address of PKIX_Int32 where reason code is stored. Must be non-NULL.
   2272 *  "plContext"
   2273 *      Platform-specific context pointer.
   2274 * THREAD SAFETY:
   2275 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2276 * RETURNS:
   2277 *  Returns NULL if the function succeeds.
   2278 *  Returns a CRL Error if the function fails in a non-fatal way.
   2279 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2280 */
   2281 PKIX_Error *
   2282 PKIX_PL_CRLEntry_GetCRLEntryReasonCode(
   2283        PKIX_PL_CRLEntry *crlEntry,
   2284        PKIX_Int32 *pReason,
   2285        void *plContext);
   2286 
   2287 /*
   2288 * FUNCTION: PKIX_PL_CRLEntry_GetCriticalExtensionOIDs
   2289 * DESCRIPTION:
   2290 *
   2291 *  Retrieves a pointer to the List of OIDs (each OID corresponding to a
   2292 *  critical extension of the CRLEntry pointed to by "crlEntry") and stores it
   2293 *  at "pExtensions". If "crlEntry" does not have any critical extensions, this
   2294 *  function stores an empty List at "pExtensions".
   2295 *
   2296 *  Note that the List returned by this function is immutable.
   2297 *
   2298 * PARAMETERS:
   2299 *  "crlEntry"
   2300 *      Address of CRLEntry whose critical extension OIDs are to be stored.
   2301 *      Must be non-NULL.
   2302 *  "pExtensions"
   2303 *      Address where object pointer will be stored. Must be non-NULL.
   2304 *  "plContext"
   2305 *      Platform-specific context pointer.
   2306 * THREAD SAFETY:
   2307 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2308 * RETURNS:
   2309 *  Returns NULL if the function succeeds.
   2310 *  Returns a CRL Error if the function fails in a non-fatal way.
   2311 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2312 */
   2313 PKIX_Error *
   2314 PKIX_PL_CRLEntry_GetCriticalExtensionOIDs(
   2315        PKIX_PL_CRLEntry *crlEntry,
   2316        PKIX_List **pExtensions,  /* list of PKIX_PL_OID */
   2317        void *plContext);
   2318 
   2319 #ifdef BUILD_LIBPKIX_TESTS
   2320 /*
   2321 * FUNCTION: PKIX_PL_X500Name_Create
   2322 * DESCRIPTION:
   2323 *
   2324 *  Creates a new X500Name using the UTF8 string representation pointed to by
   2325 *  "stringRep" and stores it at "pName". Once created, an X500Name is
   2326 *  immutable.
   2327 *
   2328 *  Name ::= CHOICE {
   2329 *    RDNSequence }
   2330 *
   2331 *  RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
   2332 *
   2333 *  RelativeDistinguishedName ::=
   2334 *    SET OF AttributeTypeAndValue
   2335 *
   2336 *  AttributeTypeAndValue ::= SEQUENCE {
   2337 *      type    AttributeType,
   2338 *      value   AttributeValue }
   2339 *
   2340 *  AttributeType ::= OBJECT IDENTIFIER
   2341 *
   2342 *  AttributeValue ::= ANY DEFINED BY AttributeType
   2343 *
   2344 *  DirectoryString ::= CHOICE {
   2345 *      teletexString           TeletexString (SIZE (1..MAX)),
   2346 *      printableString         PrintableString (SIZE (1..MAX)),
   2347 *      universalString         UniversalString (SIZE (1..MAX)),
   2348 *      utf8String              UTF8String (SIZE (1..MAX)),
   2349 *      bmpString               BMPString (SIZE (1..MAX)) }
   2350 *
   2351 * PARAMETERS:
   2352 *  "stringRep"
   2353 *      Address of UTF8 String representation of X500Name. Must be non-NULL.
   2354 *  "pName"
   2355 *      Address where object pointer will be stored. Must be non-NULL.
   2356 *  "plContext"
   2357 *      Platform-specific context pointer.
   2358 * THREAD SAFETY:
   2359 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2360 * RETURNS:
   2361 *  Returns NULL if the function succeeds.
   2362 *  Returns an X500Name Error if the function fails in a non-fatal way.
   2363 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2364 */
   2365 PKIX_Error *
   2366 PKIX_PL_X500Name_Create (
   2367        PKIX_PL_String *stringRep,
   2368        PKIX_PL_X500Name **pName,
   2369        void *plContext);
   2370 
   2371 #endif /* BUILD_LIBPKIX_TESTS */
   2372 
   2373 /*
   2374 * FUNCTION: PKIX_PL_X500Name_CreateFromCERTName
   2375 * DESCRIPTION:
   2376 * 
   2377 * The function creates x500Name using der encoded DN and/or pointer to
   2378 * CERTName. If arument "name" is NULL, but derName is supplied when
   2379 * the function generates nssDN(CERTName type) from der data. If derName
   2380 * is not supplied, CERTName *name will not be used to generate DN DER
   2381 * encoding.
   2382 *
   2383 * PARAMETERS:
   2384 *  "derName"
   2385 *      Address of DER representation of X500Name. Can be NULL
   2386 *  "name"
   2387 *      Address of CERTName representation of X500Name. Can be NULL
   2388 *  "pName"
   2389 *      Address where object pointer will be stored. Must be non-NULL.
   2390 *  "plContext"
   2391 *      Platform-specific context pointer.
   2392 * THREAD SAFETY:
   2393 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2394 * RETURNS:
   2395 *  Returns NULL if the function succeeds.
   2396 *  Returns an X500Name Error if the function fails in a non-fatal way.
   2397 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2398 */
   2399 PKIX_Error *
   2400 PKIX_PL_X500Name_CreateFromCERTName(
   2401        SECItem *derName,
   2402        CERTName *name,
   2403        PKIX_PL_X500Name **pName,
   2404        void *plContext);
   2405 
   2406 
   2407 /*
   2408 * TYPE: PKIX_PL_X500Name_Match
   2409 * DESCRIPTION:
   2410 *  Checks whether the X500Name pointed to by "firstX500Name" MATCHES the
   2411 *  X500Name pointed to by "secondX500Name" and stores the boolean result at
   2412 *  "pResult". Two X500Names MATCH if they meet the conditions specified by
   2413 *  RFC 3280 (section 4.1.2.4). Namely:
   2414 *
   2415 *      "This specification requires only a subset of the name comparison
   2416 *      functionality specified in the X.500 series of specifications.
   2417 *      Conforming implementations are REQUIRED to implement the following
   2418 *      name comparison rules:
   2419 *
   2420 *      (a)  attribute values encoded in different types (e.g., PrintableString
   2421 *      and BMPString) MAY be assumed to represent different strings;
   2422 *
   2423 *      (b) attribute values in types other than PrintableString are case
   2424 *      sensitive (this permits matching of attribute values as binary objects)
   2425 *
   2426 *      (c)  attribute values in PrintableString are not case sensitive
   2427 *      (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and
   2428 *
   2429 *      (d)  attribute values in PrintableString are compared after removing
   2430 *      leading and trailing white space and converting internal substrings of
   2431 *      one or more consecutive white space characters to a single space."
   2432 *
   2433 * PARAMETERS:
   2434 *  "firstX500Name"
   2435 *      Address of first X500Name to compare. Must be non-NULL.
   2436 *  "secondX500Name"
   2437 *      Address of second X500Name to compare. Must be non-NULL.
   2438 *  "pResult"
   2439 *      Address of Boolean result. Must be non-NULL.
   2440 *  "plContext"
   2441 *      Platform-specific context pointer.
   2442 * THREAD SAFETY:
   2443 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2444 * RETURNS:
   2445 *  Returns NULL if the function succeeds.
   2446 *  Returns an X500Name Error if the function fails in a non-fatal way.
   2447 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2448 */
   2449 PKIX_Error *
   2450 PKIX_PL_X500Name_Match(
   2451        PKIX_PL_X500Name *firstX500Name,
   2452        PKIX_PL_X500Name *secondX500Name,
   2453        PKIX_Boolean *pResult,
   2454        void *plContext);
   2455 
   2456 /*
   2457 * FUNCTION: PKIX_PL_Date_Create_UTCTime
   2458 * DESCRIPTION:
   2459 *  Creates a new Date of type UTCTime using the string representation pointed
   2460 *  to by "stringRep" and stores it at "pDate". The UTCTime restriction means
   2461 *  that the year can only be specified by the least significant two digits
   2462 *  (YY). As such, Only the years 1950-2049 can be represented. If "stringRep"
   2463 *  is NULL, this function creates a new Date representing the current time
   2464 *  and stores it at "pDate". Once created, a Date is immutable.
   2465 *
   2466 *  If YY is greater than or equal to 50, the year is interpreted as 19YY.
   2467 *  If YY is less than 50, the year is interpreted as 20YY.
   2468 *
   2469 *  The string representation of the date must be in the following form:
   2470 *      "YYMMDDhhmmssZ" where:
   2471 *
   2472 *  YY is the least significant two digits of the year
   2473 *  MM is the month (01 to 12)
   2474 *  DD is the day (01 to 31)
   2475 *  hh is the hour (00 to 23)
   2476 *  mm are the minutes (00 to 59)
   2477 *  ss are the seconds (00 to 59)
   2478 *  Z indicates that local time is GMT
   2479 *
   2480 * PARAMETERS:
   2481 *  "stringRep"
   2482 *      Address of String representation of Date.
   2483 *      If NULL, current time is used.
   2484 *  "pDate"
   2485 *      Address where object pointer will be stored. Must be non-NULL.
   2486 *  "plContext"
   2487 *      Platform-specific context pointer.
   2488 * THREAD SAFETY:
   2489 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2490 * RETURNS:
   2491 *  Returns NULL if the function succeeds.
   2492 *  Returns a Date Error if the function fails in a non-fatal way.
   2493 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2494 */
   2495 PKIX_Error *
   2496 PKIX_PL_Date_Create_UTCTime (
   2497        PKIX_PL_String *stringRep,
   2498        PKIX_PL_Date **pDate,
   2499        void *plContext);
   2500 
   2501 /*
   2502 * FUNCTION: PKIX_PL_Date_Create_UTCTime
   2503 * DESCRIPTION:
   2504 *  Creates a new Date from PRTime data.
   2505 *
   2506 * PARAMETERS:
   2507 *  "time"
   2508 *      Represented time in PRTime type.
   2509 *  "pDate"
   2510 *      Address where object pointer will be stored. Must be non-NULL.
   2511 *  "plContext"
   2512 *      Platform-specific context pointer.
   2513 * THREAD SAFETY:
   2514 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2515 * RETURNS:
   2516 *  Returns NULL if the function succeeds.
   2517 *  Returns a Date Error if the function fails in a non-fatal way.
   2518 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2519 */
   2520 PKIX_Error *
   2521 PKIX_PL_Date_CreateFromPRTime(
   2522        PRTime time,
   2523        PKIX_PL_Date **pDate,
   2524        void *plContext);
   2525 
   2526 /*
   2527 * FUNCTION: PKIX_PL_Date_Create_CurrentOffBySeconds
   2528 * DESCRIPTION:
   2529 *  Creates a new Date of type UTCTime for current time with seconds off by
   2530 *  "secondsOffset" and returns it at "pDate".
   2531 *
   2532 * PARAMETERS:
   2533 *  "secondsOffset"
   2534 *      A PKIX_Int32 indicates the time offset from current. If "secondsOffset"
   2535 *      is negative, the time is in past.
   2536 *  "pDate"
   2537 *      Address where object pointer will be stored. Must be non-NULL.
   2538 *  "plContext"
   2539 *      Platform-specific context pointer.
   2540 * THREAD SAFETY:
   2541 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2542 * RETURNS:
   2543 *  Returns NULL if the function succeeds.
   2544 *  Returns a Date Error if the function fails in a non-fatal way.
   2545 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2546 */
   2547 PKIX_Error *
   2548 PKIX_PL_Date_Create_CurrentOffBySeconds(
   2549        PKIX_Int32 secondsOffset,
   2550        PKIX_PL_Date **pDate,
   2551        void *plContext);
   2552 
   2553 #ifdef BUILD_LIBPKIX_TESTS
   2554 /*
   2555 * FUNCTION: PKIX_PL_GeneralName_Create
   2556 * DESCRIPTION:
   2557 *
   2558 *  Creates a new GeneralName of type "nameType" using the string
   2559 *  representation pointed to by "stringRep" and stores it at "pGName".
   2560 *  All of the GeneralName type format values specified in pkixt.h are
   2561 *  supported, with the exception of PKIX_OTHER_NAME, PKIX_EDIPARTY_NAME,
   2562 *  PKIX_IP_NAME, and PKIX_X400_ADDRESS. A PKIX_ESCASCII string representation
   2563 *  should be used for all supported nameTypes, with the exception of
   2564 *  registeredID and directoryName. For registeredID, the string representation
   2565 *  should be the same as that used by PKIX_PL_OID_Create. For directoryName,
   2566 *  the string representation should be the same as that used by
   2567 *  PKIX_PL_X500Name_Create. If an unsupported name type is used, an Error is
   2568 *  returned. Once created, a GeneralName is immutable.
   2569 *
   2570 *  GeneralName ::= CHOICE {
   2571 *      otherName                       [0]     OtherName,
   2572 *      rfc822Name                      [1]     IA5String,
   2573 *      dNSName                         [2]     IA5String,
   2574 *      x400Address                     [3]     ORAddress,
   2575 *      directoryName                   [4]     Name,
   2576 *      ediPartyName                    [5]     EDIPartyName,
   2577 *      uniformResourceIdentifier       [6]     IA5String,
   2578 *      iPAddress                       [7]     OCTET STRING,
   2579 *      registeredID                    [8]     OBJECT IDENTIFIER }
   2580 *
   2581 *
   2582 * NOTE: This function is allowed to be called only by pkix tests programs.
   2583 * 
   2584 * PARAMETERS:
   2585 *  "nameType"
   2586 *      Type of GeneralName to be created. This must be one of the GeneralName
   2587 *      type format values specified in pkixt.h
   2588 *  "stringRep"
   2589 *      Address of String representation of GeneralName. Must be non-NULL.
   2590 *  "pGName"
   2591 *      Address where object pointer will be stored. Must be non-NULL.
   2592 *  "plContext"
   2593 *      Platform-specific context pointer.
   2594 * THREAD SAFETY:
   2595 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2596 * RETURNS:
   2597 *  Returns NULL if the function succeeds.
   2598 *  Returns a GeneralName Error if the function fails in a non-fatal way.
   2599 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2600 */
   2601 PKIX_Error *
   2602 PKIX_PL_GeneralName_Create (
   2603        PKIX_UInt32 nameType,
   2604        PKIX_PL_String *stringRep,
   2605        PKIX_PL_GeneralName **pGName,
   2606        void *plContext);
   2607 #endif /* BUILD_LIBPKIX_TESTS */
   2608 
   2609 /*
   2610 * FUNCTION: PKIX_PL_CertNameConstraints_CheckNamesInNameSpace
   2611 * DESCRIPTION:
   2612 *
   2613 *  This function checks whether names in "nameList" comply with
   2614 *  "nameConstraints". It stores PKIX_TRUE at "pCheckPass" if the names meet the
   2615 *  requirement of the NameConstraints, PKIX_FALSE otherwise.
   2616 *
   2617 * PARAMETERS
   2618 *  "nameList"
   2619 *      List of GeneralNames that are checked for compliance. May be empty
   2620 *      or NULL.
   2621 *  "nameConstraints"
   2622 *      Address of CertNameConstraints that provides lists of permitted
   2623 *      and excluded names. Must be non-NULL.
   2624 *  "pCheckPass"
   2625 *      Address where PKIX_TRUE is returned if the all names in "nameList" are
   2626 *      valid. Must be non-NULL.
   2627 *  "plContext" - Platform-specific context pointer.
   2628 * THREAD SAFETY:
   2629 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2630 * RETURNS:
   2631 *  Returns NULL if the function succeeds.
   2632 *  Returns a NameConstraints Error if the function fails in a
   2633 *  non-fatal way.
   2634 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2635 */
   2636 PKIX_Error *
   2637 PKIX_PL_CertNameConstraints_CheckNamesInNameSpace(
   2638        PKIX_List *nameList, /* List of PKIX_PL_GeneralName */
   2639        PKIX_PL_CertNameConstraints *nameConstraints,
   2640        PKIX_Boolean *pCheckPass,
   2641        void *plContext);
   2642 
   2643 /*
   2644 * FUNCTION: PKIX_PL_AIAMgr_Create
   2645 * DESCRIPTION:
   2646 *
   2647 *  This function creates an AIAMgr to handle retrieval of Certs and CRLs
   2648 *  from servers given by AIA Certificate extensions. It manages connections
   2649 *  and caches. The manager created is stored at "pAIAMgr".
   2650 *
   2651 * PARAMETERS:
   2652 *  "pAIAMgr"
   2653 *      The address at which the result is stored. Must be non-NULL.
   2654 * THREAD SAFETY:
   2655 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2656 * RETURNS:
   2657 *  Returns NULL if the function succeeds.
   2658 *  Returns an AIAMgr Error if the function fails in a non-fatal way
   2659 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2660 */
   2661 PKIX_Error *
   2662 PKIX_PL_AIAMgr_Create(
   2663        PKIX_PL_AIAMgr **pAIAMgr,
   2664        void *plContext);
   2665 
   2666 /*
   2667 * FUNCTION: PKIX_PL_AIAMgr_GetAIACerts
   2668 * DESCRIPTION:
   2669 *
   2670 *  This function uses the AIAMgr pointed to by "aiaMgr" to retrieve the Certs
   2671 *  specified by an AIA certificate extension, if any, in the Cert pointed to by
   2672 *  "prevCert", storing the results at "pCerts". If the certificate has no such
   2673 *  extension, this function stores NULL at "pCerts".
   2674 *
   2675 *  If the request is suspended for non-blocking I/O, a platform-dependent
   2676 *  context is stored at "pNBIOContext" and NULL is stored at "pCerts". This
   2677 *  return is referred to as the WOULDBLOCK state. Note that the caller must
   2678 *  check for a non-NULL value at "pNBIOContext", to distinguish this state from
   2679 *  the "no such extension" return described in the first paragraph. (The
   2680 *  alternative would be to return an empty List, but it seemed wrong to incur
   2681 *  the overhead of creating and destroying an empty List for the most common
   2682 *  situation.)
   2683 *
   2684 *  After a WOULDBLOCK return, the user may continue the operation by calling
   2685 *  pkix_AIAMgr_GetAIACerts (possibly more than once, if the function again
   2686 *  returns in the WOULDBLOCK state) with the previously-returned non-NULL
   2687 *  value of "pNBIOContext". When results are complete, NULL is stored at
   2688 *  "pNBIOContext", and the results (which may be NULL) are stored at "pCerts".
   2689 *
   2690 * PARAMETERS:
   2691 *  "aiaMgr"
   2692 *      The AIAMgr which controls the retrieval of certificates. Must be
   2693 *      non-NULL.
   2694 *  "prevCert"
   2695 *      Address of PKIX_PL_Cert which may provide an AIA or SIA extension. Must
   2696 *      be non-NULL.
   2697 *  "pNBIOContext"
   2698 *      Address at which platform-dependent information is returned if request
   2699 *      is suspended for non-blocking I/O. Must be non-NULL.
   2700 *  "pCerts"
   2701 *      Address at which the returned List is stored. Must be non-NULL.
   2702 *  "plContext"
   2703 *      Platform-specific context pointer.
   2704 * THREAD SAFETY:
   2705 *  Thread Safe (see Thread Safety Definitions in Programmer's Guide)
   2706 * RETURNS:
   2707 *  Returns NULL if the function succeeds.
   2708 *  Returns an AIAMgr Error if the function fails in a non-fatal way
   2709 *  Returns a Fatal Error if the function fails in an unrecoverable way.
   2710 */
   2711 PKIX_Error *
   2712 PKIX_PL_AIAMgr_GetAIACerts(
   2713        PKIX_PL_AIAMgr *aiaMgr,
   2714        PKIX_PL_Cert *prevCert,
   2715        void **pNBIOContext,
   2716        PKIX_List **pCerts,
   2717        void *plContext);
   2718 
   2719 typedef PKIX_Error *
   2720 (*PKIX_PL_VerifyCallback)(
   2721        PKIX_PL_Object *signedObject,
   2722        PKIX_PL_Cert *signerCert, /* can be unknown */
   2723        PKIX_PL_Date *producedAt,
   2724        PKIX_ProcessingParams *procParams,
   2725        void **pNBIOContext,
   2726        void **pState,
   2727        PKIX_BuildResult **pBuildResult,
   2728        PKIX_VerifyNode **pVerifyTree,
   2729        void *plContext);
   2730 
   2731 #ifdef __cplusplus
   2732 }
   2733 #endif
   2734 
   2735 #endif /* _PKIX_PL_PKI_H */