security/nss/lib/ckfw/crypto.c

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/nss/lib/ckfw/crypto.c	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,340 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +/*
     1.9 + * crypto.c
    1.10 + *
    1.11 + * This file implements the NSSCKFWCryptoOperation type and methods.
    1.12 + */
    1.13 +
    1.14 +#ifndef CK_T
    1.15 +#include "ck.h"
    1.16 +#endif /* CK_T */
    1.17 +
    1.18 +/*
    1.19 + * NSSCKFWCryptoOperation
    1.20 + *
    1.21 + *  -- create/destroy --
    1.22 + *  nssCKFWCrytoOperation_Create
    1.23 + *  nssCKFWCryptoOperation_Destroy
    1.24 + *
    1.25 + *  -- implement public accessors --
    1.26 + *  nssCKFWCryptoOperation_GetMDCryptoOperation
    1.27 + *  nssCKFWCryptoOperation_GetType
    1.28 + *
    1.29 + *  -- private accessors --
    1.30 + *
    1.31 + *  -- module fronts --
    1.32 + * nssCKFWCryptoOperation_GetFinalLength
    1.33 + * nssCKFWCryptoOperation_GetOperationLength
    1.34 + * nssCKFWCryptoOperation_Final
    1.35 + * nssCKFWCryptoOperation_Update
    1.36 + * nssCKFWCryptoOperation_DigestUpdate
    1.37 + * nssCKFWCryptoOperation_UpdateFinal
    1.38 + */
    1.39 +
    1.40 +struct NSSCKFWCryptoOperationStr {
    1.41 +  /* NSSArena *arena; */
    1.42 +  NSSCKMDCryptoOperation *mdOperation;
    1.43 +  NSSCKMDSession *mdSession;
    1.44 +  NSSCKFWSession *fwSession;
    1.45 +  NSSCKMDToken *mdToken;
    1.46 +  NSSCKFWToken *fwToken;
    1.47 +  NSSCKMDInstance *mdInstance;
    1.48 +  NSSCKFWInstance *fwInstance;
    1.49 +  NSSCKFWCryptoOperationType type;
    1.50 +};
    1.51 +
    1.52 +/*
    1.53 + *  nssCKFWCrytoOperation_Create
    1.54 + */
    1.55 +NSS_EXTERN NSSCKFWCryptoOperation *
    1.56 +nssCKFWCryptoOperation_Create(
    1.57 +  NSSCKMDCryptoOperation *mdOperation,
    1.58 +  NSSCKMDSession *mdSession,
    1.59 +  NSSCKFWSession *fwSession,
    1.60 +  NSSCKMDToken *mdToken,
    1.61 +  NSSCKFWToken *fwToken,
    1.62 +  NSSCKMDInstance *mdInstance,
    1.63 +  NSSCKFWInstance *fwInstance,
    1.64 +  NSSCKFWCryptoOperationType type,
    1.65 +  CK_RV *pError
    1.66 +)
    1.67 +{
    1.68 +  NSSCKFWCryptoOperation *fwOperation;
    1.69 +  fwOperation = nss_ZNEW(NULL, NSSCKFWCryptoOperation);
    1.70 +  if (!fwOperation) {
    1.71 +    *pError = CKR_HOST_MEMORY;
    1.72 +    return (NSSCKFWCryptoOperation *)NULL;
    1.73 +  }
    1.74 +  fwOperation->mdOperation = mdOperation; 
    1.75 +  fwOperation->mdSession = mdSession; 
    1.76 +  fwOperation->fwSession = fwSession; 
    1.77 +  fwOperation->mdToken = mdToken; 
    1.78 +  fwOperation->fwToken = fwToken; 
    1.79 +  fwOperation->mdInstance = mdInstance; 
    1.80 +  fwOperation->fwInstance = fwInstance; 
    1.81 +  fwOperation->type = type; 
    1.82 +  return fwOperation;
    1.83 +}
    1.84 +
    1.85 +/*
    1.86 + *  nssCKFWCryptoOperation_Destroy
    1.87 + */
    1.88 +NSS_EXTERN void
    1.89 +nssCKFWCryptoOperation_Destroy
    1.90 +(
    1.91 +  NSSCKFWCryptoOperation *fwOperation
    1.92 +)
    1.93 +{
    1.94 +  if ((NSSCKMDCryptoOperation *) NULL != fwOperation->mdOperation) {
    1.95 +    if (fwOperation->mdOperation->Destroy) {
    1.96 +      fwOperation->mdOperation->Destroy(
    1.97 +                                fwOperation->mdOperation,
    1.98 +                                fwOperation,
    1.99 +                                fwOperation->mdInstance,
   1.100 +                                fwOperation->fwInstance);
   1.101 +    }
   1.102 +  }
   1.103 +  nss_ZFreeIf(fwOperation);
   1.104 +}
   1.105 +
   1.106 +/*
   1.107 + *  nssCKFWCryptoOperation_GetMDCryptoOperation
   1.108 + */
   1.109 +NSS_EXTERN NSSCKMDCryptoOperation *
   1.110 +nssCKFWCryptoOperation_GetMDCryptoOperation
   1.111 +(
   1.112 +  NSSCKFWCryptoOperation *fwOperation
   1.113 +)
   1.114 +{
   1.115 +  return fwOperation->mdOperation;
   1.116 +}
   1.117 +
   1.118 +/*
   1.119 + *  nssCKFWCryptoOperation_GetType
   1.120 + */
   1.121 +NSS_EXTERN NSSCKFWCryptoOperationType
   1.122 +nssCKFWCryptoOperation_GetType
   1.123 +(
   1.124 +  NSSCKFWCryptoOperation *fwOperation
   1.125 +)
   1.126 +{
   1.127 +  return fwOperation->type;
   1.128 +}
   1.129 +
   1.130 +/*
   1.131 + * nssCKFWCryptoOperation_GetFinalLength
   1.132 + */
   1.133 +NSS_EXTERN CK_ULONG
   1.134 +nssCKFWCryptoOperation_GetFinalLength
   1.135 +(
   1.136 +  NSSCKFWCryptoOperation *fwOperation,
   1.137 +  CK_RV *pError
   1.138 +)
   1.139 +{
   1.140 +  if (!fwOperation->mdOperation->GetFinalLength) {
   1.141 +    *pError = CKR_FUNCTION_FAILED;
   1.142 +    return 0;
   1.143 +  }
   1.144 +  return fwOperation->mdOperation->GetFinalLength(
   1.145 +                fwOperation->mdOperation,
   1.146 +                fwOperation,
   1.147 +                fwOperation->mdSession,
   1.148 +                fwOperation->fwSession,
   1.149 +                fwOperation->mdToken,
   1.150 +                fwOperation->fwToken,
   1.151 +                fwOperation->mdInstance,
   1.152 +                fwOperation->fwInstance,
   1.153 +                pError);
   1.154 +}
   1.155 +
   1.156 +/*
   1.157 + * nssCKFWCryptoOperation_GetOperationLength
   1.158 + */
   1.159 +NSS_EXTERN CK_ULONG
   1.160 +nssCKFWCryptoOperation_GetOperationLength
   1.161 +(
   1.162 +  NSSCKFWCryptoOperation *fwOperation,
   1.163 +  NSSItem *inputBuffer,
   1.164 +  CK_RV *pError
   1.165 +)
   1.166 +{
   1.167 +  if (!fwOperation->mdOperation->GetOperationLength) {
   1.168 +    *pError = CKR_FUNCTION_FAILED;
   1.169 +    return 0;
   1.170 +  }
   1.171 +  return fwOperation->mdOperation->GetOperationLength(
   1.172 +                fwOperation->mdOperation,
   1.173 +                fwOperation,
   1.174 +                fwOperation->mdSession,
   1.175 +                fwOperation->fwSession,
   1.176 +                fwOperation->mdToken,
   1.177 +                fwOperation->fwToken,
   1.178 +                fwOperation->mdInstance,
   1.179 +                fwOperation->fwInstance,
   1.180 +                inputBuffer,
   1.181 +                pError);
   1.182 +}
   1.183 +
   1.184 +/*
   1.185 + * nssCKFWCryptoOperation_Final
   1.186 + */
   1.187 +NSS_EXTERN CK_RV
   1.188 +nssCKFWCryptoOperation_Final
   1.189 +(
   1.190 +  NSSCKFWCryptoOperation *fwOperation,
   1.191 +  NSSItem *outputBuffer
   1.192 +)
   1.193 +{
   1.194 +  if (!fwOperation->mdOperation->Final) {
   1.195 +    return CKR_FUNCTION_FAILED;
   1.196 +  }
   1.197 +  return fwOperation->mdOperation->Final(
   1.198 +                fwOperation->mdOperation,
   1.199 +                fwOperation,
   1.200 +                fwOperation->mdSession,
   1.201 +                fwOperation->fwSession,
   1.202 +                fwOperation->mdToken,
   1.203 +                fwOperation->fwToken,
   1.204 +                fwOperation->mdInstance,
   1.205 +                fwOperation->fwInstance,
   1.206 +                outputBuffer);
   1.207 +}
   1.208 +
   1.209 +/*
   1.210 + * nssCKFWCryptoOperation_Update
   1.211 + */
   1.212 +NSS_EXTERN CK_RV
   1.213 +nssCKFWCryptoOperation_Update
   1.214 +(
   1.215 +  NSSCKFWCryptoOperation *fwOperation,
   1.216 +  NSSItem *inputBuffer,
   1.217 +  NSSItem *outputBuffer
   1.218 +)
   1.219 +{
   1.220 +  if (!fwOperation->mdOperation->Update) {
   1.221 +    return CKR_FUNCTION_FAILED;
   1.222 +  }
   1.223 +  return fwOperation->mdOperation->Update(
   1.224 +                fwOperation->mdOperation,
   1.225 +                fwOperation,
   1.226 +                fwOperation->mdSession,
   1.227 +                fwOperation->fwSession,
   1.228 +                fwOperation->mdToken,
   1.229 +                fwOperation->fwToken,
   1.230 +                fwOperation->mdInstance,
   1.231 +                fwOperation->fwInstance,
   1.232 +                inputBuffer,
   1.233 +                outputBuffer);
   1.234 +}
   1.235 +
   1.236 +/*
   1.237 + * nssCKFWCryptoOperation_DigestUpdate
   1.238 + */
   1.239 +NSS_EXTERN CK_RV
   1.240 +nssCKFWCryptoOperation_DigestUpdate
   1.241 +(
   1.242 +  NSSCKFWCryptoOperation *fwOperation,
   1.243 +  NSSItem *inputBuffer
   1.244 +)
   1.245 +{
   1.246 +  if (!fwOperation->mdOperation->DigestUpdate) {
   1.247 +    return CKR_FUNCTION_FAILED;
   1.248 +  }
   1.249 +  return fwOperation->mdOperation->DigestUpdate(
   1.250 +                fwOperation->mdOperation,
   1.251 +                fwOperation,
   1.252 +                fwOperation->mdSession,
   1.253 +                fwOperation->fwSession,
   1.254 +                fwOperation->mdToken,
   1.255 +                fwOperation->fwToken,
   1.256 +                fwOperation->mdInstance,
   1.257 +                fwOperation->fwInstance,
   1.258 +                inputBuffer);
   1.259 +}
   1.260 +
   1.261 +/*
   1.262 + * nssCKFWCryptoOperation_DigestKey
   1.263 + */
   1.264 +NSS_EXTERN CK_RV
   1.265 +nssCKFWCryptoOperation_DigestKey
   1.266 +(
   1.267 +  NSSCKFWCryptoOperation *fwOperation,
   1.268 +  NSSCKFWObject *fwObject /* Key */
   1.269 +)
   1.270 +{
   1.271 +  NSSCKMDObject *mdObject;
   1.272 +
   1.273 +  if (!fwOperation->mdOperation->DigestKey) {
   1.274 +    return CKR_FUNCTION_FAILED;
   1.275 +  }
   1.276 +  mdObject = nssCKFWObject_GetMDObject(fwObject);
   1.277 +  return fwOperation->mdOperation->DigestKey(
   1.278 +                fwOperation->mdOperation,
   1.279 +                fwOperation,
   1.280 +                fwOperation->mdToken,
   1.281 +                fwOperation->fwToken,
   1.282 +                fwOperation->mdInstance,
   1.283 +                fwOperation->fwInstance,
   1.284 +                mdObject,
   1.285 +                fwObject);
   1.286 +}
   1.287 +
   1.288 +/*
   1.289 + * nssCKFWCryptoOperation_UpdateFinal
   1.290 + */
   1.291 +NSS_EXTERN CK_RV
   1.292 +nssCKFWCryptoOperation_UpdateFinal
   1.293 +(
   1.294 +  NSSCKFWCryptoOperation *fwOperation,
   1.295 +  NSSItem *inputBuffer,
   1.296 +  NSSItem *outputBuffer
   1.297 +)
   1.298 +{
   1.299 +  if (!fwOperation->mdOperation->UpdateFinal) {
   1.300 +    return CKR_FUNCTION_FAILED;
   1.301 +  }
   1.302 +  return fwOperation->mdOperation->UpdateFinal(
   1.303 +                fwOperation->mdOperation,
   1.304 +                fwOperation,
   1.305 +                fwOperation->mdSession,
   1.306 +                fwOperation->fwSession,
   1.307 +                fwOperation->mdToken,
   1.308 +                fwOperation->fwToken,
   1.309 +                fwOperation->mdInstance,
   1.310 +                fwOperation->fwInstance,
   1.311 +                inputBuffer,
   1.312 +                outputBuffer);
   1.313 +}
   1.314 +
   1.315 +/*
   1.316 + * nssCKFWCryptoOperation_UpdateCombo
   1.317 + */
   1.318 +NSS_EXTERN CK_RV
   1.319 +nssCKFWCryptoOperation_UpdateCombo
   1.320 +(
   1.321 +  NSSCKFWCryptoOperation *fwOperation,
   1.322 +  NSSCKFWCryptoOperation *fwPeerOperation,
   1.323 +  NSSItem *inputBuffer,
   1.324 +  NSSItem *outputBuffer
   1.325 +)
   1.326 +{
   1.327 +  if (!fwOperation->mdOperation->UpdateCombo) {
   1.328 +    return CKR_FUNCTION_FAILED;
   1.329 +  }
   1.330 +  return fwOperation->mdOperation->UpdateCombo(
   1.331 +                fwOperation->mdOperation,
   1.332 +                fwOperation,
   1.333 +                fwPeerOperation->mdOperation,
   1.334 +                fwPeerOperation,
   1.335 +                fwOperation->mdSession,
   1.336 +                fwOperation->fwSession,
   1.337 +                fwOperation->mdToken,
   1.338 +                fwOperation->fwToken,
   1.339 +                fwOperation->mdInstance,
   1.340 +                fwOperation->fwInstance,
   1.341 +                inputBuffer,
   1.342 +                outputBuffer);
   1.343 +}

mercurial