| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 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 | 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/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 | 4 |
| 5 #ifdef FREEBL_NO_DEPEND | 5 #ifdef FREEBL_NO_DEPEND |
| 6 #include "stubs.h" | 6 #include "stubs.h" |
| 7 #endif | 7 #endif |
| 8 | 8 |
| 9 #include "prinit.h" | 9 #include "prinit.h" |
| 10 #include "prerr.h" | 10 #include "prerr.h" |
| (...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1056 cx->Nr = RIJNDAEL_NUM_ROUNDS(Nk, cx->Nb); | 1056 cx->Nr = RIJNDAEL_NUM_ROUNDS(Nk, cx->Nb); |
| 1057 /* copy in the iv, if neccessary */ | 1057 /* copy in the iv, if neccessary */ |
| 1058 if (mode == NSS_AES_CBC) { | 1058 if (mode == NSS_AES_CBC) { |
| 1059 memcpy(cx->iv, iv, blocksize); | 1059 memcpy(cx->iv, iv, blocksize); |
| 1060 #if USE_HW_AES | 1060 #if USE_HW_AES |
| 1061 if (use_hw_aes) { | 1061 if (use_hw_aes) { |
| 1062 cx->worker = (freeblCipherFunc) | 1062 cx->worker = (freeblCipherFunc) |
| 1063 intel_aes_cbc_worker(encrypt, keysize); | 1063 intel_aes_cbc_worker(encrypt, keysize); |
| 1064 } else | 1064 } else |
| 1065 #endif | 1065 #endif |
| 1066 { |
| 1066 cx->worker = (freeblCipherFunc) (encrypt | 1067 cx->worker = (freeblCipherFunc) (encrypt |
| 1067 ? &rijndael_encryptCBC : &rijndael_decryptCBC); | 1068 ? &rijndael_encryptCBC : &rijndael_decryptCBC); |
| 1069 } |
| 1068 } else { | 1070 } else { |
| 1069 #if USE_HW_AES | 1071 #if USE_HW_AES |
| 1070 if (use_hw_aes) { | 1072 if (use_hw_aes) { |
| 1071 cx->worker = (freeblCipherFunc) | 1073 cx->worker = (freeblCipherFunc) |
| 1072 intel_aes_ecb_worker(encrypt, keysize); | 1074 intel_aes_ecb_worker(encrypt, keysize); |
| 1073 } else | 1075 } else |
| 1074 #endif | 1076 #endif |
| 1077 { |
| 1075 cx->worker = (freeblCipherFunc) (encrypt | 1078 cx->worker = (freeblCipherFunc) (encrypt |
| 1076 ? &rijndael_encryptECB : &rijndael_decryptECB); | 1079 ? &rijndael_encryptECB : &rijndael_decryptECB); |
| 1080 } |
| 1077 } | 1081 } |
| 1078 PORT_Assert((cx->Nb * (cx->Nr + 1)) <= RIJNDAEL_MAX_EXP_KEY_SIZE); | 1082 PORT_Assert((cx->Nb * (cx->Nr + 1)) <= RIJNDAEL_MAX_EXP_KEY_SIZE); |
| 1079 if ((cx->Nb * (cx->Nr + 1)) > RIJNDAEL_MAX_EXP_KEY_SIZE) { | 1083 if ((cx->Nb * (cx->Nr + 1)) > RIJNDAEL_MAX_EXP_KEY_SIZE) { |
| 1080 PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); | 1084 PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); |
| 1081 goto cleanup; | 1085 goto cleanup; |
| 1082 } | 1086 } |
| 1083 #ifdef USE_HW_AES | 1087 #ifdef USE_HW_AES |
| 1084 if (use_hw_aes) { | 1088 if (use_hw_aes) { |
| 1085 intel_aes_init(encrypt, keysize); | 1089 intel_aes_init(encrypt, keysize); |
| 1086 } else | 1090 } else |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 { | 1168 { |
| 1165 cx->worker_cx = GCM_CreateContext(cx, cx->worker, iv, blocksize); | 1169 cx->worker_cx = GCM_CreateContext(cx, cx->worker, iv, blocksize); |
| 1166 cx->worker = (freeblCipherFunc) | 1170 cx->worker = (freeblCipherFunc) |
| 1167 (encrypt ? GCM_EncryptUpdate : GCM_DecryptUpdate); | 1171 (encrypt ? GCM_EncryptUpdate : GCM_DecryptUpdate); |
| 1168 cx->destroy = (freeblDestroyFunc) GCM_DestroyContext; | 1172 cx->destroy = (freeblDestroyFunc) GCM_DestroyContext; |
| 1169 cx->isBlock = PR_FALSE; | 1173 cx->isBlock = PR_FALSE; |
| 1170 } | 1174 } |
| 1171 break; | 1175 break; |
| 1172 case NSS_AES_CTR: | 1176 case NSS_AES_CTR: |
| 1173 cx->worker_cx = CTR_CreateContext(cx, cx->worker, iv, blocksize); | 1177 cx->worker_cx = CTR_CreateContext(cx, cx->worker, iv, blocksize); |
| 1174 » cx->worker = (freeblCipherFunc) CTR_Update ; | 1178 #if defined(USE_HW_AES) && defined(_MSC_VER) |
| 1179 » if (use_hw_aes) { |
| 1180 » cx->worker = (freeblCipherFunc) CTR_Update_HW_AES; |
| 1181 » } else |
| 1182 #endif |
| 1183 » { |
| 1184 » cx->worker = (freeblCipherFunc) CTR_Update; |
| 1185 » } |
| 1175 cx->destroy = (freeblDestroyFunc) CTR_DestroyContext; | 1186 cx->destroy = (freeblDestroyFunc) CTR_DestroyContext; |
| 1176 cx->isBlock = PR_FALSE; | 1187 cx->isBlock = PR_FALSE; |
| 1177 break; | 1188 break; |
| 1178 default: | 1189 default: |
| 1179 /* everything has already been set up by aes_InitContext, just | 1190 /* everything has already been set up by aes_InitContext, just |
| 1180 * return */ | 1191 * return */ |
| 1181 return SECSuccess; | 1192 return SECSuccess; |
| 1182 } | 1193 } |
| 1183 /* check to see if we succeeded in getting the worker context */ | 1194 /* check to see if we succeeded in getting the worker context */ |
| 1184 if (cx->worker_cx == NULL) { | 1195 if (cx->worker_cx == NULL) { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1284 return SECFailure; | 1295 return SECFailure; |
| 1285 } | 1296 } |
| 1286 if (maxOutputLen < inputLen) { | 1297 if (maxOutputLen < inputLen) { |
| 1287 PORT_SetError(SEC_ERROR_OUTPUT_LEN); | 1298 PORT_SetError(SEC_ERROR_OUTPUT_LEN); |
| 1288 return SECFailure; | 1299 return SECFailure; |
| 1289 } | 1300 } |
| 1290 *outputLen = inputLen; | 1301 *outputLen = inputLen; |
| 1291 return (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen, | 1302 return (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen, |
| 1292 input, inputLen, blocksize); | 1303 input, inputLen, blocksize); |
| 1293 } | 1304 } |
| OLD | NEW |