tor-browser

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

crypto.c (8054B)


      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 /*
      6 * crypto.c
      7 *
      8 * This file implements the NSSCKFWCryptoOperation type and methods.
      9 */
     10 
     11 #ifndef CK_T
     12 #include "ck.h"
     13 #endif /* CK_T */
     14 
     15 /*
     16 * NSSCKFWCryptoOperation
     17 *
     18 *  -- create/destroy --
     19 *  nssCKFWCrytoOperation_Create
     20 *  nssCKFWCryptoOperation_Destroy
     21 *
     22 *  -- implement public accessors --
     23 *  nssCKFWCryptoOperation_GetMDCryptoOperation
     24 *  nssCKFWCryptoOperation_GetType
     25 *
     26 *  -- private accessors --
     27 *
     28 *  -- module fronts --
     29 * nssCKFWCryptoOperation_GetFinalLength
     30 * nssCKFWCryptoOperation_GetOperationLength
     31 * nssCKFWCryptoOperation_Final
     32 * nssCKFWCryptoOperation_Update
     33 * nssCKFWCryptoOperation_DigestUpdate
     34 * nssCKFWCryptoOperation_UpdateFinal
     35 */
     36 
     37 struct NSSCKFWCryptoOperationStr {
     38    /* NSSArena *arena; */
     39    NSSCKMDCryptoOperation *mdOperation;
     40    NSSCKMDSession *mdSession;
     41    NSSCKFWSession *fwSession;
     42    NSSCKMDToken *mdToken;
     43    NSSCKFWToken *fwToken;
     44    NSSCKMDInstance *mdInstance;
     45    NSSCKFWInstance *fwInstance;
     46    NSSCKFWCryptoOperationType type;
     47 };
     48 
     49 /*
     50 *  nssCKFWCrytoOperation_Create
     51 */
     52 NSS_EXTERN NSSCKFWCryptoOperation *
     53 nssCKFWCryptoOperation_Create(
     54    NSSCKMDCryptoOperation *mdOperation,
     55    NSSCKMDSession *mdSession,
     56    NSSCKFWSession *fwSession,
     57    NSSCKMDToken *mdToken,
     58    NSSCKFWToken *fwToken,
     59    NSSCKMDInstance *mdInstance,
     60    NSSCKFWInstance *fwInstance,
     61    NSSCKFWCryptoOperationType type,
     62    CK_RV *pError)
     63 {
     64    NSSCKFWCryptoOperation *fwOperation;
     65    fwOperation = nss_ZNEW(NULL, NSSCKFWCryptoOperation);
     66    if (!fwOperation) {
     67        *pError = CKR_HOST_MEMORY;
     68        return (NSSCKFWCryptoOperation *)NULL;
     69    }
     70    fwOperation->mdOperation = mdOperation;
     71    fwOperation->mdSession = mdSession;
     72    fwOperation->fwSession = fwSession;
     73    fwOperation->mdToken = mdToken;
     74    fwOperation->fwToken = fwToken;
     75    fwOperation->mdInstance = mdInstance;
     76    fwOperation->fwInstance = fwInstance;
     77    fwOperation->type = type;
     78    return fwOperation;
     79 }
     80 
     81 /*
     82 *  nssCKFWCryptoOperation_Destroy
     83 */
     84 NSS_EXTERN void
     85 nssCKFWCryptoOperation_Destroy(
     86    NSSCKFWCryptoOperation *fwOperation)
     87 {
     88    if ((NSSCKMDCryptoOperation *)NULL != fwOperation->mdOperation) {
     89        if (fwOperation->mdOperation->Destroy) {
     90            fwOperation->mdOperation->Destroy(
     91                fwOperation->mdOperation,
     92                fwOperation,
     93                fwOperation->mdInstance,
     94                fwOperation->fwInstance);
     95        }
     96    }
     97    nss_ZFreeIf(fwOperation);
     98 }
     99 
    100 /*
    101 *  nssCKFWCryptoOperation_GetMDCryptoOperation
    102 */
    103 NSS_EXTERN NSSCKMDCryptoOperation *
    104 nssCKFWCryptoOperation_GetMDCryptoOperation(
    105    NSSCKFWCryptoOperation *fwOperation)
    106 {
    107    return fwOperation->mdOperation;
    108 }
    109 
    110 /*
    111 *  nssCKFWCryptoOperation_GetType
    112 */
    113 NSS_EXTERN NSSCKFWCryptoOperationType
    114 nssCKFWCryptoOperation_GetType(
    115    NSSCKFWCryptoOperation *fwOperation)
    116 {
    117    return fwOperation->type;
    118 }
    119 
    120 /*
    121 * nssCKFWCryptoOperation_GetFinalLength
    122 */
    123 NSS_EXTERN CK_ULONG
    124 nssCKFWCryptoOperation_GetFinalLength(
    125    NSSCKFWCryptoOperation *fwOperation,
    126    CK_RV *pError)
    127 {
    128    if (!fwOperation->mdOperation->GetFinalLength) {
    129        *pError = CKR_FUNCTION_FAILED;
    130        return 0;
    131    }
    132    return fwOperation->mdOperation->GetFinalLength(
    133        fwOperation->mdOperation,
    134        fwOperation,
    135        fwOperation->mdSession,
    136        fwOperation->fwSession,
    137        fwOperation->mdToken,
    138        fwOperation->fwToken,
    139        fwOperation->mdInstance,
    140        fwOperation->fwInstance,
    141        pError);
    142 }
    143 
    144 /*
    145 * nssCKFWCryptoOperation_GetOperationLength
    146 */
    147 NSS_EXTERN CK_ULONG
    148 nssCKFWCryptoOperation_GetOperationLength(
    149    NSSCKFWCryptoOperation *fwOperation,
    150    NSSItem *inputBuffer,
    151    CK_RV *pError)
    152 {
    153    if (!fwOperation->mdOperation->GetOperationLength) {
    154        *pError = CKR_FUNCTION_FAILED;
    155        return 0;
    156    }
    157    return fwOperation->mdOperation->GetOperationLength(
    158        fwOperation->mdOperation,
    159        fwOperation,
    160        fwOperation->mdSession,
    161        fwOperation->fwSession,
    162        fwOperation->mdToken,
    163        fwOperation->fwToken,
    164        fwOperation->mdInstance,
    165        fwOperation->fwInstance,
    166        inputBuffer,
    167        pError);
    168 }
    169 
    170 /*
    171 * nssCKFWCryptoOperation_Final
    172 */
    173 NSS_EXTERN CK_RV
    174 nssCKFWCryptoOperation_Final(
    175    NSSCKFWCryptoOperation *fwOperation,
    176    NSSItem *outputBuffer)
    177 {
    178    if (!fwOperation->mdOperation->Final) {
    179        return CKR_FUNCTION_FAILED;
    180    }
    181    return fwOperation->mdOperation->Final(
    182        fwOperation->mdOperation,
    183        fwOperation,
    184        fwOperation->mdSession,
    185        fwOperation->fwSession,
    186        fwOperation->mdToken,
    187        fwOperation->fwToken,
    188        fwOperation->mdInstance,
    189        fwOperation->fwInstance,
    190        outputBuffer);
    191 }
    192 
    193 /*
    194 * nssCKFWCryptoOperation_Update
    195 */
    196 NSS_EXTERN CK_RV
    197 nssCKFWCryptoOperation_Update(
    198    NSSCKFWCryptoOperation *fwOperation,
    199    NSSItem *inputBuffer,
    200    NSSItem *outputBuffer)
    201 {
    202    if (!fwOperation->mdOperation->Update) {
    203        return CKR_FUNCTION_FAILED;
    204    }
    205    return fwOperation->mdOperation->Update(
    206        fwOperation->mdOperation,
    207        fwOperation,
    208        fwOperation->mdSession,
    209        fwOperation->fwSession,
    210        fwOperation->mdToken,
    211        fwOperation->fwToken,
    212        fwOperation->mdInstance,
    213        fwOperation->fwInstance,
    214        inputBuffer,
    215        outputBuffer);
    216 }
    217 
    218 /*
    219 * nssCKFWCryptoOperation_DigestUpdate
    220 */
    221 NSS_EXTERN CK_RV
    222 nssCKFWCryptoOperation_DigestUpdate(
    223    NSSCKFWCryptoOperation *fwOperation,
    224    NSSItem *inputBuffer)
    225 {
    226    if (!fwOperation->mdOperation->DigestUpdate) {
    227        return CKR_FUNCTION_FAILED;
    228    }
    229    return fwOperation->mdOperation->DigestUpdate(
    230        fwOperation->mdOperation,
    231        fwOperation,
    232        fwOperation->mdSession,
    233        fwOperation->fwSession,
    234        fwOperation->mdToken,
    235        fwOperation->fwToken,
    236        fwOperation->mdInstance,
    237        fwOperation->fwInstance,
    238        inputBuffer);
    239 }
    240 
    241 /*
    242 * nssCKFWCryptoOperation_DigestKey
    243 */
    244 NSS_EXTERN CK_RV
    245 nssCKFWCryptoOperation_DigestKey(
    246    NSSCKFWCryptoOperation *fwOperation,
    247    NSSCKFWObject *fwObject /* Key */
    248 )
    249 {
    250    NSSCKMDObject *mdObject;
    251 
    252    if (!fwOperation->mdOperation->DigestKey) {
    253        return CKR_FUNCTION_FAILED;
    254    }
    255    mdObject = nssCKFWObject_GetMDObject(fwObject);
    256    return fwOperation->mdOperation->DigestKey(
    257        fwOperation->mdOperation,
    258        fwOperation,
    259        fwOperation->mdToken,
    260        fwOperation->fwToken,
    261        fwOperation->mdInstance,
    262        fwOperation->fwInstance,
    263        mdObject,
    264        fwObject);
    265 }
    266 
    267 /*
    268 * nssCKFWCryptoOperation_UpdateFinal
    269 */
    270 NSS_EXTERN CK_RV
    271 nssCKFWCryptoOperation_UpdateFinal(
    272    NSSCKFWCryptoOperation *fwOperation,
    273    NSSItem *inputBuffer,
    274    NSSItem *outputBuffer)
    275 {
    276    if (!fwOperation->mdOperation->UpdateFinal) {
    277        return CKR_FUNCTION_FAILED;
    278    }
    279    return fwOperation->mdOperation->UpdateFinal(
    280        fwOperation->mdOperation,
    281        fwOperation,
    282        fwOperation->mdSession,
    283        fwOperation->fwSession,
    284        fwOperation->mdToken,
    285        fwOperation->fwToken,
    286        fwOperation->mdInstance,
    287        fwOperation->fwInstance,
    288        inputBuffer,
    289        outputBuffer);
    290 }
    291 
    292 /*
    293 * nssCKFWCryptoOperation_UpdateCombo
    294 */
    295 NSS_EXTERN CK_RV
    296 nssCKFWCryptoOperation_UpdateCombo(
    297    NSSCKFWCryptoOperation *fwOperation,
    298    NSSCKFWCryptoOperation *fwPeerOperation,
    299    NSSItem *inputBuffer,
    300    NSSItem *outputBuffer)
    301 {
    302    if (!fwOperation->mdOperation->UpdateCombo) {
    303        return CKR_FUNCTION_FAILED;
    304    }
    305    return fwOperation->mdOperation->UpdateCombo(
    306        fwOperation->mdOperation,
    307        fwOperation,
    308        fwPeerOperation->mdOperation,
    309        fwPeerOperation,
    310        fwOperation->mdSession,
    311        fwOperation->fwSession,
    312        fwOperation->mdToken,
    313        fwOperation->fwToken,
    314        fwOperation->mdInstance,
    315        fwOperation->fwInstance,
    316        inputBuffer,
    317        outputBuffer);
    318 }