You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

60 rivejä
1.8 KiB

  1. #include <stdint.h>
  2. #include "api.h"
  3. #include "fips202.h"
  4. #include "owcpa.h"
  5. #include "params.h"
  6. #include "randombytes.h"
  7. #include "verify.h"
  8. // API FUNCTIONS
  9. int PQCLEAN_NTRUHPS4096821_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk) {
  10. uint8_t seed[NTRU_SAMPLE_FG_BYTES];
  11. randombytes(seed, NTRU_SAMPLE_FG_BYTES);
  12. PQCLEAN_NTRUHPS4096821_CLEAN_owcpa_keypair(pk, sk, seed);
  13. randombytes(sk + NTRU_OWCPA_SECRETKEYBYTES, NTRU_PRFKEYBYTES);
  14. return 0;
  15. }
  16. int PQCLEAN_NTRUHPS4096821_CLEAN_crypto_kem_enc(uint8_t *c, uint8_t *k, const uint8_t *pk) {
  17. uint8_t rm[NTRU_OWCPA_MSGBYTES];
  18. uint8_t rm_seed[NTRU_SAMPLE_RM_BYTES];
  19. randombytes(rm_seed, NTRU_SAMPLE_RM_BYTES);
  20. PQCLEAN_NTRUHPS4096821_CLEAN_owcpa_samplemsg(rm, rm_seed);
  21. sha3_256(k, rm, NTRU_OWCPA_MSGBYTES);
  22. PQCLEAN_NTRUHPS4096821_CLEAN_owcpa_enc(c, rm, pk);
  23. return 0;
  24. }
  25. int PQCLEAN_NTRUHPS4096821_CLEAN_crypto_kem_dec(uint8_t *k, const uint8_t *c, const uint8_t *sk) {
  26. int i, fail;
  27. uint8_t rm[NTRU_OWCPA_MSGBYTES];
  28. uint8_t buf[NTRU_PRFKEYBYTES + NTRU_CIPHERTEXTBYTES];
  29. fail = PQCLEAN_NTRUHPS4096821_CLEAN_owcpa_dec(rm, c, sk);
  30. /* If fail = 0 then c = Enc(h, rm), there is no need to re-encapsulate. */
  31. /* See comment in PQCLEAN_NTRUHPS4096821_CLEAN_owcpa_dec for details. */
  32. sha3_256(k, rm, NTRU_OWCPA_MSGBYTES);
  33. /* shake(secret PRF key || input ciphertext) */
  34. for (i = 0; i < NTRU_PRFKEYBYTES; i++) {
  35. buf[i] = sk[i + NTRU_OWCPA_SECRETKEYBYTES];
  36. }
  37. for (i = 0; i < NTRU_CIPHERTEXTBYTES; i++) {
  38. buf[NTRU_PRFKEYBYTES + i] = c[i];
  39. }
  40. sha3_256(rm, buf, NTRU_PRFKEYBYTES + NTRU_CIPHERTEXTBYTES);
  41. PQCLEAN_NTRUHPS4096821_CLEAN_cmov(k, rm, NTRU_SHAREDKEYBYTES, (unsigned char) fail);
  42. return 0;
  43. }