Skip to content

Commit 9be757a

Browse files
authored
More secp256k1 tests (#128)
1 parent 5472008 commit 9be757a

File tree

6 files changed

+63
-42
lines changed

6 files changed

+63
-42
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ once_cell = { version = "1.21.1", default-features = false, features = ["std"] }
6060
wasm-bindgen = { version = "0.2.100", default-features = false }
6161

6262
[target.'cfg(all(target_arch = "wasm32", not(target_os="unknown")))'.dependencies]
63-
# for wasm32-wasi
63+
# for wasm32-wasip2
6464
once_cell = { version = "1.21.1", default-features = false, features = ["std"] }
6565

6666
[features]

scripts/test-wasm.sh

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
#!/bin/sh
2+
set -e
23

3-
4-
# Pure Rust AES and XChaCha20 on WASM target
4+
# Pure Rust AES on WASM target
55
cargo test --no-default-features --features $CURVE,pure --target=wasm32-unknown-unknown
66
cargo test --no-default-features --features $CURVE,pure,std --target=wasm32-unknown-unknown
7+
cargo test --no-default-features --features $CURVE,pure,aes-12bytes-nonce --target=wasm32-unknown-unknown
8+
cargo test --no-default-features --features $CURVE,pure,aes-12bytes-nonce,std --target=wasm32-unknown-unknown
9+
10+
# XChaCha20 on WASM target
711
cargo test --no-default-features --features $CURVE,xchacha20 --target=wasm32-unknown-unknown
812
cargo test --no-default-features --features $CURVE,xchacha20,std --target=wasm32-unknown-unknown

scripts/test.sh

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/bin/sh
2+
set -e
23

34
# OpenSSL AES
45
cargo test --no-default-features --features $CURVE,openssl

src/elliptic/secp256k1.rs

+48-30
Original file line numberDiff line numberDiff line change
@@ -62,46 +62,45 @@ fn get_shared_secret(sender_point: &PublicKey, shared_point: &PublicKey) -> Shar
6262

6363
#[cfg(test)]
6464
mod known_tests {
65-
use super::*;
65+
use super::{encapsulate, parse_sk, Error, PublicKey, SecretKey};
6666

67+
use crate::decrypt;
6768
use crate::utils::tests::decode_hex;
6869

70+
pub fn get_sk(i: u8) -> SecretKey {
71+
let mut sk = [0u8; 32];
72+
sk[31] = i;
73+
SecretKey::parse_slice(&sk).unwrap()
74+
}
75+
6976
#[test]
70-
fn test_secret_validity() {
77+
fn test_invalid_secret() {
7178
// 0 < private key < group order is valid
72-
let mut zero = [0u8; 32];
79+
let zero = [0u8; 32];
7380
let group_order = decode_hex("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");
7481
let invalid_sks = [zero.to_vec(), group_order];
7582

7683
for sk in invalid_sks.iter() {
7784
assert_eq!(parse_sk(sk).err().unwrap(), Error::InvalidSecretKey);
7885
}
86+
}
7987

80-
zero[31] = 1;
88+
#[test]
89+
fn test_valid_secret() {
90+
let one = get_sk(1);
91+
assert!(parse_sk(&one.serialize()).is_ok());
8192

82-
let one = zero;
8393
let group_order_minus_1 = decode_hex("0Xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140");
84-
let valid_sks = [one.to_vec(), group_order_minus_1];
94+
let valid_sks = [group_order_minus_1];
8595
for sk in valid_sks.iter() {
8696
parse_sk(sk).unwrap();
8797
}
8898
}
8999

90-
/// Generate two secret keys with values 2 and 3
91-
pub fn get_sk2_sk3() -> (SecretKey, SecretKey) {
92-
let mut two = [0u8; 32];
93-
let mut three = [0u8; 32];
94-
two[31] = 2u8;
95-
three[31] = 3u8;
96-
97-
let sk2 = SecretKey::parse_slice(&two).unwrap();
98-
let sk3 = SecretKey::parse_slice(&three).unwrap();
99-
(sk2, sk3)
100-
}
101-
102100
#[test]
103101
pub fn test_known_shared_secret() {
104-
let (sk2, sk3) = get_sk2_sk3();
102+
let sk2 = get_sk(2);
103+
let sk3 = get_sk(3);
105104
let pk3 = PublicKey::from_secret_key(&sk3);
106105

107106
assert_eq!(
@@ -110,14 +109,28 @@ mod known_tests {
110109
);
111110
}
112111

112+
#[cfg(all(not(feature = "xchacha20"), not(feature = "aes-12bytes-nonce")))]
113+
#[test]
114+
pub fn test_known_encrypted() {
115+
let sk2 = decode_hex("e520872701d9ec44dbac2eab85512ad14ad0c42e01de56d7b528abd8524fcb47");
116+
let encrypted = decode_hex("0x047be1885aeb48d4d4db0c992996725d3264784fef88c5b60782f8d0f940c213227fc3f904f846d5ec3d0fba6653754501e8ebadc421aa3892a20fef33cff0206047058a4cfb4efbeae96b2d019b4ab2edce33328748a0d008a69c8f5816b72d45bd9b5a41bb6ea0127ab23057ec6fcd");
117+
assert_eq!(decrypt(&sk2, &encrypted).unwrap(), "hello world🌍".as_bytes());
118+
}
119+
120+
#[cfg(all(not(feature = "xchacha20"), feature = "aes-12bytes-nonce"))]
121+
#[test]
122+
pub fn test_known_encrypted_short_nonce() {
123+
let sk2 = decode_hex("562b6cd3611d463f2c59218f1be2816472ad4a489450873dd585de7df662bb68");
124+
let encrypted = decode_hex("04e1b4678e49066bb9e12cc39aa303bf46b1bf4f565ffa56b9e5ebfa05b756612a548b06dfdd1d06afb64ab7a7e52e26e3a1c69da8fe0c3ea125848d44066f90c826f9a8b0c8951a06d9b20b3d434dc650862d85fcd4fb4b3f30e0658661d24cb9c31bcae0bf56564495c64b");
125+
assert_eq!(decrypt(&sk2, &encrypted).unwrap(), "hello world🌍".as_bytes());
126+
}
127+
113128
#[cfg(feature = "xchacha20")]
114129
#[test]
115130
pub fn test_known_encrypted_xchacha20() {
116-
use crate::decrypt;
117-
118-
let sk2 = decode_hex("0000000000000000000000000000000000000000000000000000000000000002");
119-
let encrypted = decode_hex("0x04e314abc14398e07974cd50221b682ed5f0629e977345fc03e2047208ee6e279ffb2a6942878d3798c968d89e59c999e082b0598d1b641968c48c8d47c570210d0ab1ade95eeca1080c45366562f9983faa423ee3fd3260757053d5843c5f453e1ee6bb955c8e5d4aee8572139357a091909357a8931b");
120-
assert_eq!(decrypt(&sk2, &encrypted).unwrap(), "helloworld🌍".as_bytes());
131+
let sk2 = decode_hex("9445d8b9911622546a266b2e663bf2b498073a64279409afb9ef20f8259c651f");
132+
let encrypted = decode_hex("04eaf35ad4dde0ace3f673fec6be164dc68e11aa9c1988d4c1b91f0ccdef94cf591aae4e9daf5f8a87837136fc70811df852015a8b4e2cb374c27db16933536085f34470ffef72667bbe984c145302fc8d37f66563339c47f41ef871ee0ebda8c1bad133c3b203c769cb694e5adbd6c9f02b2eedd939875a");
133+
assert_eq!(decrypt(&sk2, &encrypted).unwrap(), "hello world🌍".as_bytes());
121134
}
122135
}
123136

@@ -198,29 +211,28 @@ mod error_tests {
198211

199212
#[cfg(test)]
200213
mod config_tests {
201-
use super::*;
214+
use super::known_tests::get_sk;
215+
use super::{encapsulate, generate_keypair, PublicKey};
202216

203217
use crate::config::{reset_config, update_config, Config};
204218
use crate::utils::tests::decode_hex;
205219
use crate::{decrypt, encrypt};
206-
use known_tests::get_sk2_sk3;
207220

208221
const MSG: &str = "helloworld🌍";
209222

210223
#[test]
211224
pub fn test_known_hkdf_config() {
212-
let (sk2, sk3) = get_sk2_sk3();
225+
let sk2 = get_sk(2);
226+
let sk3 = get_sk(3);
213227
let pk3 = PublicKey::from_secret_key(&sk3);
214228

215229
update_config(Config {
216230
is_hkdf_key_compressed: true,
217231
..Config::default()
218232
});
219233

220-
let encapsulated = encapsulate(&sk2, &pk3).unwrap();
221-
222234
assert_eq!(
223-
encapsulated.to_vec(),
235+
encapsulate(&sk2, &pk3).unwrap().to_vec(),
224236
decode_hex("b192b226edb3f02da11ef9c6ce4afe1c7e40be304e05ae3b988f4834b1cb6c69")
225237
);
226238

@@ -254,6 +266,12 @@ mod wasm_tests {
254266
#[wasm_bindgen_test]
255267
fn test_known() {
256268
super::known_tests::test_known_shared_secret();
269+
#[cfg(all(not(feature = "xchacha20"), not(feature = "aes-12bytes-nonce")))]
270+
super::known_tests::test_known_encrypted();
271+
#[cfg(all(not(feature = "xchacha20"), feature = "aes-12bytes-nonce"))]
272+
super::known_tests::test_known_encrypted_short_nonce();
273+
#[cfg(feature = "xchacha20")]
274+
super::known_tests::test_known_encrypted_xchacha20();
257275
}
258276

259277
#[wasm_bindgen_test]

src/elliptic/x25519.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ mod known_tests {
110110
)
111111
}
112112

113-
#[cfg(not(feature = "xchacha20"))]
113+
#[cfg(all(not(feature = "xchacha20"), not(feature = "aes-12bytes-nonce")))]
114114
#[test]
115115
pub fn test_known_encrypted() {
116116
use crate::decrypt;
@@ -163,7 +163,7 @@ mod wasm_tests {
163163
#[wasm_bindgen_test]
164164
fn test_known() {
165165
super::known_tests::test_known_shared_point();
166-
#[cfg(not(feature = "xchacha20"))]
166+
#[cfg(all(not(feature = "xchacha20"), not(feature = "aes-12bytes-nonce")))]
167167
super::known_tests::test_known_encrypted();
168168
}
169169

src/symmetric/aead.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
#[cfg(all(feature = "pure", not(feature = "xchacha20")))]
2-
use aes_gcm::{
3-
aead::{generic_array::GenericArray, AeadInPlace},
4-
aes::Aes256,
5-
AesGcm, KeyInit,
6-
};
2+
use aes_gcm::{self as cipher, aes::Aes256, AesGcm};
73
#[cfg(all(feature = "xchacha20", not(feature = "pure")))]
8-
use chacha20poly1305::{
4+
use chacha20poly1305::{self as cipher, XChaCha20Poly1305};
5+
6+
use cipher::{
97
aead::{generic_array::GenericArray, AeadInPlace},
10-
KeyInit, XChaCha20Poly1305,
8+
KeyInit,
119
};
1210

1311
#[cfg(all(feature = "pure", feature = "aes-12bytes-nonce"))]

0 commit comments

Comments
 (0)