aboutsummaryrefslogtreecommitdiff
path: root/epid/common/math/unittests/finitefield-test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'epid/common/math/unittests/finitefield-test.cc')
-rw-r--r--epid/common/math/unittests/finitefield-test.cc78
1 files changed, 78 insertions, 0 deletions
diff --git a/epid/common/math/unittests/finitefield-test.cc b/epid/common/math/unittests/finitefield-test.cc
index 78b18e9..badce2c 100644
--- a/epid/common/math/unittests/finitefield-test.cc
+++ b/epid/common/math/unittests/finitefield-test.cc
@@ -29,6 +29,10 @@ extern "C" {
#include "epid/common/math/finitefield.h"
}
+#ifndef COUNT_OF
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+#endif // COUNT_OF
+
namespace {
/// Intel(R) EPID 2.0 parameters q, beta, xi and v
BigNumStr q = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5,
@@ -65,6 +69,25 @@ Fq6ElemStr v = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
+
+FqElemStr qnr = {{0x08, 0x66, 0xA7, 0x67, 0x36, 0x6E, 0x62, 0x71, 0xB7, 0xA6,
+ 0x52, 0x94, 0x8F, 0xFB, 0x25, 0x9E, 0xE6, 0x4F, 0x25, 0xE5,
+ 0x26, 0x9A, 0x2B, 0x6E, 0x7E, 0xF8, 0xA6, 0x39, 0xAE, 0x46,
+ 0xAA, 0x24}};
+
+const BigNumStr coeffs[3] = {
+ {{{0x02, 0x16, 0x7A, 0x61, 0x53, 0xDD, 0xF6, 0xE2, 0x89, 0x15, 0xA0, 0x94,
+ 0xF1, 0xB5, 0xDC, 0x65, 0x21, 0x15, 0x62, 0xE1, 0x7D, 0xC5, 0x43, 0x89,
+ 0xEE, 0xB4, 0xEF, 0xC8, 0xA0, 0x8E, 0x34, 0x0F}}},
+
+ {{{0x04, 0x82, 0x27, 0xE1, 0xEB, 0x98, 0x64, 0xC2, 0x8D, 0x8F, 0xDD, 0x0E,
+ 0x82, 0x40, 0xAE, 0xD4, 0x31, 0x63, 0xD6, 0x46, 0x32, 0x16, 0x85, 0x7A,
+ 0xB7, 0x18, 0x68, 0xB8, 0x17, 0x02, 0x81, 0xA6}}},
+
+ {{{0x06, 0x20, 0x76, 0xE8, 0x54, 0x54, 0x53, 0xB4, 0xA9, 0xD8, 0x44, 0x4B,
+ 0xAA, 0xFB, 0x1C, 0xFD, 0xAE, 0x15, 0xCA, 0x29, 0x79, 0xA6, 0x24, 0xA4,
+ 0x0A, 0xF6, 0x1E, 0xAC, 0xED, 0xFB, 0x10, 0x41}}}};
+
TEST(FiniteField, DeleteWorksGivenNewlyCreatedFiniteField) {
FiniteField* finitefield = nullptr;
EpidStatus sts = NewFiniteField(&q, &finitefield);
@@ -170,4 +193,59 @@ TEST(FiniteField, BinomialExtensionCanBuildEpid2GtField) {
DeleteFiniteField(&binom_ext_fq12_ptr);
}
+TEST(FiniteField, PolynomialExtensionFailsGivenNullPointer) {
+ FiniteField* ext_finite_field_ptr = nullptr;
+ FiniteFieldObj ground_field(q);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(
+ nullptr, coeffs, COUNT_OF(coeffs), &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, nullptr, 2,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr, NewFiniteFieldViaPolynomialExtension(
+ ground_field, coeffs, 2, nullptr));
+}
+
+TEST(FiniteField, PolynomialExtensionFailsGivenBadDegree) {
+ FiniteField* ext_finite_field_ptr = nullptr;
+ FiniteFieldObj ground_field(q);
+ FfElementObj ground_element(&ground_field, beta);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, 0,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, -1,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, -99,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+}
+
+TEST(FiniteField, CanBuildEpid11GtField) {
+ // construct Fq finite field
+ FiniteFieldObj fq(q);
+
+ // construct Fqd finite field
+ FiniteFieldObj fqd(fq, coeffs, COUNT_OF(coeffs));
+
+ // Fqk ground element is {-qnr, 0, 0}
+ FfElementObj neg_qnr(&fq);
+ THROW_ON_EPIDERR(FfNeg(fq, FfElementObj(&fq, qnr), neg_qnr));
+ Fq3ElemStr ground_element_str = {0};
+ THROW_ON_EPIDERR(WriteFfElement(fq, neg_qnr, &ground_element_str.a[0],
+ sizeof(ground_element_str.a[0])));
+ FfElementObj ground_element(&fqd, ground_element_str);
+
+ // construct Fqk finite field
+ FiniteField* gt_ptr = nullptr;
+ EXPECT_EQ(kEpidNoErr,
+ NewFiniteFieldViaBinomalExtension(fqd, ground_element, 2, &gt_ptr));
+ DeleteFiniteField(&gt_ptr);
+}
+
} // namespace