@@ -22,7 +22,6 @@ using v8::Maybe;
2222using v8::Nothing;
2323using v8::Number;
2424using v8::Object;
25- using v8::String;
2625using v8::Uint32;
2726using v8::Value;
2827
@@ -127,107 +126,6 @@ WebCryptoKeyExportStatus DSAKeyExportTraits::DoExport(
127126 }
128127}
129128
130- Maybe<bool > ExportJWKDsaKey (
131- Environment* env,
132- std::shared_ptr<KeyObjectData> key,
133- Local<Object> target) {
134- ManagedEVPPKey pkey = key->GetAsymmetricKey ();
135- CHECK_EQ (EVP_PKEY_id (pkey.get ()), EVP_PKEY_DSA);
136-
137- DSA* dsa = EVP_PKEY_get0_DSA (pkey.get ());
138- CHECK_NOT_NULL (dsa);
139-
140- const BIGNUM* y;
141- const BIGNUM* x;
142- const BIGNUM* p;
143- const BIGNUM* q;
144- const BIGNUM* g;
145-
146- DSA_get0_key (dsa, &y, &x);
147- DSA_get0_pqg (dsa, &p, &q, &g);
148-
149- if (target->Set (
150- env->context (),
151- env->jwk_kty_string (),
152- env->jwk_dsa_string ()).IsNothing ()) {
153- return Nothing<bool >();
154- }
155-
156- if (SetEncodedValue (env, target, env->jwk_y_string (), y).IsNothing () ||
157- SetEncodedValue (env, target, env->jwk_p_string (), p).IsNothing () ||
158- SetEncodedValue (env, target, env->jwk_q_string (), q).IsNothing () ||
159- SetEncodedValue (env, target, env->jwk_g_string (), g).IsNothing ()) {
160- return Nothing<bool >();
161- }
162-
163- if (key->GetKeyType () == kKeyTypePrivate &&
164- SetEncodedValue (env, target, env->jwk_x_string (), x).IsNothing ()) {
165- return Nothing<bool >();
166- }
167-
168- return Just (true );
169- }
170-
171- std::shared_ptr<KeyObjectData> ImportJWKDsaKey (
172- Environment* env,
173- Local<Object> jwk,
174- const FunctionCallbackInfo<Value>& args,
175- unsigned int offset) {
176- Local<Value> y_value;
177- Local<Value> p_value;
178- Local<Value> q_value;
179- Local<Value> g_value;
180- Local<Value> x_value;
181-
182- if (!jwk->Get (env->context (), env->jwk_y_string ()).ToLocal (&y_value) ||
183- !jwk->Get (env->context (), env->jwk_p_string ()).ToLocal (&p_value) ||
184- !jwk->Get (env->context (), env->jwk_q_string ()).ToLocal (&q_value) ||
185- !jwk->Get (env->context (), env->jwk_g_string ()).ToLocal (&g_value) ||
186- !jwk->Get (env->context (), env->jwk_x_string ()).ToLocal (&x_value)) {
187- return std::shared_ptr<KeyObjectData>();
188- }
189-
190- if (!y_value->IsString () ||
191- !p_value->IsString () ||
192- !q_value->IsString () ||
193- !q_value->IsString () ||
194- (!x_value->IsUndefined () && !x_value->IsString ())) {
195- THROW_ERR_CRYPTO_INVALID_JWK (env, " Invalid JWK DSA key" );
196- return std::shared_ptr<KeyObjectData>();
197- }
198-
199- KeyType type = x_value->IsString () ? kKeyTypePrivate : kKeyTypePublic ;
200-
201- DsaPointer dsa (DSA_new ());
202-
203- ByteSource y = ByteSource::FromEncodedString (env, y_value.As <String>());
204- ByteSource p = ByteSource::FromEncodedString (env, p_value.As <String>());
205- ByteSource q = ByteSource::FromEncodedString (env, q_value.As <String>());
206- ByteSource g = ByteSource::FromEncodedString (env, g_value.As <String>());
207-
208- if (!DSA_set0_key (dsa.get (), y.ToBN ().release (), nullptr ) ||
209- !DSA_set0_pqg (dsa.get (),
210- p.ToBN ().release (),
211- q.ToBN ().release (),
212- g.ToBN ().release ())) {
213- THROW_ERR_CRYPTO_INVALID_JWK (env, " Invalid JWK DSA key" );
214- return std::shared_ptr<KeyObjectData>();
215- }
216-
217- if (type == kKeyTypePrivate ) {
218- ByteSource x = ByteSource::FromEncodedString (env, x_value.As <String>());
219- if (!DSA_set0_key (dsa.get (), nullptr , x.ToBN ().release ())) {
220- THROW_ERR_CRYPTO_INVALID_JWK (env, " Invalid JWK DSA key" );
221- return std::shared_ptr<KeyObjectData>();
222- }
223- }
224-
225- EVPKeyPointer pkey (EVP_PKEY_new ());
226- CHECK_EQ (EVP_PKEY_set1_DSA (pkey.get (), dsa.get ()), 1 );
227-
228- return KeyObjectData::CreateAsymmetric (type, ManagedEVPPKey (std::move (pkey)));
229- }
230-
231129Maybe<bool > GetDsaKeyDetail (
232130 Environment* env,
233131 std::shared_ptr<KeyObjectData> key,
@@ -269,4 +167,3 @@ void Initialize(Environment* env, Local<Object> target) {
269167} // namespace DSAAlg
270168} // namespace crypto
271169} // namespace node
272-
0 commit comments