MCPcopy Index your code
hub / github.com/nodejs/node / ecImportKey

Function ecImportKey

lib/internal/crypto/ec.js:134–226  ·  view source on GitHub ↗
(
  format,
  keyData,
  algorithm,
  extractable,
  usages,
)

Source from the content-addressed store, hash-verified

132}
133
134function 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,

Callers

nothing calls this directly

Calls 7

verifyAcceptableKeyUseFunction · 0.85
importDerKeyFunction · 0.85
validateJwkFunction · 0.85
lazyDOMExceptionFunction · 0.85
importJwkKeyFunction · 0.85
importRawKeyFunction · 0.85
getUsagesMaskFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…