diff --git a/nucypher-core-wasm/src/lib.rs b/nucypher-core-wasm/src/lib.rs index d2a1e1fb..466b3c58 100644 --- a/nucypher-core-wasm/src/lib.rs +++ b/nucypher-core-wasm/src/lib.rs @@ -898,6 +898,14 @@ impl NodeMetadataPayload { pub fn certificate_bytes(&self) -> Box<[u8]> { self.0.certificate_bytes.clone() } + + #[wasm_bindgen(js_name = deriveWorkerAddress)] + pub fn derive_worker_address(&self) -> Result, JsValue> { + self.0 + .derive_worker_address() + .map(|address| address.as_ref().to_vec()) + .map_err(map_js_err) + } } // diff --git a/nucypher-core-wasm/tests/wasm.rs b/nucypher-core-wasm/tests/wasm.rs index a0b9b9d4..f1749b67 100644 --- a/nucypher-core-wasm/tests/wasm.rs +++ b/nucypher-core-wasm/tests/wasm.rs @@ -72,16 +72,20 @@ fn make_fleet_state_checksum() -> FleetStateChecksum { } fn make_node_metadata() -> NodeMetadata { + // Just a random valid key. + // Need to fix it to check the worker address derivation. + let signing_key = SecretKey::from_bytes(b"01234567890123456789012345678901").unwrap(); + let staker_address = b"00000000000000000001"; let domain = "localhost"; let timestamp_epoch = 1546300800; - let verifying_key = SecretKey::random().public_key(); + let verifying_key = signing_key.public_key(); let encrypting_key = SecretKey::random().public_key(); let certificate_bytes = b"certificate_bytes"; let host = "https://localhost.com"; let port = 443; let decentralized_identity_evidence = - Some(b"00000000000000000000000000000001000000000000000000000000000000010".to_vec()); + Some(b"0000000000000000000000000000000100000000000000000000000000000001\x00".to_vec()); let node_metadata_payload = NodeMetadataPayload::new( staker_address, @@ -96,7 +100,7 @@ fn make_node_metadata() -> NodeMetadata { ) .unwrap(); - let signer = Signer::new(&SecretKey::random()); + let signer = Signer::new(&signing_key); NodeMetadata::new(&signer, &node_metadata_payload) } @@ -550,6 +554,18 @@ fn node_metadata() { ); } +#[wasm_bindgen_test] +fn node_metadata_derive_worker_address() { + let node_metadata = make_node_metadata(); + let worker_address = node_metadata.payload().derive_worker_address(); + + assert_eq!( + worker_address.unwrap(), + b"\x01l\xac\x82\x9fj\x06/\r8d\xb5bX\xdd\xc75\xa1\xf9;", + "Worker address derivation failed" + ); +} + // // FleetStateChecksum //