({ n, mode, keyFormat, keyType })
| 104 | } |
| 105 | |
| 106 | function main({ n, mode, keyFormat, keyType }) { |
| 107 | pems ||= [...Buffer.alloc(n)].map(() => keyFixtures[keyType].publicKey); |
| 108 | keyObjects ||= pems.map(crypto.createPublicKey); |
| 109 | |
| 110 | // Warm up OpenSSL's provider operation cache for each key object |
| 111 | const warmupDigest = keyType === 'rsa' || keyType === 'ec' ? 'sha256' : null; |
| 112 | const warmupSig = crypto.sign(warmupDigest, data, keyFixtures[keyType].privateKey); |
| 113 | for (const keyObject of keyObjects) { |
| 114 | crypto.verify(warmupDigest, data, keyObject, warmupSig); |
| 115 | } |
| 116 | |
| 117 | let publicKey, keys, digest; |
| 118 | |
| 119 | switch (keyType) { |
| 120 | case 'rsa': |
| 121 | case 'ec': |
| 122 | digest = 'sha256'; |
| 123 | break; |
| 124 | case 'ed25519': |
| 125 | case 'ml-dsa-44': |
| 126 | break; |
| 127 | default: |
| 128 | throw new Error('not implemented'); |
| 129 | } |
| 130 | |
| 131 | switch (keyFormat) { |
| 132 | case 'keyObject': |
| 133 | publicKey = keyObjects[0]; |
| 134 | break; |
| 135 | case 'pem': |
| 136 | publicKey = pems[0]; |
| 137 | break; |
| 138 | case 'jwk': { |
| 139 | publicKey = { key: keyObjects[0].export({ format: 'jwk' }), format: 'jwk' }; |
| 140 | break; |
| 141 | } |
| 142 | case 'der': { |
| 143 | publicKey = { key: keyObjects[0].export({ format: 'der', type: 'spki' }), format: 'der', type: 'spki' }; |
| 144 | break; |
| 145 | } |
| 146 | case 'raw-public': { |
| 147 | const exportedKey = keyObjects[0].export({ format: 'raw-public' }); |
| 148 | const keyOpts = { key: exportedKey, format: 'raw-public', asymmetricKeyType: keyType }; |
| 149 | if (keyType === 'ec') keyOpts.namedCurve = keyObjects[0].asymmetricKeyDetails.namedCurve; |
| 150 | publicKey = keyOpts; |
| 151 | break; |
| 152 | } |
| 153 | case 'keyObject.unique': |
| 154 | keys = keyObjects; |
| 155 | break; |
| 156 | default: |
| 157 | throw new Error('not implemented'); |
| 158 | } |
| 159 | |
| 160 | |
| 161 | const { privateKey } = keyFixtures[keyType]; |
| 162 | const signature = crypto.sign(digest, data, privateKey); |
| 163 |
nothing calls this directly
no test coverage detected
searching dependent graphs…