( format, keyData, algorithm, extractable, usages, )
| 132 | } |
| 133 | |
| 134 | function ecImportKey( |
| 135 | format, |
| 136 | keyData, |
| 137 | algorithm, |
| 138 | extractable, |
| 139 | usages, |
| 140 | ) { |
| 141 | const { name, namedCurve } = algorithm; |
| 142 | |
| 143 | let handle; |
| 144 | const allowedUsages = kUsages[name]; |
| 145 | const usagesSet = new SafeSet(usages); |
| 146 | switch (format) { |
| 147 | case 'KeyObjectHandle': |
| 148 | verifyAcceptableKeyUse( |
| 149 | name, |
| 150 | usagesSet, |
| 151 | keyData.getKeyType() === kKeyTypePublic ? |
| 152 | allowedUsages.public : |
| 153 | allowedUsages.private); |
| 154 | handle = keyData; |
| 155 | break; |
| 156 | case 'spki': { |
| 157 | verifyAcceptableKeyUse(name, usagesSet, allowedUsages.public); |
| 158 | handle = importDerKey(keyData, true); |
| 159 | break; |
| 160 | } |
| 161 | case 'pkcs8': { |
| 162 | verifyAcceptableKeyUse(name, usagesSet, allowedUsages.private); |
| 163 | handle = importDerKey(keyData, false); |
| 164 | break; |
| 165 | } |
| 166 | case 'jwk': { |
| 167 | const expectedUse = name === 'ECDH' ? 'enc' : 'sig'; |
| 168 | validateJwk(keyData, 'EC', extractable, usagesSet, expectedUse); |
| 169 | |
| 170 | if (keyData.crv !== namedCurve) |
| 171 | throw lazyDOMException( |
| 172 | 'JWK "crv" does not match the requested algorithm', |
| 173 | 'DataError'); |
| 174 | |
| 175 | if (algorithm.name === 'ECDSA' && keyData.alg !== undefined) { |
| 176 | let algNamedCurve; |
| 177 | switch (keyData.alg) { |
| 178 | case 'ES256': algNamedCurve = 'P-256'; break; |
| 179 | case 'ES384': algNamedCurve = 'P-384'; break; |
| 180 | case 'ES512': algNamedCurve = 'P-521'; break; |
| 181 | } |
| 182 | if (algNamedCurve !== namedCurve) |
| 183 | throw lazyDOMException( |
| 184 | 'JWK "alg" does not match the requested algorithm', |
| 185 | 'DataError'); |
| 186 | } |
| 187 | |
| 188 | const isPublic = keyData.d === undefined; |
| 189 | verifyAcceptableKeyUse( |
| 190 | name, |
| 191 | usagesSet, |
nothing calls this directly
no test coverage detected
searching dependent graphs…