({ name, privateUsages }, extractable)
| 96 | } |
| 97 | |
| 98 | async function testImportPkcs8({ name, privateUsages }, extractable) { |
| 99 | let key; |
| 100 | try { |
| 101 | key = await subtle.importKey( |
| 102 | 'pkcs8', |
| 103 | keyData[name].pkcs8, |
| 104 | { name }, |
| 105 | extractable, |
| 106 | privateUsages); |
| 107 | } catch (err) { |
| 108 | if (process.features.openssl_is_boringssl) { |
| 109 | assert.strictEqual(err.name, 'DataError'); |
| 110 | assert.strictEqual(err.cause.code, 'ERR_OSSL_EVP_PRIVATE_KEY_WAS_NOT_SEED'); |
| 111 | common.printSkipMessage('Skipping unsupported private key format test'); |
| 112 | return; |
| 113 | } |
| 114 | throw err; |
| 115 | } |
| 116 | assert.strictEqual(key.type, 'private'); |
| 117 | assert.strictEqual(key.extractable, extractable); |
| 118 | assert.deepStrictEqual(key.usages, privateUsages); |
| 119 | assert.deepStrictEqual(key.algorithm.name, name); |
| 120 | assert.strictEqual(key.algorithm, key.algorithm); |
| 121 | assert.strictEqual(key.usages, key.usages); |
| 122 | |
| 123 | if (extractable) { |
| 124 | // Test the roundtrip |
| 125 | const pkcs8 = await subtle.exportKey('pkcs8', key); |
| 126 | assert.strictEqual( |
| 127 | Buffer.from(pkcs8).toString('hex'), |
| 128 | keyData[name].pkcs8_seed_only.toString('hex')); |
| 129 | } else { |
| 130 | await assert.rejects( |
| 131 | subtle.exportKey('pkcs8', key), { |
| 132 | message: /key is not extractable/, |
| 133 | name: 'InvalidAccessError', |
| 134 | }); |
| 135 | } |
| 136 | |
| 137 | await assert.rejects( |
| 138 | subtle.importKey( |
| 139 | 'pkcs8', |
| 140 | keyData[name].pkcs8, |
| 141 | { name }, |
| 142 | extractable, |
| 143 | [/* empty usages */]), |
| 144 | { name: 'SyntaxError', message: 'Usages cannot be empty when importing a private key.' }); |
| 145 | } |
| 146 | |
| 147 | async function testImportPkcs8SeedOnly({ name, privateUsages }, extractable) { |
| 148 | const key = await subtle.importKey( |
no test coverage detected