| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -20,6 +20,8 @@ | |||
| 20 | 20 | namespace node { | |
| 21 | 21 | ||
| 22 | 22 | using v8::Array; | |
| 23 | + using v8::ArrayBuffer; | ||
| 24 | + using v8::BackingStore; | ||
| 23 | 25 | using v8::FunctionCallbackInfo; | |
| 24 | 26 | using v8::FunctionTemplate; | |
| 25 | 27 | using v8::Int32; | |
@@ -220,17 +222,23 @@ void ECDH::ComputeSecret(const FunctionCallbackInfo<Value>& args) { | |||
| 220 | 222 | return; | |
| 221 | 223 | } | |
| 222 | 224 | ||
| 223 | - // NOTE: field_size is in bits | ||
| 224 | - int field_size = EC_GROUP_get_degree(ecdh->group_); | ||
| 225 | - size_t out_len = (field_size + 7) / 8; | ||
| 226 | - AllocatedBuffer out = AllocatedBuffer::AllocateManaged(env, out_len); | ||
| 225 | + std::unique_ptr<BackingStore> bs; | ||
| 226 | + { | ||
| 227 | + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); | ||
| 228 | + // NOTE: field_size is in bits | ||
| 229 | + int field_size = EC_GROUP_get_degree(ecdh->group_); | ||
| 230 | + size_t out_len = (field_size + 7) / 8; | ||
| 231 | + bs = ArrayBuffer::NewBackingStore(env->isolate(), out_len); | ||
| 232 | + } | ||
| 227 | 233 | ||
| 228 | - int r = ECDH_compute_key( | ||
| 229 | - out.data(), out_len, pub.get(), ecdh->key_.get(), nullptr); | ||
| 230 | - if (!r) | ||
| 234 | + if (!ECDH_compute_key( | ||
| 235 | + bs->Data(), bs->ByteLength(), pub.get(), ecdh->key_.get(), nullptr)) | ||
| 231 | 236 | return THROW_ERR_CRYPTO_OPERATION_FAILED(env, "Failed to compute ECDH key"); | |
| 232 | 237 | ||
| 233 | - args.GetReturnValue().Set(out.ToBuffer().FromMaybe(Local<Value>())); | ||
| 238 | + Local<ArrayBuffer> ab = ArrayBuffer::New(env->isolate(), std::move(bs)); | ||
| 239 | + Local<Value> buffer; | ||
| 240 | + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; | ||
| 241 | + args.GetReturnValue().Set(buffer); | ||
| 234 | 242 | } | |
| 235 | 243 | ||
| 236 | 244 | void ECDH::GetPublicKey(const FunctionCallbackInfo<Value>& args) { | |
@@ -270,13 +278,19 @@ void ECDH::GetPrivateKey(const FunctionCallbackInfo<Value>& args) { | |||
| 270 | 278 | return THROW_ERR_CRYPTO_OPERATION_FAILED(env, | |
| 271 | 279 | "Failed to get ECDH private key"); | |
| 272 | 280 | ||
| 273 | - const int size = BN_num_bytes(b); | ||
| 274 | - AllocatedBuffer out = AllocatedBuffer::AllocateManaged(env, size); | ||
| 275 | - CHECK_EQ(size, BN_bn2binpad(b, | ||
| 276 | - reinterpret_cast<unsigned char*>(out.data()), | ||
| 277 | - size)); | ||
| 281 | + std::unique_ptr<BackingStore> bs; | ||
| 282 | + { | ||
| 283 | + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); | ||
| 284 | + bs = ArrayBuffer::NewBackingStore(env->isolate(), BN_num_bytes(b)); | ||
| 285 | + } | ||
| 286 | + CHECK_EQ(static_cast<int>(bs->ByteLength()), | ||
| 287 | + BN_bn2binpad( | ||
| 288 | + b, static_cast<unsigned char*>(bs->Data()), bs->ByteLength())); | ||
| 278 | 289 | ||
| 279 | - args.GetReturnValue().Set(out.ToBuffer().FromMaybe(Local<Value>())); | ||
| 290 | + Local<ArrayBuffer> ab = ArrayBuffer::New(env->isolate(), std::move(bs)); | ||
| 291 | + Local<Value> buffer; | ||
| 292 | + if (!Buffer::New(env, ab, 0, ab->ByteLength()).ToLocal(&buffer)) return; | ||
| 293 | + args.GetReturnValue().Set(buffer); | ||
| 280 | 294 | } | |
| 281 | 295 | ||
| 282 | 296 | void ECDH::SetPrivateKey(const FunctionCallbackInfo<Value>& args) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments