Skip to content

Commit 3fa1fde

Browse files
test(kyberlib): ✅ new tests for wasm.rs
1 parent 3b0223f commit 3fa1fde

File tree

5 files changed

+122
-9
lines changed

5 files changed

+122
-9
lines changed

Cargo.lock

Lines changed: 54 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,17 @@ version = "0.0.4"
3232
[dependencies]
3333
aes = { version = "0.8.4", optional = true }
3434
ctr = { version = "0.9.2", optional = true }
35+
rand = { version = "0.8.5", default-features = false, features = ["getrandom"] }
3536
rand_core = { version = "0.6.4", default-features = false }
3637
rlg = "0.0.4"
3738
sha2 = { version = "0.10.8", optional = true }
3839
tokio = { version = "1.37.0", optional = true }
39-
wasm-bindgen = { version = "0.2.92", optional = true }
40+
wasm-bindgen = "0.2.92"
4041

4142
[dev-dependencies]
4243
criterion = "0.5.1"
4344
rand = "0.8.5"
44-
45-
[dependencies.rand]
46-
version = "0.8.5"
47-
default-features = false
48-
features = ["getrandom"]
49-
optional = true
45+
wasm-bindgen-test = "0.3.42"
5046

5147
# benchmarking = ["criterion"]
5248

src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,9 @@ pub mod rng;
174174
/// Symmetric key encapsulation module for the KyberLib library.
175175
pub mod symmetric;
176176

177+
/// WebAssembly bindings for the KyberLib library.
178+
pub mod wasm;
179+
177180
pub use api::*;
178181
pub use error::KyberLibError;
179182
pub use kex::*;

src/wasm.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ extern crate alloc;
77
use super::*;
88
use crate::params::*;
99
use alloc::boxed::Box;
10+
use rand::rngs::OsRng;
1011
use wasm_bindgen::prelude::*;
1112

1213
/// Generate a key pair for Kyber encryption.
@@ -16,7 +17,7 @@ use wasm_bindgen::prelude::*;
1617
/// Returns a `JsError` if an error occurs during key pair generation.
1718
#[wasm_bindgen]
1819
pub fn keypair() -> Result<Keys, JsError> {
19-
let mut rng = rand::rngs::OsRng {};
20+
let mut rng = OsRng {};
2021
match api::keypair(&mut rng) {
2122
Ok(keys) => Ok(Keys {
2223
pubkey: Box::new(keys.public),
@@ -44,7 +45,7 @@ pub fn encapsulate(pk: Box<[u8]>) -> Result<Kex, JsValue> {
4445
return Err(JsValue::null());
4546
}
4647

47-
let mut rng = rand::rngs::OsRng {};
48+
let mut rng = OsRng {};
4849
match api::encapsulate(&pk, &mut rng) {
4950
Ok(kex) => Ok(Kex {
5051
ciphertext: Box::new(kex.0),

tests/test_wasm.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright © 2023 kyberlib. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0 OR MIT
3+
4+
#[cfg(test)]
5+
mod tests {
6+
7+
use kyberlib::wasm::Kex;
8+
use kyberlib::{decapsulate, encapsulate, keypair, params::*};
9+
use wasm_bindgen_test::*;
10+
11+
wasm_bindgen_test_configure!(run_in_browser);
12+
13+
#[wasm_bindgen_test]
14+
fn test_keypair() {
15+
let mut rng = rand::rngs::OsRng {};
16+
let result = keypair(&mut rng);
17+
assert!(result.is_ok());
18+
}
19+
20+
#[wasm_bindgen_test]
21+
fn test_encapsulate() {
22+
let mut rng = rand::rngs::OsRng {};
23+
let pk = vec![0u8; KYBER_PUBLIC_KEY_BYTES].into_boxed_slice();
24+
let result = encapsulate(&pk, &mut rng);
25+
assert!(result.is_err()); // Invalid input sizes
26+
27+
let keypair_result = keypair(&mut rng);
28+
assert!(keypair_result.is_ok());
29+
30+
let result = encapsulate(&pk, &mut rng);
31+
assert!(result.is_ok());
32+
}
33+
34+
#[wasm_bindgen_test]
35+
fn test_decapsulate() {
36+
let ct = vec![0u8; KYBER_CIPHERTEXT_BYTES].into_boxed_slice();
37+
let sk = vec![0u8; KYBER_SECRET_KEY_BYTES].into_boxed_slice();
38+
let result = decapsulate(&ct, &sk);
39+
assert!(result.is_err()); // Invalid input sizes
40+
41+
let keypair_result = keypair(&mut rand::rngs::OsRng {});
42+
assert!(keypair_result.is_ok());
43+
44+
let keys = keypair_result.unwrap();
45+
let result = encapsulate(&keys.public, &mut rand::rngs::OsRng {});
46+
assert!(result.is_ok());
47+
48+
let result = decapsulate(&ct, &keys.secret);
49+
assert!(result.is_ok());
50+
}
51+
52+
#[wasm_bindgen_test]
53+
fn test_kex_new() {
54+
let pk = vec![0u8; KYBER_PUBLIC_KEY_BYTES].into_boxed_slice();
55+
let result = Kex::new(pk);
56+
assert!(result.ciphertext().len() == KYBER_CIPHERTEXT_BYTES);
57+
assert!(result.sharedSecret().len() == KYBER_SHARED_SECRET_BYTES);
58+
}
59+
}

0 commit comments

Comments
 (0)