( algorithm, format, keyData, extractable, usages)
| 196 | } |
| 197 | |
| 198 | function aesImportKey( |
| 199 | algorithm, |
| 200 | format, |
| 201 | keyData, |
| 202 | extractable, |
| 203 | usages) { |
| 204 | const { name } = algorithm; |
| 205 | const usagesSet = validateKeyUsages(usages, kUsages[name], name); |
| 206 | |
| 207 | let handle; |
| 208 | let length; |
| 209 | switch (format) { |
| 210 | case 'KeyObjectHandle': { |
| 211 | length = keyData.getSymmetricKeySize() * 8; |
| 212 | validateKeyLength(length); |
| 213 | handle = keyData; |
| 214 | break; |
| 215 | } |
| 216 | case 'raw-secret': |
| 217 | case 'raw': { |
| 218 | if (format === 'raw' && name === 'AES-OCB') { |
| 219 | return undefined; |
| 220 | } |
| 221 | length = keyData.byteLength * 8; |
| 222 | validateKeyLength(length); |
| 223 | handle = importSecretKey(keyData); |
| 224 | break; |
| 225 | } |
| 226 | case 'jwk': { |
| 227 | validateJwk(keyData, 'oct', extractable, usagesSet, 'enc'); |
| 228 | handle = importJwkSecretKey(keyData); |
| 229 | length = handle.getSymmetricKeySize() * 8; |
| 230 | validateKeyLength(length); |
| 231 | if (keyData.alg !== undefined) { |
| 232 | if (keyData.alg !== getAlgorithmName(algorithm.name, length)) |
| 233 | throw lazyDOMException( |
| 234 | 'JWK "alg" does not match the requested algorithm', |
| 235 | 'DataError'); |
| 236 | } |
| 237 | break; |
| 238 | } |
| 239 | default: |
| 240 | return undefined; |
| 241 | } |
| 242 | |
| 243 | return new InternalCryptoKey( |
| 244 | handle, |
| 245 | { name, length }, |
| 246 | getUsagesMask(usagesSet), |
| 247 | extractable); |
| 248 | } |
| 249 | |
| 250 | module.exports = { |
| 251 | aesCipher, |
nothing calls this directly
no test coverage detected
searching dependent graphs…