tor-browser

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

cryptocontext.c (22492B)


      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 #ifndef DEV_H
      6 #include "dev.h"
      7 #endif /* DEV_H */
      8 
      9 #ifndef PKIM_H
     10 #include "pkim.h"
     11 #endif /* PKIM_H */
     12 
     13 #ifndef PKISTORE_H
     14 #include "pkistore.h"
     15 #endif /* PKISTORE_H */
     16 
     17 extern const NSSError NSS_ERROR_NOT_FOUND;
     18 extern const NSSError NSS_ERROR_INVALID_ARGUMENT;
     19 
     20 NSS_IMPLEMENT NSSCryptoContext *
     21 nssCryptoContext_Create(
     22    NSSTrustDomain *td,
     23    NSSCallback *uhhOpt)
     24 {
     25    NSSArena *arena;
     26    NSSCryptoContext *rvCC;
     27    arena = NSSArena_Create();
     28    if (!arena) {
     29        return NULL;
     30    }
     31    rvCC = nss_ZNEW(arena, NSSCryptoContext);
     32    if (!rvCC) {
     33        return NULL;
     34    }
     35    rvCC->td = td;
     36    rvCC->arena = arena;
     37    rvCC->certStore = nssCertificateStore_Create(rvCC->arena);
     38    if (!rvCC->certStore) {
     39        nssArena_Destroy(arena);
     40        return NULL;
     41    }
     42 
     43    return rvCC;
     44 }
     45 
     46 NSS_IMPLEMENT PRStatus
     47 NSSCryptoContext_Destroy(NSSCryptoContext *cc)
     48 {
     49    PRStatus status = PR_SUCCESS;
     50    PORT_Assert(cc && cc->certStore);
     51    if (!cc) {
     52        return PR_FAILURE;
     53    }
     54    if (cc->certStore) {
     55        status = nssCertificateStore_Destroy(cc->certStore);
     56        if (status == PR_FAILURE) {
     57            return status;
     58        }
     59    } else {
     60        status = PR_FAILURE;
     61    }
     62    nssArena_Destroy(cc->arena);
     63    return status;
     64 }
     65 
     66 NSS_IMPLEMENT PRStatus
     67 NSSCryptoContext_SetDefaultCallback(
     68    NSSCryptoContext *td,
     69    NSSCallback *newCallback,
     70    NSSCallback **oldCallbackOpt)
     71 {
     72    nss_SetError(NSS_ERROR_NOT_FOUND);
     73    return PR_FAILURE;
     74 }
     75 
     76 NSS_IMPLEMENT NSSCallback *
     77 NSSCryptoContext_GetDefaultCallback(
     78    NSSCryptoContext *td,
     79    PRStatus *statusOpt)
     80 {
     81    nss_SetError(NSS_ERROR_NOT_FOUND);
     82    return NULL;
     83 }
     84 
     85 NSS_IMPLEMENT NSSTrustDomain *
     86 NSSCryptoContext_GetTrustDomain(NSSCryptoContext *td)
     87 {
     88    nss_SetError(NSS_ERROR_NOT_FOUND);
     89    return NULL;
     90 }
     91 
     92 NSS_IMPLEMENT NSSCertificate *
     93 NSSCryptoContext_FindOrImportCertificate(
     94    NSSCryptoContext *cc,
     95    NSSCertificate *c)
     96 {
     97    NSSCertificate *rvCert = NULL;
     98 
     99    PORT_Assert(cc && cc->certStore);
    100    if (!cc || !cc->certStore) {
    101        nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
    102        return rvCert;
    103    }
    104    rvCert = nssCertificateStore_FindOrAdd(cc->certStore, c);
    105    if (rvCert == c && c->object.cryptoContext != cc) {
    106        PORT_Assert(!c->object.cryptoContext);
    107        c->object.cryptoContext = cc;
    108    }
    109    if (rvCert) {
    110        /* an NSSCertificate cannot be part of two crypto contexts
    111        ** simultaneously.  If this assertion fails, then there is
    112        ** a serious Stan design flaw.
    113        */
    114        PORT_Assert(cc == c->object.cryptoContext);
    115    }
    116    return rvCert;
    117 }
    118 
    119 NSS_IMPLEMENT NSSCertificate *
    120 NSSCryptoContext_ImportPKIXCertificate(
    121    NSSCryptoContext *cc,
    122    struct NSSPKIXCertificateStr *pc)
    123 {
    124    nss_SetError(NSS_ERROR_NOT_FOUND);
    125    return NULL;
    126 }
    127 
    128 NSS_IMPLEMENT NSSCertificate *
    129 NSSCryptoContext_ImportEncodedCertificate(
    130    NSSCryptoContext *cc,
    131    NSSBER *ber)
    132 {
    133    nss_SetError(NSS_ERROR_NOT_FOUND);
    134    return NULL;
    135 }
    136 
    137 NSS_IMPLEMENT PRStatus
    138 NSSCryptoContext_ImportEncodedPKIXCertificateChain(
    139    NSSCryptoContext *cc,
    140    NSSBER *ber)
    141 {
    142    nss_SetError(NSS_ERROR_NOT_FOUND);
    143    return PR_FAILURE;
    144 }
    145 
    146 NSS_IMPLEMENT PRStatus
    147 nssCryptoContext_ImportTrust(
    148    NSSCryptoContext *cc,
    149    NSSTrust *trust)
    150 {
    151    PRStatus nssrv;
    152    PORT_Assert(cc && cc->certStore);
    153    if (!cc || !cc->certStore) {
    154        return PR_FAILURE;
    155    }
    156    nssrv = nssCertificateStore_AddTrust(cc->certStore, trust);
    157 #if 0
    158    if (nssrv == PR_SUCCESS) {
    159    trust->object.cryptoContext = cc;
    160    }
    161 #endif
    162    return nssrv;
    163 }
    164 
    165 NSS_IMPLEMENT PRStatus
    166 nssCryptoContext_ImportSMIMEProfile(
    167    NSSCryptoContext *cc,
    168    nssSMIMEProfile *profile)
    169 {
    170    PRStatus nssrv;
    171    PORT_Assert(cc && cc->certStore);
    172    if (!cc || !cc->certStore) {
    173        return PR_FAILURE;
    174    }
    175    nssrv = nssCertificateStore_AddSMIMEProfile(cc->certStore, profile);
    176 #if 0
    177    if (nssrv == PR_SUCCESS) {
    178    profile->object.cryptoContext = cc;
    179    }
    180 #endif
    181    return nssrv;
    182 }
    183 
    184 NSS_IMPLEMENT NSSCertificate *
    185 NSSCryptoContext_FindBestCertificateByNickname(
    186    NSSCryptoContext *cc,
    187    const NSSUTF8 *name,
    188    NSSTime *timeOpt, /* NULL for "now" */
    189    NSSUsage *usage,
    190    NSSPolicies *policiesOpt /* NULL for none */
    191 )
    192 {
    193    NSSCertificate **certs;
    194    NSSCertificate *rvCert = NULL;
    195    PORT_Assert(cc && cc->certStore);
    196    if (!cc || !cc->certStore) {
    197        return NULL;
    198    }
    199    certs = nssCertificateStore_FindCertificatesByNickname(cc->certStore,
    200                                                           name,
    201                                                           NULL, 0, NULL);
    202    if (certs) {
    203        rvCert = nssCertificateArray_FindBestCertificate(certs,
    204                                                         timeOpt,
    205                                                         usage,
    206                                                         policiesOpt);
    207        nssCertificateArray_Destroy(certs);
    208    }
    209    return rvCert;
    210 }
    211 
    212 NSS_IMPLEMENT NSSCertificate **
    213 NSSCryptoContext_FindCertificatesByNickname(
    214    NSSCryptoContext *cc,
    215    NSSUTF8 *name,
    216    NSSCertificate *rvOpt[],
    217    PRUint32 maximumOpt, /* 0 for no max */
    218    NSSArena *arenaOpt)
    219 {
    220    NSSCertificate **rvCerts;
    221    PORT_Assert(cc && cc->certStore);
    222    if (!cc || !cc->certStore) {
    223        return NULL;
    224    }
    225    rvCerts = nssCertificateStore_FindCertificatesByNickname(cc->certStore,
    226                                                             name,
    227                                                             rvOpt,
    228                                                             maximumOpt,
    229                                                             arenaOpt);
    230    return rvCerts;
    231 }
    232 
    233 NSS_IMPLEMENT NSSCertificate *
    234 NSSCryptoContext_FindCertificateByIssuerAndSerialNumber(
    235    NSSCryptoContext *cc,
    236    NSSDER *issuer,
    237    NSSDER *serialNumber)
    238 {
    239    PORT_Assert(cc && cc->certStore);
    240    if (!cc || !cc->certStore) {
    241        return NULL;
    242    }
    243    return nssCertificateStore_FindCertificateByIssuerAndSerialNumber(
    244        cc->certStore,
    245        issuer,
    246        serialNumber);
    247 }
    248 
    249 NSS_IMPLEMENT NSSCertificate *
    250 NSSCryptoContext_FindBestCertificateBySubject(
    251    NSSCryptoContext *cc,
    252    NSSDER *subject,
    253    NSSTime *timeOpt,
    254    NSSUsage *usage,
    255    NSSPolicies *policiesOpt)
    256 {
    257    NSSCertificate **certs;
    258    NSSCertificate *rvCert = NULL;
    259    PORT_Assert(cc && cc->certStore);
    260    if (!cc || !cc->certStore) {
    261        return NULL;
    262    }
    263    certs = nssCertificateStore_FindCertificatesBySubject(cc->certStore,
    264                                                          subject,
    265                                                          NULL, 0, NULL);
    266    if (certs) {
    267        rvCert = nssCertificateArray_FindBestCertificate(certs,
    268                                                         timeOpt,
    269                                                         usage,
    270                                                         policiesOpt);
    271        nssCertificateArray_Destroy(certs);
    272    }
    273    return rvCert;
    274 }
    275 
    276 NSS_IMPLEMENT NSSCertificate **
    277 nssCryptoContext_FindCertificatesBySubject(
    278    NSSCryptoContext *cc,
    279    NSSDER *subject,
    280    NSSCertificate *rvOpt[],
    281    PRUint32 maximumOpt, /* 0 for no max */
    282    NSSArena *arenaOpt)
    283 {
    284    NSSCertificate **rvCerts;
    285    PORT_Assert(cc && cc->certStore);
    286    if (!cc || !cc->certStore) {
    287        return NULL;
    288    }
    289    rvCerts = nssCertificateStore_FindCertificatesBySubject(cc->certStore,
    290                                                            subject,
    291                                                            rvOpt,
    292                                                            maximumOpt,
    293                                                            arenaOpt);
    294    return rvCerts;
    295 }
    296 
    297 NSS_IMPLEMENT NSSCertificate **
    298 NSSCryptoContext_FindCertificatesBySubject(
    299    NSSCryptoContext *cc,
    300    NSSDER *subject,
    301    NSSCertificate *rvOpt[],
    302    PRUint32 maximumOpt, /* 0 for no max */
    303    NSSArena *arenaOpt)
    304 {
    305    return nssCryptoContext_FindCertificatesBySubject(cc, subject,
    306                                                      rvOpt, maximumOpt,
    307                                                      arenaOpt);
    308 }
    309 
    310 NSS_IMPLEMENT NSSCertificate *
    311 NSSCryptoContext_FindBestCertificateByNameComponents(
    312    NSSCryptoContext *cc,
    313    NSSUTF8 *nameComponents,
    314    NSSTime *timeOpt,
    315    NSSUsage *usage,
    316    NSSPolicies *policiesOpt)
    317 {
    318    nss_SetError(NSS_ERROR_NOT_FOUND);
    319    return NULL;
    320 }
    321 
    322 NSS_IMPLEMENT NSSCertificate **
    323 NSSCryptoContext_FindCertificatesByNameComponents(
    324    NSSCryptoContext *cc,
    325    NSSUTF8 *nameComponents,
    326    NSSCertificate *rvOpt[],
    327    PRUint32 maximumOpt, /* 0 for no max */
    328    NSSArena *arenaOpt)
    329 {
    330    nss_SetError(NSS_ERROR_NOT_FOUND);
    331    return NULL;
    332 }
    333 
    334 NSS_IMPLEMENT NSSCertificate *
    335 NSSCryptoContext_FindCertificateByEncodedCertificate(
    336    NSSCryptoContext *cc,
    337    NSSBER *encodedCertificate)
    338 {
    339    PORT_Assert(cc && cc->certStore);
    340    if (!cc || !cc->certStore) {
    341        return NULL;
    342    }
    343    return nssCertificateStore_FindCertificateByEncodedCertificate(
    344        cc->certStore,
    345        encodedCertificate);
    346 }
    347 
    348 NSS_IMPLEMENT NSSCertificate *
    349 NSSCryptoContext_FindBestCertificateByEmail(
    350    NSSCryptoContext *cc,
    351    NSSASCII7 *email,
    352    NSSTime *timeOpt,
    353    NSSUsage *usage,
    354    NSSPolicies *policiesOpt)
    355 {
    356    NSSCertificate **certs;
    357    NSSCertificate *rvCert = NULL;
    358 
    359    PORT_Assert(cc && cc->certStore);
    360    if (!cc || !cc->certStore) {
    361        return NULL;
    362    }
    363    certs = nssCertificateStore_FindCertificatesByEmail(cc->certStore,
    364                                                        email,
    365                                                        NULL, 0, NULL);
    366    if (certs) {
    367        rvCert = nssCertificateArray_FindBestCertificate(certs,
    368                                                         timeOpt,
    369                                                         usage,
    370                                                         policiesOpt);
    371        nssCertificateArray_Destroy(certs);
    372    }
    373    return rvCert;
    374 }
    375 
    376 NSS_IMPLEMENT NSSCertificate **
    377 NSSCryptoContext_FindCertificatesByEmail(
    378    NSSCryptoContext *cc,
    379    NSSASCII7 *email,
    380    NSSCertificate *rvOpt[],
    381    PRUint32 maximumOpt, /* 0 for no max */
    382    NSSArena *arenaOpt)
    383 {
    384    NSSCertificate **rvCerts;
    385    PORT_Assert(cc && cc->certStore);
    386    if (!cc || !cc->certStore) {
    387        return NULL;
    388    }
    389    rvCerts = nssCertificateStore_FindCertificatesByEmail(cc->certStore,
    390                                                          email,
    391                                                          rvOpt,
    392                                                          maximumOpt,
    393                                                          arenaOpt);
    394    return rvCerts;
    395 }
    396 
    397 NSS_IMPLEMENT NSSCertificate *
    398 NSSCryptoContext_FindCertificateByOCSPHash(
    399    NSSCryptoContext *cc,
    400    NSSItem *hash)
    401 {
    402    nss_SetError(NSS_ERROR_NOT_FOUND);
    403    return NULL;
    404 }
    405 
    406 NSS_IMPLEMENT NSSCertificate *
    407 NSSCryptoContext_FindBestUserCertificate(
    408    NSSCryptoContext *cc,
    409    NSSTime *timeOpt,
    410    NSSUsage *usage,
    411    NSSPolicies *policiesOpt)
    412 {
    413    nss_SetError(NSS_ERROR_NOT_FOUND);
    414    return NULL;
    415 }
    416 
    417 NSS_IMPLEMENT NSSCertificate **
    418 NSSCryptoContext_FindUserCertificates(
    419    NSSCryptoContext *cc,
    420    NSSTime *timeOpt,
    421    NSSUsage *usageOpt,
    422    NSSPolicies *policiesOpt,
    423    NSSCertificate **rvOpt,
    424    PRUint32 rvLimit, /* zero for no limit */
    425    NSSArena *arenaOpt)
    426 {
    427    nss_SetError(NSS_ERROR_NOT_FOUND);
    428    return NULL;
    429 }
    430 
    431 NSS_IMPLEMENT NSSCertificate *
    432 NSSCryptoContext_FindBestUserCertificateForSSLClientAuth(
    433    NSSCryptoContext *cc,
    434    NSSUTF8 *sslHostOpt,
    435    NSSDER *rootCAsOpt[],   /* null pointer for none */
    436    PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
    437    NSSAlgorithmAndParameters *apOpt,
    438    NSSPolicies *policiesOpt)
    439 {
    440    nss_SetError(NSS_ERROR_NOT_FOUND);
    441    return NULL;
    442 }
    443 
    444 NSS_IMPLEMENT NSSCertificate **
    445 NSSCryptoContext_FindUserCertificatesForSSLClientAuth(
    446    NSSCryptoContext *cc,
    447    NSSUTF8 *sslHostOpt,
    448    NSSDER *rootCAsOpt[],   /* null pointer for none */
    449    PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
    450    NSSAlgorithmAndParameters *apOpt,
    451    NSSPolicies *policiesOpt,
    452    NSSCertificate **rvOpt,
    453    PRUint32 rvLimit, /* zero for no limit */
    454    NSSArena *arenaOpt)
    455 {
    456    nss_SetError(NSS_ERROR_NOT_FOUND);
    457    return NULL;
    458 }
    459 
    460 NSS_IMPLEMENT NSSCertificate *
    461 NSSCryptoContext_FindBestUserCertificateForEmailSigning(
    462    NSSCryptoContext *cc,
    463    NSSASCII7 *signerOpt,
    464    NSSASCII7 *recipientOpt,
    465    /* anything more here? */
    466    NSSAlgorithmAndParameters *apOpt,
    467    NSSPolicies *policiesOpt)
    468 {
    469    nss_SetError(NSS_ERROR_NOT_FOUND);
    470    return NULL;
    471 }
    472 
    473 NSS_IMPLEMENT NSSCertificate *
    474 NSSCryptoContext_FindUserCertificatesForEmailSigning(
    475    NSSCryptoContext *cc,
    476    NSSASCII7 *signerOpt, /* fgmr or a more general name? */
    477    NSSASCII7 *recipientOpt,
    478    /* anything more here? */
    479    NSSAlgorithmAndParameters *apOpt,
    480    NSSPolicies *policiesOpt,
    481    NSSCertificate **rvOpt,
    482    PRUint32 rvLimit, /* zero for no limit */
    483    NSSArena *arenaOpt)
    484 {
    485    nss_SetError(NSS_ERROR_NOT_FOUND);
    486    return NULL;
    487 }
    488 
    489 NSS_IMPLEMENT NSSTrust *
    490 nssCryptoContext_FindTrustForCertificate(
    491    NSSCryptoContext *cc,
    492    NSSCertificate *cert)
    493 {
    494    PORT_Assert(cc && cc->certStore);
    495    if (!cc || !cc->certStore) {
    496        return NULL;
    497    }
    498    return nssCertificateStore_FindTrustForCertificate(cc->certStore, cert);
    499 }
    500 
    501 NSS_IMPLEMENT nssSMIMEProfile *
    502 nssCryptoContext_FindSMIMEProfileForCertificate(
    503    NSSCryptoContext *cc,
    504    NSSCertificate *cert)
    505 {
    506    PORT_Assert(cc && cc->certStore);
    507    if (!cc || !cc->certStore) {
    508        return NULL;
    509    }
    510    return nssCertificateStore_FindSMIMEProfileForCertificate(cc->certStore,
    511                                                              cert);
    512 }
    513 
    514 NSS_IMPLEMENT PRStatus
    515 NSSCryptoContext_GenerateKeyPair(
    516    NSSCryptoContext *cc,
    517    NSSAlgorithmAndParameters *ap,
    518    NSSPrivateKey **pvkOpt,
    519    NSSPublicKey **pbkOpt,
    520    PRBool privateKeyIsSensitive,
    521    NSSToken *destination,
    522    NSSCallback *uhhOpt)
    523 {
    524    nss_SetError(NSS_ERROR_NOT_FOUND);
    525    return PR_FAILURE;
    526 }
    527 
    528 NSS_IMPLEMENT NSSSymmetricKey *
    529 NSSCryptoContext_GenerateSymmetricKey(
    530    NSSCryptoContext *cc,
    531    NSSAlgorithmAndParameters *ap,
    532    PRUint32 keysize,
    533    NSSToken *destination,
    534    NSSCallback *uhhOpt)
    535 {
    536    nss_SetError(NSS_ERROR_NOT_FOUND);
    537    return NULL;
    538 }
    539 
    540 NSS_IMPLEMENT NSSSymmetricKey *
    541 NSSCryptoContext_GenerateSymmetricKeyFromPassword(
    542    NSSCryptoContext *cc,
    543    NSSAlgorithmAndParameters *ap,
    544    NSSUTF8 *passwordOpt, /* if null, prompt */
    545    NSSToken *destinationOpt,
    546    NSSCallback *uhhOpt)
    547 {
    548    nss_SetError(NSS_ERROR_NOT_FOUND);
    549    return NULL;
    550 }
    551 
    552 NSS_IMPLEMENT NSSSymmetricKey *
    553 NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID(
    554    NSSCryptoContext *cc,
    555    NSSOID *algorithm,
    556    NSSItem *keyID,
    557    NSSCallback *uhhOpt)
    558 {
    559    nss_SetError(NSS_ERROR_NOT_FOUND);
    560    return NULL;
    561 }
    562 
    563 struct token_session_str {
    564    NSSToken *token;
    565    nssSession *session;
    566 };
    567 
    568 NSS_IMPLEMENT NSSItem *
    569 NSSCryptoContext_Decrypt(
    570    NSSCryptoContext *cc,
    571    NSSAlgorithmAndParameters *apOpt,
    572    NSSItem *encryptedData,
    573    NSSCallback *uhhOpt,
    574    NSSItem *rvOpt,
    575    NSSArena *arenaOpt)
    576 {
    577    nss_SetError(NSS_ERROR_NOT_FOUND);
    578    return NULL;
    579 }
    580 
    581 NSS_IMPLEMENT PRStatus
    582 NSSCryptoContext_BeginDecrypt(
    583    NSSCryptoContext *cc,
    584    NSSAlgorithmAndParameters *apOpt,
    585    NSSCallback *uhhOpt)
    586 {
    587    nss_SetError(NSS_ERROR_NOT_FOUND);
    588    return PR_FAILURE;
    589 }
    590 
    591 NSS_IMPLEMENT NSSItem *
    592 NSSCryptoContext_ContinueDecrypt(
    593    NSSCryptoContext *cc,
    594    NSSItem *data,
    595    NSSItem *rvOpt,
    596    NSSArena *arenaOpt)
    597 {
    598    nss_SetError(NSS_ERROR_NOT_FOUND);
    599    return NULL;
    600 }
    601 
    602 NSS_IMPLEMENT NSSItem *
    603 NSSCryptoContext_FinishDecrypt(
    604    NSSCryptoContext *cc,
    605    NSSItem *rvOpt,
    606    NSSArena *arenaOpt)
    607 {
    608    nss_SetError(NSS_ERROR_NOT_FOUND);
    609    return NULL;
    610 }
    611 
    612 NSS_IMPLEMENT NSSItem *
    613 NSSCryptoContext_Sign(
    614    NSSCryptoContext *cc,
    615    NSSAlgorithmAndParameters *apOpt,
    616    NSSItem *data,
    617    NSSCallback *uhhOpt,
    618    NSSItem *rvOpt,
    619    NSSArena *arenaOpt)
    620 {
    621    nss_SetError(NSS_ERROR_NOT_FOUND);
    622    return NULL;
    623 }
    624 
    625 NSS_IMPLEMENT PRStatus
    626 NSSCryptoContext_BeginSign(
    627    NSSCryptoContext *cc,
    628    NSSAlgorithmAndParameters *apOpt,
    629    NSSCallback *uhhOpt)
    630 {
    631    nss_SetError(NSS_ERROR_NOT_FOUND);
    632    return PR_FAILURE;
    633 }
    634 
    635 NSS_IMPLEMENT PRStatus
    636 NSSCryptoContext_ContinueSign(
    637    NSSCryptoContext *cc,
    638    NSSItem *data)
    639 {
    640    nss_SetError(NSS_ERROR_NOT_FOUND);
    641    return PR_FAILURE;
    642 }
    643 
    644 NSS_IMPLEMENT NSSItem *
    645 NSSCryptoContext_FinishSign(
    646    NSSCryptoContext *cc,
    647    NSSItem *rvOpt,
    648    NSSArena *arenaOpt)
    649 {
    650    nss_SetError(NSS_ERROR_NOT_FOUND);
    651    return NULL;
    652 }
    653 
    654 NSS_IMPLEMENT NSSItem *
    655 NSSCryptoContext_SignRecover(
    656    NSSCryptoContext *cc,
    657    NSSAlgorithmAndParameters *apOpt,
    658    NSSItem *data,
    659    NSSCallback *uhhOpt,
    660    NSSItem *rvOpt,
    661    NSSArena *arenaOpt)
    662 {
    663    nss_SetError(NSS_ERROR_NOT_FOUND);
    664    return NULL;
    665 }
    666 
    667 NSS_IMPLEMENT PRStatus
    668 NSSCryptoContext_BeginSignRecover(
    669    NSSCryptoContext *cc,
    670    NSSAlgorithmAndParameters *apOpt,
    671    NSSCallback *uhhOpt)
    672 {
    673    nss_SetError(NSS_ERROR_NOT_FOUND);
    674    return PR_FAILURE;
    675 }
    676 
    677 NSS_IMPLEMENT NSSItem *
    678 NSSCryptoContext_ContinueSignRecover(
    679    NSSCryptoContext *cc,
    680    NSSItem *data,
    681    NSSItem *rvOpt,
    682    NSSArena *arenaOpt)
    683 {
    684    nss_SetError(NSS_ERROR_NOT_FOUND);
    685    return NULL;
    686 }
    687 
    688 NSS_IMPLEMENT NSSItem *
    689 NSSCryptoContext_FinishSignRecover(
    690    NSSCryptoContext *cc,
    691    NSSItem *rvOpt,
    692    NSSArena *arenaOpt)
    693 {
    694    nss_SetError(NSS_ERROR_NOT_FOUND);
    695    return NULL;
    696 }
    697 
    698 NSS_IMPLEMENT NSSSymmetricKey *
    699 NSSCryptoContext_UnwrapSymmetricKey(
    700    NSSCryptoContext *cc,
    701    NSSAlgorithmAndParameters *apOpt,
    702    NSSItem *wrappedKey,
    703    NSSCallback *uhhOpt)
    704 {
    705    nss_SetError(NSS_ERROR_NOT_FOUND);
    706    return NULL;
    707 }
    708 
    709 NSS_IMPLEMENT NSSSymmetricKey *
    710 NSSCryptoContext_DeriveSymmetricKey(
    711    NSSCryptoContext *cc,
    712    NSSPublicKey *bk,
    713    NSSAlgorithmAndParameters *apOpt,
    714    NSSOID *target,
    715    PRUint32 keySizeOpt, /* zero for best allowed */
    716    NSSOperations operations,
    717    NSSCallback *uhhOpt)
    718 {
    719    nss_SetError(NSS_ERROR_NOT_FOUND);
    720    return NULL;
    721 }
    722 
    723 NSS_IMPLEMENT NSSItem *
    724 NSSCryptoContext_Encrypt(
    725    NSSCryptoContext *cc,
    726    NSSAlgorithmAndParameters *apOpt,
    727    NSSItem *data,
    728    NSSCallback *uhhOpt,
    729    NSSItem *rvOpt,
    730    NSSArena *arenaOpt)
    731 {
    732    nss_SetError(NSS_ERROR_NOT_FOUND);
    733    return NULL;
    734 }
    735 
    736 NSS_IMPLEMENT PRStatus
    737 NSSCryptoContext_BeginEncrypt(
    738    NSSCryptoContext *cc,
    739    NSSAlgorithmAndParameters *apOpt,
    740    NSSCallback *uhhOpt)
    741 {
    742    nss_SetError(NSS_ERROR_NOT_FOUND);
    743    return PR_FAILURE;
    744 }
    745 
    746 NSS_IMPLEMENT NSSItem *
    747 NSSCryptoContext_ContinueEncrypt(
    748    NSSCryptoContext *cc,
    749    NSSItem *data,
    750    NSSItem *rvOpt,
    751    NSSArena *arenaOpt)
    752 {
    753    nss_SetError(NSS_ERROR_NOT_FOUND);
    754    return NULL;
    755 }
    756 
    757 NSS_IMPLEMENT NSSItem *
    758 NSSCryptoContext_FinishEncrypt(
    759    NSSCryptoContext *cc,
    760    NSSItem *rvOpt,
    761    NSSArena *arenaOpt)
    762 {
    763    nss_SetError(NSS_ERROR_NOT_FOUND);
    764    return NULL;
    765 }
    766 
    767 NSS_IMPLEMENT PRStatus
    768 NSSCryptoContext_Verify(
    769    NSSCryptoContext *cc,
    770    NSSAlgorithmAndParameters *apOpt,
    771    NSSItem *data,
    772    NSSItem *signature,
    773    NSSCallback *uhhOpt)
    774 {
    775    nss_SetError(NSS_ERROR_NOT_FOUND);
    776    return PR_FAILURE;
    777 }
    778 
    779 NSS_IMPLEMENT PRStatus
    780 NSSCryptoContext_BeginVerify(
    781    NSSCryptoContext *cc,
    782    NSSAlgorithmAndParameters *apOpt,
    783    NSSItem *signature,
    784    NSSCallback *uhhOpt)
    785 {
    786    nss_SetError(NSS_ERROR_NOT_FOUND);
    787    return PR_FAILURE;
    788 }
    789 
    790 NSS_IMPLEMENT PRStatus
    791 NSSCryptoContext_ContinueVerify(
    792    NSSCryptoContext *cc,
    793    NSSItem *data)
    794 {
    795    nss_SetError(NSS_ERROR_NOT_FOUND);
    796    return PR_FAILURE;
    797 }
    798 
    799 NSS_IMPLEMENT PRStatus
    800 NSSCryptoContext_FinishVerify(
    801    NSSCryptoContext *cc)
    802 {
    803    nss_SetError(NSS_ERROR_NOT_FOUND);
    804    return PR_FAILURE;
    805 }
    806 
    807 NSS_IMPLEMENT NSSItem *
    808 NSSCryptoContext_VerifyRecover(
    809    NSSCryptoContext *cc,
    810    NSSAlgorithmAndParameters *apOpt,
    811    NSSItem *signature,
    812    NSSCallback *uhhOpt,
    813    NSSItem *rvOpt,
    814    NSSArena *arenaOpt)
    815 {
    816    nss_SetError(NSS_ERROR_NOT_FOUND);
    817    return NULL;
    818 }
    819 
    820 NSS_IMPLEMENT PRStatus
    821 NSSCryptoContext_BeginVerifyRecover(
    822    NSSCryptoContext *cc,
    823    NSSAlgorithmAndParameters *apOpt,
    824    NSSCallback *uhhOpt)
    825 {
    826    nss_SetError(NSS_ERROR_NOT_FOUND);
    827    return PR_FAILURE;
    828 }
    829 
    830 NSS_IMPLEMENT NSSItem *
    831 NSSCryptoContext_ContinueVerifyRecover(
    832    NSSCryptoContext *cc,
    833    NSSItem *data,
    834    NSSItem *rvOpt,
    835    NSSArena *arenaOpt)
    836 {
    837    nss_SetError(NSS_ERROR_NOT_FOUND);
    838    return NULL;
    839 }
    840 
    841 NSS_IMPLEMENT NSSItem *
    842 NSSCryptoContext_FinishVerifyRecover(
    843    NSSCryptoContext *cc,
    844    NSSItem *rvOpt,
    845    NSSArena *arenaOpt)
    846 {
    847    nss_SetError(NSS_ERROR_NOT_FOUND);
    848    return NULL;
    849 }
    850 
    851 NSS_IMPLEMENT NSSItem *
    852 NSSCryptoContext_WrapSymmetricKey(
    853    NSSCryptoContext *cc,
    854    NSSAlgorithmAndParameters *apOpt,
    855    NSSSymmetricKey *keyToWrap,
    856    NSSCallback *uhhOpt,
    857    NSSItem *rvOpt,
    858    NSSArena *arenaOpt)
    859 {
    860    nss_SetError(NSS_ERROR_NOT_FOUND);
    861    return NULL;
    862 }
    863 
    864 NSS_IMPLEMENT NSSItem *
    865 NSSCryptoContext_Digest(
    866    NSSCryptoContext *cc,
    867    NSSAlgorithmAndParameters *apOpt,
    868    NSSItem *data,
    869    NSSCallback *uhhOpt,
    870    NSSItem *rvOpt,
    871    NSSArena *arenaOpt)
    872 {
    873    return nssToken_Digest(cc->token, cc->session, apOpt,
    874                           data, rvOpt, arenaOpt);
    875 }
    876 
    877 NSS_IMPLEMENT PRStatus
    878 NSSCryptoContext_BeginDigest(
    879    NSSCryptoContext *cc,
    880    NSSAlgorithmAndParameters *apOpt,
    881    NSSCallback *uhhOpt)
    882 {
    883    return nssToken_BeginDigest(cc->token, cc->session, apOpt);
    884 }
    885 
    886 NSS_IMPLEMENT PRStatus
    887 NSSCryptoContext_ContinueDigest(
    888    NSSCryptoContext *cc,
    889    NSSAlgorithmAndParameters *apOpt,
    890    NSSItem *item)
    891 {
    892    /*
    893    NSSAlgorithmAndParameters *ap;
    894    ap = (apOpt) ? apOpt : cc->ap;
    895    */
    896    /* why apOpt?  can't change it at this point... */
    897    return nssToken_ContinueDigest(cc->token, cc->session, item);
    898 }
    899 
    900 NSS_IMPLEMENT NSSItem *
    901 NSSCryptoContext_FinishDigest(
    902    NSSCryptoContext *cc,
    903    NSSItem *rvOpt,
    904    NSSArena *arenaOpt)
    905 {
    906    return nssToken_FinishDigest(cc->token, cc->session, rvOpt, arenaOpt);
    907 }
    908 
    909 NSS_IMPLEMENT NSSCryptoContext *
    910 NSSCryptoContext_Clone(NSSCryptoContext *cc)
    911 {
    912    nss_SetError(NSS_ERROR_NOT_FOUND);
    913    return NULL;
    914 }