verify-test.cc 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317
  1. /*############################################################################
  2. # Copyright 2016-2017 Intel Corporation
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ############################################################################*/
  16. /*!
  17. * \file
  18. * \brief Verify unit tests.
  19. */
  20. #include "epid/common-testhelper/epid_gtest-testhelper.h"
  21. #include "gtest/gtest.h"
  22. extern "C" {
  23. #include "epid/common/src/endian_convert.h"
  24. #include "epid/verifier/api.h"
  25. }
  26. #include "epid/common-testhelper/errors-testhelper.h"
  27. #include "epid/common-testhelper/verifier_wrapper-testhelper.h"
  28. #include "epid/verifier/unittests/verifier-testhelper.h"
  29. namespace {
  30. /////////////////////////////////////////////////////////////////////////
  31. // Simple Errors
  32. TEST_F(EpidVerifierTest, VerifyFailsGivenNullParameters) {
  33. VerifierCtxObj verifier(this->kGrp01Key);
  34. auto& sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  35. auto& msg = this->kTest0;
  36. EXPECT_EQ(kEpidBadArgErr,
  37. EpidVerify(nullptr, (EpidSignature const*)sig.data(), sig.size(),
  38. msg.data(), msg.size()));
  39. EXPECT_EQ(kEpidBadArgErr,
  40. EpidVerify(verifier, nullptr, sig.size(), msg.data(), msg.size()));
  41. EXPECT_EQ(kEpidBadArgErr,
  42. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  43. nullptr, msg.size()));
  44. }
  45. TEST_F(EpidVerifierTest, VerifyFailsGivenTooShortSigLen) {
  46. VerifierCtxObj verifier(this->kGrp01Key);
  47. auto& sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  48. auto& msg = this->kTest0;
  49. EXPECT_EQ(kEpidBadArgErr,
  50. EpidVerify(verifier, (EpidSignature const*)sig.data(), 0,
  51. msg.data(), msg.size()));
  52. EXPECT_EQ(kEpidBadArgErr,
  53. EpidVerify(verifier, (EpidSignature const*)sig.data(),
  54. sizeof(EpidSignature) - sizeof(NrProof) - 1, msg.data(),
  55. msg.size()));
  56. }
  57. TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooShortForRlCount) {
  58. VerifierCtxObj verifier(this->kGrp01Key);
  59. EpidVerifierSetSigRl(verifier, (SigRl const*)this->kGrp01SigRl.data(),
  60. this->kGrp01SigRl.size());
  61. auto sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  62. auto n2 = this->kGrp01SigRlN2;
  63. sig.resize(sizeof(EpidSignature) +
  64. (n2 - 2) * sizeof(((EpidSignature*)0)->sigma));
  65. auto& msg = this->kTest0;
  66. EXPECT_EQ(kEpidBadArgErr,
  67. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  68. msg.data(), msg.size()));
  69. }
  70. TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooLongForRlCount) {
  71. VerifierCtxObj verifier(this->kGrp01Key);
  72. EpidVerifierSetSigRl(verifier, (SigRl const*)this->kGrp01SigRl.data(),
  73. this->kGrp01SigRl.size());
  74. auto sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  75. auto n2 = this->kGrp01SigRlN2;
  76. sig.resize(sizeof(EpidSignature) + n2 * sizeof(((EpidSignature*)0)->sigma));
  77. auto& msg = this->kTest0;
  78. EXPECT_EQ(kEpidBadArgErr,
  79. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  80. msg.data(), msg.size()));
  81. }
  82. #if (SIZE_MAX <= 0xFFFFFFFF) // When size_t value is 32 bit or lower
  83. TEST_F(EpidVerifierTest, VerifyFailsGivenRlCountTooBig) {
  84. VerifierCtxObj verifier(this->kGrp01Key);
  85. EpidVerifierSetSigRl(verifier, (SigRl const*)this->kGrp01SigRl.data(),
  86. this->kGrp01SigRl.size());
  87. auto sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  88. uint32_t n2 = SIZE_MAX / sizeof(NrProof) + 1;
  89. uint32_t n2_ = ntohl(n2);
  90. EpidSignature* sig_struct = (EpidSignature*)sig.data();
  91. sig_struct->n2 = *(OctStr32*)&n2_;
  92. sig.resize(sizeof(EpidSignature) + (n2 - 1) * sizeof(NrProof));
  93. auto& msg = this->kTest0;
  94. EXPECT_EQ(kEpidBadArgErr,
  95. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  96. msg.data(), msg.size()));
  97. }
  98. #endif
  99. /////////////////////////////////////////////////////////////////////
  100. //
  101. // 4.1.2 step 1 - The verifier reads the pre-computed (e12, e22, e2w, eg12).
  102. // Refer to Section 3.6 for the computation of these values.
  103. // This Step is not testable
  104. /////////////////////////////////////////////////////////////////////
  105. // Non-Revocation List Reject
  106. // 4.1.2 step 2 - The verifier verifies the basic signature Sigma0 as
  107. // follows:
  108. TEST_F(EpidVerifierTest, VerifyRejectsSigWithBNotInG1) {
  109. // * 4.1.2 step 2.a - The verifier verifies G1.inGroup(B) = true.
  110. // result must be kEpidSigInvalid
  111. VerifierCtxObj verifier(this->kGrp01Key);
  112. auto& msg = this->kTest0;
  113. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  114. EpidSignature sig = *(
  115. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  116. sig.sigma0.B.x.data.data[31]++;
  117. EXPECT_EQ(kEpidSigInvalid,
  118. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  119. }
  120. TEST_F(EpidVerifierTest, VerifyRejectsSigWithBIdentityOfG1) {
  121. // * 4.1.2 step 2.b - The verifier verifies that G1.isIdentity(B) is false.
  122. // result must be kEpidSigInvalid
  123. VerifierCtxObj verifier(this->kGrp01Key);
  124. auto& msg = this->kTest0;
  125. EpidSignature sig = *(
  126. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  127. sig.sigma0.B = this->kG1IdentityStr;
  128. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  129. EXPECT_EQ(kEpidSigInvalid,
  130. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  131. }
  132. TEST_F(EpidVerifierTest, VerifyRejectsSigWithDiffBaseNameSameHashAlg) {
  133. // * 4.1.2 step 2.c - If bsn is provided, the verifier verifies
  134. // B = G1.hash(bsn).
  135. // result must be kEpidSigInvalid
  136. auto& pub_key = this->kGrpXKey;
  137. auto& sig = this->kSigGrpXMember0Sha512Bsn0Msg0;
  138. auto& msg = this->kMsg0;
  139. auto& bsn = this->kBasename1;
  140. VerifierCtxObj verifier(pub_key);
  141. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  142. EXPECT_EQ(kEpidSigInvalid,
  143. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  144. msg.data(), msg.size()));
  145. }
  146. TEST_F(EpidVerifierTest, VerifyRejectsSigWithSameBaseNameDiffHashAlg) {
  147. // * 4.1.2 step 2.c - If bsn is provided, the verifier verifies
  148. // B = G1.hash(bsn).
  149. // result must be kEpidSigInvalid
  150. auto& pub_key = this->kGrpXKey;
  151. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  152. auto& msg = this->kMsg0;
  153. auto& bsn = this->kBsn0;
  154. VerifierCtxObj verifier(pub_key);
  155. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  156. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  157. EXPECT_EQ(kEpidSigInvalid,
  158. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  159. msg.data(), msg.size()));
  160. }
  161. TEST_F(EpidVerifierTest, VerifyRejectsSigWithDifferentHugeBaseName) {
  162. // * 4.1.2 step 2.c - If bsn is provided, the verifier verifies
  163. // B = G1.hash(bsn).
  164. // result must be kEpidSigInvalid
  165. auto& pub_key = this->kGrpXKey;
  166. auto& sig = this->kSigGrpXMember0Sha512HugeBsnMsg0;
  167. auto& msg = this->kMsg0;
  168. std::vector<uint8_t> bsn(1024 * 1024);
  169. uint8_t c = 0;
  170. for (size_t i = 0; i < bsn.size(); ++i) {
  171. // change middle kilobyte
  172. if (i == 512 * 1024) c++;
  173. if (i == 513 * 1024) c--;
  174. bsn[i] = c++;
  175. }
  176. VerifierCtxObj verifier(pub_key);
  177. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  178. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  179. EXPECT_EQ(kEpidSigInvalid,
  180. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  181. msg.data(), msg.size()));
  182. }
  183. TEST_F(EpidVerifierTest, VerifyRejectsSigWithKNotInG1) {
  184. // * 4.1.2 step 2.d - The verifier verifies G1.inGroup(K) = true.
  185. // result must be kEpidSigInvalid
  186. VerifierCtxObj verifier(this->kGrp01Key);
  187. auto& msg = this->kTest0;
  188. EpidSignature sig = *(
  189. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  190. sig.sigma0.K.x.data.data[31]++;
  191. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  192. EXPECT_EQ(kEpidSigInvalid,
  193. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  194. }
  195. TEST_F(EpidVerifierTest, VerifyRejectsSigWithTNotInG1) {
  196. // * 4.1.2 step 2.e - The verifier verifies G1.inGroup(T) = true.
  197. // result must be kEpidSigInvalid
  198. VerifierCtxObj verifier(this->kGrp01Key);
  199. auto& msg = this->kTest0;
  200. EpidSignature sig = *(
  201. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  202. sig.sigma0.T.x.data.data[31]++;
  203. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  204. EXPECT_EQ(kEpidSigInvalid,
  205. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  206. }
  207. TEST_F(EpidVerifierTest, VerifyRejectsSigWithCNotInRange) {
  208. // * 4.1.2 step 2.f - The verifier verifies c, sx, sf, sa, sb in [0, p-1].
  209. // result must be kEpidSigInvalid
  210. VerifierCtxObj verifier(this->kGrp01Key);
  211. auto& msg = this->kTest0;
  212. EpidSignature sig = *(
  213. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  214. sig.sigma0.c.data = this->kParamsStr.p.data;
  215. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  216. EXPECT_EQ(kEpidSigInvalid,
  217. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  218. }
  219. TEST_F(EpidVerifierTest, VerifyRejectsSigWithSxNotInRange) {
  220. // * 4.1.2 step 2.f - The verifier verifies c, sx, sf, sa, sb in [0, p-1].
  221. // result must be kEpidSigInvalid
  222. VerifierCtxObj verifier(this->kGrp01Key);
  223. auto& msg = this->kTest0;
  224. EpidSignature sig = *(
  225. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  226. sig.sigma0.sx.data = this->kParamsStr.p.data;
  227. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  228. EXPECT_EQ(kEpidSigInvalid,
  229. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  230. }
  231. TEST_F(EpidVerifierTest, VerifyRejectsSigWithSfNotInRange) {
  232. // * 4.1.2 step 2.f - The verifier verifies c, sx, sf, sa, sb in [0, p-1].
  233. // result must be kEpidSigInvalid
  234. VerifierCtxObj verifier(this->kGrp01Key);
  235. auto& msg = this->kTest0;
  236. EpidSignature sig = *(
  237. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  238. sig.sigma0.sf.data = this->kParamsStr.p.data;
  239. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  240. EXPECT_EQ(kEpidSigInvalid,
  241. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  242. }
  243. TEST_F(EpidVerifierTest, VerifyRejectsSigWithSaNotInRange) {
  244. // * 4.1.2 step 2.f - The verifier verifies c, sx, sf, sa, sb in [0, p-1].
  245. // result must be kEpidSigInvalid
  246. VerifierCtxObj verifier(this->kGrp01Key);
  247. auto& msg = this->kTest0;
  248. EpidSignature sig = *(
  249. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  250. sig.sigma0.sa.data = this->kParamsStr.p.data;
  251. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  252. EXPECT_EQ(kEpidSigInvalid,
  253. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  254. }
  255. TEST_F(EpidVerifierTest, VerifyRejectsSigWithSbNotInRange) {
  256. // * 4.1.2 step 2.f - The verifier verifies c, sx, sf, sa, sb in [0, p-1].
  257. // result must be kEpidSigInvalid
  258. VerifierCtxObj verifier(this->kGrp01Key);
  259. auto& msg = this->kTest0;
  260. EpidSignature sig = *(
  261. const EpidSignature*)(this->kSigGrp01Member0Sha512RandombaseTest0.data());
  262. sig.sigma0.sb.data = this->kParamsStr.p.data;
  263. size_t size = this->kSigGrp01Member0Sha512RandombaseTest0.size();
  264. EXPECT_EQ(kEpidSigInvalid,
  265. EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
  266. }
  267. // 4.1.2 step 2.g - The verifier computes nc = (-c) mod p.
  268. // This Step is not testable
  269. // 4.1.2 step 2.h - The verifier computes nsx = (-sx) mod p.
  270. // This Step is not testable
  271. // 4.1.2 step 2.i - The verifier computes R1 = G1.multiExp(B, sf, K, nc).
  272. // This Step is not testable
  273. // 4.1.2 step 2.j - The verifier computes t1 = G2.multiExp(g2, nsx, w, nc).
  274. // This Step is not testable
  275. // 4.1.2 step 2.k - The verifier computes R2 = pairing(T, t1).
  276. // This Step is not testable
  277. // 4.1.2 step 2.l - The verifier compute t2 = GT.multiExp(e12, sf, e22, sb,
  278. // e2w, sa, eg12, c).
  279. // This Step is not testable
  280. // 4.1.2 step 2.m - The verifier compute R2 = GT.mul(R2, t2).
  281. // This Step is not testable
  282. // 4.1.2 step 2.n - The verifier compute t3 = Fp.hash(p || g1 || g2 || h1
  283. // || h2 || w || B || K || T || R1 || R2).
  284. // Refer to Section 7.1 for hash operation over a prime
  285. // field.
  286. // This Step is not testable
  287. TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInMsg) {
  288. // * 4.1.2 step 2.o - The verifier verifies c = Fp.hash(t3 || m).
  289. // result must be kEpidSigInvalid
  290. VerifierCtxObj verifier(this->kGrp01Key);
  291. auto& sig = this->kSigGrp01Member0Sha512RandombaseTest0;
  292. auto msg = this->kTest0;
  293. msg[0]++;
  294. EXPECT_EQ(kEpidSigInvalid,
  295. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  296. msg.data(), msg.size()));
  297. }
  298. TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInBaseName) {
  299. // * 4.1.2 step 2.o - The verifier verifies c = Fp.hash(t3 || m).
  300. // result must be kEpidSigInvalid
  301. VerifierCtxObj verifier(this->kGrpXKey);
  302. // copy sig data to a local buffer
  303. auto sig_data = this->kSigGrpXMember0Sha512Bsn0Msg0;
  304. EpidSignature* sig = (EpidSignature*)sig_data.data();
  305. // simulate change to basename
  306. sig->sigma0.B.x.data.data[0] += 1;
  307. auto msg = this->kMsg0;
  308. auto bsn = this->kBsn0;
  309. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  310. EXPECT_EQ(kEpidSigInvalid,
  311. EpidVerify(verifier, sig, sig_data.size(), msg.data(), msg.size()));
  312. }
  313. TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInGroup) {
  314. // * 4.1.2 step 2.o - The verifier verifies c = Fp.hash(t3 || m).
  315. // result must be kEpidSigInvalid
  316. VerifierCtxObj verifier(this->kGrpXKey);
  317. // copy sig data to a local buffer
  318. auto sig_data = this->kSigGrpXMember0Sha512RandbaseMsg0;
  319. EpidSignature* sig = (EpidSignature*)sig_data.data();
  320. // simulate change to h1
  321. sig->sigma0.T.x.data.data[0] += 1;
  322. auto msg = this->kMsg0;
  323. EXPECT_EQ(kEpidSigInvalid,
  324. EpidVerify(verifier, sig, sig_data.size(), msg.data(), msg.size()));
  325. }
  326. TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInHashAlg) {
  327. // * 4.1.2 step 2.o - The verifier verifies c = Fp.hash(t3 || m).
  328. // result must be kEpidSigInvalid
  329. VerifierCtxObj verifier(this->kGrp01Key);
  330. auto& msg = this->kTest0;
  331. auto& sig = this->kSigGrp01Member0Sha256RandombaseTest0;
  332. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  333. EXPECT_EQ(kEpidSigInvalid,
  334. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  335. msg.data(), msg.size()));
  336. }
  337. // 4.1.2 step 2.p - If any of the above verifications fails, the verifier
  338. // aborts and outputs 1.
  339. // This Step is an aggregate of the above steps
  340. /////////////////////////////////////////////////////////////////////
  341. // Group Based Revocation List Reject
  342. // 4.1.2 step 3 - If GroupRL is provided
  343. TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlSingleEntry) {
  344. // * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
  345. // in GroupRL.
  346. // result must be kEpidSigRevokedInGroupRl
  347. auto& pub_key = this->kGrpXKey;
  348. auto& msg = this->kMsg0;
  349. auto& bsn = this->kBsn0;
  350. auto& grp_rl = this->kGrpRlRevokedGrpXOnlyEntry;
  351. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  352. VerifierCtxObj verifier(pub_key);
  353. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  354. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  355. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  356. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  357. EXPECT_EQ(kEpidSigRevokedInGroupRl,
  358. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  359. msg.data(), msg.size()));
  360. }
  361. TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntry) {
  362. // * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
  363. // in GroupRL.
  364. // result must be kEpidSigRevokedInGroupRl
  365. auto& pub_key = this->kGrpXKey;
  366. auto& msg = this->kMsg0;
  367. auto& bsn = this->kBsn0;
  368. auto& grp_rl = this->kGrpRlRevokedGrpXFirstEntry;
  369. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  370. VerifierCtxObj verifier(pub_key);
  371. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  372. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  373. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  374. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  375. EXPECT_EQ(kEpidSigRevokedInGroupRl,
  376. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  377. msg.data(), msg.size()));
  378. }
  379. TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntryUsingIkgfData) {
  380. // result must be kEpidSigRevokedInGroupRl
  381. auto& pub_key = this->kPubKeyRevGroupIkgfStr;
  382. auto& msg = this->kMsg0;
  383. auto& bsn = this->kBsn0;
  384. auto& grp_rl = this->kGrpRlIkgf;
  385. auto& sig = this->kRevGroupSigMember0Sha256Bsn0Msg0Ikgf;
  386. VerifierCtxObj verifier(pub_key);
  387. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  388. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  389. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  390. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  391. EXPECT_EQ(kEpidSigRevokedInGroupRl,
  392. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  393. msg.data(), msg.size()));
  394. }
  395. TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlMiddleEntry) {
  396. // * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
  397. // in GroupRL.
  398. // result must be kEpidSigRevokedInGroupRl
  399. auto& pub_key = this->kGrpXKey;
  400. auto& msg = this->kMsg0;
  401. auto& bsn = this->kBsn0;
  402. auto& grp_rl = this->kGrpRlRevokedGrpXMiddleEntry;
  403. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  404. VerifierCtxObj verifier(pub_key);
  405. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  406. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  407. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  408. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  409. EXPECT_EQ(kEpidSigRevokedInGroupRl,
  410. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  411. msg.data(), msg.size()));
  412. }
  413. TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlLastEntry) {
  414. // * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
  415. // in GroupRL.
  416. // result must be kEpidSigRevokedInGroupRl
  417. auto& pub_key = this->kGrpXKey;
  418. auto& msg = this->kMsg0;
  419. auto& bsn = this->kBsn0;
  420. auto& grp_rl = this->kGrpRlRevokedGrpXLastEntry;
  421. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  422. VerifierCtxObj verifier(pub_key);
  423. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  424. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  425. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  426. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  427. EXPECT_EQ(kEpidSigRevokedInGroupRl,
  428. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  429. msg.data(), msg.size()));
  430. }
  431. // 4.1.2 step 3.b - If gid matches an entry in GroupRL, aborts and returns 2.
  432. // This Step is an aggregate of the above steps
  433. /////////////////////////////////////////////////////////////////////
  434. // Private Based Revocation List Reject
  435. // 4.1.2 step 4 - If PrivRL is provided
  436. // * 4.1.2 step 4.a - The verifier verifies that gid in the public key and in
  437. // PrivRL match. If mismatch, abort and return
  438. // "operation failed".
  439. // Not possible, checked in EpidVerifierSetPrivRl
  440. TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlSingleEntry) {
  441. // * 4.1.2 step 4.b - For i = 0, ?, n1-1,
  442. // the verifier computes t4 =G1.exp(B, f[i])
  443. // and verifies that G1.isEqual(t4, K) = false.
  444. // A faster private-key revocation check algorithm is
  445. // provided in Section 4.5.
  446. // result must be kEpidSigRevokedInPrivRl
  447. auto& pub_key = this->kGrpXKey;
  448. auto& msg = this->kMsg0;
  449. auto& bsn = this->kBsn0;
  450. auto& priv_rl = this->kGrpXPrivRlRevokedPrivKey000OnlyEntry;
  451. auto& sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
  452. VerifierCtxObj verifier(pub_key);
  453. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  454. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  455. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  456. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  457. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  458. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  459. msg.data(), msg.size()));
  460. }
  461. TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntry) {
  462. // * 4.1.2 step 4.b - For i = 0, ?, n1-1,
  463. // the verifier computes t4 =G1.exp(B, f[i])
  464. // and verifies that G1.isEqual(t4, K) = false.
  465. // A faster private-key revocation check algorithm is
  466. // provided in Section 4.5.
  467. // result must be kEpidSigRevokedInPrivRl
  468. auto& pub_key = this->kGrpXKey;
  469. auto& msg = this->kMsg0;
  470. auto& bsn = this->kBsn0;
  471. auto& priv_rl = this->kGrpXPrivRl;
  472. auto& sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
  473. VerifierCtxObj verifier(pub_key);
  474. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  475. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  476. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  477. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  478. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  479. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  480. msg.data(), msg.size()));
  481. }
  482. TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntryUsingIkgfData) {
  483. // * 4.1.2 step 4.b - For i = 0, ?, n1-1,
  484. // the verifier computes t4 =G1.exp(B, f[i])
  485. // and verifies that G1.isEqual(t4, K) = false.
  486. // A faster private-key revocation check algorithm is
  487. // provided in Section 4.5.
  488. // result must be kEpidSigRevokedInPrivRl
  489. auto& pub_key = this->kPubKeyIkgfStr;
  490. auto& msg = this->kMsg0;
  491. auto& bsn = this->kBsn0;
  492. auto& priv_rl = this->kPrivRlIkgf;
  493. auto& sig = this->kSigRevokedPrivKeySha256Bsn0Msg0Ikgf;
  494. VerifierCtxObj verifier(pub_key);
  495. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  496. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  497. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  498. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  499. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  500. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  501. msg.data(), msg.size()));
  502. }
  503. TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlMiddleEntry) {
  504. // * 4.1.2 step 4.b - For i = 0, ?, n1-1,
  505. // the verifier computes t4 =G1.exp(B, f[i])
  506. // and verifies that G1.isEqual(t4, K) = false.
  507. // A faster private-key revocation check algorithm is
  508. // provided in Section 4.5.
  509. // result must be kEpidSigRevokedInPrivRl
  510. auto& pub_key = this->kGrpXKey;
  511. auto& msg = this->kMsg0;
  512. auto& bsn = this->kBsn0;
  513. auto& priv_rl = this->kGrpXPrivRl;
  514. auto& sig = this->kSigGrpXRevokedPrivKey001Sha256Bsn0Msg0;
  515. VerifierCtxObj verifier(pub_key);
  516. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  517. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  518. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  519. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  520. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  521. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  522. msg.data(), msg.size()));
  523. }
  524. TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlLastEntry) {
  525. // * 4.1.2 step 4.b - For i = 0, ?, n1-1,
  526. // the verifier computes t4 =G1.exp(B, f[i])
  527. // and verifies that G1.isEqual(t4, K) = false.
  528. // A faster private-key revocation check algorithm is
  529. // provided in Section 4.5.
  530. // result must be kEpidSigRevokedInPrivRl
  531. auto& pub_key = this->kGrpXKey;
  532. auto& msg = this->kMsg0;
  533. auto& bsn = this->kBsn0;
  534. auto& priv_rl = this->kGrpXPrivRl;
  535. auto& sig = this->kSigGrpXRevokedPrivKey002Sha256Bsn0Msg0;
  536. VerifierCtxObj verifier(pub_key);
  537. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  538. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  539. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  540. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  541. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  542. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  543. msg.data(), msg.size()));
  544. }
  545. TEST_F(EpidVerifierTest, VerifyRejectsSigUsingCorruptedPrivRlEntry) {
  546. auto& pub_key = this->kGrpXKey;
  547. auto& msg = this->kMsg0;
  548. auto& bsn = this->kBsn0;
  549. auto& priv_rl = this->kGrpXCorruptedPrivRl;
  550. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  551. VerifierCtxObj verifier(pub_key);
  552. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  553. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  554. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  555. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  556. EXPECT_EQ(kEpidSigRevokedInPrivRl,
  557. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  558. msg.data(), msg.size()));
  559. }
  560. TEST_F(EpidVerifierTest, VerifyAcceptsSigFromEmptyPrivRlUsingIkgfData) {
  561. auto& pub_key = this->kPubKeyIkgfStr;
  562. auto& msg = this->kMsg0;
  563. auto& bsn = this->kBsn0;
  564. auto& priv_rl = this->kEmptyPrivRlIkgf;
  565. auto& sig = this->kSigMember0Sha256Bsn0Msg0NoSigRlIkgf;
  566. VerifierCtxObj verifier(pub_key);
  567. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  568. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  569. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  570. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  571. EXPECT_EQ(kEpidNoErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
  572. sig.size(), msg.data(), msg.size()));
  573. }
  574. // 4.1.2 step 4.c - If the above step fails, the verifier aborts and
  575. // output 3.
  576. // This Step is an aggregate of the above steps
  577. /////////////////////////////////////////////////////////////////////
  578. // Signature Based Revocation List Reject
  579. // 4.1.2 step 5 - If SigRL is provided
  580. // * 4.1.2 step 5.a - The verifier verifies that gid in the public key and in
  581. // SigRL match. If mismatch, abort and return
  582. // "operation failed".
  583. // Not possible, checked in EpidVerifierSetSigRl
  584. TEST_F(EpidVerifierTest, VerifyFailsOnSigRlverNotMatchSigRlRlver) {
  585. // * 4.1.2 step 5.b - The verifier verifies that RLver in Sigma and in SigRL
  586. // match. If mismatch, abort and output "operation failed".
  587. // result must be "operation failed" (not kEpidSig*)
  588. auto& pub_key = this->kGrpXKey;
  589. auto& msg = this->kMsg0;
  590. auto& bsn = this->kBsn0;
  591. auto& sig_rl = this->kGrpXSigRlVersion2;
  592. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  593. VerifierCtxObj verifier(pub_key);
  594. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  595. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  596. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  597. sig_rl.size()));
  598. EXPECT_EQ(kEpidErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
  599. sig.size(), msg.data(), msg.size()));
  600. }
  601. TEST_F(EpidVerifierTest, VerifyFailsOnSigN2NotMatchSigRlN2) {
  602. // * 4.1.2 step 5.c - The verifier verifies that n2 in Sigma and in SigRL
  603. // match. If mismatch, abort and output "operation failed".
  604. // result must be "operation failed" (not kEpidSig*)
  605. auto& pub_key = this->kGrpXKey;
  606. auto& msg = this->kMsg0;
  607. auto& bsn = this->kBsn0;
  608. auto* sig_rl =
  609. (SigRl const*)this->kGrpXSigRlMember0Sha256Bsn0Msg0OnlyEntry.data();
  610. size_t sig_rl_size = this->kGrpXSigRlMember0Sha256Bsn0Msg0OnlyEntry.size();
  611. auto sig_raw = this->kSigGrpXMember0Sha256Bsn0Msg0;
  612. EpidSignature* sig = (EpidSignature*)sig_raw.data();
  613. sig->rl_ver = sig_rl->version;
  614. VerifierCtxObj verifier(pub_key);
  615. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  616. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  617. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, sig_rl, sig_rl_size));
  618. EXPECT_EQ(kEpidBadArgErr,
  619. EpidVerify(verifier, sig, sig_raw.size(), msg.data(), msg.size()));
  620. }
  621. TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlSingleEntry) {
  622. // * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
  623. // nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
  624. // of nrVerify() will be given in the next subsection.
  625. // result must be kEpidSigRevokedInSigRl
  626. auto& pub_key = this->kGrpXKey;
  627. auto& msg = this->kMsg0;
  628. auto& bsn = this->kBsn0;
  629. auto& sig_rl = this->kGrpXSigRlMember0Sha256Bsn0Msg0OnlyEntry;
  630. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0SingleEntrySigRl;
  631. VerifierCtxObj verifier(pub_key);
  632. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  633. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  634. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  635. sig_rl.size()));
  636. EXPECT_EQ(kEpidSigRevokedInSigRl,
  637. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  638. msg.data(), msg.size()));
  639. }
  640. TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlFirstEntry) {
  641. // * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
  642. // nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
  643. // of nrVerify() will be given in the next subsection.
  644. // result must be kEpidSigRevokedInSigRl
  645. auto& pub_key = this->kGrpXKey;
  646. auto& msg = this->kMsg0;
  647. auto& bsn = this->kBsn0;
  648. auto& sig_rl = this->kGrpXSigRlMember0Sha256Bsn0Msg0FirstEntry;
  649. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  650. VerifierCtxObj verifier(pub_key);
  651. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  652. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  653. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  654. sig_rl.size()));
  655. EXPECT_EQ(kEpidSigRevokedInSigRl,
  656. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  657. msg.data(), msg.size()));
  658. }
  659. TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlFirstEntryUsingIkgfData) {
  660. auto& pub_key = this->kPubKeyIkgfStr;
  661. auto& msg = this->kMsg0;
  662. auto& bsn = this->kBsn0;
  663. auto& sig_rl = this->kSigRlIkgf;
  664. auto& sig = this->kSigRevSigMember0Sha256Bsn0Msg0Ikgf;
  665. VerifierCtxObj verifier(pub_key);
  666. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  667. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  668. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  669. sig_rl.size()));
  670. EXPECT_EQ(kEpidSigRevokedInSigRl,
  671. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  672. msg.data(), msg.size()));
  673. }
  674. TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlMiddleEntry) {
  675. // * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
  676. // nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
  677. // of nrVerify() will be given in the next subsection.
  678. // result must be kEpidSigRevokedInSigRl
  679. auto& pub_key = this->kGrpXKey;
  680. auto& msg = this->kMsg0;
  681. auto& bsn = this->kBsn0;
  682. auto& sig_rl = this->kGrpXSigRlMember0Sha256Bsn0Msg0MiddleEntry;
  683. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  684. VerifierCtxObj verifier(pub_key);
  685. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  686. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  687. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  688. sig_rl.size()));
  689. EXPECT_EQ(kEpidSigRevokedInSigRl,
  690. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  691. msg.data(), msg.size()));
  692. }
  693. TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlLastEntry) {
  694. // * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
  695. // nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
  696. // of nrVerify() will be given in the next subsection.
  697. // result must be kEpidSigRevokedInSigRl
  698. auto& pub_key = this->kGrpXKey;
  699. auto& msg = this->kMsg0;
  700. auto& bsn = this->kBsn0;
  701. auto& sig_rl = this->kGrpXSigRlMember0Sha256Bsn0Msg0LastEntry;
  702. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  703. VerifierCtxObj verifier(pub_key);
  704. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  705. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  706. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  707. sig_rl.size()));
  708. EXPECT_EQ(kEpidSigRevokedInSigRl,
  709. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  710. msg.data(), msg.size()));
  711. }
  712. TEST_F(EpidVerifierTest,
  713. RejectsSigFromNonemptySigRlGivenEmptySigRlUsingIkgfData) {
  714. auto& pub_key = this->kPubKeyIkgfStr;
  715. auto& msg = this->kMsg0;
  716. auto& bsn = this->kBsn0;
  717. auto& sig_rl = this->kEmptySigRlIkgf;
  718. auto& sig = this->kSigMember0Sha256Bsn0Msg0Ikgf;
  719. VerifierCtxObj verifier(pub_key);
  720. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  721. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  722. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  723. sig_rl.size()));
  724. EXPECT_EQ(kEpidErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
  725. sig.size(), msg.data(), msg.size()));
  726. }
  727. TEST_F(EpidVerifierTest, VerifyAcceptsSigFromEmptySigRlUsingIkgfData) {
  728. auto& pub_key = this->kPubKeyIkgfStr;
  729. auto& msg = this->kMsg0;
  730. auto& bsn = this->kBsn0;
  731. auto& sig_rl = this->kEmptySigRlIkgf;
  732. auto& sig = this->kSigMember0Sha256Bsn0Msg0EmptySigRlIkgf;
  733. VerifierCtxObj verifier(pub_key);
  734. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  735. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  736. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  737. sig_rl.size()));
  738. EXPECT_EQ(kEpidNoErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
  739. sig.size(), msg.data(), msg.size()));
  740. }
  741. // 4.1.2 step 5.e - If the above step fails, the verifier aborts and
  742. // output 4.
  743. // This Step is an aggregate of the above steps
  744. /////////////////////////////////////////////////////////////////////
  745. // Verifier Based Revocation List Reject
  746. // 4.1.2 step 6 - If VerifierRL is provided
  747. // * 4.1.2 step 6.a - The verifier verifies that gid in the public key and in
  748. // VerifierRL match. If mismatch, abort and return
  749. // "operation failed".
  750. // Not possible, checked in EpidVerifierSetVerifierRl
  751. // * 4.1.2 step 6.b - The verifier verifies that B in the signature and in
  752. // VerifierRL match. If mismatch, go to step 7.
  753. // result must be "operation failed" (not kEpidSig*)
  754. // Not possible, checked in EpidVerifierSetVerifierRl
  755. TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlSingleEntry) {
  756. // * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
  757. // K != K[i].
  758. // result must be kEpidSigRevokedInVerifierRl
  759. auto& pub_key = this->kGrpXKey;
  760. auto& msg = this->kMsg0;
  761. auto& bsn = this->kBsn0;
  762. auto& grp_rl = this->kGrpRl;
  763. auto& priv_rl = this->kGrpXPrivRl;
  764. auto& sig_rl = this->kGrpXSigRl;
  765. auto& ver_rl = this->kGrpXBsn0VerRlSingleEntry;
  766. auto& sig = this->kSigGrpXVerRevokedMember0Sha256Bsn0Msg0;
  767. VerifierCtxObj verifier(pub_key);
  768. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  769. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  770. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  771. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  772. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  773. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  774. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  775. sig_rl.size()));
  776. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  777. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  778. EXPECT_EQ(kEpidSigRevokedInVerifierRl,
  779. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  780. msg.data(), msg.size()));
  781. }
  782. TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlFirstEntry) {
  783. // * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
  784. // K != K[i].
  785. // result must be kEpidSigRevokedInVerifierRl
  786. auto& pub_key = this->kGrpXKey;
  787. auto& msg = this->kMsg0;
  788. auto& bsn = this->kBsn0;
  789. auto& grp_rl = this->kGrpRl;
  790. auto& priv_rl = this->kGrpXPrivRl;
  791. auto& sig_rl = this->kGrpXSigRl;
  792. auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
  793. auto& sig = this->kSigGrpXVerRevokedMember0Sha256Bsn0Msg0;
  794. VerifierCtxObj verifier(pub_key);
  795. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  796. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  797. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  798. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  799. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  800. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  801. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  802. sig_rl.size()));
  803. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  804. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  805. EXPECT_EQ(kEpidSigRevokedInVerifierRl,
  806. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  807. msg.data(), msg.size()));
  808. }
  809. TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlMiddleEntry) {
  810. // * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
  811. // K != K[i].
  812. // result must be kEpidSigRevokedInVerifierRl
  813. auto& pub_key = this->kGrpXKey;
  814. auto& msg = this->kMsg0;
  815. auto& bsn = this->kBsn0;
  816. auto& grp_rl = this->kGrpRl;
  817. auto& priv_rl = this->kGrpXPrivRl;
  818. auto& sig_rl = this->kGrpXSigRl;
  819. auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
  820. auto& sig = this->kSigGrpXVerRevokedMember1Sha256Bsn0Msg0;
  821. VerifierCtxObj verifier(pub_key);
  822. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  823. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  824. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  825. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  826. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  827. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  828. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  829. sig_rl.size()));
  830. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  831. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  832. EXPECT_EQ(kEpidSigRevokedInVerifierRl,
  833. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  834. msg.data(), msg.size()));
  835. }
  836. TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlLastEntry) {
  837. // * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
  838. // K != K[i].
  839. // result must be kEpidSigRevokedInVerifierRl
  840. auto& pub_key = this->kGrpXKey;
  841. auto& msg = this->kMsg0;
  842. auto& bsn = this->kBsn0;
  843. auto& grp_rl = this->kGrpRl;
  844. auto& priv_rl = this->kGrpXPrivRl;
  845. auto& sig_rl = this->kGrpXSigRl;
  846. auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
  847. auto& sig = this->kSigGrpXVerRevokedMember2Sha256Bsn0Msg0;
  848. VerifierCtxObj verifier(pub_key);
  849. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  850. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  851. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  852. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  853. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  854. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  855. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  856. sig_rl.size()));
  857. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  858. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  859. EXPECT_EQ(kEpidSigRevokedInVerifierRl,
  860. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  861. msg.data(), msg.size()));
  862. }
  863. // 4.1.2 step 6.d - If the above step fails, the verifier aborts and
  864. // output 5
  865. // This Step is an aggregate of the above steps
  866. /////////////////////////////////////////////////////////////////////
  867. // Accept
  868. // 4.1.2 step 7 - If all the above verifications succeed, the verifier
  869. // outputs 0
  870. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameNoRlSha256) {
  871. auto& pub_key = this->kGrpXKey;
  872. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  873. auto& msg = this->kMsg0;
  874. auto& bsn = this->kBsn0;
  875. VerifierCtxObj verifier(pub_key);
  876. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  877. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  878. EXPECT_EQ(kEpidSigValid,
  879. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  880. msg.data(), msg.size()));
  881. }
  882. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha256) {
  883. auto& pub_key = this->kGrpXKey;
  884. auto& msg = this->kMsg0;
  885. auto& bsn = this->kBsn0;
  886. auto& grp_rl = this->kGrpRl;
  887. auto& priv_rl = this->kGrpXPrivRl;
  888. auto& sig_rl = this->kGrpXSigRl;
  889. auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
  890. auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
  891. VerifierCtxObj verifier(pub_key);
  892. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  893. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  894. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  895. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  896. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  897. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  898. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  899. sig_rl.size()));
  900. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  901. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  902. EXPECT_EQ(kEpidSigValid,
  903. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  904. msg.data(), msg.size()));
  905. }
  906. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameNoRlSha256) {
  907. auto& pub_key = this->kGrpXKey;
  908. auto& sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
  909. auto& msg = this->kMsg0;
  910. VerifierCtxObj verifier(pub_key);
  911. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  912. EXPECT_EQ(kEpidSigValid,
  913. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  914. msg.data(), msg.size()));
  915. }
  916. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha256) {
  917. auto& pub_key = this->kGrpXKey;
  918. auto& msg = this->kMsg0;
  919. auto& grp_rl = this->kGrpRl;
  920. auto& priv_rl = this->kGrpXPrivRl;
  921. auto& sig_rl = this->kGrpXSigRl;
  922. auto& sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
  923. VerifierCtxObj verifier(pub_key);
  924. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  925. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  926. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  927. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  928. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  929. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  930. sig_rl.size()));
  931. EXPECT_EQ(kEpidSigValid,
  932. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  933. msg.data(), msg.size()));
  934. }
  935. TEST_F(EpidVerifierTest,
  936. VerifyAcceptsSigWithRandomBaseNameAllRlSha256UsingIkgfData) {
  937. auto& pub_key = this->kPubKeyIkgfStr;
  938. auto& msg = this->kMsg0;
  939. auto& grp_rl = this->kGrpRlIkgf;
  940. auto& priv_rl = this->kPrivRlIkgf;
  941. auto& sig_rl = this->kSigRlIkgf;
  942. auto& sig = this->kSigMember0Sha256RandbaseMsg0Ikgf;
  943. VerifierCtxObj verifier(pub_key);
  944. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
  945. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  946. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  947. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  948. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  949. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  950. sig_rl.size()));
  951. EXPECT_EQ(kEpidSigValid,
  952. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  953. msg.data(), msg.size()));
  954. }
  955. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha384) {
  956. auto& pub_key = this->kGrpXKey;
  957. auto& msg = this->kMsg0;
  958. auto& bsn = this->kBsn0;
  959. auto& grp_rl = this->kGrpRl;
  960. auto& priv_rl = this->kGrpXPrivRl;
  961. auto& sig_rl = this->kGrpXSigRl;
  962. auto& ver_rl = this->kGrpXBsn0Sha384VerRl;
  963. auto& sig = this->kSigGrpXMember0Sha384Bsn0Msg0;
  964. VerifierCtxObj verifier(pub_key);
  965. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
  966. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  967. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  968. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  969. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  970. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  971. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  972. sig_rl.size()));
  973. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  974. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  975. EXPECT_EQ(kEpidSigValid,
  976. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  977. msg.data(), msg.size()));
  978. }
  979. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha384) {
  980. auto& pub_key = this->kGrpXKey;
  981. auto& msg = this->kMsg0;
  982. auto& grp_rl = this->kGrpRl;
  983. auto& priv_rl = this->kGrpXPrivRl;
  984. auto& sig_rl = this->kGrpXSigRl;
  985. auto& sig = this->kSigGrpXMember0Sha384RandbaseMsg0;
  986. VerifierCtxObj verifier(pub_key);
  987. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
  988. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  989. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  990. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  991. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  992. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  993. sig_rl.size()));
  994. EXPECT_EQ(kEpidSigValid,
  995. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  996. msg.data(), msg.size()));
  997. }
  998. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha512) {
  999. auto& pub_key = this->kGrpXKey;
  1000. auto& msg = this->kMsg0;
  1001. auto& bsn = this->kBsn0;
  1002. auto& grp_rl = this->kGrpRl;
  1003. auto& priv_rl = this->kGrpXPrivRl;
  1004. auto& sig_rl = this->kGrpXSigRl;
  1005. auto& ver_rl = this->kGrpXBsn0Sha512VerRl;
  1006. auto& sig = this->kSigGrpXMember0Sha512Bsn0Msg0;
  1007. VerifierCtxObj verifier(pub_key);
  1008. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  1009. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  1010. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  1011. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  1012. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  1013. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  1014. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  1015. sig_rl.size()));
  1016. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  1017. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  1018. EXPECT_EQ(kEpidSigValid,
  1019. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1020. msg.data(), msg.size()));
  1021. }
  1022. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithHugeBaseNameNoRlSha512) {
  1023. auto& pub_key = this->kGrpXKey;
  1024. auto& msg = this->kMsg0;
  1025. auto& sig = this->kSigGrpXMember0Sha512HugeBsnMsg0;
  1026. std::vector<uint8_t> bsn(1024 * 1024);
  1027. uint8_t c = 0;
  1028. for (int i = 0; i < 1024 * 1024; ++i) {
  1029. bsn[i] = c++;
  1030. }
  1031. VerifierCtxObj verifier(pub_key);
  1032. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  1033. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  1034. EXPECT_EQ(kEpidSigValid,
  1035. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1036. msg.data(), msg.size()));
  1037. }
  1038. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha512) {
  1039. auto& pub_key = this->kGrpXKey;
  1040. auto& msg = this->kMsg0;
  1041. auto& grp_rl = this->kGrpRl;
  1042. auto& priv_rl = this->kGrpXPrivRl;
  1043. auto& sig_rl = this->kGrpXSigRl;
  1044. auto& sig = this->kSigGrpXMember0Sha512RandbaseMsg0;
  1045. VerifierCtxObj verifier(pub_key);
  1046. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  1047. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  1048. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  1049. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  1050. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  1051. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  1052. sig_rl.size()));
  1053. EXPECT_EQ(kEpidSigValid,
  1054. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1055. msg.data(), msg.size()));
  1056. }
  1057. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha512256) {
  1058. auto& pub_key = this->kGrpXKey;
  1059. auto& msg = this->kMsg0;
  1060. auto& bsn = this->kBsn0;
  1061. auto& grp_rl = this->kGrpRl;
  1062. auto& priv_rl = this->kGrpXPrivRl;
  1063. auto& sig_rl = this->kGrpXSigRl;
  1064. auto& ver_rl = this->kGrpXBsn0Sha512256VerRl;
  1065. auto& sig = this->kSigGrpXMember0Sha512256Bsn0Msg0;
  1066. VerifierCtxObj verifier(pub_key);
  1067. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512_256));
  1068. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  1069. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  1070. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  1071. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  1072. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  1073. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  1074. sig_rl.size()));
  1075. THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
  1076. verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
  1077. EXPECT_EQ(kEpidSigValid,
  1078. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1079. msg.data(), msg.size()));
  1080. }
  1081. TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha512256) {
  1082. auto& pub_key = this->kGrpXKey;
  1083. auto& msg = this->kMsg0;
  1084. auto& grp_rl = this->kGrpRl;
  1085. auto& priv_rl = this->kGrpXPrivRl;
  1086. auto& sig_rl = this->kGrpXSigRl;
  1087. auto& sig = this->kSigGrpXMember0Sha512256RandbaseMsg0;
  1088. VerifierCtxObj verifier(pub_key);
  1089. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512_256));
  1090. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  1091. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  1092. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  1093. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  1094. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  1095. sig_rl.size()));
  1096. EXPECT_EQ(kEpidSigValid,
  1097. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1098. msg.data(), msg.size()));
  1099. }
  1100. TEST_F(EpidVerifierTest, VerifyAcceptsSigGivenMsgContainingAllPossibleBytes) {
  1101. auto& pub_key = this->kPubKeySigRlVerify;
  1102. auto& msg = this->kData_0_255;
  1103. auto& bsn = this->kBsn0;
  1104. auto& grp_rl = this->kGrpRl;
  1105. auto& priv_rl = this->kGrp01PrivRl;
  1106. std::vector<uint8_t> sig_rl = {
  1107. // gid
  1108. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1109. 0x00, 0x00, 0x00, 0x2A,
  1110. // version
  1111. 0x00, 0x00, 0x00, 0x00,
  1112. // n2
  1113. 0x00, 0x00, 0x00, 0x01,
  1114. // bk's
  1115. 0x9c, 0xa5, 0xe5, 0xae, 0x5f, 0xae, 0x51, 0x59, 0x33, 0x35, 0x27, 0xd,
  1116. 0x8, 0xb1, 0xbe, 0x5d, 0x69, 0x50, 0x84, 0xc5, 0xfe, 0xe2, 0x87, 0xea,
  1117. 0x2e, 0xef, 0xfa, 0xee, 0x67, 0xf2, 0xd8, 0x28, 0x56, 0x43, 0xc6, 0x94,
  1118. 0x67, 0xa6, 0x72, 0xf6, 0x41, 0x15, 0x4, 0x58, 0x42, 0x16, 0x88, 0x57,
  1119. 0x9d, 0xc7, 0x71, 0xd1, 0xc, 0x84, 0x13, 0xa, 0x90, 0x23, 0x18, 0x8, 0xad,
  1120. 0x7d, 0xfe, 0xf5, 0xc8, 0xae, 0xfc, 0x51, 0x40, 0xa7, 0xd1, 0x28, 0xc2,
  1121. 0x89, 0xb2, 0x6b, 0x4e, 0xb4, 0xc1, 0x55, 0x87, 0x98, 0xbd, 0x72, 0xf9,
  1122. 0xcf, 0xd, 0x40, 0x15, 0xee, 0x32, 0xc, 0xf3, 0x56, 0xc5, 0xc, 0x61, 0x9d,
  1123. 0x4f, 0x7a, 0xb5, 0x2b, 0x16, 0xa9, 0xa3, 0x97, 0x38, 0xe2, 0xdd, 0x3a,
  1124. 0x33, 0xad, 0xf6, 0x7b, 0x68, 0x8b, 0x68, 0xcf, 0xa3, 0xd3, 0x98, 0x37,
  1125. 0xce, 0xec, 0xd1, 0xa8, 0xc, 0x8b,
  1126. };
  1127. auto& sig = this->kSigGrp01Member0Sha512kBsn0Data_0_255;
  1128. VerifierCtxObj verifier(pub_key);
  1129. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
  1130. THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
  1131. THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
  1132. verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
  1133. THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
  1134. verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
  1135. THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
  1136. sig_rl.size()));
  1137. EXPECT_EQ(kEpidSigValid,
  1138. EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
  1139. msg.data(), msg.size()));
  1140. }
  1141. } // namespace