diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2016-04-18 16:10:20 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2016-07-05 16:09:58 +0200 |
commit | b4d4fd939c813177209fc6a2f32a3a125122de7c (patch) | |
tree | 3edba86358a151f285565ccdad1cb6683c4c55c5 /test/addons/openssl-binding | |
parent | d80432db76b2e019a9403e5318bf6adc9a027ddb (diff) | |
download | android-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.tar.gz android-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.tar.bz2 android-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.zip |
build: export openssl symbols on windows
Export symbols from the bundled openssl for add-ons to link against.
Fixes: https://github.com/nodejs/node-v0.x-archive/issues/4051
PR-URL: https://github.com/nodejs/node/pull/6274
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/addons/openssl-binding')
-rw-r--r-- | test/addons/openssl-binding/binding.cc | 35 | ||||
-rw-r--r-- | test/addons/openssl-binding/binding.gyp | 9 | ||||
-rw-r--r-- | test/addons/openssl-binding/test.js | 8 |
3 files changed, 52 insertions, 0 deletions
diff --git a/test/addons/openssl-binding/binding.cc b/test/addons/openssl-binding/binding.cc new file mode 100644 index 0000000000..59819cd33d --- /dev/null +++ b/test/addons/openssl-binding/binding.cc @@ -0,0 +1,35 @@ +#include "node.h" +#include "../../../src/util.h" +#include "../../../src/util-inl.h" + +#include <assert.h> +#include <openssl/rand.h> + +namespace { + +inline void RandomBytes(const v8::FunctionCallbackInfo<v8::Value>& info) { + assert(info[0]->IsArrayBufferView()); + auto view = info[0].As<v8::ArrayBufferView>(); + auto byte_offset = view->ByteOffset(); + auto byte_length = view->ByteLength(); + assert(view->HasBuffer()); + auto buffer = view->Buffer(); + auto contents = buffer->GetContents(); + auto data = static_cast<unsigned char*>(contents.Data()) + byte_offset; + assert(RAND_poll()); + auto rval = RAND_bytes(data, static_cast<int>(byte_length)); + info.GetReturnValue().Set(rval > 0); +} + +inline void Initialize(v8::Local<v8::Object> exports, + v8::Local<v8::Value> module, + v8::Local<v8::Context> context) { + auto isolate = context->GetIsolate(); + auto key = v8::String::NewFromUtf8(isolate, "randomBytes"); + auto value = v8::FunctionTemplate::New(isolate, RandomBytes)->GetFunction(); + assert(exports->Set(context, key, value).IsJust()); +} + +} // anonymous namespace + +NODE_MODULE_CONTEXT_AWARE(binding, Initialize) diff --git a/test/addons/openssl-binding/binding.gyp b/test/addons/openssl-binding/binding.gyp new file mode 100644 index 0000000000..672f84bb86 --- /dev/null +++ b/test/addons/openssl-binding/binding.gyp @@ -0,0 +1,9 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': ['binding.cc'], + 'include_dirs': ['../../../deps/openssl/openssl/include'], + }, + ] +} diff --git a/test/addons/openssl-binding/test.js b/test/addons/openssl-binding/test.js new file mode 100644 index 0000000000..aa515bac9a --- /dev/null +++ b/test/addons/openssl-binding/test.js @@ -0,0 +1,8 @@ +'use strict'; + +require('../../common'); +const assert = require('assert'); +const binding = require('./build/Release/binding'); +const bytes = new Uint8Array(1024); +assert(binding.randomBytes(bytes)); +assert(bytes.reduce((v, a) => v + a) > 0); |