Reference implementations of PQC
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

47 řádky
1.2 KiB

  1. #include <algorithm>
  2. #include <vector>
  3. #include <gtest/gtest.h>
  4. #include <pqc/pqc.h>
  5. TEST(Kyber,KEMOneOff) {
  6. for (int i=0; i<PQC_ALG_KEM_MAX; i++) {
  7. const params_t *p = pqc_kem_alg_by_id(i);
  8. std::vector<uint8_t> ct(ciphertext_bsz(p));
  9. std::vector<uint8_t> ss1(shared_secret_bsz(p));
  10. std::vector<uint8_t> ss2(shared_secret_bsz(p));
  11. std::vector<uint8_t> sk(private_key_bsz(p));
  12. std::vector<uint8_t> pk(public_key_bsz(p));
  13. ASSERT_TRUE(
  14. pqc_keygen(p, pk.data(), sk.data()));
  15. ASSERT_TRUE(
  16. pqc_kem_encapsulate(p, ct.data(), ss1.data(), pk.data()));
  17. ASSERT_TRUE(
  18. pqc_kem_decapsulate(p, ss2.data(), ct.data(), sk.data()));
  19. ASSERT_TRUE(
  20. std::equal(ss1.begin(), ss1.end(), ss2.begin()));
  21. }
  22. }
  23. TEST(Kyber,SIGNOneOff) {
  24. for (int i=0; i<PQC_ALG_SIG_MAX; i++) {
  25. const params_t *p = pqc_sig_alg_by_id(i);
  26. uint8_t msg[1234];
  27. std::vector<uint8_t> sig(signature_bsz(p));
  28. std::vector<uint8_t> sk(private_key_bsz(p));
  29. std::vector<uint8_t> pk(public_key_bsz(p));
  30. ASSERT_TRUE(
  31. pqc_keygen(p, pk.data(), sk.data()));
  32. uint64_t sigsz = sig.size();
  33. ASSERT_TRUE(
  34. pqc_sig_create(p, sig.data(), &sigsz, msg, 1234, sk.data()));
  35. ASSERT_TRUE(
  36. pqc_sig_verify(p, sig.data(), sigsz, msg, 1234, pk.data()));
  37. }
  38. }