Skip to content

Commit c7e063f

Browse files
committed
test signature prehashing
1 parent 8dabc87 commit c7e063f

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

biscuit-auth/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ pem = ["ed25519-dalek/pem"]
2727

2828
[dependencies]
2929
rand_core = "^0.6"
30-
sha2 = "^0.9"
3130
prost = "0.10"
3231
prost-types = "0.10"
3332
regex = { version = "1.5", default-features = false, features = ["std"] }
@@ -38,7 +37,7 @@ thiserror = "1"
3837
rand = { version = "0.8" }
3938
wasm-bindgen = { version = "0.2", optional = true }
4039
base64 = "0.13.0"
41-
ed25519-dalek = { version = "2.0.0", features = ["rand_core", "zeroize"] }
40+
ed25519-dalek = { version = "2.0.0", features = ["rand_core", "zeroize", "digest"] }
4241
serde = { version = "1.0.132", optional = true, features = ["derive"] }
4342
getrandom = { version = "0.1.16" }
4443
time = { version = "0.3.7", features = ["formatting", "parsing"] }

biscuit-auth/src/crypto/mod.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,4 +848,38 @@ mod tests {
848848
let deser_pub = PublicKey::from_public_key_der(&der_pub, Algorithm::Ed25519).unwrap();
849849
assert_eq!(ed25519_pub, deser_pub);
850850
}
851+
852+
#[test]
853+
fn prehashed_signature() {
854+
use ::p256::NistP256;
855+
use ecdsa::hazmat::DigestPrimitive;
856+
use ed25519_dalek::DigestSigner;
857+
858+
fn generate_authority_block_signature_payload_v1_prehashed<
859+
H: ecdsa::signature::digest::Update,
860+
>(
861+
payload: &[u8],
862+
version: u32,
863+
hasher: &mut H,
864+
) {
865+
hasher.update(b"\0BLOCK\0\0VERSION\0");
866+
hasher.update(&version.to_le_bytes());
867+
868+
hasher.update(&b"\0PAYLOAD\0"[..]);
869+
hasher.update(payload);
870+
}
871+
872+
let mut prehashed: ed25519_dalek::Sha512 = ed25519_dalek::Sha512::default();
873+
generate_authority_block_signature_payload_v1_prehashed(b"payload", 1, &mut prehashed);
874+
let kp = ed25519::KeyPair::new();
875+
//let hash = ed25519_dalek::Digest::finalize(prehashed);
876+
let sig = kp.kp.try_sign_digest(prehashed).unwrap();
877+
println!("{:?}", sig);
878+
879+
let mut prehashed2 = <NistP256 as DigestPrimitive>::Digest::default();
880+
generate_authority_block_signature_payload_v1_prehashed(b"payload", 1, &mut prehashed2);
881+
let kp = p256::KeyPair::new();
882+
let sig: ecdsa::Signature<NistP256> = kp.kp.try_sign_digest(prehashed2).unwrap();
883+
println!("{:?}", sig);
884+
}
851885
}

biscuit-auth/src/crypto/p256.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::hash::Hash;
1212
/// pair of cryptographic keys used to sign a token's block
1313
#[derive(Debug, PartialEq)]
1414
pub struct KeyPair {
15-
kp: SigningKey,
15+
pub(super) kp: SigningKey,
1616
}
1717

1818
impl KeyPair {

0 commit comments

Comments
 (0)