kyber 0.1.1+deprecated

DEPRECATED: use the `ml-kem` crate instead
Documentation
use rand::Rng;
use ::params::{
    SHAREDKEYBYTES, BYTES,
    PUBLICKEYBYTES, SECRETKEYBYTES,
    INDCPA_BYTES,
    INDCPA_SECRETKEYBYTES, INDCPA_PUBLICKEYBYTES
};
use ::{ indcpa, utils };


pub fn keypair(rng: &mut Rng, pk: &mut [u8], sk: &mut [u8]) {
    indcpa::keypair(rng, pk, sk);
    sk[INDCPA_SECRETKEYBYTES..][..INDCPA_PUBLICKEYBYTES].copy_from_slice(&pk[..INDCPA_PUBLICKEYBYTES]);

    shake128!(&mut sk[SECRETKEYBYTES-64..][..32]; &pk[..PUBLICKEYBYTES]);

    rng.fill_bytes(&mut sk[SECRETKEYBYTES-SHAREDKEYBYTES..][..SHAREDKEYBYTES]);
}

pub fn enc(rng: &mut Rng, c: &mut [u8], k: &mut [u8; SHAREDKEYBYTES], pk: &[u8]) {
    let mut buf = [0; SHAREDKEYBYTES];
    let mut buf2 = [0; 32];
    let mut krq = [0; 96];

    rng.fill_bytes(&mut buf);
    shake128!(&mut buf; &buf);

    shake128!(&mut buf2; &pk[..PUBLICKEYBYTES]);
    shake128!(&mut krq; &buf, &buf2);

    indcpa::enc(c, &buf, pk, &krq[32..]);

    c[INDCPA_BYTES..][..32].copy_from_slice(&krq[64..]);

    shake128!(&mut krq[32..][..32]; &c[..BYTES]);
    shake128!(k; &krq[..64]);
}

pub fn dec(k: &mut [u8; SHAREDKEYBYTES], c: &[u8], sk: &[u8]) {
    let mut cmp = [0; BYTES];
    let mut buf = [0; SHAREDKEYBYTES];
    let mut buf2 = [0; 32];
    let mut krq = [0; 96];
    let pk = &sk[INDCPA_SECRETKEYBYTES..][..INDCPA_PUBLICKEYBYTES];

    indcpa::dec(&mut buf, c, sk);

    buf2.copy_from_slice(&sk[SECRETKEYBYTES-64..][..32]);
    shake128!(&mut krq; &buf, &buf2);

    indcpa::enc(&mut cmp, &buf, pk, &krq[32..]);

    cmp[INDCPA_BYTES..][..32].copy_from_slice(&krq[64..]);

    let flag = utils::eq(c, &cmp);

    shake128!(&mut krq[32..][..32]; &c[..BYTES]);

    utils::select_mov(&mut krq, &sk[SECRETKEYBYTES-SHAREDKEYBYTES..][..SHAREDKEYBYTES], flag);

    shake128!(k; &krq[..64]);
}