| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 677ca7e commit 1bff901
12 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -395,7 +395,6 @@ const kAlgorithmDefinitions = { | |||
| 395 | 395 | ||
| 396 | 396 | // Conditionally supported algorithms | |
| 397 | 397 | const conditionalAlgorithms = { | |
| 398 | - 'AES-KW': !process.features.openssl_is_boringssl, | ||
| 399 | 398 | 'AES-OCB': !!hasAesOcbMode, | |
| 400 | 399 | 'Argon2d': !!Argon2Job, | |
| 401 | 400 | 'Argon2i': !!Argon2Job, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -191,6 +191,68 @@ WebCryptoCipherStatus AES_Cipher(Environment* env, | |||
| 191 | 191 | return WebCryptoCipherStatus::OK; | |
| 192 | 192 | } | |
| 193 | 193 | ||
| 194 | + #ifdef OPENSSL_IS_BORINGSSL | ||
| 195 | + // AES Key Wrap using BoringSSL's low-level AES_wrap_key / AES_unwrap_key. | ||
| 196 | + // BoringSSL does not expose EVP_aes_*_wrap via the | ||
| 197 | + // EVP_CIPHER registry, so the EVP-based AES_Cipher path is unusable for | ||
| 198 | + // AES-KW. This matches Chromium's WebCrypto AES-KW implementation. | ||
| 199 | + WebCryptoCipherStatus AES_KW_Cipher(Environment* env, | ||
| 200 | + const KeyObjectData& key_data, | ||
| 201 | + WebCryptoCipherMode cipher_mode, | ||
| 202 | + const AESCipherConfig& params, | ||
| 203 | + const ByteSource& in, | ||
| 204 | + ByteSource* out) { | ||
| 205 | + CHECK_EQ(key_data.GetKeyType(), kKeyTypeSecret); | ||
| 206 | + | ||
| 207 | + const unsigned key_bits = | ||
| 208 | + static_cast<unsigned>(key_data.GetSymmetricKeySize()) * 8; | ||
| 209 | + const auto key_bytes = | ||
| 210 | + reinterpret_cast<const unsigned char*>(key_data.GetSymmetricKey()); | ||
| 211 | + const bool encrypt = cipher_mode == kWebCryptoCipherEncrypt; | ||
| 212 | + | ||
| 213 | + AES_KEY aes_key; | ||
| 214 | + if (encrypt) { | ||
| 215 | + // Input must be a multiple of 8 bytes and at least 16 bytes. | ||
| 216 | + if (in.size() < 16 || in.size() % 8 != 0) { | ||
| 217 | + return WebCryptoCipherStatus::FAILED; | ||
| 218 | + } | ||
| 219 | + if (AES_set_encrypt_key(key_bytes, key_bits, &aes_key) != 0) { | ||
| 220 | + return WebCryptoCipherStatus::FAILED; | ||
| 221 | + } | ||
| 222 | + auto buf = DataPointer::Alloc(in.size() + 8); | ||
| 223 | + int len = AES_wrap_key(&aes_key, | ||
| 224 | + nullptr, | ||
| 225 | + static_cast<unsigned char*>(buf.get()), | ||
| 226 | + in.data<unsigned char>(), | ||
| 227 | + in.size()); | ||
| 228 | + if (len < 0 || static_cast<size_t>(len) != in.size() + 8) { | ||
| 229 | + return WebCryptoCipherStatus::FAILED; | ||
| 230 | + } | ||
| 231 | + *out = ByteSource::Allocated(buf.release()); | ||
| 232 | + } else { | ||
| 233 | + // Input must be a multiple of 8 bytes and at least 24 bytes. | ||
| 234 | + if (in.size() < 24 || in.size() % 8 != 0) { | ||
| 235 | + return WebCryptoCipherStatus::FAILED; | ||
| 236 | + } | ||
| 237 | + if (AES_set_decrypt_key(key_bytes, key_bits, &aes_key) != 0) { | ||
| 238 | + return WebCryptoCipherStatus::FAILED; | ||
| 239 | + } | ||
| 240 | + auto buf = DataPointer::Alloc(in.size() - 8); | ||
| 241 | + int len = AES_unwrap_key(&aes_key, | ||
| 242 | + nullptr, | ||
| 243 | + static_cast<unsigned char*>(buf.get()), | ||
| 244 | + in.data<unsigned char>(), | ||
| 245 | + in.size()); | ||
| 246 | + if (len < 0 || static_cast<size_t>(len) != in.size() - 8) { | ||
| 247 | + return WebCryptoCipherStatus::FAILED; | ||
| 248 | + } | ||
| 249 | + *out = ByteSource::Allocated(buf.release()); | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + return WebCryptoCipherStatus::OK; | ||
| 253 | + } | ||
| 254 | + #endif // OPENSSL_IS_BORINGSSL | ||
| 255 | + | ||
| 194 | 256 | // The AES_CTR implementation here takes it's inspiration from the chromium | |
| 195 | 257 | // implementation here: | |
| 196 | 258 | // https://github.com/chromium/chromium/blob/7af6cfd/components/webcrypto/algorithms/aes_ctr.cc | |
@@ -475,6 +537,19 @@ Maybe<void> AESCipherTraits::AdditionalConfig( | |||
| 475 | 537 | } | |
| 476 | 538 | #undef V | |
| 477 | 539 | ||
| 540 | + #ifdef OPENSSL_IS_BORINGSSL | ||
| 541 | + // On BoringSSL the KW variants have no backing EVP_CIPHER; they use | ||
| 542 | + // low-level AES_wrap_key / AES_unwrap_key instead. | ||
| 543 | + const bool is_kw = params->variant == AESKeyVariant::KW_128 || | ||
| 544 | + params->variant == AESKeyVariant::KW_192 || | ||
| 545 | + params->variant == AESKeyVariant::KW_256; | ||
| 546 | + | ||
| 547 | + if (is_kw) { | ||
| 548 | + UseDefaultIV(params); | ||
| 549 | + return JustVoid(); | ||
| 550 | + } | ||
| 551 | + #endif | ||
| 552 | + | ||
| 478 | 553 | if (!params->cipher) { | |
| 479 | 554 | THROW_ERR_CRYPTO_UNKNOWN_CIPHER(env); | |
| 480 | 555 | return Nothing<void>(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -22,9 +22,21 @@ constexpr unsigned kNoAuthTagLength = static_cast<unsigned>(-1); | |||
| 22 | 22 | V(GCM_128, AES_Cipher, ncrypto::Cipher::AES_128_GCM) \ | |
| 23 | 23 | V(GCM_192, AES_Cipher, ncrypto::Cipher::AES_192_GCM) \ | |
| 24 | 24 | V(GCM_256, AES_Cipher, ncrypto::Cipher::AES_256_GCM) \ | |
| 25 | + VARIANTS_KW(V) | ||
| 26 | + | ||
| 27 | + #ifdef OPENSSL_IS_BORINGSSL | ||
| 28 | + // BoringSSL does not expose EVP_aes_*_wrap via the EVP_CIPHER registry. | ||
| 29 | + // Route AES-KW through low-level AES_wrap_key / AES_unwrap_key instead. | ||
| 30 | + #define VARIANTS_KW(V) \ | ||
| 31 | + V(KW_128, AES_KW_Cipher, static_cast<const EVP_CIPHER*>(nullptr)) \ | ||
| 32 | + V(KW_192, AES_KW_Cipher, static_cast<const EVP_CIPHER*>(nullptr)) \ | ||
| 33 | + V(KW_256, AES_KW_Cipher, static_cast<const EVP_CIPHER*>(nullptr)) | ||
| 34 | + #else | ||
| 35 | + #define VARIANTS_KW(V) \ | ||
| 25 | 36 | V(KW_128, AES_Cipher, ncrypto::Cipher::AES_128_KW) \ | |
| 26 | 37 | V(KW_192, AES_Cipher, ncrypto::Cipher::AES_192_KW) \ | |
| 27 | 38 | V(KW_256, AES_Cipher, ncrypto::Cipher::AES_256_KW) | |
| 39 | + #endif | ||
| 28 | 40 | ||
| 29 | 41 | #if OPENSSL_WITH_AES_OCB | |
| 30 | 42 | #define VARIANTS_OCB(V) \ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -74,7 +74,7 @@ export const vectors = { | |||
| 74 | 74 | [false, { name: 'AES-CBC', length: 25 }], | |
| 75 | 75 | [true, { name: 'AES-GCM', length: 128 }], | |
| 76 | 76 | [false, { name: 'AES-GCM', length: 25 }], | |
| 77 | - [!boringSSL, { name: 'AES-KW', length: 128 }], | ||
| 77 | + [true, { name: 'AES-KW', length: 128 }], | ||
| 78 | 78 | [false, { name: 'AES-KW', length: 25 }], | |
| 79 | 79 | [true, { name: 'HMAC', hash: 'SHA-256' }], | |
| 80 | 80 | [true, { name: 'HMAC', hash: 'SHA-256', length: 256 }], | |
@@ -166,7 +166,7 @@ export const vectors = { | |||
| 166 | 166 | [true, 'AES-CTR'], | |
| 167 | 167 | [true, 'AES-CBC'], | |
| 168 | 168 | [true, 'AES-GCM'], | |
| 169 | - [!boringSSL, 'AES-KW'], | ||
| 169 | + [true, 'AES-KW'], | ||
| 170 | 170 | [true, { name: 'HMAC', hash: 'SHA-256' }], | |
| 171 | 171 | [true, { name: 'HMAC', hash: 'SHA-256', length: 256 }], | |
| 172 | 172 | [false, { name: 'HMAC', hash: 'SHA-256', length: 25 }], | |
@@ -188,18 +188,18 @@ export const vectors = { | |||
| 188 | 188 | [true, 'AES-CTR'], | |
| 189 | 189 | [true, 'AES-CBC'], | |
| 190 | 190 | [true, 'AES-GCM'], | |
| 191 | - [!boringSSL, 'AES-KW'], | ||
| 191 | + [true, 'AES-KW'], | ||
| 192 | 192 | [true, 'Ed25519'], | |
| 193 | 193 | [true, 'X25519'], | |
| 194 | 194 | ], | |
| 195 | 195 | 'wrapKey': [ | |
| 196 | 196 | [false, 'AES-KW'], | |
| 197 | - [!boringSSL, 'AES-KW', 'AES-CTR'], | ||
| 198 | - [!boringSSL, 'AES-KW', 'HMAC'], | ||
| 197 | + [true, 'AES-KW', 'AES-CTR'], | ||
| 198 | + [true, 'AES-KW', 'HMAC'], | ||
| 199 | 199 | ], | |
| 200 | 200 | 'unwrapKey': [ | |
| 201 | 201 | [false, 'AES-KW'], | |
| 202 | - [!boringSSL, 'AES-KW', 'AES-CTR'], | ||
| 202 | + [true, 'AES-KW', 'AES-CTR'], | ||
| 203 | 203 | ], | |
| 204 | 204 | 'unsupported operation': [ | |
| 205 | 205 | [false, ''], | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -31,8 +31,8 @@ function assertCryptoKey(cryptoKey, keyObject, algorithm, extractable, usages) { | |||
| 31 | 31 | algorithms.push('ChaCha20-Poly1305'); | |
| 32 | 32 | ||
| 33 | 33 | if (process.features.openssl_is_boringssl) { | |
| 34 | - algorithms = algorithms.filter((a) => a !== 'AES-KW' && a !== 'ChaCha20-Poly1305'); | ||
| 35 | - common.printSkipMessage('Skipping unsupported AES-KW/ChaCha20-Poly1305 test cases'); | ||
| 34 | + algorithms = algorithms.filter((a) => a !== 'ChaCha20-Poly1305'); | ||
| 35 | + common.printSkipMessage('Skipping unsupported ChaCha20-Poly1305 test case'); | ||
| 36 | 36 | } | |
| 37 | 37 | ||
| 38 | 38 | for (const algorithm of algorithms) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -42,17 +42,10 @@ function assertSameSet(actual, expected, msg) { | |||
| 42 | 42 | { algorithm: { name: 'AES-GCM', length: 128 }, | |
| 43 | 43 | usages: ['decrypt', 'encrypt', 'decrypt'], | |
| 44 | 44 | expected: ['encrypt', 'decrypt'] }, | |
| 45 | - ]; | ||
| 46 | - | ||
| 47 | - if (!process.features.openssl_is_boringssl) { | ||
| 48 | - symmetric.push({ | ||
| 49 | - algorithm: { name: 'AES-KW', length: 128 }, | ||
| 45 | + { algorithm: { name: 'AES-KW', length: 128 }, | ||
| 50 | 46 | usages: ['wrapKey', 'unwrapKey', 'wrapKey', 'unwrapKey'], | |
| 51 | - expected: ['wrapKey', 'unwrapKey'], | ||
| 52 | - }); | ||
| 53 | - } else { | ||
| 54 | - common.printSkipMessage('AES-KW is not supported in BoringSSL'); | ||
| 55 | - } | ||
| 47 | + expected: ['wrapKey', 'unwrapKey'] }, | ||
| 48 | + ]; | ||
| 56 | 49 | ||
| 57 | 50 | if (hasOpenSSL(3)) { | |
| 58 | 51 | symmetric.push({ | |
@@ -172,17 +165,10 @@ function assertSameSet(actual, expected, msg) { | |||
| 172 | 165 | { algorithm: { name: 'HMAC', hash: 'SHA-256' }, keyData: new Uint8Array(32), | |
| 173 | 166 | usages: ['verify', 'sign', 'verify', 'sign'], | |
| 174 | 167 | expected: ['sign', 'verify'] }, | |
| 175 | - ]; | ||
| 176 | - | ||
| 177 | - if (!process.features.openssl_is_boringssl) { | ||
| 178 | - rawSymmetric.push({ | ||
| 179 | - algorithm: { name: 'AES-KW' }, keyData: new Uint8Array(16), | ||
| 168 | + { algorithm: { name: 'AES-KW' }, keyData: new Uint8Array(16), | ||
| 180 | 169 | usages: ['wrapKey', 'unwrapKey', 'wrapKey'], | |
| 181 | - expected: ['wrapKey', 'unwrapKey'], | ||
| 182 | - }); | ||
| 183 | - } else { | ||
| 184 | - common.printSkipMessage('AES-KW is not supported in BoringSSL'); | ||
| 185 | - } | ||
| 170 | + expected: ['wrapKey', 'unwrapKey'] }, | ||
| 171 | + ]; | ||
| 186 | 172 | ||
| 187 | 173 | if (hasOpenSSL(3)) { | |
| 188 | 174 | // KMAC does not support `raw` format, only `raw-secret` and `jwk`. | |
@@ -441,17 +427,10 @@ function assertSameSet(actual, expected, msg) { | |||
| 441 | 427 | { algorithm: { name: 'AES-GCM', length: 128 }, | |
| 442 | 428 | usages: ['decrypt', 'encrypt', 'decrypt'], | |
| 443 | 429 | expected: ['encrypt', 'decrypt'] }, | |
| 444 | - ]; | ||
| 445 | - | ||
| 446 | - if (!process.features.openssl_is_boringssl) { | ||
| 447 | - jwkVectors.push({ | ||
| 448 | - algorithm: { name: 'AES-KW', length: 128 }, | ||
| 430 | + { algorithm: { name: 'AES-KW', length: 128 }, | ||
| 449 | 431 | usages: ['wrapKey', 'unwrapKey', 'wrapKey', 'unwrapKey'], | |
| 450 | - expected: ['wrapKey', 'unwrapKey'], | ||
| 451 | - }); | ||
| 452 | - } else { | ||
| 453 | - common.printSkipMessage('AES-KW is not supported in BoringSSL'); | ||
| 454 | - } | ||
| 432 | + expected: ['wrapKey', 'unwrapKey'] }, | ||
| 433 | + ]; | ||
| 455 | 434 | ||
| 456 | 435 | if (hasOpenSSL(3)) { | |
| 457 | 436 | jwkVectors.push({ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -24,12 +24,12 @@ const kDerivedKeyTypes = [ | |||
| 24 | 24 | ['HMAC', 256, 'SHA-256', 'sign', 'verify'], | |
| 25 | 25 | ['HMAC', 256, 'SHA-384', 'sign', 'verify'], | |
| 26 | 26 | ['HMAC', 256, 'SHA-512', 'sign', 'verify'], | |
| 27 | + ['AES-KW', 128, undefined, 'wrapKey', 'unwrapKey'], | ||
| 28 | + ['AES-KW', 256, undefined, 'wrapKey', 'unwrapKey'], | ||
| 27 | 29 | ]; | |
| 28 | 30 | ||
| 29 | 31 | if (!process.features.openssl_is_boringssl) { | |
| 30 | 32 | kDerivedKeyTypes.push( | |
| 31 | - ['AES-KW', 128, undefined, 'wrapKey', 'unwrapKey'], | ||
| 32 | - ['AES-KW', 256, undefined, 'wrapKey', 'unwrapKey'], | ||
| 33 | 33 | ['HMAC', 256, 'SHA3-256', 'sign', 'verify'], | |
| 34 | 34 | ['HMAC', 256, 'SHA3-384', 'sign', 'verify'], | |
| 35 | 35 | ['HMAC', 256, 'SHA3-512', 'sign', 'verify'], | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -135,6 +135,14 @@ const vectors = { | |||
| 135 | 135 | 'deriveBits', | |
| 136 | 136 | ], | |
| 137 | 137 | }, | |
| 138 | + 'AES-KW': { | ||
| 139 | + algorithm: { length: 256 }, | ||
| 140 | + result: 'CryptoKey', | ||
| 141 | + usages: [ | ||
| 142 | + 'wrapKey', | ||
| 143 | + 'unwrapKey', | ||
| 144 | + ], | ||
| 145 | + } | ||
| 138 | 146 | }; | |
| 139 | 147 | ||
| 140 | 148 | if (!process.features.openssl_is_boringssl) { | |
@@ -152,14 +160,6 @@ if (!process.features.openssl_is_boringssl) { | |||
| 152 | 160 | 'deriveBits', | |
| 153 | 161 | ], | |
| 154 | 162 | }; | |
| 155 | - vectors['AES-KW'] = { | ||
| 156 | - algorithm: { length: 256 }, | ||
| 157 | - result: 'CryptoKey', | ||
| 158 | - usages: [ | ||
| 159 | - 'wrapKey', | ||
| 160 | - 'unwrapKey', | ||
| 161 | - ], | ||
| 162 | - }; | ||
| 163 | 163 | vectors['ChaCha20-Poly1305'] = { | |
| 164 | 164 | result: 'CryptoKey', | |
| 165 | 165 | usages: [ | |
@@ -606,17 +606,10 @@ if (hasOpenSSL(3, 5)) { | |||
| 606 | 606 | [ 'AES-CBC', 256, ['encrypt', 'decrypt']], | |
| 607 | 607 | [ 'AES-GCM', 128, ['encrypt', 'decrypt']], | |
| 608 | 608 | [ 'AES-GCM', 256, ['encrypt', 'decrypt']], | |
| 609 | + [ 'AES-KW', 128, ['wrapKey', 'unwrapKey']], | ||
| 610 | + [ 'AES-KW', 256, ['wrapKey', 'unwrapKey']], | ||
| 609 | 611 | ]; | |
| 610 | 612 | ||
| 611 | - if (!process.features.openssl_is_boringssl) { | ||
| 612 | - kTests.push( | ||
| 613 | - [ 'AES-KW', 128, ['wrapKey', 'unwrapKey']], | ||
| 614 | - [ 'AES-KW', 256, ['wrapKey', 'unwrapKey']], | ||
| 615 | - ); | ||
| 616 | - } else { | ||
| 617 | - common.printSkipMessage('Skipping unsupported AES-KW test cases'); | ||
| 618 | - } | ||
| 619 | - | ||
| 620 | 613 | const tests = Promise.all(kTests.map((args) => test(...args))); | |
| 621 | 614 | ||
| 622 | 615 | tests.then(common.mustCall()); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -59,21 +59,17 @@ await subtle.deriveKey( | |||
| 59 | 59 | true, | |
| 60 | 60 | ['encrypt', 'decrypt']); | |
| 61 | 61 | ||
| 62 | - if (!process.features.openssl_is_boringssl) { | ||
| 63 | - const wrappingKey = await subtle.generateKey( | ||
| 64 | - { name: 'AES-KW', length: 256 }, true, ['wrapKey', 'unwrapKey']); | ||
| 62 | + const wrappingKey = await subtle.generateKey( | ||
| 63 | + { name: 'AES-KW', length: 256 }, true, ['wrapKey', 'unwrapKey']); | ||
| 65 | 64 | ||
| 66 | - const keyToWrap = await subtle.generateKey( | ||
| 67 | - { name: 'AES-CBC', length: 256 }, true, ['encrypt', 'decrypt']); | ||
| 65 | + const keyToWrap = await subtle.generateKey( | ||
| 66 | + { name: 'AES-CBC', length: 256 }, true, ['encrypt', 'decrypt']); | ||
| 68 | 67 | ||
| 69 | - const wrapped = await subtle.wrapKey('raw', keyToWrap, wrappingKey, 'AES-KW'); | ||
| 68 | + const wrapped = await subtle.wrapKey('raw', keyToWrap, wrappingKey, 'AES-KW'); | ||
| 70 | 69 | ||
| 71 | - await subtle.unwrapKey( | ||
| 72 | - 'raw', wrapped, wrappingKey, 'AES-KW', | ||
| 73 | - { name: 'AES-CBC', length: 256 }, true, ['encrypt', 'decrypt']); | ||
| 74 | - } else { | ||
| 75 | - common.printSkipMessage('Skipping unsupported AES-KW test case'); | ||
| 76 | - } | ||
| 70 | + await subtle.unwrapKey( | ||
| 71 | + 'raw', wrapped, wrappingKey, 'AES-KW', | ||
| 72 | + { name: 'AES-CBC', length: 256 }, true, ['encrypt', 'decrypt']); | ||
| 77 | 73 | ||
| 78 | 74 | const { privateKey } = await subtle.generateKey( | |
| 79 | 75 | { name: 'ECDSA', namedCurve: 'P-256' }, true, ['sign', 'verify']); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,14 +39,15 @@ const kWrappingData = { | |||
| 39 | 39 | }, | |
| 40 | 40 | pair: false | |
| 41 | 41 | }, | |
| 42 | - }; | ||
| 43 | - | ||
| 44 | - if (!process.features.openssl_is_boringssl) { | ||
| 45 | - kWrappingData['AES-KW'] = { | ||
| 42 | + 'AES-KW': { | ||
| 46 | 43 | generate: { length: 128 }, | |
| 47 | 44 | wrap: { }, | |
| 48 | 45 | pair: false | |
| 49 | - }; | ||
| 46 | + }, | ||
| 47 | + }; | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + if (!process.features.openssl_is_boringssl) { | ||
| 50 | 51 | kWrappingData['ChaCha20-Poly1305'] = { | |
| 51 | 52 | wrap: { | |
| 52 | 53 | iv: new Uint8Array(12), | |
@@ -56,7 +57,7 @@ if (!process.features.openssl_is_boringssl) { | |||
| 56 | 57 | pair: false | |
| 57 | 58 | }; | |
| 58 | 59 | } else { | |
| 59 | - common.printSkipMessage('Skipping unsupported AES-KW test case'); | ||
| 60 | + common.printSkipMessage('Skipping unsupported ChaCha20-Poly1305 test case'); | ||
| 60 | 61 | } | |
| 61 | 62 | ||
| 62 | 63 | if (hasOpenSSL(3)) { | |
@@ -188,20 +189,15 @@ async function generateKeysToWrap() { | |||
| 188 | 189 | usages: ['sign', 'verify'], | |
| 189 | 190 | pair: false, | |
| 190 | 191 | }, | |
| 191 | - ]; | ||
| 192 | - | ||
| 193 | - if (!process.features.openssl_is_boringssl) { | ||
| 194 | - parameters.push({ | ||
| 192 | + { | ||
| 195 | 193 | algorithm: { | |
| 196 | 194 | name: 'AES-KW', | |
| 197 | 195 | length: 128 | |
| 198 | 196 | }, | |
| 199 | 197 | usages: ['wrapKey', 'unwrapKey'], | |
| 200 | 198 | pair: false, | |
| 201 | - }); | ||
| 202 | - } else { | ||
| 203 | - common.printSkipMessage('Skipping unsupported AES-KW test case'); | ||
| 204 | - } | ||
| 199 | + }, | ||
| 200 | + ]; | ||
| 205 | 201 | ||
| 206 | 202 | if (!process.features.openssl_is_boringssl) { | |
| 207 | 203 | parameters.push({ | |
| Back | FazBrowse Home | New Git URL |
0 commit comments