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.

1614 lines
46 KiB

  1. package ringct
  2. import (
  3. "testing"
  4. )
  5. func TestScMulSub(t *testing.T) {
  6. tests := []struct {
  7. name string
  8. aHex string
  9. bHex string
  10. cHex string
  11. wantHex string
  12. }{
  13. {
  14. name: "simple",
  15. aHex: "0100000000000000000000000000000000000000000000000000000000000000",
  16. bHex: "0100000000000000000000000000000000000000000000000000000000000000",
  17. cHex: "0200000000000000000000000000000000000000000000000000000000000000",
  18. wantHex: "0100000000000000000000000000000000000000000000000000000000000000",
  19. },
  20. {
  21. name: "more complex",
  22. aHex: "1000000000000000000000000000000000000000000000000000000000000000",
  23. bHex: "1000000000000000000000000000000000000000000000000000000000000000",
  24. cHex: "0002000000000000000000000000000000000000000000000000000000000000",
  25. wantHex: "0001000000000000000000000000000000000000000000000000000000000000",
  26. },
  27. {
  28. name: "more complex",
  29. aHex: "0000000000000000000000000000000000000000000000000000000000000010",
  30. bHex: "0000000000000000000000000000000000000000000000000000000000000010",
  31. cHex: "0000000000000000000000000000000000000000000000000000000000000000",
  32. wantHex: "844ae3b1946c2475b8f95e806867dbac410ae82d8c1331c265cf83e4be664c0e",
  33. },
  34. }
  35. for _, test := range tests {
  36. a := HexToKey(test.aHex)
  37. b := HexToKey(test.bHex)
  38. c := HexToKey(test.cHex)
  39. want := HexToKey(test.wantHex)
  40. var got Key
  41. ScMulSub(&got, &a, &b, &c)
  42. if want != got {
  43. t.Errorf("%s: want %x, got %x", test.name, want, got)
  44. }
  45. }
  46. }
  47. func TestScalarMult(t *testing.T) {
  48. tests := []struct {
  49. name string
  50. scalarHex string
  51. pointHex string
  52. wantHex string
  53. }{
  54. {
  55. name: "zero",
  56. scalarHex: "0000000000000000000000000000000000000000000000000000000000000000",
  57. pointHex: "0100000000000000000000000000000000000000000000000000000000000000",
  58. wantHex: "0100000000000000000000000000000000000000000000000000000000000000",
  59. },
  60. {
  61. name: "basepoint * 1",
  62. scalarHex: "0100000000000000000000000000000000000000000000000000000000000000",
  63. pointHex: "5866666666666666666666666666666666666666666666666666666666666666",
  64. wantHex: "5866666666666666666666666666666666666666666666666666666666666666",
  65. },
  66. {
  67. name: "basepoint * 8",
  68. scalarHex: "0800000000000000000000000000000000000000000000000000000000000000",
  69. pointHex: "5866666666666666666666666666666666666666666666666666666666666666",
  70. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  71. },
  72. {
  73. name: "basepoint * 2",
  74. scalarHex: "0200000000000000000000000000000000000000000000000000000000000000",
  75. pointHex: "2f1132ca61ab38dff00f2fea3228f24c6c71d58085b80e47e19515cb27e8d047",
  76. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  77. },
  78. }
  79. for _, test := range tests {
  80. scalarBytes := HexToKey(test.scalarHex)
  81. pointBytes := HexToKey(test.pointHex)
  82. want := HexToKey(test.wantHex)
  83. point := new(ExtendedGroupElement)
  84. point.FromBytes(&pointBytes)
  85. result := new(ProjectiveGroupElement)
  86. GeScalarMult(result, &scalarBytes, point)
  87. var got Key
  88. result.ToBytes(&got)
  89. if want != got {
  90. t.Errorf("%s: want %x, got %x", test.name, want, got)
  91. }
  92. }
  93. }
  94. func TestGeMul8(t *testing.T) {
  95. tests := []struct {
  96. name string
  97. pointHex string
  98. wantHex string
  99. }{
  100. {
  101. name: "zero",
  102. pointHex: "0100000000000000000000000000000000000000000000000000000000000000",
  103. wantHex: "0100000000000000000000000000000000000000000000000000000000000000",
  104. },
  105. {
  106. name: "basepoint",
  107. pointHex: "5866666666666666666666666666666666666666666666666666666666666666",
  108. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  109. },
  110. }
  111. for _, test := range tests {
  112. pointBytes := HexToKey(test.pointHex)
  113. want := HexToKey(test.wantHex)
  114. tmp := new(ExtendedGroupElement)
  115. tmp.FromBytes(&pointBytes)
  116. point := new(ProjectiveGroupElement)
  117. tmp.ToProjective(point)
  118. tmp2 := new(CompletedGroupElement)
  119. result := new(ExtendedGroupElement)
  120. var got Key
  121. GeMul8(tmp2, point)
  122. tmp2.ToExtended(result)
  123. result.ToBytes(&got)
  124. if want != got {
  125. t.Errorf("%s: want %x, got %x", test.name, want, got)
  126. }
  127. }
  128. }
  129. func TestGeDoubleScalarMultVartime(t *testing.T) {
  130. tests := []struct {
  131. name string
  132. pointHex string
  133. scalar1Hex string
  134. scalar2Hex string
  135. wantHex string
  136. }{
  137. {
  138. name: "zero",
  139. pointHex: "0100000000000000000000000000000000000000000000000000000000000000",
  140. scalar1Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  141. scalar2Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  142. wantHex: "0100000000000000000000000000000000000000000000000000000000000000",
  143. },
  144. {
  145. name: "8 times base point only",
  146. pointHex: "0100000000000000000000000000000000000000000000000000000000000000",
  147. scalar1Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  148. scalar2Hex: "0800000000000000000000000000000000000000000000000000000000000000",
  149. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  150. },
  151. {
  152. name: "2 times non-base-point",
  153. pointHex: "2f1132ca61ab38dff00f2fea3228f24c6c71d58085b80e47e19515cb27e8d047",
  154. scalar1Hex: "0200000000000000000000000000000000000000000000000000000000000000",
  155. scalar2Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  156. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  157. },
  158. {
  159. name: "Combination",
  160. pointHex: "2f1132ca61ab38dff00f2fea3228f24c6c71d58085b80e47e19515cb27e8d047",
  161. scalar1Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  162. scalar2Hex: "0400000000000000000000000000000000000000000000000000000000000000",
  163. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  164. },
  165. }
  166. for _, test := range tests {
  167. pointBytes := HexToKey(test.pointHex)
  168. a := HexToKey(test.scalar1Hex)
  169. b := HexToKey(test.scalar2Hex)
  170. want := HexToKey(test.wantHex)
  171. point := new(ExtendedGroupElement)
  172. point.FromBytes(&pointBytes)
  173. result := new(ProjectiveGroupElement)
  174. GeDoubleScalarMultVartime(result, &a, point, &b)
  175. var got Key
  176. result.ToBytes(&got)
  177. if want != got {
  178. t.Errorf("%s: want %x, got %x", test.name, want, got)
  179. }
  180. }
  181. }
  182. func TestGeDoubleScalarMultPrecompVartime(t *testing.T) {
  183. tests := []struct {
  184. name string
  185. point1Hex string
  186. point2Hex string
  187. scalar1Hex string
  188. scalar2Hex string
  189. wantHex string
  190. }{
  191. {
  192. name: "zero",
  193. point1Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  194. point2Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  195. scalar1Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  196. scalar2Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  197. wantHex: "0100000000000000000000000000000000000000000000000000000000000000",
  198. },
  199. {
  200. name: "scalar 1 only",
  201. point1Hex: "5866666666666666666666666666666666666666666666666666666666666666",
  202. point2Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  203. scalar1Hex: "0800000000000000000000000000000000000000000000000000000000000000",
  204. scalar2Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  205. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  206. },
  207. {
  208. name: "scalar 2 only",
  209. point1Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  210. point2Hex: "5866666666666666666666666666666666666666666666666666666666666666",
  211. scalar1Hex: "0000000000000000000000000000000000000000000000000000000000000000",
  212. scalar2Hex: "0800000000000000000000000000000000000000000000000000000000000000",
  213. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  214. },
  215. {
  216. name: "Combination",
  217. point1Hex: "2f1132ca61ab38dff00f2fea3228f24c6c71d58085b80e47e19515cb27e8d047",
  218. point2Hex: "5866666666666666666666666666666666666666666666666666666666666666",
  219. scalar1Hex: "0100000000000000000000000000000000000000000000000000000000000000",
  220. scalar2Hex: "0400000000000000000000000000000000000000000000000000000000000000",
  221. wantHex: "b4b937fca95b2f1e93e41e62fc3c78818ff38a66096fad6e7973e5c90006d321",
  222. },
  223. }
  224. for _, test := range tests {
  225. point1Bytes := HexToKey(test.point1Hex)
  226. point2Bytes := HexToKey(test.point2Hex)
  227. a := HexToKey(test.scalar1Hex)
  228. b := HexToKey(test.scalar2Hex)
  229. want := HexToKey(test.wantHex)
  230. point1 := new(ExtendedGroupElement)
  231. point1.FromBytes(&point1Bytes)
  232. point2 := new(ExtendedGroupElement)
  233. point2.FromBytes(&point2Bytes)
  234. var point2Precomp [8]CachedGroupElement
  235. GePrecompute(&point2Precomp, point2)
  236. result := new(ProjectiveGroupElement)
  237. GeDoubleScalarMultPrecompVartime(result, &a, point1, &b, &point2Precomp)
  238. var got Key
  239. result.ToBytes(&got)
  240. if want != got {
  241. t.Errorf("%s: want %x, got %x", test.name, want, got)
  242. }
  243. }
  244. }
  245. func TestScValid(t *testing.T) {
  246. // All tests from github.com/monero-project/monero/tests/crypto/tests.txt
  247. tests := []struct {
  248. scalarHex string
  249. valid bool
  250. }{
  251. {
  252. scalarHex: "ac10e070c8574ef374bdd1c5dbe9bacfd927f9ae0705cf08018ff865f6092d0f",
  253. valid: true,
  254. },
  255. {
  256. scalarHex: "fa939388e8cb0ffc5c776cc517edc2a9457c11a89820a7bee91654ce2e2fb300",
  257. valid: true,
  258. },
  259. {
  260. scalarHex: "6d728f89e567522dffe81cf641c2e483e2cee7051c1b3cd9cd38cba09d2dc900",
  261. valid: true,
  262. },
  263. {
  264. scalarHex: "18fd66f7a0874de792f12a1b2add7d294100ea454537ae5794d0abc91dbf098a",
  265. valid: false,
  266. },
  267. {
  268. scalarHex: "fdb4cee00230c448aeaa4790dd12e855eca6223d81dab6bfe3fe99ce5e702325",
  269. valid: false,
  270. },
  271. {
  272. scalarHex: "f3ab5c4a64f9afbd48c75ad25700996a69504d31c75a6aa8beb24d178cfc32ba",
  273. valid: false,
  274. },
  275. {
  276. scalarHex: "167e88e9298926ecd66d32a890148a9adcfb80a7ecc69396edc5f5ee8848ce91",
  277. valid: false,
  278. },
  279. {
  280. scalarHex: "a9172ced17605ab2ba82caec382f1176fe6a1e0b92a9c95679978b3999d22605",
  281. valid: true,
  282. },
  283. {
  284. scalarHex: "44f65ce00e64cf29e07bf3843e8e43e83b8b26d3dfcd83160d9a3fedda3fc908",
  285. valid: true,
  286. },
  287. {
  288. scalarHex: "69951c807647f4dea33f8a40b0ddef999a9e8efd1b1b176f45fb92aae6287000",
  289. valid: true,
  290. },
  291. {
  292. scalarHex: "dcb6f94312b4b815101af10775d189301d063816b0aa9b9ac028c0eb9b17dd0e",
  293. valid: true,
  294. },
  295. {
  296. scalarHex: "a1a9574a90bed7f58bfd4c3295e181e152a4a39f9ad56520947e94fea40dfe2e",
  297. valid: false,
  298. },
  299. {
  300. scalarHex: "757ebb27b14433f3ed696cd291825eba555af0863862216a98cf3080432bda01",
  301. valid: true,
  302. },
  303. {
  304. scalarHex: "a7401d68c7956d41a05d8c6c1a3cc692cc269ad8a5837f93ac2c7654abaebf0e",
  305. valid: true,
  306. },
  307. {
  308. scalarHex: "7c84ef4d9627529723f5e171a88bba91118192e6e19929204a6d23f5a541850b",
  309. valid: true,
  310. },
  311. {
  312. scalarHex: "ebe4b2f9eadd52271e1115aa3b89b7bb3f68d58bf74d75486b77e6ae8216f609",
  313. valid: true,
  314. },
  315. {
  316. scalarHex: "6221caf5dfd623587ca7aac45f5312faf1c2847d7bfbc5c46f88fd933970c866",
  317. valid: false,
  318. },
  319. {
  320. scalarHex: "b38334b41f0b829bf3a2ea73b58c16afb56ccba5144668e78257ed4aa9a33a5e",
  321. valid: false,
  322. },
  323. {
  324. scalarHex: "92e5df37f5412d9e9910cd28d27138ba46bdd4dee5dab1125f200f0a4e66f01c",
  325. valid: false,
  326. },
  327. {
  328. scalarHex: "2d1717fe2965133009bdcf0c13b02ca85df4dc23d969d7b16fdab94341c2b90e",
  329. valid: true,
  330. },
  331. {
  332. scalarHex: "82d771565024cf4b5c9add6d10a4114a2fbdbf7626f03749c8bddcf6c6feee03",
  333. valid: true,
  334. },
  335. {
  336. scalarHex: "2db0f3d9bf47666bb40ae25ef7508296af2ef665a5333efff92c9daee5ecd986",
  337. valid: false,
  338. },
  339. {
  340. scalarHex: "47883a3f0b0e624512887f3dae6f401b2f02eb8950eb8e741f07347108fbea14",
  341. valid: false,
  342. },
  343. {
  344. scalarHex: "dae25f27f2756b8270f78015b1beafbd03a8d67a4dd940ee9550cecae9f3560f",
  345. valid: true,
  346. },
  347. {
  348. scalarHex: "bab79d355572361259484ca77308943b7c71f5831be5dde11b3c7a26ac6e9a01",
  349. valid: true,
  350. },
  351. {
  352. scalarHex: "f0bf30a9862d51fd8d1ca3a4e5a0e4330a5beab751af075b2e46f3e2d0297101",
  353. valid: true,
  354. },
  355. {
  356. scalarHex: "a94270659333c985ab1461e9820f219416ad76f551a34f4c983ca967aa6b618c",
  357. valid: false,
  358. },
  359. {
  360. scalarHex: "98e582e9d0e485e6b756e44b1cb187e9f2d4e16c02d2713a41dcee6d7fac0205",
  361. valid: true,
  362. },
  363. {
  364. scalarHex: "62b57869238e72f05992e01f07c7a26c71ef9e3078ee7390cd4fc6406d3b37e3",
  365. valid: false,
  366. },
  367. {
  368. scalarHex: "c751566f5420232cd626d2bd8073debedf219a0a28a7390200a2df9df8981647",
  369. valid: false,
  370. },
  371. {
  372. scalarHex: "cfafede7d76def164bf15047a388365d712a600f1369bf692cb2dcb249f66508",
  373. valid: true,
  374. },
  375. {
  376. scalarHex: "c0eb03c2c46a77b0cf67bea7d547b9b4d02116f70702790398bdabbfa775100a",
  377. valid: true,
  378. },
  379. {
  380. scalarHex: "58c5afbb7b334e921bb46eeee1dfebadfbbc3a77c420b0b325b9470eff94cc0e",
  381. valid: true,
  382. },
  383. {
  384. scalarHex: "b31b178b4dc8f7a7c24f6eb0987e32b8a9446ce8207186259074cc3d925c530d",
  385. valid: true,
  386. },
  387. {
  388. scalarHex: "467b2c5f63120744b5aee7ec255d170aba83babdec9e76c2690300540eb17483",
  389. valid: false,
  390. },
  391. {
  392. scalarHex: "9bc3be487bea81da020af0353660878e7deca693ac81278fac343b8b1809bd9c",
  393. valid: false,
  394. },
  395. {
  396. scalarHex: "162cdb42f9d9147118537cc4d5eadb8f589f6de3929188f6c41428bdab2c650e",
  397. valid: true,
  398. },
  399. {
  400. scalarHex: "6eeb88f685d1b5c99f8c27dcadf95f5bea9082e2735a4f8aafc3c3a35f749002",
  401. valid: true,
  402. },
  403. {
  404. scalarHex: "e03bb5c9bedc41d324ca6d988e50b7e7c6cd6d2b1e471b752a00a10a19c9a604",
  405. valid: true,
  406. },
  407. {
  408. scalarHex: "4fa064dcef2f14fc453c30865583468ad35af81c460a643b11285c15f2babb04",
  409. valid: true,
  410. },
  411. {
  412. scalarHex: "bf067a7b53dab7fcd6a1f5a2c8b9b54c262e9be5ea5892dba5e4ad25585be702",
  413. valid: true,
  414. },
  415. {
  416. scalarHex: "14d8d255c2156bb12133d5ee792061a21d3fbda2f14310753f3a90c2ad4ccbc8",
  417. valid: false,
  418. },
  419. {
  420. scalarHex: "81e78a37b7e2dfed35ad8228a6c4a6f0aa34cc1de43da23895c5c86790804e01",
  421. valid: true,
  422. },
  423. {
  424. scalarHex: "62366805970fb07b877bf1705d9c10517c6667ab7586d9afa82c30236a72f50f",
  425. valid: true,
  426. },
  427. {
  428. scalarHex: "bb3b0e27b7c57052e5ac20bc6390229f57c6dbc8213dbc4ee1cbb9e174e389f9",
  429. valid: false,
  430. },
  431. {
  432. scalarHex: "5c4039f162531ce9129667ed424446ef375a18da246a72c0dab00321fa04e929",
  433. valid: false,
  434. },
  435. {
  436. scalarHex: "8d41a450d98a6f354266e36510921649e5229412976f8f318a3090d390a46807",
  437. valid: true,
  438. },
  439. {
  440. scalarHex: "2fbce4441723379b8b6ef417803eb9220c8fee42f72da7e36e2c64b51628a10c",
  441. valid: true,
  442. },
  443. {
  444. scalarHex: "5bbf0e5b58e3df89a5f4c607e3033fff8b9643fc900813f4ea50b889260bb004",
  445. valid: true,
  446. },
  447. {
  448. scalarHex: "e5acfcb2ecb7175f90aa24db107cea1be7a45bc471c4c65b9f46535768545de5",
  449. valid: false,
  450. },
  451. {
  452. scalarHex: "fae6e8d7226e6dc25faafdd8b5c63b68587980f6e76ea59b8595f18f64a96bd5",
  453. valid: false,
  454. },
  455. {
  456. scalarHex: "6736f7939157ccee066a40056c13d96230ca5ffd014b0ebb0a454e3d8ea6830f",
  457. valid: true,
  458. },
  459. {
  460. scalarHex: "b2b490d52f6e4d9ef14fc1ab3e1e97160693ba5d1220e4d63956eca316693504",
  461. valid: true,
  462. },
  463. {
  464. scalarHex: "dca490cb4e21589e045150e8c0876871f08e6b3886c6393c6348bfb432799079",
  465. valid: false,
  466. },
  467. {
  468. scalarHex: "ca2663d84aa7d7581ac4f0a270a685019178f5288013d163028d321e92b04901",
  469. valid: true,
  470. },
  471. {
  472. scalarHex: "7dd277472249a53620d6b21c1ab0424024581b5ae3e6ecb9a46af8511b55a408",
  473. valid: true,
  474. },
  475. {
  476. scalarHex: "30f07adb405de73987d81fcba3d523d420d130fe753afbf3dd19d5f08e8a1356",
  477. valid: false,
  478. },
  479. {
  480. scalarHex: "cc31de9889440c695df43a9c621a7156bc064b161be2fdef35dd8ae0e1017fe2",
  481. valid: false,
  482. },
  483. {
  484. scalarHex: "962ac1be6677cf0d298dd1244501e6a164a915df61b83c2837f80a84541e2e03",
  485. valid: true,
  486. },
  487. {
  488. scalarHex: "e0a1e1c48f5dfb7c0faddd9186214ec2f81fb0bc3aca423ccf0e538cf43a2bd5",
  489. valid: false,
  490. },
  491. {
  492. scalarHex: "8ed93780cbd46092acce856a8c691edbb8419deec5acfb26fcf82419b4a964b9",
  493. valid: false,
  494. },
  495. {
  496. scalarHex: "f62cf00cac227d2b96e7f96268f0d606ad5924b0efb64e623e25584f993c93a8",
  497. valid: false,
  498. },
  499. {
  500. scalarHex: "e49eacd6858efad9f3bedba8b9edff5ff3d5bd622926d5e96e6e8c8752a43d25",
  501. valid: false,
  502. },
  503. {
  504. scalarHex: "ed424965b9a79c2f6611d7d4bcbe5bae4dbf2c8130141c714acc95c492061411",
  505. valid: false,
  506. },
  507. {
  508. scalarHex: "7ea2bb2a4dab662c3adf71eb959314208ff9dbf50b3cb1a7940e4a4d6d797e0e",
  509. valid: true,
  510. },
  511. {
  512. scalarHex: "96fc939742b8ed518bb7aa4bb6c9bbe3fddded6b9441d9ea27712c377e0bdff1",
  513. valid: false,
  514. },
  515. {
  516. scalarHex: "c5122ad5575b54ebce3f1d1d97c3bb0cfeb9e5ea3bb223ab63189ced40579cf4",
  517. valid: false,
  518. },
  519. {
  520. scalarHex: "c9147f1b42890b089ae2dfdc27f69b4a29c67b8bc0264259fcf71c39e31b893c",
  521. valid: false,
  522. },
  523. {
  524. scalarHex: "9292516356f70e84852c3a563970bff369dfc39325c64432610baa0f31f2320e",
  525. valid: true,
  526. },
  527. {
  528. scalarHex: "85f8b6251f177701b319c5db4bc372a5cf05cb07d86b2b2d5c938b0faf6d670f",
  529. valid: true,
  530. },
  531. {
  532. scalarHex: "de88df59b4e8e3fe2beab575b4c6ffccbd24cf294f890fa61cbc231b0c976f0d",
  533. valid: true,
  534. },
  535. {
  536. scalarHex: "2922bd9b50e09fe75a3745c62afd5bd1813dcffcf4503668e71d8f5d37c0090d",
  537. valid: true,
  538. },
  539. {
  540. scalarHex: "f090b3ed9355221e4fb40397c367fb31a2c7ce308ba96b9c4fc9610c14cbe305",
  541. valid: true,
  542. },
  543. {
  544. scalarHex: "1c545854bd134a995f2138d6d088032c33a9a23a30748615652e6675d56e670f",
  545. valid: true,
  546. },
  547. {
  548. scalarHex: "588050d78a3079a12bc88d6bcaf34a95bc6928c9233f14056277bf36bb355d26",
  549. valid: false,
  550. },
  551. {
  552. scalarHex: "3956481800462e5c34aa2178dde33d5096c23185d61a5839c212d11e61adc901",
  553. valid: true,
  554. },
  555. {
  556. scalarHex: "d0d61e471d5d503a6efcd549694b61851a58b0c8f8fb400227e2a48c1cbe4a0d",
  557. valid: true,
  558. },
  559. {
  560. scalarHex: "1eed64f825d3f1bba4a226425dbef91f102ec01bcf4a0ac0a00baef8de20c405",
  561. valid: true,
  562. },
  563. {
  564. scalarHex: "86764f74c855d580581ff17416a2c394de55bb3cb6e676756e86f3893ee61a09",
  565. valid: true,
  566. },
  567. {
  568. scalarHex: "a1cc5ecb2a528ab8fe3efac17a2859c2ef1b81b51d18643bb3ee3fcc8794eb80",
  569. valid: false,
  570. },
  571. {
  572. scalarHex: "740464b60e54da6a3541057742d327330ae5ac190e2b86708f5af7a1ff89fd0a",
  573. valid: true,
  574. },
  575. {
  576. scalarHex: "ada63ca80e15912177b738c7c7618917827893b57ad20688a0a9c93c6c7c4e0a",
  577. valid: true,
  578. },
  579. {
  580. scalarHex: "a55a6f1f2cab41704b251d3c64f3123f1635e3ee24fcce7e88cdaaf148636500",
  581. valid: true,
  582. },
  583. {
  584. scalarHex: "515bfea540021ffb6d8f2324952a1ffa02f40adb860cff143ff0d797bd63fb09",
  585. valid: true,
  586. },
  587. {
  588. scalarHex: "2784fbff1cad8d63b47359691caf8c7972219d7f9a64ee25fdbfe970981b2e87",
  589. valid: false,
  590. },
  591. {
  592. scalarHex: "596071a52ac2e1b55001170c7ae5ee8a66a52e4b14db270a66c4828eccfca8a5",
  593. valid: false,
  594. },
  595. {
  596. scalarHex: "afee887ccf82dd3406988f4afafd0d779e43d1f0f1b5107b1c3aed15d4ab57ed",
  597. valid: false,
  598. },
  599. {
  600. scalarHex: "fb38ec6e693ee2aed1364c29dc7a60a2a7cb10601582a0ca4f4a0ca2c0499e08",
  601. valid: true,
  602. },
  603. {
  604. scalarHex: "7f890e7539b8b3e6510a3f523a764f582f9e2c791400678eee85bd5842978c06",
  605. valid: true,
  606. },
  607. {
  608. scalarHex: "26efbf6e436e974860ee3b6c197afa55c29b115e68b488ba46c1e865fe37f894",
  609. valid: false,
  610. },
  611. {
  612. scalarHex: "6f6d9f15f262dde42c60af6880e8c6b6f07cab7cad785c19866f9a5c37419240",
  613. valid: false,
  614. },
  615. {
  616. scalarHex: "f90673b823b480de9e560948307e1ada8ff1f4380e74e89ee45aa7fecae1d308",
  617. valid: true,
  618. },
  619. {
  620. scalarHex: "269abc577fd32b1625895a1117dbc367822f9849441d4dbf7f56ca633fbf50b8",
  621. valid: false,
  622. },
  623. {
  624. scalarHex: "26fcbe1690ff0bc306a9ec3cef75bee1a5e39710d5c02d46334fb7d89e75dc0c",
  625. valid: true,
  626. },
  627. {
  628. scalarHex: "48c827ac48cda0f2ccd29a37884a14fa9cebe2ddf76bcc4fdf827245835d1daa",
  629. valid: false,
  630. },
  631. {
  632. scalarHex: "9c82c6403ec29e60ad812c1762610e00c05891c6eb0fbf2393b886f298397e1a",
  633. valid: false,
  634. },
  635. {
  636. scalarHex: "260fb700bf36504bfc5bea76c115929746f4aa709ba831fddb64b59af9bfd704",
  637. valid: true,
  638. },
  639. {
  640. scalarHex: "aaff292106a5dd831c507603f72fb7e0b9aa5ad990575a7a3dbe83744668c552",
  641. valid: false,
  642. },
  643. {
  644. scalarHex: "aca3f81877ac78519ce2944063fd7c50530d0ba7de2fa20ebdb1107872b6f302",
  645. valid: true,
  646. },
  647. {
  648. scalarHex: "1086efacf20320ba25eedd1cf8d3b28348b0bf3e2191b7585e16dc9e4f7f5803",
  649. valid: true,
  650. },
  651. {
  652. scalarHex: "66905a80d3d06c38faa5212c7455e5f48cdd5f15d816025b6466c085ef6f2d51",
  653. valid: false,
  654. },
  655. {
  656. scalarHex: "a9fb08088371cc78c2b514608cee6b43c534e657d4e1f7d0cfd9fd4173aca769",
  657. valid: false,
  658. },
  659. {
  660. scalarHex: "590e0a35ac44640ecf0f1f89eba200c6d98245b87360496ef408297af0011673",
  661. valid: false,
  662. },
  663. {
  664. scalarHex: "9a83a1ab418d8d9e92e0ecde0cb1246e4b25f407c5421a3997cda43ede83930b",
  665. valid: true,
  666. },
  667. {
  668. scalarHex: "bd3b91b68594291e859ace170fedcc64adfff013ed9f066bc625326e452ebc54",
  669. valid: false,
  670. },
  671. {
  672. scalarHex: "ef68e423644b94c8549a9a8ca49e396d642ef0fc28448b77b2bdee1487787a0f",
  673. valid: true,
  674. },
  675. {
  676. scalarHex: "6a6fe13345ffd78567560c8dfb511f20edfc15067212aaee69bddb77d5b4860e",
  677. valid: true,
  678. },
  679. {
  680. scalarHex: "a1fb1f4e3e88997e4e4017a8346d37671cad86cd5d795d2550b1b9c805dfdb0f",
  681. valid: true,
  682. },
  683. {
  684. scalarHex: "99e61e19a4c6c94354a5b7a6e206663f677223a6d3fc78659d9eaec21ef38402",
  685. valid: true,
  686. },
  687. {
  688. scalarHex: "d4bf37268f05041950d82420a78753d168b8b808628b48d6ce7b0ed330701d02",
  689. valid: true,
  690. },
  691. {
  692. scalarHex: "fee112a3e2de6313bc8809aba4466720c552d3615538b0523163fb01cbd1258a",
  693. valid: false,
  694. },
  695. {
  696. scalarHex: "b9692112ef467088d7f32a873719c7f2179be1445aef71eab73f218e6d6336b9",
  697. valid: false,
  698. },
  699. {
  700. scalarHex: "9aa00cad08702566bc88d11a2e8a99b188efd0d5fb164a1b4f3fc7378b962800",
  701. valid: true,
  702. },
  703. {
  704. scalarHex: "b4301f1630b288b9d6a8afed5c72c10c3c3ce8c935a7aed218e8ff3f70b4a539",
  705. valid: false,
  706. },
  707. {
  708. scalarHex: "f7f4d3bd2a84cf95d8793bd5e792510d5e95b8ce833775572e901795b5e1bd01",
  709. valid: true,
  710. },
  711. {
  712. scalarHex: "3b7d10a8b1a2695dc00c7f12fc12c0876b27509b1ffa452c8b80643f3cd26315",
  713. valid: false,
  714. },
  715. {
  716. scalarHex: "be2fa0a79bfa9fad3d7e9be1e5961c4849a38a1f4243a0c55d65d019a4fc5c0b",
  717. valid: true,
  718. },
  719. {
  720. scalarHex: "a03687639bb3d2e8506fcf8d062fbc342b499dfc26d36baea80edc87674d6b0f",
  721. valid: true,
  722. },
  723. {
  724. scalarHex: "c995ca23c04d581d52f7e550a4531b837f185ef58362b13f237964c0663f0139",
  725. valid: false,
  726. },
  727. {
  728. scalarHex: "32865bf3762338c5e13fba1ffcc08629498a31af695813f221ebfba72ff7714b",
  729. valid: false,
  730. },
  731. {
  732. scalarHex: "a8f37b565fe66aa2e851a74904e98c3059f92a037979da3bd4a52a10f719bf09",
  733. valid: true,
  734. },
  735. {
  736. scalarHex: "f7474c236309d9888f0d8a53ab5a22bb4d600f3687a4e1d2815b89f866523202",
  737. valid: true,
  738. },
  739. {
  740. scalarHex: "090d4f638d250e4588d1a25888c0b9ac6c207e4a98a9ef5a69ad0b6b1ed7ce1f",
  741. valid: false,
  742. },
  743. {
  744. scalarHex: "6b6daf404e2b6f4e2e0398baf8627fed108d0a0bc38a364e1b5d55bfd63f6d21",
  745. valid: false,
  746. },
  747. {
  748. scalarHex: "7e83a7bbf587be0694738f36bf52b24577a3489d72f7426ec0886a37ece4f10d",
  749. valid: true,
  750. },
  751. {
  752. scalarHex: "5f7abc23dcf726378db619bc2ce1e86ae209daa6d1909117ce7270829c4d3da3",
  753. valid: false,
  754. },
  755. {
  756. scalarHex: "f9ffc537ad782ce9f00f80be30e8b822c901bf62b2433c365a2f856e65f88706",
  757. valid: true,
  758. },
  759. {
  760. scalarHex: "9d3374f71e9ad3dbad360d8a80bc8b5c0d814eb09cade0c62bc094b858849004",
  761. valid: true,
  762. },
  763. {
  764. scalarHex: "f97097fe5d46b78e030a5207f1db92df9c8efcb0051b6e3b65cb1a58dfab660d",
  765. valid: true,
  766. },
  767. {
  768. scalarHex: "ead8314b9663a10344eaad550137ffb0906500057efd4a28b69def67bed8a10f",
  769. valid: true,
  770. },
  771. {
  772. scalarHex: "38ca4c5eefa2a159c05eac5e05466db588c8fbbac7df6717e1c2fc1cd15e0956",
  773. valid: false,
  774. },
  775. {
  776. scalarHex: "9b43159b9077fb2a049aa067e1d5c1a0d16da8515934b7588f4670483050ad0e",
  777. valid: true,
  778. },
  779. {
  780. scalarHex: "a43c8bb23b53fcd288d71d301e9cdd225bdf88e5d58ef3b485d8318c19fb9b9d",
  781. valid: false,
  782. },
  783. {
  784. scalarHex: "2278fffc9472031130714cd01599f4a476fe5b94cd092fdc5568917fb7a479f9",
  785. valid: false,
  786. },
  787. {
  788. scalarHex: "b78718c39d1c90448ef8787350c8baaec08de36ecde9ac234eb570397761a703",
  789. valid: true,
  790. },
  791. {
  792. scalarHex: "48a8506dd388eb99eab0d587bf4a7bd34e68f001eb88999a76f1878c32b8e478",
  793. valid: false,
  794. },
  795. {
  796. scalarHex: "659eb800501cccb504ae9bdcf5779ba8b2d24e4f63824c84124c453a34dd3540",
  797. valid: false,
  798. },
  799. {
  800. scalarHex: "1ce40f32aee47060a0dadf34ce04f81c48af3218051770fb86976785f981b05e",
  801. valid: false,
  802. },
  803. {
  804. scalarHex: "e7360d88d6dbbf3c352b80811110235a213aa5a3ea182d36c8c670ba9610a00f",
  805. valid: true,
  806. },
  807. {
  808. scalarHex: "82934fcaed4804020e1ce4ff798c30312aff862b1371f7f74d71b4316b413806",
  809. valid: true,
  810. },
  811. {
  812. scalarHex: "5bb1383ae3547b8caeba767eaa73a8fc08ac5972f982c736568424f8665770ac",
  813. valid: false,
  814. },
  815. {
  816. scalarHex: "533b7c9bde705efe0c08a8a0605ea2d4c3ec21919aeca99b40e10e29ca7dc255",
  817. valid: false,
  818. },
  819. {
  820. scalarHex: "93c1411f47251750b1b95c481d0ce55b401722273932914e2d1e78924e08fb06",
  821. valid: true,
  822. },
  823. {
  824. scalarHex: "5b90a4fd7d50881168802f7a8da19437305e38203b6bb6ac68b114b59dfbfa0e",
  825. valid: true,
  826. },
  827. {
  828. scalarHex: "e98125b5ad8262054c811f92d0596863ef876cb86c7f6b5783aee2e8cd6a5300",
  829. valid: true,
  830. },
  831. {
  832. scalarHex: "3b47eac89bc19bc46dde8fb091bb1128ddfb070cbac09b65d37416d62b1d9d3a",
  833. valid: false,
  834. },
  835. {
  836. scalarHex: "4710f6af3f144eaa2a8f1f2af329bebe752d3594c73008bad237e5e0be0cf07f",
  837. valid: false,
  838. },
  839. {
  840. scalarHex: "a6a654a6e2d2ecd7b1daea341897658b01ab34f7e84d9fc1b3ebf8214b39a840",
  841. valid: false,
  842. },
  843. {
  844. scalarHex: "006ba25fa6dc45938b6ab7bf6fe7096bb0eee2fc17688995a3a01567739503d2",
  845. valid: false,
  846. },
  847. {
  848. scalarHex: "ec2a2a700045b57c85c73770fbca5896aba8941ae39035a29641891ddb309a08",
  849. valid: true,
  850. },
  851. {
  852. scalarHex: "a6ea18e936f99d7f284553e83545cf324784e5a263f47cdcd78cfc4da10cf80b",
  853. valid: true,
  854. },
  855. {
  856. scalarHex: "86853a4044faaa87e2a949d9623d523eae1022467816a713488ef18de5db590a",
  857. valid: true,
  858. },
  859. {
  860. scalarHex: "0f79400a90af899e64dc6c718cb2df4f8426cc77e1745e64af2dfc4743f4ef08",
  861. valid: true,
  862. },
  863. {
  864. scalarHex: "4b9727146720b7b9fc2bb00b7b65b18909b53558fc5c4777e2efcb336ce9f103",
  865. valid: true,
  866. },
  867. {
  868. scalarHex: "4a71e9840fb19d79255f06456bceda85029950a9d7aebd80f19da16672ea2e4f",
  869. valid: false,
  870. },
  871. {
  872. scalarHex: "a76d81141e740c48642aeecb93f87edbe74c94d7795c35938979913f62355350",
  873. valid: false,
  874. },
  875. {
  876. scalarHex: "fe82ea864b773ba785ae30742142fc95a6311f1caeacba19ed019a11b3ddee06",
  877. valid: true,
  878. },
  879. {
  880. scalarHex: "c43a927dd10a6fc47bd3888aa9d9613ba258ad838832b923251a2863691c0600",
  881. valid: true,
  882. },
  883. {
  884. scalarHex: "55d66194e087988015066ddc0237d061163797305034f8b54524e935f832ed08",
  885. valid: true,
  886. },
  887. {
  888. scalarHex: "650c717392bdf31373dbeda48d99fd10b76080f0319b6039f48eedc8de8daa01",
  889. valid: true,
  890. },
  891. {
  892. scalarHex: "ef8a542e46802078598d8f41489c0d618cc19ac897719f3b298ea22cca35030c",
  893. valid: true,
  894. },
  895. {
  896. scalarHex: "6f8be2599f25b3645571a0d3edda8d354218f1bac4e22fed861fb472ff615a04",
  897. valid: true,
  898. },
  899. {
  900. scalarHex: "78b99806f01c239ea3e717e15a509ffc2f3c7481b5eceb365f7eb8e2ab13d907",
  901. valid: true,
  902. },
  903. {
  904. scalarHex: "2bae1ebc0fb83cade154f1daaed5d1f03581f350e733f2f0d56a73fa3c97cf2c",
  905. valid: false,
  906. },
  907. {
  908. scalarHex: "4c9f5a53e544ae46926b1504af11a7500f57487e62836c3f37b445c2b701dc0e",
  909. valid: true,
  910. },
  911. {
  912. scalarHex: "162003195972b318297a38632d9859bc86f1677154f94996970a320e0d23aa05",
  913. valid: true,
  914. },
  915. {
  916. scalarHex: "9563b33d7a9a751d3c8ae2b4536bc2ed7cf5231051191653d7c08d502357ed0b",
  917. valid: true,
  918. },
  919. {
  920. scalarHex: "2ffc2e41884b11129e1cc83aa95cd0b44dacb040a9ff1809a353597af8af0736",
  921. valid: false,
  922. },
  923. {
  924. scalarHex: "ebfb376fb3a20871f35a54ecc2bf0003a2f2d00838196f0860e229c1db21e90c",
  925. valid: true,
  926. },
  927. {
  928. scalarHex: "3da00eff81fd6771a23481fa8719fbe674c0dffa8db583e5fc0da7c9a0713006",
  929. valid: true,
  930. },
  931. {
  932. scalarHex: "2d492ad9915f6274a6b62cdc245204527a1216b4ef0e7e1e1d3aa6d81f0c3905",
  933. valid: true,
  934. },
  935. {
  936. scalarHex: "1a6d227bc48af4cff57ab11dc7ba3b7da21a9998b05dbeea4c05ca8bcffe2277",
  937. valid: false,
  938. },
  939. {
  940. scalarHex: "8db67435b9e243dfbb58f252061ca3a005d197b941fa1f9cbbd29fbeafd507d4",
  941. valid: false,
  942. },
  943. {
  944. scalarHex: "b2f744640c89049ebbbf94bd3013d3103ccf0e750a810543b39601116dc3300d",
  945. valid: true,
  946. },
  947. {
  948. scalarHex: "8177e87433900f41dbdc22db054c79995f6f610647bcee7527f51091f5198274",
  949. valid: false,
  950. },
  951. {
  952. scalarHex: "2c7cbaa6142473cecdb1c10bf9fc2430984a4b6cd34afc607668c6d88bf24f06",
  953. valid: true,
  954. },
  955. {
  956. scalarHex: "a0a2ccb60bcbd0eda5dd11540e3517462bd841d58d4aed185beb5cfbda9e5f34",
  957. valid: false,
  958. },
  959. {
  960. scalarHex: "767219f2581c07b1bbccd62fe4af10b4e202538fe918cedefbba3297bc89b604",
  961. valid: true,
  962. },
  963. {
  964. scalarHex: "ed8828a708c013d80fe558be718b1e738063c4eca7528c06067b73d9dd2adccc",
  965. valid: false,
  966. },
  967. {
  968. scalarHex: "4e81f8c4a0166a40db4063b31a5a4e511648b0f094d8930d956f74a7bec44f03",
  969. valid: true,
  970. },
  971. {
  972. scalarHex: "09d5a71ca33bbc186f06b5ece548f25b0d008ad71c04e55d3d4c5fe0ef960b19",
  973. valid: false,
  974. },
  975. {
  976. scalarHex: "51aa0d12359bc5819055618be5955824d81bd6e5ef52d51ee7e75aa9ca09edc4",
  977. valid: false,
  978. },
  979. {
  980. scalarHex: "94927b83b0f167631a5c8eae13a9290c027f795dbd0c3d0f2d1a270b65db05e4",
  981. valid: false,
  982. },
  983. {
  984. scalarHex: "e30c00666b11f332690267f3a2b8caa93a9a6e3961522a4ef886f3768f4c4166",
  985. valid: false,
  986. },
  987. {
  988. scalarHex: "6ec7e22c9921501879a85c89c2833e04526538c6cbdecd8a040fe6c57c881c06",
  989. valid: true,
  990. },
  991. {
  992. scalarHex: "54a4299c9d8572857247843d38842926fc88064905d8041974a1d9d407313a0f",
  993. valid: true,
  994. },
  995. {
  996. scalarHex: "d4604b16400e77f37e8f6f5cc4ced1ef0da8f2a832bf6a0f51321d221111ce83",
  997. valid: false,
  998. },
  999. {
  1000. scalarHex: "a545d4cb99de9fc8f976356996351009628be30201dd42a11f7b379a5099c40b",
  1001. valid: true,
  1002. },
  1003. {
  1004. scalarHex: "7db6f2c324cda1f3c9b39d659e5b5e39ad8e4b65e31e3afc10e91f890d6c0b9f",
  1005. valid: false,
  1006. },
  1007. {
  1008. scalarHex: "afee4fe9a50c0d0aba669ca7f866ac4eb16e83afd843f142caf1132b9c5bcd11",
  1009. valid: false,
  1010. },
  1011. {
  1012. scalarHex: "03cf1b6414acc2990bf4df95a9afa40aefcbc55946f8f40298cec7b45e942b09",
  1013. valid: true,
  1014. },
  1015. {
  1016. scalarHex: "82c67f0cc06d1f5d878e710dc3734dc9b698fbd43b9cfaa50bc0734240631eee",
  1017. valid: false,
  1018. },
  1019. {
  1020. scalarHex: "ef10fc4f79bdfade5af636fd41a7e5c48e966b5562693fd7a95568f52d472d06",
  1021. valid: true,
  1022. },
  1023. {
  1024. scalarHex: "0ce4ab8a2f342f7ff2fd10b1b734d5333c7f8240075b2ae8522313d192d8a01d",
  1025. valid: false,
  1026. },
  1027. {
  1028. scalarHex: "745a1228beb514bac4521c342b345f301fb28e7bfebb85d3c22497d4474fe904",
  1029. valid: true,
  1030. },
  1031. {
  1032. scalarHex: "684cfecbb321a4236354e94fd8bc74c22a28f1a3ee7e21193b0cf264204fce51",
  1033. valid: false,
  1034. },
  1035. {
  1036. scalarHex: "14a31b0cf4630e8e74730979d661c1902ab2f47823244ff7809be751b273b00c",
  1037. valid: true,
  1038. },
  1039. {
  1040. scalarHex: "6c0c31a9e40faf4ead079582dae043bee80f27fbb8b76ffa5c960083d578ac0f",
  1041. valid: true,
  1042. },
  1043. {
  1044. scalarHex: "ef49cd4030926ad3dbc08425fedfed7de48a1ca119259abec5600be5b60deb0f",
  1045. valid: true,
  1046. },
  1047. {
  1048. scalarHex: "b432db4174848e42b9a680c74d66e746a48cb397b4008815064178cf7acec91c",
  1049. valid: false,
  1050. },
  1051. {
  1052. scalarHex: "8c041643a91de5b9a652c3edb1b2512656daf33521197f7ab01056aa04d33708",
  1053. valid: true,
  1054. },
  1055. {
  1056. scalarHex: "d683e2784298e070cd686eddc848e1ce3205c42822650cf9bc2301fb9a330564",
  1057. valid: false,
  1058. },
  1059. {
  1060. scalarHex: "48ad5703dbf88a809d1bde1d295c4e51e3cf24215a3136c251c165505f80e84e",
  1061. valid: false,
  1062. },
  1063. {
  1064. scalarHex: "19d22f694db4b90b5500af61b7d6a26d5568b4a3048ddef5709698ed6df8820b",
  1065. valid: true,
  1066. },
  1067. {
  1068. scalarHex: "f8d5164c397f22c6b8cf3ae26ebfa4a9fe893afc2d7aec1f7c4f1e46c9eca306",
  1069. valid: true,
  1070. },
  1071. {
  1072. scalarHex: "64a5a328e130e416cf1b3fb3accd3bd032f66df404f5364e0ec9d18d652196c2",
  1073. valid: false,
  1074. },
  1075. {
  1076. scalarHex: "300931fb2c3670af36168883af39e10e1593945114e11c4eee9547d253f4f504",
  1077. valid: true,
  1078. },
  1079. {
  1080. scalarHex: "0bbe9316029ea6d59883574d39d1fcd3af3344d73033e2b615f0883361a11602",
  1081. valid: true,
  1082. },
  1083. {
  1084. scalarHex: "75609b2f7a8c04053ba7c1dbfc1b7c2a8f00720817d1abd2dc1db11645bbaaa1",
  1085. valid: false,
  1086. },
  1087. {
  1088. scalarHex: "fa98e50dd3e3fa8308ffe861194920ec6b4f431eb34c67d7332a92830a7cb20d",
  1089. valid: true,
  1090. },
  1091. {
  1092. scalarHex: "50b48576275008950b552a94e32d25c0835cb6dd44e146519848c9a7ee003707",
  1093. valid: true,
  1094. },
  1095. {
  1096. scalarHex: "032487e8b30ddec54b5cf90cbc38dde71104169e48228c2336916f1575c1c005",
  1097. valid: true,
  1098. },
  1099. {
  1100. scalarHex: "574fe8ee31b42bcb9224c34c34ddca2908db4b5f4f630ce76244d1257f81e504",
  1101. valid: true,
  1102. },
  1103. {
  1104. scalarHex: "a4bba7f4765850dd77a67e56cf89e3c8967ba8f3c72ba14c7ea014202f81780b",
  1105. valid: true,
  1106. },
  1107. {
  1108. scalarHex: "90eca818a69f6b8c52bddee273f37eaa96c58f2322fa5f09de36d606edc2ef04",
  1109. valid: true,
  1110. },
  1111. {
  1112. scalarHex: "ac689dc28cb94239b78e6dd66249feec0519686e0a3f974ef8d4760d320de842",
  1113. valid: false,
  1114. },
  1115. {
  1116. scalarHex: "a578412ffcd608f1fc4d77b954b5650d5016a24747e08664373a6c1c8d61c71a",
  1117. valid: false,
  1118. },
  1119. {
  1120. scalarHex: "d5b2f9a4b3ae8dcfc1a2ade16b320d7d00180ad72e9ba500cfeceb4e45335c00",
  1121. valid: true,
  1122. },
  1123. {
  1124. scalarHex: "ba26b0105b5d74df01e27ac128303cf4f139b2d164772ce56a31b5787b5d2207",
  1125. valid: true,
  1126. },
  1127. {
  1128. scalarHex: "fb9e9e404f5901ffc02ba848ed33c98a88365ff161b4d484f67f8d4d2bc9fe85",
  1129. valid: false,
  1130. },
  1131. {
  1132. scalarHex: "e326865f9ee2b68fdff8c36d39672f897669d9efb52bd4b4d037f4e219f72887",
  1133. valid: false,
  1134. },
  1135. {
  1136. scalarHex: "8d911a2a666472a69614bbdd887169936e4e4384992cffac6f5c8ad3f81da708",
  1137. valid: true,
  1138. },
  1139. {
  1140. scalarHex: "a9c04591640432f35dcdcdbe5027080c31613253f01a8e4fb1c2ed04f3e8c2a1",
  1141. valid: false,
  1142. },
  1143. {
  1144. scalarHex: "e5e18376596aa363f1de26fb318eadaee85792bb7e51af164ba80da6e358ac03",
  1145. valid: true,
  1146. },
  1147. {
  1148. scalarHex: "2632ef6ab45b46f2a48b5691c3e82e54e50ba74f23751aa602ec77a39596a10d",
  1149. valid: true,
  1150. },
  1151. {
  1152. scalarHex: "f110202b14458789eb17321f757032e3515012143e8dd156a401d0b48ebb6287",
  1153. valid: false,
  1154. },
  1155. {
  1156. scalarHex: "82d4274f7518f0cf92637657c69407a5fccb685ce9de8fa617a6f6f6b86c290d",
  1157. valid: true,
  1158. },
  1159. {
  1160. scalarHex: "e1d9512e60b4dab6b55f14f56c320ad8eda6b8e378c5f873ce5d89c622c76c0c",
  1161. valid: true,
  1162. },
  1163. {
  1164. scalarHex: "adf9a384148ff31f52f4e2365c5234b93edd574df1b5b664650859a764130f07",
  1165. valid: true,
  1166. },
  1167. {
  1168. scalarHex: "f5c8043c4b5a3a1ded6d02af7e048d298872e8fedbdfdb544b881215313956f9",
  1169. valid: false,
  1170. },
  1171. {
  1172. scalarHex: "cd7d1bd7c2bf26b7060d2407dbd88a5ba4add8044436bcbf6e00e690eae29699",
  1173. valid: false,
  1174. },
  1175. {
  1176. scalarHex: "af5b7ede9808e45e80f427d27e660443851ee2063d53c23dacb487b6b375807f",
  1177. valid: false,
  1178. },
  1179. {
  1180. scalarHex: "3a854a6125fbae08eeaf8f29177b83cec19f8f23f82e1c0213acfda03a19a057",
  1181. valid: false,
  1182. },
  1183. {
  1184. scalarHex: "307e8bc876b71a1ad7da7e3f8687d3173a6605184b912d80b34cec7abd09fd05",
  1185. valid: true,
  1186. },
  1187. {
  1188. scalarHex: "5936e762cfe201af05d2e7082a10e5f58cb71cee179406eb026b05437211f5a0",
  1189. valid: false,
  1190. },
  1191. {
  1192. scalarHex: "c02d9bb9b3ce61da67d7eb839ad6135b28485be17b6749a5d07a3a442e33890a",
  1193. valid: true,
  1194. },
  1195. {
  1196. scalarHex: "766459f999aa16992ec9639aed4e1ecdd7b78c6ab7cc63400f2f2dbad02796e7",
  1197. valid: false,
  1198. },
  1199. {
  1200. scalarHex: "39be058fddfed6dee0840cd03f7c407c3a30b0a0e87cc8ada9772b4150fd9a07",
  1201. valid: true,
  1202. },
  1203. {
  1204. scalarHex: "18c994dad23375e3860e21ce5d430ef2b876820bd0fe9e84a3b3a5ba45c790c5",
  1205. valid: false,
  1206. },
  1207. {
  1208. scalarHex: "0583e64db042f0e22e7abd759ef1b51ab5155314caf362de34781e8da9b4a20b",
  1209. valid: true,
  1210. },
  1211. {
  1212. scalarHex: "8d71c7122df856668387356a704a0bcd1865493b65ab254b24c9bd06c5414386",
  1213. valid: false,
  1214. },
  1215. {
  1216. scalarHex: "ca94f5f35fe069a057e9a9431e7ea3b99c7efd9700c0f838d3b99ab82648d343",
  1217. valid: false,
  1218. },
  1219. {
  1220. scalarHex: "850d3c5acb9103049e0ce06fcd64a543a38bf20fb31ce3a47e275d1e043c5506",
  1221. valid: true,
  1222. },
  1223. {
  1224. scalarHex: "06580accc5c48aa72ce261547614b8629c10e2ee8d62971f8453b2007f91a60f",
  1225. valid: true,
  1226. },
  1227. {
  1228. scalarHex: "bef7fb38fcb2d6a5c22f1db03c4c26a0f61eaaa1e7f846b2bb46ff06aa9ca407",
  1229. valid: true,
  1230. },
  1231. {
  1232. scalarHex: "fc7956e14919bb2f531c6cba13e0bf3568db3927b24a2f9131e0c42aac0cbbb1",
  1233. valid: false,
  1234. },
  1235. {
  1236. scalarHex: "bf2ed7b0fdd8cc1222db5ae9e699de5d54abee91a3f8bd988d248ab041738aa3",
  1237. valid: false,
  1238. },
  1239. {
  1240. scalarHex: "126213a8e3de2ab1fc862ad8bb27d3b13de5ba55657bf6e04efcf4015dd70895",
  1241. valid: false,
  1242. },
  1243. {
  1244. scalarHex: "d1729b969a9395788931713933c587ef3748c96976a488f6a1e2f1e1ed6973d0",
  1245. valid: false,
  1246. },
  1247. {
  1248. scalarHex: "2448345de229bb4c2695f9653653301c4562ff4a60c568a3f483474b6800875c",
  1249. valid: false,
  1250. },
  1251. {
  1252. scalarHex: "e72284802f2737c293838a6357251398101ec60ba6e8458304bbd25de570010b",
  1253. valid: true,
  1254. },
  1255. {
  1256. scalarHex: "87c0898c4c283f24b7164fa8aaab9fc3b06ad5237b389d9735d58c54dd989186",
  1257. valid: false,
  1258. },
  1259. {
  1260. scalarHex: "4cceb19c61263feaffeedc984280a6f5ecc1eeebeed05a407359661d61bdf8a6",
  1261. valid: false,
  1262. },
  1263. {
  1264. scalarHex: "2e286296d5300eb4ae7200036acbd47a319d3f9a8eb66a986a36683b85b26002",
  1265. valid: true,
  1266. },
  1267. {
  1268. scalarHex: "1b7140ff3a09a82554d4219425c2213abd16d9f342e30e2f7c05f2a5188432a4",
  1269. valid: false,
  1270. },
  1271. {
  1272. scalarHex: "c0cdfe0ac8dd014bc1fb4c5d3f22d74f30623054f3008c0d1e34af4f2eafdec4",
  1273. valid: false,
  1274. },
  1275. {
  1276. scalarHex: "0000000000000000000000000000000000000000000000000000000000000000",
  1277. valid: true,
  1278. },
  1279. {
  1280. scalarHex: "0100000000000000000000000000000000000000000000000000000000000000",
  1281. valid: true,
  1282. },
  1283. {
  1284. scalarHex: "0200000000000000000000000000000000000000000000000000000000000000",
  1285. valid: true,
  1286. },
  1287. {
  1288. scalarHex: "0300000000000000000000000000000000000000000000000000000000000000",
  1289. valid: true,
  1290. },
  1291. {
  1292. scalarHex: "0400000000000000000000000000000000000000000000000000000000000000",
  1293. valid: true,
  1294. },
  1295. {
  1296. scalarHex: "0500000000000000000000000000000000000000000000000000000000000000",
  1297. valid: true,
  1298. },
  1299. {
  1300. scalarHex: "0600000000000000000000000000000000000000000000000000000000000000",
  1301. valid: true,
  1302. },
  1303. {
  1304. scalarHex: "0700000000000000000000000000000000000000000000000000000000000000",
  1305. valid: true,
  1306. },
  1307. {
  1308. scalarHex: "0800000000000000000000000000000000000000000000000000000000000000",
  1309. valid: true,
  1310. },
  1311. {
  1312. scalarHex: "0900000000000000000000000000000000000000000000000000000000000000",
  1313. valid: true,
  1314. },
  1315. {
  1316. scalarHex: "0a00000000000000000000000000000000000000000000000000000000000000",
  1317. valid: true,
  1318. },
  1319. {
  1320. scalarHex: "0b00000000000000000000000000000000000000000000000000000000000000",
  1321. valid: true,
  1322. },
  1323. {
  1324. scalarHex: "0c00000000000000000000000000000000000000000000000000000000000000",
  1325. valid: true,
  1326. },
  1327. {
  1328. scalarHex: "0d00000000000000000000000000000000000000000000000000000000000000",
  1329. valid: true,
  1330. },
  1331. {
  1332. scalarHex: "0e00000000000000000000000000000000000000000000000000000000000000",
  1333. valid: true,
  1334. },
  1335. {
  1336. scalarHex: "0f00000000000000000000000000000000000000000000000000000000000000",
  1337. valid: true,
  1338. },
  1339. {
  1340. scalarHex: "1000000000000000000000000000000000000000000000000000000000000000",
  1341. valid: true,
  1342. },
  1343. {
  1344. scalarHex: "1100000000000000000000000000000000000000000000000000000000000000",
  1345. valid: true,
  1346. },
  1347. {
  1348. scalarHex: "1200000000000000000000000000000000000000000000000000000000000000",
  1349. valid: true,
  1350. },
  1351. {
  1352. scalarHex: "1300000000000000000000000000000000000000000000000000000000000000",
  1353. valid: true,
  1354. },
  1355. {
  1356. scalarHex: "d9d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1357. valid: true,
  1358. },
  1359. {
  1360. scalarHex: "dad3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1361. valid: true,
  1362. },
  1363. {
  1364. scalarHex: "dbd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1365. valid: true,
  1366. },
  1367. {
  1368. scalarHex: "dcd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1369. valid: true,
  1370. },
  1371. {
  1372. scalarHex: "ddd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1373. valid: true,
  1374. },
  1375. {
  1376. scalarHex: "ded3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1377. valid: true,
  1378. },
  1379. {
  1380. scalarHex: "dfd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1381. valid: true,
  1382. },
  1383. {
  1384. scalarHex: "e0d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1385. valid: true,
  1386. },
  1387. {
  1388. scalarHex: "e1d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1389. valid: true,
  1390. },
  1391. {
  1392. scalarHex: "e2d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1393. valid: true,
  1394. },
  1395. {
  1396. scalarHex: "e3d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1397. valid: true,
  1398. },
  1399. {
  1400. scalarHex: "e4d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1401. valid: true,
  1402. },
  1403. {
  1404. scalarHex: "e5d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1405. valid: true,
  1406. },
  1407. {
  1408. scalarHex: "e6d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1409. valid: true,
  1410. },
  1411. {
  1412. scalarHex: "e7d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1413. valid: true,
  1414. },
  1415. {
  1416. scalarHex: "e8d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1417. valid: true,
  1418. },
  1419. {
  1420. scalarHex: "e9d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1421. valid: true,
  1422. },
  1423. {
  1424. scalarHex: "ead3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1425. valid: true,
  1426. },
  1427. {
  1428. scalarHex: "ebd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1429. valid: true,
  1430. },
  1431. {
  1432. scalarHex: "ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1433. valid: true,
  1434. },
  1435. {
  1436. scalarHex: "edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1437. valid: false,
  1438. },
  1439. {
  1440. scalarHex: "eed3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1441. valid: false,
  1442. },
  1443. {
  1444. scalarHex: "efd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1445. valid: false,
  1446. },
  1447. {
  1448. scalarHex: "f0d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1449. valid: false,
  1450. },
  1451. {
  1452. scalarHex: "f1d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1453. valid: false,
  1454. },
  1455. {
  1456. scalarHex: "f2d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1457. valid: false,
  1458. },
  1459. {
  1460. scalarHex: "f3d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1461. valid: false,
  1462. },
  1463. {
  1464. scalarHex: "f4d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1465. valid: false,
  1466. },
  1467. {
  1468. scalarHex: "f5d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1469. valid: false,
  1470. },
  1471. {
  1472. scalarHex: "f6d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1473. valid: false,
  1474. },
  1475. {
  1476. scalarHex: "f7d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1477. valid: false,
  1478. },
  1479. {
  1480. scalarHex: "f8d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1481. valid: false,
  1482. },
  1483. {
  1484. scalarHex: "f9d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1485. valid: false,
  1486. },
  1487. {
  1488. scalarHex: "fad3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1489. valid: false,
  1490. },
  1491. {
  1492. scalarHex: "fbd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1493. valid: false,
  1494. },
  1495. {
  1496. scalarHex: "fcd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1497. valid: false,
  1498. },
  1499. {
  1500. scalarHex: "fdd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1501. valid: false,
  1502. },
  1503. {
  1504. scalarHex: "fed3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1505. valid: false,
  1506. },
  1507. {
  1508. scalarHex: "ffd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1509. valid: false,
  1510. },
  1511. {
  1512. scalarHex: "00d4f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1513. valid: false,
  1514. },
  1515. {
  1516. scalarHex: "01d4f55c1a631258d69cf7a2def9de1400000000000000000000000000000010",
  1517. valid: false,
  1518. },
  1519. {
  1520. scalarHex: "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1521. valid: false,
  1522. },
  1523. {
  1524. scalarHex: "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1525. valid: false,
  1526. },
  1527. {
  1528. scalarHex: "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1529. valid: false,
  1530. },
  1531. {
  1532. scalarHex: "efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1533. valid: false,
  1534. },
  1535. {
  1536. scalarHex: "f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1537. valid: false,
  1538. },
  1539. {
  1540. scalarHex: "f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1541. valid: false,
  1542. },
  1543. {
  1544. scalarHex: "f2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1545. valid: false,
  1546. },
  1547. {
  1548. scalarHex: "f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1549. valid: false,
  1550. },
  1551. {
  1552. scalarHex: "f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1553. valid: false,
  1554. },
  1555. {
  1556. scalarHex: "f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1557. valid: false,
  1558. },
  1559. {
  1560. scalarHex: "f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1561. valid: false,
  1562. },
  1563. {
  1564. scalarHex: "f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1565. valid: false,
  1566. },
  1567. {
  1568. scalarHex: "f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1569. valid: false,
  1570. },
  1571. {
  1572. scalarHex: "f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1573. valid: false,
  1574. },
  1575. {
  1576. scalarHex: "faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1577. valid: false,
  1578. },
  1579. {
  1580. scalarHex: "fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1581. valid: false,
  1582. },
  1583. {
  1584. scalarHex: "fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1585. valid: false,
  1586. },
  1587. {
  1588. scalarHex: "fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1589. valid: false,
  1590. },
  1591. {
  1592. scalarHex: "feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1593. valid: false,
  1594. },
  1595. {
  1596. scalarHex: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  1597. valid: false,
  1598. },
  1599. }
  1600. for _, test := range tests {
  1601. scalar := HexToKey(test.scalarHex)
  1602. got := ScValid(&scalar)
  1603. if test.valid != got {
  1604. t.Errorf("%x: want %t, got %t", scalar, test.valid, got)
  1605. }
  1606. }
  1607. }