Skip to content
This repository was archived by the owner on Feb 26, 2025. It is now read-only.

Commit 6140f72

Browse files
feat: add node 18 support
1 parent 4880c0e commit 6140f72

File tree

11 files changed

+55
-63
lines changed

11 files changed

+55
-63
lines changed

.github/workflows/any-pr.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ jobs:
77
name: Build test
88
runs-on: ${{matrix.os}}
99
strategy:
10+
fail-fast: false
1011
matrix:
11-
node-version: [14.x, 16.x]
12+
node-version: [14.x, 16.x, 18.x]
1213
os: [macos-latest, ubuntu-latest] # not include windows due to node-gyp bug
1314
steps:
1415
- uses: actions/checkout@v1

.github/workflows/push-binary-dispatch.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
runs-on: ${{matrix.os}}
2323
strategy:
2424
matrix:
25-
node-version: [14.x, 16.x]
25+
node-version: [14.x, 16.x, 18.x]
2626
os: [macos-latest]
2727
steps:
2828
- uses: actions/checkout@v2
@@ -44,7 +44,7 @@ jobs:
4444
runs-on: ${{matrix.os}}
4545
strategy:
4646
matrix:
47-
node-version: [14.x, 16.x]
47+
node-version: [14.x, 16.x, 18.x]
4848
os: [ubuntu-latest]
4949
steps:
5050
- uses: actions/checkout@v2

.github/workflows/push-master.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ubuntu-latest
1313
strategy:
1414
matrix:
15-
node-version: [14.x, 16.x]
15+
node-version: [14.x, 16.x, 18.x]
1616
steps:
1717
- uses: actions/checkout@v2
1818
- uses: actions/setup-node@v1

.github/workflows/push-release.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ${{matrix.os}}
1414
strategy:
1515
matrix:
16-
node-version: [14.x, 16.x]
16+
node-version: [14.x, 16.x, 18.x]
1717
os: [macos-latest, ubuntu-latest] # not include windows due to node-gyp bug
1818
steps:
1919
- uses: actions/checkout@v2
@@ -35,7 +35,7 @@ jobs:
3535
runs-on: ubuntu-latest
3636
strategy:
3737
matrix:
38-
node-version: [14.x]
38+
node-version: [18.x]
3939
steps:
4040
- uses: actions/checkout@v2
4141
- uses: actions/setup-node@v1

native/Cargo.lock

+8-15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ name = "node_bbs_signatures"
1010
crate-type = ["cdylib"]
1111

1212
[build-dependencies]
13-
neon-build = "0.8"
13+
neon-build = "0.10.1"
1414

1515
[dependencies]
1616
arrayref = "0.3"
1717
bbs = "0.4.1"
1818
bls_sigs_ref = "0.3"
1919
ff-zeroize = "0.6"
2020
hkdf = "0.8"
21-
neon = "0.8"
21+
neon = "0.10.1"
2222
pairing-plus = "0.19"
2323
rand = "0.7"
2424
sha2 = "0.8"

native/src/lib.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ fn bbs_sign(mut cx: FunctionContext) -> JsResult<JsArrayBuffer> {
288288
));
289289

290290
let pk_bytes = obj_field_to_slice!(&mut cx, js_obj, "publicKey");
291-
let pk = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
291+
let pk = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
292292

293293
if pk.validate().is_err() {
294294
panic!("Invalid key");
@@ -334,7 +334,7 @@ fn bbs_verify(mut cx: FunctionContext) -> JsResult<JsBoolean> {
334334
));
335335

336336
let pk_bytes = obj_field_to_slice!(&mut cx, js_obj, "publicKey");
337-
let pk = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
337+
let pk = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
338338

