summaryrefslogtreecommitdiff
path: root/0001-Bug-1624128-Update-CK_GCM_PARAMS-uses-for-PKCS11-v3..patch
blob: 99c05bb2bb944ff05c1dc3e97ac54fa3efc74d87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From c3acffdb8e0cd46561d2c5131227dc92967cf3d2 Mon Sep 17 00:00:00 2001
From: Kevin Jacobs <kjacobs@mozilla.com>
Date: Tue, 14 Apr 2020 18:32:19 +0000
Subject: [PATCH] Bug 1624128 - Update CK_GCM_PARAMS uses for PKCS11 v3.0
 definition r=keeler

This patch initializes the ulIvBits member of CK_GCM_PARAMS, which is new in PKCS11 v3.

For libprio, we instead define NSS_PKCS11_2_0_COMPAT, which yields the old struct definition.

Differential Revision: https://phabricator.services.mozilla.com/D67740
---
 dom/crypto/WebCryptoTask.cpp                 | 1 +
 netwerk/srtp/src/crypto/cipher/aes_gcm_nss.c | 1 +
 security/manager/ssl/OSKeyStore.cpp          | 1 +
 third_party/prio/moz.build                   | 5 +++++
 4 files changed, 8 insertions(+)

diff --git a/dom/crypto/WebCryptoTask.cpp b/dom/crypto/WebCryptoTask.cpp
index ad0d1432738f..60a265972d21 100644
--- a/dom/crypto/WebCryptoTask.cpp
+++ b/dom/crypto/WebCryptoTask.cpp
@@ -600,6 +600,7 @@ class AesTask : public ReturnArrayBufferViewTask, public DeferredData {
       case CKM_AES_GCM:
         gcmParams.pIv = mIv.Elements();
         gcmParams.ulIvLen = mIv.Length();
+        gcmParams.ulIvBits = gcmParams.ulIvLen * 8;
         gcmParams.pAAD = mAad.Elements();
         gcmParams.ulAADLen = mAad.Length();
         gcmParams.ulTagBits = mTagLength;
diff --git a/netwerk/srtp/src/crypto/cipher/aes_gcm_nss.c b/netwerk/srtp/src/crypto/cipher/aes_gcm_nss.c
index e1fdbe36fbf8..2be2ce932ddf 100644
--- a/netwerk/srtp/src/crypto/cipher/aes_gcm_nss.c
+++ b/netwerk/srtp/src/crypto/cipher/aes_gcm_nss.c
@@ -271,6 +271,7 @@ static srtp_err_status_t srtp_aes_gcm_nss_do_crypto(void *cv,
 
     c->params.pIv = c->iv;
     c->params.ulIvLen = GCM_IV_LEN;
+    c->params.ulIvBits = GCM_IV_LEN * 8;
     c->params.pAAD = c->aad;
     c->params.ulAADLen = c->aad_size;
 
diff --git a/security/manager/ssl/OSKeyStore.cpp b/security/manager/ssl/OSKeyStore.cpp
index 00bc918c5fdd..c83a559d9c1e 100644
--- a/security/manager/ssl/OSKeyStore.cpp
+++ b/security/manager/ssl/OSKeyStore.cpp
@@ -663,6 +663,7 @@ nsresult AbstractOSKeyStore::DoCipher(const UniquePK11SymKey& aSymKey,
   CK_GCM_PARAMS gcm_params;
   gcm_params.pIv = const_cast<unsigned char*>(ivp);
   gcm_params.ulIvLen = mIVLength;
+  gcm_params.ulIvBits = gcm_params.ulIvLen * 8;
   gcm_params.ulTagBits = 128;
   gcm_params.pAAD = nullptr;
   gcm_params.ulAADLen = 0;
diff --git a/third_party/prio/moz.build b/third_party/prio/moz.build
index 3e10fe71ce8e..0a6e3c74a269 100644
--- a/third_party/prio/moz.build
+++ b/third_party/prio/moz.build
@@ -42,3 +42,8 @@ SOURCES += [
 ]
 
 FINAL_LIBRARY = 'xul'
+
+# Use PKCS11 v2 struct definitions for now, otherwise NSS requires
+# CK_GCM_PARAMS.ulIvBits to be set. This workaround is only required
+# until NSS 3.52 RTM and upstream correctly initializes the field.
+DEFINES['NSS_PKCS11_2_0_COMPAT'] = True
-- 
2.26.2