Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions implementations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ traits_version: 0.3.4

kems:
kyber:
version: 0.7.5
version: 0.7.6
x86_avx2_guard: 'target_arch == "x86_64" && avx2_enabled && !is_windows && !is_macos'
implementations: [clean, avx2, aarch64]
schemes:
Expand All @@ -16,11 +16,11 @@ kems:
- name: kyber1024
implementations: [clean, avx2, aarch64]
- name: kyber512-90s
implementations: [clean, avx2, aarch64]
implementations: [clean, avx2]
- name: kyber768-90s
implementations: [clean, avx2, aarch64]
implementations: [clean, avx2]
- name: kyber1024-90s
implementations: [clean, avx2, aarch64]
implementations: [clean, avx2]
frodo:
version: 0.4.11
notes: |
Expand Down
3 changes: 0 additions & 3 deletions pqcrypto-kyber/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,12 @@ methods only.
* ``kyber512-90s``
* ``clean``
* ``avx2`` (if supported)
* ``aarch64`` (if supported)
* ``kyber768-90s``
* ``clean``
* ``avx2`` (if supported)
* ``aarch64`` (if supported)
* ``kyber1024-90s``
* ``clean``
* ``avx2`` (if supported)
* ``aarch64`` (if supported)


## License
Expand Down
9 changes: 0 additions & 9 deletions pqcrypto-kyber/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,23 +152,14 @@ fn main() {
if target_arch == "x86_64" && avx2_enabled && !is_windows && !is_macos {
build_avx2!("kyber512-90s");
}
if target_arch == "aarch64" && neon_enabled {
build_aarch64!("kyber512-90s");
}
build_clean!("kyber768-90s");
if target_arch == "x86_64" && avx2_enabled && !is_windows && !is_macos {
build_avx2!("kyber768-90s");
}
if target_arch == "aarch64" && neon_enabled {
build_aarch64!("kyber768-90s");
}
build_clean!("kyber1024-90s");
if target_arch == "x86_64" && avx2_enabled && !is_windows && !is_macos {
build_avx2!("kyber1024-90s");
}
if target_arch == "aarch64" && neon_enabled {
build_aarch64!("kyber1024-90s");
}

if target_arch == "x86_64" && avx2_enabled && !is_windows && !is_macos {
// Print enableing flag for AVX2 implementation
Expand Down
201 changes: 0 additions & 201 deletions pqcrypto-kyber/src/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,6 @@ pub const PQCLEAN_KYBER51290S_AVX2_CRYPTO_CIPHERTEXTBYTES: usize = 768;
#[cfg(enable_x86_avx2)]
pub const PQCLEAN_KYBER51290S_AVX2_CRYPTO_BYTES: usize = 32;

#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER51290S_AARCH64_CRYPTO_SECRETKEYBYTES: usize = 1632;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER51290S_AARCH64_CRYPTO_PUBLICKEYBYTES: usize = 800;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER51290S_AARCH64_CRYPTO_CIPHERTEXTBYTES: usize = 768;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER51290S_AARCH64_CRYPTO_BYTES: usize = 32;

pub const PQCLEAN_KYBER76890S_CLEAN_CRYPTO_SECRETKEYBYTES: usize = 2400;
pub const PQCLEAN_KYBER76890S_CLEAN_CRYPTO_PUBLICKEYBYTES: usize = 1184;
pub const PQCLEAN_KYBER76890S_CLEAN_CRYPTO_CIPHERTEXTBYTES: usize = 1088;
Expand All @@ -123,15 +114,6 @@ pub const PQCLEAN_KYBER76890S_AVX2_CRYPTO_CIPHERTEXTBYTES: usize = 1088;
#[cfg(enable_x86_avx2)]
pub const PQCLEAN_KYBER76890S_AVX2_CRYPTO_BYTES: usize = 32;

#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER76890S_AARCH64_CRYPTO_SECRETKEYBYTES: usize = 2400;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER76890S_AARCH64_CRYPTO_PUBLICKEYBYTES: usize = 1184;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER76890S_AARCH64_CRYPTO_CIPHERTEXTBYTES: usize = 1088;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER76890S_AARCH64_CRYPTO_BYTES: usize = 32;

pub const PQCLEAN_KYBER102490S_CLEAN_CRYPTO_SECRETKEYBYTES: usize = 3168;
pub const PQCLEAN_KYBER102490S_CLEAN_CRYPTO_PUBLICKEYBYTES: usize = 1568;
pub const PQCLEAN_KYBER102490S_CLEAN_CRYPTO_CIPHERTEXTBYTES: usize = 1568;
Expand All @@ -146,15 +128,6 @@ pub const PQCLEAN_KYBER102490S_AVX2_CRYPTO_CIPHERTEXTBYTES: usize = 1568;
#[cfg(enable_x86_avx2)]
pub const PQCLEAN_KYBER102490S_AVX2_CRYPTO_BYTES: usize = 32;

#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER102490S_AARCH64_CRYPTO_SECRETKEYBYTES: usize = 3168;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER102490S_AARCH64_CRYPTO_PUBLICKEYBYTES: usize = 1568;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER102490S_AARCH64_CRYPTO_CIPHERTEXTBYTES: usize = 1568;
#[cfg(enable_aarch64_neon)]
pub const PQCLEAN_KYBER102490S_AARCH64_CRYPTO_BYTES: usize = 32;

#[link(name = "kyber512_clean")]
extern "C" {
pub fn PQCLEAN_KYBER512_CLEAN_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
Expand Down Expand Up @@ -319,25 +292,6 @@ extern "C" {
) -> c_int;
}

#[cfg(enable_aarch64_neon)]
#[link(name = "kyber512-90s_aarch64")]
extern "C" {
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER51290S_AARCH64_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER51290S_AARCH64_crypto_kem_enc(
ct: *mut u8,
ss: *mut u8,
pk: *const u8,
) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER51290S_AARCH64_crypto_kem_dec(
ss: *mut u8,
ct: *const u8,
sk: *const u8,
) -> c_int;
}

#[link(name = "kyber768-90s_clean")]
extern "C" {
pub fn PQCLEAN_KYBER76890S_CLEAN_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
Expand Down Expand Up @@ -372,25 +326,6 @@ extern "C" {
) -> c_int;
}

#[cfg(enable_aarch64_neon)]
#[link(name = "kyber768-90s_aarch64")]
extern "C" {
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER76890S_AARCH64_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER76890S_AARCH64_crypto_kem_enc(
ct: *mut u8,
ss: *mut u8,
pk: *const u8,
) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER76890S_AARCH64_crypto_kem_dec(
ss: *mut u8,
ct: *const u8,
sk: *const u8,
) -> c_int;
}

#[link(name = "kyber1024-90s_clean")]
extern "C" {
pub fn PQCLEAN_KYBER102490S_CLEAN_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
Expand Down Expand Up @@ -425,25 +360,6 @@ extern "C" {
) -> c_int;
}

#[cfg(enable_aarch64_neon)]
#[link(name = "kyber1024-90s_aarch64")]
extern "C" {
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER102490S_AARCH64_crypto_kem_keypair(pk: *mut u8, sk: *mut u8) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER102490S_AARCH64_crypto_kem_enc(
ct: *mut u8,
ss: *mut u8,
pk: *const u8,
) -> c_int;
#[cfg(enable_aarch64_neon)]
pub fn PQCLEAN_KYBER102490S_AARCH64_crypto_kem_dec(
ss: *mut u8,
ct: *const u8,
sk: *const u8,
) -> c_int;
}

#[cfg(test)]
mod test_kyber512_clean {
use super::*;
Expand Down Expand Up @@ -853,45 +769,6 @@ mod test_kyber51290s_avx2 {
}
}

#[cfg(all(test, enable_aarch64_neon, feature = "neon"))]
mod test_kyber51290s_aarch64 {
use super::*;
use alloc::vec;

#[test]
fn test_ffi() {
unsafe {
let mut pk = vec![0u8; PQCLEAN_KYBER51290S_AARCH64_CRYPTO_PUBLICKEYBYTES];
let mut sk = vec![0u8; PQCLEAN_KYBER51290S_AARCH64_CRYPTO_SECRETKEYBYTES];
let mut ct = vec![0u8; PQCLEAN_KYBER51290S_AARCH64_CRYPTO_CIPHERTEXTBYTES];
let mut ss1 = vec![0u8; PQCLEAN_KYBER51290S_AARCH64_CRYPTO_BYTES];
let mut ss2 = vec![0u8; PQCLEAN_KYBER51290S_AARCH64_CRYPTO_BYTES];

assert_eq!(
0,
PQCLEAN_KYBER51290S_AARCH64_crypto_kem_keypair(pk.as_mut_ptr(), sk.as_mut_ptr())
);
assert_eq!(
0,
PQCLEAN_KYBER51290S_AARCH64_crypto_kem_enc(
ct.as_mut_ptr(),
ss1.as_mut_ptr(),
pk.as_ptr()
)
);
assert_eq!(
0,
PQCLEAN_KYBER51290S_AARCH64_crypto_kem_dec(
ss2.as_mut_ptr(),
ct.as_ptr(),
sk.as_ptr()
)
);
assert_eq!(&ss1[..], &ss2[..], "Shared secrets should be equal");
}
}
}

#[cfg(test)]
mod test_kyber76890s_clean {
use super::*;
Expand Down Expand Up @@ -970,45 +847,6 @@ mod test_kyber76890s_avx2 {
}
}

#[cfg(all(test, enable_aarch64_neon, feature = "neon"))]
mod test_kyber76890s_aarch64 {
use super::*;
use alloc::vec;

#[test]
fn test_ffi() {
unsafe {
let mut pk = vec![0u8; PQCLEAN_KYBER76890S_AARCH64_CRYPTO_PUBLICKEYBYTES];
let mut sk = vec![0u8; PQCLEAN_KYBER76890S_AARCH64_CRYPTO_SECRETKEYBYTES];
let mut ct = vec![0u8; PQCLEAN_KYBER76890S_AARCH64_CRYPTO_CIPHERTEXTBYTES];
let mut ss1 = vec![0u8; PQCLEAN_KYBER76890S_AARCH64_CRYPTO_BYTES];
let mut ss2 = vec![0u8; PQCLEAN_KYBER76890S_AARCH64_CRYPTO_BYTES];

assert_eq!(
0,
PQCLEAN_KYBER76890S_AARCH64_crypto_kem_keypair(pk.as_mut_ptr(), sk.as_mut_ptr())
);
assert_eq!(
0,
PQCLEAN_KYBER76890S_AARCH64_crypto_kem_enc(
ct.as_mut_ptr(),
ss1.as_mut_ptr(),
pk.as_ptr()
)
);
assert_eq!(
0,
PQCLEAN_KYBER76890S_AARCH64_crypto_kem_dec(
ss2.as_mut_ptr(),
ct.as_ptr(),
sk.as_ptr()
)
);
assert_eq!(&ss1[..], &ss2[..], "Shared secrets should be equal");
}
}
}

#[cfg(test)]
mod test_kyber102490s_clean {
use super::*;
Expand Down Expand Up @@ -1090,42 +928,3 @@ mod test_kyber102490s_avx2 {
}
}
}

#[cfg(all(test, enable_aarch64_neon, feature = "neon"))]
mod test_kyber102490s_aarch64 {
use super::*;
use alloc::vec;

#[test]
fn test_ffi() {
unsafe {
let mut pk = vec![0u8; PQCLEAN_KYBER102490S_AARCH64_CRYPTO_PUBLICKEYBYTES];
let mut sk = vec![0u8; PQCLEAN_KYBER102490S_AARCH64_CRYPTO_SECRETKEYBYTES];
let mut ct = vec![0u8; PQCLEAN_KYBER102490S_AARCH64_CRYPTO_CIPHERTEXTBYTES];
let mut ss1 = vec![0u8; PQCLEAN_KYBER102490S_AARCH64_CRYPTO_BYTES];
let mut ss2 = vec![0u8; PQCLEAN_KYBER102490S_AARCH64_CRYPTO_BYTES];

assert_eq!(
0,
PQCLEAN_KYBER102490S_AARCH64_crypto_kem_keypair(pk.as_mut_ptr(), sk.as_mut_ptr())
);
assert_eq!(
0,
PQCLEAN_KYBER102490S_AARCH64_crypto_kem_enc(
ct.as_mut_ptr(),
ss1.as_mut_ptr(),
pk.as_ptr()
)
);
assert_eq!(
0,
PQCLEAN_KYBER102490S_AARCH64_crypto_kem_dec(
ss2.as_mut_ptr(),
ct.as_ptr(),
sk.as_ptr()
)
);
assert_eq!(&ss1[..], &ss2[..], "Shared secrets should be equal");
}
}
}
21 changes: 0 additions & 21 deletions pqcrypto-kyber/src/kyber102490s.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,6 @@ pub fn keypair() -> (PublicKey, SecretKey) {
return gen_keypair!(PQCLEAN_KYBER102490S_AVX2_crypto_kem_keypair);
}
}
#[cfg(all(enable_aarch64_neon, feature = "neon"))]
{
// always use AArch64 code, when target is detected as all AArch64 targets have NEON
// support, and std::is_aarch64_feature_detected!("neon") works only with Rust nightly at
// the moment
if true {
return gen_keypair!(PQCLEAN_KYBER102490S_AARCH64_crypto_kem_keypair);
}
}
gen_keypair!(PQCLEAN_KYBER102490S_CLEAN_crypto_kem_keypair)
}

Expand All @@ -165,12 +156,6 @@ pub fn encapsulate(pk: &PublicKey) -> (SharedSecret, Ciphertext) {
return encap!(PQCLEAN_KYBER102490S_AVX2_crypto_kem_enc, pk);
}
}
#[cfg(all(enable_aarch64_neon, feature = "neon"))]
{
if true {
return encap!(PQCLEAN_KYBER102490S_AARCH64_crypto_kem_enc, pk);
}
}
encap!(PQCLEAN_KYBER102490S_CLEAN_crypto_kem_enc, pk)
}

Expand All @@ -193,12 +178,6 @@ pub fn decapsulate(ct: &Ciphertext, sk: &SecretKey) -> SharedSecret {
return decap!(PQCLEAN_KYBER102490S_AVX2_crypto_kem_dec, ct, sk);
}
}
#[cfg(all(enable_aarch64_neon, feature = "neon"))]
{
if true {
return decap!(PQCLEAN_KYBER102490S_AARCH64_crypto_kem_dec, ct, sk);
}
}
decap!(PQCLEAN_KYBER102490S_CLEAN_crypto_kem_dec, ct, sk)
}

Expand Down
Loading