({ n, mode, keyFormat, keyType, op })
| 122 | } |
| 123 | |
| 124 | function main({ n, mode, keyFormat, keyType, op }) { |
| 125 | const isEncapsulate = op === 'encapsulate'; |
| 126 | const pemSource = isEncapsulate ? |
| 127 | keyFixtures[keyType].publicKey : |
| 128 | keyFixtures[keyType].privateKey; |
| 129 | const createKeyFn = isEncapsulate ? crypto.createPublicKey : crypto.createPrivateKey; |
| 130 | const pems = [...Buffer.alloc(n)].map(() => pemSource); |
| 131 | const keyObjects = pems.map(createKeyFn); |
| 132 | |
| 133 | // Warm up OpenSSL's provider operation cache for each key object |
| 134 | if (isEncapsulate) { |
| 135 | for (const keyObject of keyObjects) { |
| 136 | crypto.encapsulate(keyObject); |
| 137 | } |
| 138 | } else { |
| 139 | const warmupCiphertext = crypto.encapsulate(keyObjects[0]).ciphertext; |
| 140 | for (const keyObject of keyObjects) { |
| 141 | crypto.decapsulate(keyObject, warmupCiphertext); |
| 142 | } |
| 143 | } |
| 144 | |
| 145 | const asymmetricKeyType = keyObjects[0].asymmetricKeyType; |
| 146 | let key, keys, ciphertexts; |
| 147 | |
| 148 | switch (keyFormat) { |
| 149 | case 'keyObject': |
| 150 | key = keyObjects[0]; |
| 151 | break; |
| 152 | case 'pem': |
| 153 | key = pems[0]; |
| 154 | break; |
| 155 | case 'jwk': { |
| 156 | key = { key: keyObjects[0].export({ format: 'jwk' }), format: 'jwk' }; |
| 157 | break; |
| 158 | } |
| 159 | case 'der': { |
| 160 | const type = isEncapsulate ? 'spki' : 'pkcs8'; |
| 161 | key = { key: keyObjects[0].export({ format: 'der', type }), format: 'der', type }; |
| 162 | break; |
| 163 | } |
| 164 | case 'raw-public': { |
| 165 | const exportedKey = keyObjects[0].export({ format: 'raw-public' }); |
| 166 | const keyOpts = { key: exportedKey, format: 'raw-public', asymmetricKeyType }; |
| 167 | if (asymmetricKeyType === 'ec') keyOpts.namedCurve = keyObjects[0].asymmetricKeyDetails.namedCurve; |
| 168 | key = keyOpts; |
| 169 | break; |
| 170 | } |
| 171 | case 'raw-private': { |
| 172 | const exportedKey = keyObjects[0].export({ format: 'raw-private' }); |
| 173 | const keyOpts = { key: exportedKey, format: 'raw-private', asymmetricKeyType }; |
| 174 | if (asymmetricKeyType === 'ec') keyOpts.namedCurve = keyObjects[0].asymmetricKeyDetails.namedCurve; |
| 175 | key = keyOpts; |
| 176 | break; |
| 177 | } |
| 178 | case 'raw-seed': { |
| 179 | // raw-seed requires a private key to export from |
| 180 | const privateKeyObject = crypto.createPrivateKey(keyFixtures[keyType].privateKey); |
| 181 | key = { |
nothing calls this directly
no test coverage detected
searching dependent graphs…