signbasic-test.cc 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. /*############################################################################
  2. # Copyright 2016 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 SignBasic unit tests.
  19. */
  20. #include "gtest/gtest.h"
  21. extern "C" {
  22. #include "epid/member/api.h"
  23. #include "epid/verifier/api.h"
  24. }
  25. #include "epid/common-testhelper/errors-testhelper.h"
  26. #include "epid/common-testhelper/prng-testhelper.h"
  27. #include "epid/member/unittests/member-testhelper.h"
  28. #include "epid/common-testhelper/verifier_wrapper-testhelper.h"
  29. namespace {
  30. /// Count of elements in array
  31. #define COUNT_OF(A) (sizeof(A) / sizeof((A)[0]))
  32. /////////////////////////////////////////////////////////////////////////
  33. // Simple error cases
  34. TEST_F(EpidMemberTest, SignBasicFailsGivenNullParameters) {
  35. Prng my_prng;
  36. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  37. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  38. auto& msg = this->kMsg0;
  39. auto& bsn = this->kBsn0;
  40. BasicSignature basic_sig;
  41. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(nullptr, msg.data(), msg.size(),
  42. bsn.data(), bsn.size(), &basic_sig));
  43. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, msg.data(), msg.size(),
  44. bsn.data(), bsn.size(), nullptr));
  45. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, nullptr, msg.size(),
  46. bsn.data(), bsn.size(), &basic_sig));
  47. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, msg.data(), msg.size(),
  48. nullptr, bsn.size(), &basic_sig));
  49. }
  50. TEST_F(EpidMemberTest, SignBasicFailsForBasenameWithoutRegisteredBasenames) {
  51. Prng my_prng;
  52. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  53. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  54. auto& msg = this->kMsg0;
  55. auto& bsn = this->kBsn0;
  56. BasicSignature basic_sig;
  57. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, msg.data(), msg.size(),
  58. bsn.data(), bsn.size(), &basic_sig));
  59. }
  60. TEST_F(EpidMemberTest, SignBasicFailsIfGivenUnregisteredBasename) {
  61. Prng my_prng;
  62. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  63. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  64. auto& msg = this->kMsg0;
  65. auto& bsn0 = this->kBsn0;
  66. auto& bsn1 = this->kBsn1;
  67. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn0.data(), bsn0.size()));
  68. BasicSignature basic_sig;
  69. EXPECT_EQ(kEpidBadArgErr,
  70. EpidSignBasic(member, msg.data(), msg.size(), bsn1.data(),
  71. bsn1.size(), &basic_sig));
  72. }
  73. /////////////////////////////////////////////////////////////////////////
  74. // Anonymity
  75. TEST_F(EpidMemberTest, BasicSignaturesOfSameMessageAreDifferent) {
  76. Prng my_prng;
  77. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  78. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  79. auto& msg = this->kMsg0;
  80. BasicSignature basic_sig1;
  81. BasicSignature basic_sig2;
  82. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
  83. 0, &basic_sig1));
  84. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
  85. 0, &basic_sig2));
  86. EXPECT_NE(0, memcmp(&basic_sig1, &basic_sig2, sizeof(BasicSignature)));
  87. }
  88. TEST_F(EpidMemberTest,
  89. BasicSignaturesOfSameMessageWithSameBasenameAreDifferent) {
  90. Prng my_prng;
  91. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  92. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  93. auto& msg = this->kMsg0;
  94. auto& bsn = this->kBsn0;
  95. BasicSignature basic_sig1;
  96. BasicSignature basic_sig2;
  97. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  98. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  99. bsn.data(), bsn.size(), &basic_sig1));
  100. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  101. bsn.data(), bsn.size(), &basic_sig2));
  102. EXPECT_NE(0, memcmp(&basic_sig1, &basic_sig2, sizeof(BasicSignature)));
  103. }
  104. /////////////////////////////////////////////////////////////////////////
  105. // Variable basename
  106. TEST_F(EpidMemberTest, SignBasicSucceedsUsingRandomBase) {
  107. Prng my_prng;
  108. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  109. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  110. auto& msg = this->kMsg0;
  111. BasicSignature basic_sig;
  112. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
  113. 0, &basic_sig));
  114. // verify basic signature
  115. VerifierCtxObj ctx(this->kGroupPublicKey);
  116. EXPECT_EQ(kEpidSigValid,
  117. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  118. }
  119. TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasename) {
  120. Prng my_prng;
  121. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  122. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  123. auto& msg = this->kMsg0;
  124. auto& bsn = this->kBsn0;
  125. BasicSignature basic_sig;
  126. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  127. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  128. bsn.data(), bsn.size(), &basic_sig));
  129. // verify basic signature
  130. VerifierCtxObj ctx(this->kGroupPublicKey);
  131. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  132. EXPECT_EQ(kEpidSigValid,
  133. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  134. }
  135. TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasenameUsingIKGFData) {
  136. Prng my_prng;
  137. GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
  138. this->kGroupPublicKeyDataIkgf.data());
  139. PrivKey mbr_private_key =
  140. *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
  141. MemberCtxObj member(grp_public_key, mbr_private_key, &Prng::Generate,
  142. &my_prng);
  143. auto& msg = this->kMsg0;
  144. auto& bsn = this->kBsn0;
  145. BasicSignature basic_sig;
  146. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  147. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  148. bsn.data(), bsn.size(), &basic_sig));
  149. // verify basic signature
  150. VerifierCtxObj ctx(grp_public_key);
  151. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  152. EXPECT_EQ(kEpidSigValid,
  153. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  154. }
  155. TEST_F(EpidMemberTest,
  156. SignBasicSucceedsUsingRandomBaseWithRegisteredBasenames) {
  157. Prng my_prng;
  158. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  159. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  160. auto& msg = this->kMsg0;
  161. auto& bsn = this->kBsn0;
  162. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  163. BasicSignature basic_sig;
  164. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  165. bsn.data(), bsn.size(), &basic_sig));
  166. // verify basic signature
  167. VerifierCtxObj ctx(this->kGroupPublicKey);
  168. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  169. EXPECT_EQ(kEpidSigValid,
  170. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  171. }
  172. TEST_F(EpidMemberTest,
  173. SignBasicSucceedsUsingRandomBaseWithoutRegisteredBasenames) {
  174. Prng my_prng;
  175. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  176. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  177. auto& msg = this->kMsg0;
  178. BasicSignature basic_sig;
  179. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
  180. 0, &basic_sig));
  181. // verify basic signature
  182. VerifierCtxObj ctx(this->kGroupPublicKey);
  183. EXPECT_EQ(kEpidSigValid,
  184. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  185. }
  186. /////////////////////////////////////////////////////////////////////////
  187. // Variable hash alg
  188. TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha256HashAlg) {
  189. Prng my_prng;
  190. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  191. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  192. auto& msg = this->kMsg0;
  193. auto& bsn = this->kBsn0;
  194. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  195. BasicSignature basic_sig;
  196. THROW_ON_EPIDERR(EpidMemberSetHashAlg(member, kSha256));
  197. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  198. bsn.data(), bsn.size(), &basic_sig));
  199. // verify basic signature
  200. VerifierCtxObj ctx(this->kGroupPublicKey);
  201. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
  202. EXPECT_EQ(kEpidSigValid,
  203. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  204. }
  205. TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha384HashAlg) {
  206. Prng my_prng;
  207. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  208. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  209. auto& msg = this->kMsg0;
  210. auto& bsn = this->kBsn0;
  211. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  212. BasicSignature basic_sig;
  213. THROW_ON_EPIDERR(EpidMemberSetHashAlg(member, kSha384));
  214. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  215. bsn.data(), bsn.size(), &basic_sig));
  216. // verify basic signature
  217. VerifierCtxObj ctx(this->kGroupPublicKey);
  218. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha384));
  219. EXPECT_EQ(kEpidSigValid,
  220. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  221. }
  222. TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha512HashAlg) {
  223. Prng my_prng;
  224. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  225. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  226. auto& msg = this->kMsg0;
  227. auto& bsn = this->kBsn0;
  228. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  229. BasicSignature basic_sig;
  230. THROW_ON_EPIDERR(EpidMemberSetHashAlg(member, kSha512));
  231. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  232. bsn.data(), bsn.size(), &basic_sig));
  233. // verify basic signature
  234. VerifierCtxObj ctx(this->kGroupPublicKey);
  235. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512));
  236. EXPECT_EQ(kEpidSigValid,
  237. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  238. }
  239. TEST_F(EpidMemberTest, DISABLED_SignBasicSucceedsUsingSha512256HashAlg) {
  240. Prng my_prng;
  241. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  242. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  243. auto& msg = this->kMsg0;
  244. auto& bsn = this->kBsn0;
  245. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  246. BasicSignature basic_sig;
  247. THROW_ON_EPIDERR(EpidMemberSetHashAlg(member, kSha512_256));
  248. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  249. bsn.data(), bsn.size(), &basic_sig));
  250. // verify basic signature
  251. VerifierCtxObj ctx(this->kGroupPublicKey);
  252. THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512_256));
  253. EXPECT_EQ(kEpidSigValid,
  254. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  255. }
  256. /////////////////////////////////////////////////////////////////////////
  257. TEST_F(EpidMemberTest, SignBasicFailsForInvalidMemberPrecomp) {
  258. Prng my_prng;
  259. MemberPrecomp mbr_precomp = this->kMemberPrecomp;
  260. mbr_precomp.e12.x[0].data.data[0]++;
  261. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  262. mbr_precomp, &Prng::Generate, &my_prng);
  263. auto& msg = this->kMsg0;
  264. BasicSignature basic_sig;
  265. auto& bsn = this->kBsn0;
  266. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, msg.data(), msg.size(),
  267. bsn.data(), bsn.size(), &basic_sig));
  268. }
  269. // Variable precomputed signatures
  270. TEST_F(EpidMemberTest, SignBasicFailsForInvalidPrecomputedSignature) {
  271. Prng my_prng;
  272. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  273. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  274. PreComputedSignature precompsig = this->kPrecomputedSignatures[0];
  275. precompsig.B.x.data.data[0]++;
  276. THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, &precompsig));
  277. auto& msg = this->kMsg0;
  278. BasicSignature basic_sig;
  279. auto& bsn = this->kBsn0;
  280. EXPECT_EQ(kEpidBadArgErr, EpidSignBasic(member, msg.data(), msg.size(),
  281. bsn.data(), bsn.size(), &basic_sig));
  282. }
  283. TEST_F(EpidMemberTest, SignBasicConsumesPrecomputedSignatures) {
  284. Prng my_prng;
  285. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  286. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  287. THROW_ON_EPIDERR(EpidAddPreSigs(member, 3, nullptr));
  288. auto& msg = this->kMsg0;
  289. BasicSignature basic_sig;
  290. auto& bsn = this->kBsn0;
  291. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  292. // use 1 precomputed signature
  293. ASSERT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  294. bsn.data(), bsn.size(), &basic_sig));
  295. EXPECT_EQ((size_t)2, EpidGetNumPreSigs(member));
  296. }
  297. TEST_F(EpidMemberTest, SignBasicSucceedsWithPrecomputedSignatures) {
  298. Prng my_prng;
  299. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  300. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  301. THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
  302. auto& msg = this->kMsg0;
  303. BasicSignature basic_sig;
  304. auto& bsn = this->kBsn0;
  305. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  306. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  307. bsn.data(), bsn.size(), &basic_sig));
  308. // verify basic signature
  309. VerifierCtxObj ctx(this->kGroupPublicKey);
  310. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  311. EXPECT_EQ(kEpidSigValid,
  312. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  313. }
  314. TEST_F(EpidMemberTest, SignBasicSucceedsWithoutPrecomputedSignatures) {
  315. Prng my_prng;
  316. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  317. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  318. THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
  319. auto& msg = this->kMsg0;
  320. BasicSignature basic_sig;
  321. auto& bsn = this->kBsn0;
  322. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  323. ASSERT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  324. bsn.data(), bsn.size(), &basic_sig));
  325. // test sign without precomputed signatures
  326. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
  327. bsn.data(), bsn.size(), &basic_sig));
  328. // verify basic signature
  329. VerifierCtxObj ctx(this->kGroupPublicKey);
  330. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  331. EXPECT_EQ(kEpidSigValid,
  332. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
  333. }
  334. /////////////////////////////////////////////////////////////////////////
  335. // Variable messages
  336. TEST_F(EpidMemberTest, SignBasicSucceedsGivenEmptyMessage) {
  337. Prng my_prng;
  338. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  339. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  340. auto& msg = this->kMsg0;
  341. auto& bsn = this->kBsn0;
  342. THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
  343. BasicSignature basic_sig;
  344. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), 0, bsn.data(),
  345. bsn.size(), &basic_sig));
  346. VerifierCtxObj ctx(this->kGroupPublicKey);
  347. THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
  348. EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), 0));
  349. }
  350. TEST_F(EpidMemberTest, SignBasicSucceedsWithShortMessage) {
  351. // check: 1, 13, 128, 256, 512, 1021, 1024 bytes
  352. // 13 and 1021 are primes
  353. Prng my_prng;
  354. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  355. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  356. BasicSignature basic_sig;
  357. VerifierCtxObj ctx(this->kGroupPublicKey);
  358. size_t lengths[] = {1, 13, 128, 256,
  359. 512, 1021, 1024}; // have desired lengths to loop over
  360. std::vector<uint8_t> msg(
  361. lengths[COUNT_OF(lengths) - 1]); // allocate message for max size
  362. for (size_t n = 0; n < msg.size(); n++) {
  363. msg.at(n) = (uint8_t)n;
  364. }
  365. for (auto length : lengths) {
  366. EXPECT_EQ(kEpidNoErr,
  367. EpidSignBasic(member, msg.data(), length, nullptr, 0, &basic_sig))
  368. << "EpidSignBasic for message_len: " << length << " failed";
  369. EXPECT_EQ(kEpidNoErr,
  370. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), length))
  371. << "EpidVerifyBasicSig for message_len: " << length << " failed";
  372. }
  373. }
  374. TEST_F(EpidMemberTest, SignBasicSucceedsWithLongMessage) {
  375. Prng my_prng;
  376. MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
  377. this->kMemberPrecomp, &Prng::Generate, &my_prng);
  378. BasicSignature basic_sig;
  379. VerifierCtxObj ctx(this->kGroupPublicKey);
  380. { // 1000000
  381. std::vector<uint8_t> msg(1000000); // allocate message for max size
  382. for (size_t n = 0; n < msg.size(); n++) {
  383. msg.at(n) = (uint8_t)n;
  384. }
  385. EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
  386. 0, &basic_sig))
  387. << "EpidSignBasic for message_len: " << 1000000 << " failed";
  388. EXPECT_EQ(kEpidNoErr,
  389. EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()))
  390. << "EpidVerifyBasicSig for message_len: " << 1000000 << " failed";
  391. }
  392. }
  393. } // namespace