339339
if pk.validate().is_err() {
340340
panic!("Invalid key");
@@ -419,7 +419,7 @@ fn extract_blinding_context(cx: &mut FunctionContext) -> Result<BlindingContext,
419419
let js_obj = cx.argument::<JsObject>(0)?;
420420

421421
let pk_bytes = obj_field_to_slice!(cx, js_obj, "publicKey");
422-
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
422+
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
423423

424424
if public_key.validate().is_err() {
425425
panic!("Invalid key");
@@ -490,7 +490,7 @@ struct BlindingContext {
490490
fn bbs_verify_blind_signature_proof(mut cx: FunctionContext) -> JsResult<JsBoolean> {
491491
let js_obj = cx.argument::<JsObject>(0)?;
492492
let pk_bytes = obj_field_to_slice!(&mut cx, js_obj, "publicKey");
493-
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
493+
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
494494
if public_key.validate().is_err() {
495495
panic!("Invalid key");
496496
}
@@ -590,7 +590,7 @@ fn extract_blind_signature_context(cx: &mut FunctionContext) -> Result<BlindSign
590590
));
591591

592592
let pk_bytes = obj_field_to_slice!(cx, js_obj, "publicKey");
593-
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
593+
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
594594
if public_key.validate().is_err() {
595595
panic!("Invalid key");
596596
}
@@ -722,7 +722,7 @@ fn extract_create_proof_context(cx: &mut FunctionContext) -> Result<(Vec<u8>, Cr
722722
SIGNATURE_COMPRESSED_SIZE
723723
));
724724
let pk_bytes = obj_field_to_slice!(cx, js_obj, "publicKey");
725-
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap();
725+
let public_key = PublicKey::from_bytes_compressed_form(pk_bytes).unwrap();
726726
if public_key.validate().is_err() {
727727
panic!("Invalid key");
728728
}
@@ -882,7 +882,7 @@ fn extract_verify_proof_context(cx: &mut FunctionContext, is_bls: bool) -> Resul
882882
dpk.to_public_key(message_count).unwrap()
883883
} else {
884884
let pk_bytes = obj_field_to_slice!(cx, js_obj, "publicKey");
885-
PublicKey::from_bytes_compressed_form(pk_bytes.as_slice()).unwrap()
885+
PublicKey::from_bytes_compressed_form(pk_bytes).unwrap()
886886
};
887887
if public_key.validate().is_err() {
888888
panic!("Invalid key");

native/src/macros.rs

+19-22
Original file line numberDiff line numberDiff line change
@@ -41,47 +41,44 @@ macro_rules! arg_to_fixed_array {
4141

4242
macro_rules! obj_field_to_slice {
4343
($cx:expr, $obj:expr, $field:expr) => {{
44-
cast_to_slice!($cx, $obj.get($cx, $field)?)
44+
$obj.get::<JsArrayBuffer, _, _>($cx, $field)?
45+
.borrow(&$cx.lock())
46+
.as_slice()
47+
.to_vec()
4548
}};
4649
}
4750

4851
macro_rules! obj_field_to_fixed_array {
4952
($cx:expr, $obj:expr, $field:expr, $start:expr, $end:expr) => {{
50-
let a = cast_to_slice!($cx, $obj.get($cx, $field)?);
51-
if a.len() != $end {
53+
let handle = $obj.get::<JsArrayBuffer, _, _>($cx, $field)?;
54+
let array = handle.borrow(&$cx.lock()).as_slice();
55+
if array.len() != $end {
5256
panic!("Invalid length");
5357
}
54-
*array_ref![a, $start, $end]
58+
*array_ref![array, $start, $end]
5559
}};
5660
}
5761

5862
macro_rules! obj_field_to_opt_slice {
5963
($cx:expr, $obj:expr, $field:expr) => {{
60-
match $obj.get($cx, $field)?.downcast::<JsArrayBuffer>().or_throw($cx) {
64+
match $obj.get::<JsArrayBuffer, _, _>($cx, $field) {
6165
Err(_) => None,
62-
Ok(arg) => Some($cx.borrow(&arg, |d| d.as_slice::<u8>()).to_vec())
66+
Ok(arg) => Some(arg.borrow(&$cx.lock()).as_slice().to_vec()),
6367
}
6468
}};
6569
}
6670

6771
macro_rules! obj_field_to_vec {
6872
($cx:expr, $obj:expr, $field: expr) => {{
69-
let v: Vec<Handle<JsValue>> = $obj
70-
.get($cx, $field)?
73+
let v = $obj
74+
.get::<JsValue, _, _>($cx, $field)?
7175
.downcast::<JsArray>()
7276
.or_throw($cx)?
7377
.to_vec($cx)?;
7478
v
7579
}};
7680
}
7781

78-
macro_rules! cast_to_slice {
79-
($cx:expr, $obj:expr) => {{
80-
let arg = $obj.downcast::<JsArrayBuffer>().or_throw($cx)?;
81-
$cx.borrow(&arg, |d| d.as_slice::<u8>()).to_vec()
82-
}};
83-
}
84-
8582
macro_rules! cast_to_number {
8683
($cx:expr, $obj:expr) => {
8784
$obj.downcast::<JsNumber>()
@@ -98,18 +95,18 @@ macro_rules! handle_err {
9895

9996
macro_rules! obj_field_to_field_elem {
10097
($cx:expr, $d:expr) => {{
101-
let m = cast_to_slice!($cx, $d);
102-
SignatureMessage::hash(m)
98+
let handle = $d.downcast::<JsArrayBuffer>().or_throw($cx)?;
99+
100+
$cx.borrow(&handle, |data| {
101+
let slice = data.as_slice();
102+
SignatureMessage::hash(slice)
103+
})
103104
}};
104105
}
105106

106107
macro_rules! get_message_count {
107108
($cx:expr, $obj:expr, $field:expr) => {{
108-
let message_count = $obj
109-
.get($cx, $field)?
110-
.downcast::<JsNumber>()
111-
.unwrap_or($cx.number(-1))
112-
.value();
109+
let message_count: f64 = $obj.get::<JsNumber, _, _>($cx, $field)?.value();
113110

114111
if message_count < 0f64 {
115112
panic!("Message count cannot be negative: {}", message_count);

native/tests/vectors.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ extern crate bbs;
1818

1919
use bbs::prelude::*;
2020
use std::collections::BTreeSet;
21+
use std::convert::TryFrom;
2122

2223
/// Computed by calling
2324
///
@@ -350,4 +351,4 @@ fn bitvector_to_revealed(data: &[u8]) -> BTreeSet<usize> {
350351
scalar += remaining;
351352
}
352353
revealed_messages
353-
}
354+
}

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"devDependencies": {
5454
"@commitlint/cli": "17.0.2",
5555
"@commitlint/config-conventional": "17.0.2",
56-
"@mathquis/node-pre-gyp-github": "1.0.1",
56+
"@mathquis/node-pre-gyp-github": "1.0.2",
5757
"@stablelib/base64": "1.0.0",
5858
"@stablelib/benchmark": "1.0.0",
5959
"@stablelib/random": "1.0.0",
@@ -79,7 +79,7 @@
7979
"typescript": "4.3.3"
8080
},
8181
"dependencies": {
82-
"@mapbox/node-pre-gyp": "1.0.9",
82+
"@mapbox/node-pre-gyp": "1.0.11",
8383
"neon-cli": "0.10.1"
8484
},
8585
"resolutions": {

yarn.lock

+8-8
Original file line numberDiff line numberDiff line change
@@ -706,10 +706,10 @@
706706
"@jridgewell/resolve-uri" "^3.0.3"
707707
"@jridgewell/sourcemap-codec" "^1.4.10"
708708

709-
"@mapbox/[email protected].9":
710-
version "1.0.9"
711-
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc"
712-
integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==
709+
"@mapbox/[email protected].11":
710+
version "1.0.11"
711+
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
712+
integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==
713713
dependencies:
714714
detect-libc "^2.0.0"
715715
https-proxy-agent "^5.0.0"
@@ -721,10 +721,10 @@
721721
semver "^7.3.5"
722722
tar "^6.1.11"
723723

724-
"@mathquis/[email protected].1":
725-
version "1.0.1"
726-
resolved "https://registry.yarnpkg.com/@mathquis/node-pre-gyp-github/-/node-pre-gyp-github-1.0.1.tgz#57429d98f8c1169cb6fe138939233c7cb34a6498"
727-
integrity sha512-zdUnMiurUPOgV3F1ROcSsVDIshqzdBDEdHg+obVwlV5noswCUeCjg6j966OPO76RrDB0kwFo7yfYLeeHpWeN5w==
724+
"@mathquis/[email protected].2":
725+
version "1.0.2"
726+
resolved "https://registry.yarnpkg.com/@mathquis/node-pre-gyp-github/-/node-pre-gyp-github-1.0.2.tgz#de777222705312c2b806645cbbe5bcb1af92c00d"
727+
integrity sha512-N2Yb1pTR5hEJjnfDD97UJXLGnG7B+9DMBiHiEXQ4B49P33YJcnvyNnA8xHUvhGu9XaAOw9pMUvweWoFrPVKY8g==
728728
dependencies:
729729
"@octokit/rest" "^18.1.1"
730730
commander "^7.1.0"

0 commit comments

Comments
 (0)