| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/numerics/safe_math.h" | 5 #include "base/numerics/safe_math.h" |
| 6 #include "base/stl_util.h" |
| 6 #include "content/child/webcrypto/crypto_data.h" | 7 #include "content/child/webcrypto/crypto_data.h" |
| 7 #include "content/child/webcrypto/nss/aes_key_nss.h" | 8 #include "content/child/webcrypto/nss/aes_key_nss.h" |
| 8 #include "content/child/webcrypto/nss/key_nss.h" | 9 #include "content/child/webcrypto/nss/key_nss.h" |
| 9 #include "content/child/webcrypto/nss/util_nss.h" | 10 #include "content/child/webcrypto/nss/util_nss.h" |
| 10 #include "content/child/webcrypto/status.h" | 11 #include "content/child/webcrypto/status.h" |
| 11 #include "content/child/webcrypto/webcrypto_util.h" | 12 #include "content/child/webcrypto/webcrypto_util.h" |
| 12 #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" | 13 #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" |
| 13 | 14 |
| 14 // At the time of this writing: | 15 // At the time of this writing: |
| 15 // * Windows and Mac builds ship with their own copy of NSS (3.15+) | 16 // * Windows and Mac builds ship with their own copy of NSS (3.15+) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 // However NSS has a bug whereby it will fail if the output buffer size is | 106 // However NSS has a bug whereby it will fail if the output buffer size is |
| 106 // not at least as large as the ciphertext: | 107 // not at least as large as the ciphertext: |
| 107 // | 108 // |
| 108 // https://bugzilla.mozilla.org/show_bug.cgi?id=%20853674 | 109 // https://bugzilla.mozilla.org/show_bug.cgi?id=%20853674 |
| 109 // | 110 // |
| 110 // From the analysis of that bug it looks like it might be safe to pass a | 111 // From the analysis of that bug it looks like it might be safe to pass a |
| 111 // correctly sized buffer but lie about its size. Since resizing the | 112 // correctly sized buffer but lie about its size. Since resizing the |
| 112 // WebCryptoArrayBuffer is expensive that hack may be worth looking into. | 113 // WebCryptoArrayBuffer is expensive that hack may be worth looking into. |
| 113 | 114 |
| 114 buffer->resize(buffer_size.ValueOrDie()); | 115 buffer->resize(buffer_size.ValueOrDie()); |
| 115 unsigned char* buffer_data = Uint8VectorStart(buffer); | 116 unsigned char* buffer_data = vector_as_array(buffer); |
| 116 | 117 |
| 117 PK11_EncryptDecryptFunction encrypt_or_decrypt_func = | 118 PK11_EncryptDecryptFunction encrypt_or_decrypt_func = |
| 118 (mode == ENCRYPT) ? NssRuntimeSupport::Get()->pk11_encrypt_func() | 119 (mode == ENCRYPT) ? NssRuntimeSupport::Get()->pk11_encrypt_func() |
| 119 : NssRuntimeSupport::Get()->pk11_decrypt_func(); | 120 : NssRuntimeSupport::Get()->pk11_decrypt_func(); |
| 120 | 121 |
| 121 unsigned int output_len = 0; | 122 unsigned int output_len = 0; |
| 122 SECStatus result = encrypt_or_decrypt_func(sym_key, | 123 SECStatus result = encrypt_or_decrypt_func(sym_key, |
| 123 CKM_AES_GCM, | 124 CKM_AES_GCM, |
| 124 ¶m, | 125 ¶m, |
| 125 buffer_data, | 126 buffer_data, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 179 |
| 179 } // namespace | 180 } // namespace |
| 180 | 181 |
| 181 AlgorithmImplementation* CreatePlatformAesGcmImplementation() { | 182 AlgorithmImplementation* CreatePlatformAesGcmImplementation() { |
| 182 return new AesGcmImplementation; | 183 return new AesGcmImplementation; |
| 183 } | 184 } |
| 184 | 185 |
| 185 } // namespace webcrypto | 186 } // namespace webcrypto |
| 186 | 187 |
| 187 } // namespace content | 188 } // namespace content |
| OLD | NEW |