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 +}