Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Unified Diff: nss/lib/softoken/pkcs11c.c

Issue 27510015: Support ChaCha20+Poly1305 cipher suites. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Make ChaCha20Poly1305 function conform to freebl API, undo changes to chacha20.c, use generic code … Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: nss/lib/softoken/pkcs11c.c
===================================================================
--- nss/lib/softoken/pkcs11c.c (revision 228205)
+++ nss/lib/softoken/pkcs11c.c (working copy)
@@ -870,6 +870,39 @@
context->destroy = (SFTKDestroy) AES_DestroyContext;
break;
+ case CKM_NSS_CHACHA20_POLY1305: {
+ CK_NSS_AEAD_PARAMS *params;
+ if (pMechanism->ulParameterLen != sizeof(CK_NSS_AEAD_PARAMS)) {
+ crv = CKR_MECHANISM_PARAM_INVALID;
+ break;
+ }
+ params = (CK_NSS_AEAD_PARAMS*) pMechanism->pParameter;
+ context->multi = PR_FALSE;
+ if (key_type != CKK_NSS_CHACHA20) {
+ crv = CKR_KEY_TYPE_INCONSISTENT;
+ break;
+ }
+ att = sftk_FindAttribute(key,CKA_VALUE);
+ if (att == NULL) {
+ crv = CKR_KEY_HANDLE_INVALID;
+ break;
+ }
+ context->cipherInfo = ChaCha20Poly1305_CreateContext(
+ (unsigned char*) att->attrib.pValue, att->attrib.ulValueLen,
+ params->pIv, params->ulIvLen, params->pAAD, params->ulAADLen,
+ params->ulTagBits);
+ sftk_FreeAttribute(att);
+ if (context->cipherInfo == NULL) {
+ /* XXX map error code */
+ crv = CKR_HOST_MEMORY;
+ break;
+ }
+ context->update = (SFTKCipher) (isEncrypt ? ChaCha20Poly1305_Seal :
+ ChaCha20Poly1305_Open);
+ context->destroy = (SFTKDestroy) ChaCha20Poly1305_DestroyContext;
+ break;
+ }
+
case CKM_NETSCAPE_AES_KEY_WRAP_PAD:
context->doPad = PR_TRUE;
/* fall thru */
@@ -3272,6 +3305,10 @@
*key_type = CKK_AES;
if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE;
break;
+ case CKM_NSS_CHACHA20_KEY_GEN:
+ *key_type = CKK_NSS_CHACHA20;
+ if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE;
+ break;
default:
PORT_Assert(0);
crv = CKR_MECHANISM_INVALID;
@@ -3516,6 +3553,7 @@
case CKM_SEED_KEY_GEN:
case CKM_CAMELLIA_KEY_GEN:
case CKM_AES_KEY_GEN:
+ case CKM_NSS_CHACHA20_KEY_GEN:
#if NSS_SOFTOKEN_DOES_RC5
case CKM_RC5_KEY_GEN:
#endif

Powered by Google App Engine
This is Rietveld 408576698