@@ -22,7 +22,6 @@ using v8::Maybe;
22
22
using v8::Nothing;
23
23
using v8::Number;
24
24
using v8::Object;
25
- using v8::String;
26
25
using v8::Uint32;
27
26
using v8::Value;
28
27
@@ -127,107 +126,6 @@ WebCryptoKeyExportStatus DSAKeyExportTraits::DoExport(
127
126
}
128
127
}
129
128
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
-
231
129
Maybe<bool > GetDsaKeyDetail (
232
130
Environment* env,
233
131
std::shared_ptr<KeyObjectData> key,
@@ -269,4 +167,3 @@ void Initialize(Environment* env, Local<Object> target) {
269
167
} // namespace DSAAlg
270
168
} // namespace crypto
271
169
} // namespace node
272
-
0 commit comments