Skip to content

Commit

Permalink
Include public key sizes in size comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
jschneider-bensch committed Jun 13, 2024
1 parent e4d952c commit c9826d7
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 17 deletions.
103 changes: 97 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 9 additions & 3 deletions libcrux-psq/examples/sizes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,38 @@ fn main() {

let mlkem_message = mlkem_keypair
.1
.generate_psk(b"size context", Duration::hours(1), &mut rng)
.send_psk(b"size context", Duration::hours(1), &mut rng)
.unwrap();
let x25519_message = x25519_keypair
.1
.generate_psk(b"size context", Duration::hours(1), &mut rng)
.send_psk(b"size context", Duration::hours(1), &mut rng)
.unwrap();
let classic_mceliece_message = classic_mceliece_keypair
.1
.generate_psk(b"size context", Duration::hours(1), &mut rng)
.send_psk(b"size context", Duration::hours(1), &mut rng)
.unwrap();

println!("ML-KEM-768:");
println!(" Public key size (bytes): {}", mlkem_keypair.1.size());
println!(" Message size (bytes): {}", mlkem_message.1.size());
println!(
" including ciphertext size (bytes): {}",
mlkem_message.1.ct_size()
);

println!("X25519:");
println!(" Public key size (bytes): {}", x25519_keypair.1.size());
println!(" Message size (bytes): {}", x25519_message.1.size());
println!(
" including ciphertext size (bytes): {}",
x25519_message.1.ct_size()
);

println!("Classic McEliece:");
println!(
" Public key size (bytes): {}",
classic_mceliece_keypair.1.size()
);
println!(
" Message size (bytes): {}",
classic_mceliece_message.1.size()
Expand Down
19 changes: 11 additions & 8 deletions libcrux-psq/src/psq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ pub fn generate_key_pair(
}

impl PublicKey<'_> {
pub fn size(&self) -> usize {
self.encode().len()
}
pub(crate) fn encode(&self) -> Vec<u8> {
match self {
PublicKey::X25519(k) | PublicKey::MlKem768(k) => k.encode(),
Expand Down Expand Up @@ -168,7 +171,7 @@ impl PublicKey<'_> {
}
}

pub fn generate_psk(
pub fn send_psk(
&self,
sctx: &[u8],
psk_ttl: Duration,
Expand Down Expand Up @@ -228,7 +231,7 @@ impl PublicKey<'_> {
}

impl PrivateKey<'_> {
pub fn derive_psk(
pub fn receive_psk(
&self,
pk: &PublicKey,
message: &PskMessage,
Expand Down Expand Up @@ -327,9 +330,9 @@ mod tests {
let (sk, pk) = generate_key_pair(Algorithm::X25519, &mut rng).unwrap();
eprintln!("Size of pk: {}", std::mem::size_of::<PrivateKey>());
let sctx = b"test context";
let (psk_initiator, message) = pk.generate_psk(sctx, Duration::hours(2), &mut rng).unwrap();
let (psk_initiator, message) = pk.send_psk(sctx, Duration::hours(2), &mut rng).unwrap();

let psk_responder = sk.derive_psk(&pk, &message, sctx).unwrap();
let psk_responder = sk.receive_psk(&pk, &message, sctx).unwrap();
assert_eq!(psk_initiator, psk_responder);
}

Expand All @@ -338,9 +341,9 @@ mod tests {
let mut rng = rand::thread_rng();
let (sk, pk) = generate_key_pair(Algorithm::MlKem768, &mut rng).unwrap();
let sctx = b"test context";
let (psk_initiator, message) = pk.generate_psk(sctx, Duration::hours(2), &mut rng).unwrap();
let (psk_initiator, message) = pk.send_psk(sctx, Duration::hours(2), &mut rng).unwrap();

let psk_responder = sk.derive_psk(&pk, &message, sctx).unwrap();
let psk_responder = sk.receive_psk(&pk, &message, sctx).unwrap();
assert_eq!(psk_initiator, psk_responder);
}

Expand All @@ -349,9 +352,9 @@ mod tests {
let mut rng = rand::thread_rng();
let (sk, pk) = generate_key_pair(Algorithm::ClassicMcEliece, &mut rng).unwrap();
let sctx = b"test context";
let (psk_initiator, message) = pk.generate_psk(sctx, Duration::hours(2), &mut rng).unwrap();
let (psk_initiator, message) = pk.send_psk(sctx, Duration::hours(2), &mut rng).unwrap();

let psk_responder = sk.derive_psk(&pk, &message, sctx).unwrap();
let psk_responder = sk.receive_psk(&pk, &message, sctx).unwrap();
assert_eq!(psk_initiator, psk_responder);
}
}

0 comments on commit c9826d7

Please sign in to comment.