( format, keyData, algorithm, extractable, usages)
| 168 | } |
| 169 | |
| 170 | function rsaImportKey( |
| 171 | format, |
| 172 | keyData, |
| 173 | algorithm, |
| 174 | extractable, |
| 175 | usages) { |
| 176 | const allowedUsages = kUsages[algorithm.name]; |
| 177 | const usagesSet = new SafeSet(usages); |
| 178 | let handle; |
| 179 | switch (format) { |
| 180 | case 'KeyObjectHandle': |
| 181 | verifyAcceptableKeyUse( |
| 182 | algorithm.name, |
| 183 | usagesSet, |
| 184 | keyData.getKeyType() === kKeyTypePublic ? |
| 185 | allowedUsages.public : |
| 186 | allowedUsages.private); |
| 187 | handle = keyData; |
| 188 | break; |
| 189 | case 'spki': { |
| 190 | verifyAcceptableKeyUse( |
| 191 | algorithm.name, usagesSet, allowedUsages.public); |
| 192 | handle = importDerKey(keyData, true); |
| 193 | break; |
| 194 | } |
| 195 | case 'pkcs8': { |
| 196 | verifyAcceptableKeyUse( |
| 197 | algorithm.name, usagesSet, allowedUsages.private); |
| 198 | handle = importDerKey(keyData, false); |
| 199 | break; |
| 200 | } |
| 201 | case 'jwk': { |
| 202 | const expectedUse = algorithm.name === 'RSA-OAEP' ? 'enc' : 'sig'; |
| 203 | validateJwk(keyData, 'RSA', extractable, usagesSet, expectedUse); |
| 204 | |
| 205 | if (keyData.alg !== undefined) { |
| 206 | const expected = |
| 207 | normalizeHashName(algorithm.hash.name, |
| 208 | algorithm.name === 'RSASSA-PKCS1-v1_5' ? normalizeHashName.kContextJwkRsa : |
| 209 | algorithm.name === 'RSA-PSS' ? normalizeHashName.kContextJwkRsaPss : |
| 210 | normalizeHashName.kContextJwkRsaOaep); |
| 211 | |
| 212 | if (expected && keyData.alg !== expected) |
| 213 | throw lazyDOMException( |
| 214 | 'JWK "alg" does not match the requested algorithm', |
| 215 | 'DataError'); |
| 216 | } |
| 217 | |
| 218 | const isPublic = keyData.d === undefined; |
| 219 | verifyAcceptableKeyUse( |
| 220 | algorithm.name, |
| 221 | usagesSet, |
| 222 | isPublic ? allowedUsages.public : allowedUsages.private); |
| 223 | handle = importJwkKey(isPublic, keyData); |
| 224 | break; |
| 225 | } |
| 226 | default: |
| 227 | return undefined; |
nothing calls this directly
no test coverage detected
searching dependent graphs…