-
Notifications
You must be signed in to change notification settings - Fork 7
/
wnafs_multiplication_test.go
1246 lines (1131 loc) · 86.1 KB
/
wnafs_multiplication_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
package ed448
import (
"encoding/hex"
. "gopkg.in/check.v1"
)
func (s *Ed448Suite) Test_RecodeWNAFCompareFull(c *C) {
scalar := &scalar{
0x120854c7, 0x6a241ba0, 0x41468997, 0x11e8f8aa,
0x1c0815bf, 0xea9551e7, 0x71cfde7f, 0x462af8b2,
0x7a3ac97f, 0x6ae5489c, 0x7adb6891, 0x0797f552,
0x738313e3, 0x12a2866a,
}
controlVar := make([]smvtControl, 92)
pos := recodeWNAF(controlVar, scalar, scalarBits, 4)
c.Assert(controlVar[:pos], DeepEquals, []smvtControl{
smvtControl{440, 19},
smvtControl{434, -23},
smvtControl{431, -3},
smvtControl{423, 13},
smvtControl{417, -11},
smvtControl{410, 29},
smvtControl{402, -31},
smvtControl{396, -15},
smvtControl{389, 31},
smvtControl{384, 3},
smvtControl{375, 15},
smvtControl{371, 3},
smvtControl{359, -21},
smvtControl{353, -23},
smvtControl{346, 31},
smvtControl{341, -9},
smvtControl{335, -9},
smvtControl{328, -23},
smvtControl{324, -7},
smvtControl{316, 23},
smvtControl{312, -5},
smvtControl{304, -27},
smvtControl{299, 9},
smvtControl{293, 5},
smvtControl{287, -7},
smvtControl{278, -23},
smvtControl{270, -21},
smvtControl{263, 19},
smvtControl{251, -23},
smvtControl{244, -29},
smvtControl{240, -5},
smvtControl{230, -29},
smvtControl{223, -27},
smvtControl{217, -7},
smvtControl{212, -3},
smvtControl{201, -17},
smvtControl{199, 1},
smvtControl{184, -21},
smvtControl{178, -27},
smvtControl{172, 21},
smvtControl{165, 15},
smvtControl{160, 7},
smvtControl{154, 7},
smvtControl{147, 1},
smvtControl{137, 11},
smvtControl{134, -1},
smvtControl{124, -15},
smvtControl{116, 31},
smvtControl{112, -7},
smvtControl{102, -29},
smvtControl{97, -11},
smvtControl{94, 1},
smvtControl{86, 5},
smvtControl{79, 13},
smvtControl{71, 19},
smvtControl{64, 23},
smvtControl{58, 27},
smvtControl{53, -15},
smvtControl{50, 1},
smvtControl{42, 7},
smvtControl{37, -3},
smvtControl{25, 9},
smvtControl{15, 17},
smvtControl{10, -11},
smvtControl{3, 25},
smvtControl{0, -1},
})
}
func (s *Ed448Suite) Test_RecodeWNAFForScalarZero(c *C) {
nbitsPre := uint(446)
tableBitsPre := uint(5)
controlLen := nbitsPre/(tableBitsPre+1) + 3
controlPre := make([]smvtControl, controlLen)
sig := &scalar{}
pos := recodeWNAF(controlPre[:], sig, nbitsPre, tableBitsPre)
c.Assert(pos, Equals, word(0x00))
c.Assert(controlPre[pos].power, Equals, -1)
c.Assert(controlPre[pos].addend, Equals, 0)
}
func (s *Ed448Suite) Test_RecodeWNAFForChallenge(c *C) {
nbits := uint(446)
tableBits := uint(4)
controlLen := nbits/(tableBits+1) + 3
control := make([]smvtControl, controlLen)
challenge := &scalar{
0xfd27ffdd, 0xa4a42c92, 0xd9464f36, 0xac8078dd,
0x91e922f8, 0x76ebe5e8, 0x4f1d8f84, 0x968d2c41,
0x857c5a17, 0x9f74691c, 0x3595bd83, 0x5b966fb6,
0xb1428aca, 0x31b43b4d,
}
pos := recodeWNAF(control[:], challenge, nbits, tableBits)
c.Assert(pos, Equals, word(0x43))
c.Assert(control[pos].power, Equals, -1)
c.Assert(control[pos].addend, Equals, 0)
}
func (s *Ed448Suite) Test_DecafRecodeWNAFFull(c *C) {
scalar := &scalar{
0x120854c7, 0x6a241ba0, 0x41468997, 0x11e8f8aa,
0x1c0815bf, 0xea9551e7, 0x71cfde7f, 0x462af8b2,
0x7a3ac97f, 0x6ae5489c, 0x7adb6891, 0x0797f552,
0x738313e3, 0x12a2866a,
}
controlVar := make([]smvtControl, 115)
pos := recodeWNAF(controlVar, scalar, scalarBits, 3)
c.Assert(controlVar[:pos], DeepEquals, []smvtControl{
smvtControl{441, 9},
smvtControl{437, 5},
smvtControl{431, 5},
smvtControl{423, 13},
smvtControl{417, -11},
smvtControl{412, 7},
smvtControl{407, 7},
smvtControl{400, 3},
smvtControl{394, 5},
smvtControl{386, -7},
smvtControl{384, -1},
smvtControl{375, 15},
smvtControl{371, 3},
smvtControl{360, -11},
smvtControl{356, 5},
smvtControl{351, 5},
smvtControl{344, -5},
smvtControl{338, -9},
smvtControl{332, -9},
smvtControl{327, -15},
smvtControl{321, 9},
smvtControl{316, -9},
smvtControl{312, -5},
smvtControl{305, -13},
smvtControl{300, -11},
smvtControl{295, -15},
smvtControl{290, 7},
smvtControl{283, 15},
smvtControl{278, 9},
smvtControl{272, -5},
smvtControl{267, -7},
smvtControl{263, 3},
smvtControl{254, -3},
smvtControl{249, 3},
smvtControl{242, 11},
smvtControl{240, -1},
smvtControl{231, -15},
smvtControl{226, 13},
smvtControl{223, -3},
smvtControl{217, -7},
smvtControl{212, -3},
smvtControl{205, -1},
smvtControl{199, -3},
smvtControl{185, -11},
smvtControl{180, 9},
smvtControl{175, 11},
smvtControl{172, -3},
smvtControl{165, 15},
smvtControl{160, 7},
smvtControl{154, 7},
smvtControl{147, 1},
smvtControl{137, 11},
smvtControl{134, -1},
smvtControl{124, -15},
smvtControl{117, 15},
smvtControl{112, 9},
smvtControl{103, -15},
smvtControl{98, 11},
smvtControl{94, -7},
smvtControl{86, 5},
smvtControl{79, 13},
smvtControl{73, 5},
smvtControl{67, -13},
smvtControl{60, -9},
smvtControl{57, -3},
smvtControl{50, 9},
smvtControl{42, 7},
smvtControl{37, -3},
smvtControl{25, 9},
smvtControl{19, 1},
smvtControl{11, 11},
smvtControl{6, -13},
smvtControl{0, 7},
})
}
func (s *Ed448Suite) Test_DecafRecodeWNAFForScalarZero(c *C) {
tableBitsPre := uint(5)
controlLen := scalarBits/(tableBitsPre+1) + 3
controlPre := make([]smvtControl, controlLen)
sig := &scalar{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
}
pos := recodeWNAF(controlPre[:], sig, scalarBits, tableBitsPre)
c.Assert(pos, Equals, word(0))
c.Assert(controlPre[pos].power, Equals, -1)
c.Assert(controlPre[pos].addend, Equals, 0)
}
func (s *Ed448Suite) Test_PrepareFixedWindow(c *C) {
p := &twExtendedPoint{
&bigNumber{
0x0e0fbf9e, 0x0ba1bcd7, 0x01cc6d39, 0x053b56e8,
0x0635d142, 0x0383307a, 0x0f8a159b, 0x097fd2cf,
0x0fa310f6, 0x05522bde, 0x0b981703, 0x0b095b1e,
0x042d4780, 0x05ae11df, 0x0934fe80, 0x0dc6474d,
},
&bigNumber{
0x02c1149c, 0x0e72febf, 0x05259893, 0x0723e184,
0x0f7232ff, 0x019a5600, 0x05581d2c, 0x07331444,
0x04e0124a, 0x09c3c5e5, 0x0945536e, 0x0b786a20,
0x0f75623f, 0x00ba30e8, 0x0cc589a3, 0x04a2eea8,
},
&bigNumber{
0x02406c71, 0x0b2fdb67, 0x02591aa2, 0x085fc24e,
0x0dc50d09, 0x08692c5b, 0x0ba917d7, 0x0aefea74,
0x037d0084, 0x04d5defa, 0x08bbe7ad, 0x050da977,
0x08adf827, 0x05425cdd, 0x037d816d, 0x0d59cd0a,
},
&bigNumber{
0x0baf8c30, 0x06686ad3, 0x0c149bac, 0x0f57f68d,
0x05cd321a, 0x02ff8d60, 0x09dcc4bd, 0x0f731ec2,
0x0cd7ea75, 0x0be970e4, 0x043d30e0, 0x0dd64b9b,
0x04f78bf1, 0x0d1fde20, 0x05c88e97, 0x026ce314,
},
}
ntable := 16
w := p.prepareFixedWindow(ntable)
c.Assert(len(w), Equals, ntable)
exp := []*twPNiels{
// 0
&twPNiels{
&twNiels{
&bigNumber{0x04b154fd, 0x02d141e7, 0x03592b5a, 0x01e88a9c, 0x093c61bd, 0x0e172586, 0x05ce0790, 0x0db34174, 0x053d0152, 0x04719a06, 0x0dad3c6b, 0x006f0f01, 0x0b481abf, 0x0b0c1f09, 0x03908b22, 0x06dca75b},
&bigNumber{0x00d0d43b, 0x0a14bb97, 0x06f205cd, 0x0c5f386c, 0x05a80441, 0x051d867b, 0x04e232c7, 0x00b2e714, 0x04832342, 0x0f15f1c4, 0x04dd6a71, 0x0681c53f, 0x03a2a9c0, 0x066842c8, 0x05fa8823, 0x026935f6},
&bigNumber{0x0460a1f7, 0x0e76b0c4, 0x0bc48547, 0x0a643633, 0x0ff970aa, 0x0cb5cdc9, 0x0d2a0bc4, 0x06940a23, 0x0ad0577f, 0x07e65c18, 0x04b0332f, 0x059b353f, 0x010aebde, 0x09e69eb7, 0x084e54ff, 0x09ba3b12},
},
&bigNumber{0x0480d8e3, 0x065fb6ce, 0x04b23545, 0x00bf849c, 0x0b8a1a13, 0x00d258b7, 0x07522faf, 0x05dfd4e9, 0x06fa010a, 0x09abbdf4, 0x0177cf5a, 0x0a1b52ef, 0x015bf04e, 0x0a84b9bb, 0x06fb02da, 0x0ab39a14},
},
// 1
&twPNiels{
&twNiels{
&bigNumber{0x00a553ee, 0x00234003, 0x055c092c, 0x057bcbdd, 0x0e495a8c, 0x09c8b997, 0x0c143649, 0x0399ba66, 0x0df0f55f, 0x0c004b24, 0x0a7c0ab5, 0x0a95f91a, 0x005ee2fc, 0x011bb28d, 0x08ca5e5a, 0x0192776c},
&bigNumber{0x0a2f247e, 0x02e7847f, 0x0a1e65d9, 0x0571128d, 0x0c710f20, 0x0d2d073c, 0x02f89f06, 0x01a67d7c, 0x0f1e3c52, 0x0e90f285, 0x0a97b2e7, 0x00f68012, 0x005f2af2, 0x0ddcb5d2, 0x0bd8a372, 0x0c15a881},
&bigNumber{0x0c7957ba, 0x02b7715c, 0x0951bac2, 0x08ceafd5, 0x0de55a10, 0x01edb51f, 0x019e372a, 0x0ef9da41, 0x00e4539d, 0x08f12616, 0x072899db, 0x04eabccc, 0x01c30552, 0x03c77348, 0x02e95364, 0x0d406ee6},
},
&bigNumber{0x0f2830d8, 0x0056a35b, 0x08ce98ce, 0x0523ef98, 0x0922d7c0, 0x0dea9b3d, 0x04016a54, 0x0f7d6e3f, 0x0596053c, 0x0f26db88, 0x0e066eea, 0x0866a255, 0x0e8a62a7, 0x0dffb915, 0x084fa2b2, 0x04b35e84},
},
// 2
&twPNiels{
&twNiels{
&bigNumber{0x0bdc0118, 0x02f3217f, 0x09ebc3b3, 0x07617f27, 0x0434daf9, 0x05c63130, 0x079ffbba, 0x0ed66a9f, 0x0ac6adc7, 0x0cea22df, 0x0ead4d20, 0x04d91dbe, 0x08aea04f, 0x0eff9bba, 0x08c6636d, 0x08fbf2fe},
&bigNumber{0x0d6dae4e, 0x042ef7e0, 0x0e1974ba, 0x04c7f440, 0x0cc3f843, 0x00083ff4, 0x0490f26f, 0x0e95b6b5, 0x04b546d1, 0x059c8373, 0x03c0f841, 0x02ff119c, 0x087b2772, 0x0fc993a1, 0x02ddd9b6, 0x04a9c14d},
&bigNumber{0x0b9dbcd2, 0x0156cdf2, 0x02889448, 0x067306ba, 0x0bb5be76, 0x090eb070, 0x0a50ce79, 0x09b43e73, 0x080845ed, 0x09a2ecf7, 0x018e594a, 0x0b241a06, 0x051f02da, 0x031bbca7, 0x09b2848e, 0x0bbb2ec8},
},
&bigNumber{0x08078601, 0x088d1850, 0x00e0769d, 0x08eb236c, 0x0130e14f, 0x09e4586f, 0x0911c3b0, 0x0ce7530f, 0x0c10cc39, 0x0da28bc9, 0x05845355, 0x0003ec5a, 0x07b7bf88, 0x0300bf50, 0x0653991f, 0x049db070},
},
// 3
&twPNiels{
&twNiels{
&bigNumber{0x00496408, 0x0b651531, 0x067fd460, 0x085a3886, 0x04d21048, 0x0d621139, 0x071d8a8d, 0x03199572, 0x0e03e14c, 0x0d05c021, 0x0833d2b3, 0x0ef5a2c1, 0x0e1d24c6, 0x0027b3ae, 0x02ce6c8e, 0x08402aa3},
&bigNumber{0x05ad9af1, 0x0a0c1d97, 0x0b2d81fb, 0x01ea8e2d, 0x0a22652b, 0x0efd1612, 0x082ba3ab, 0x0afad623, 0x0c37c3dc, 0x094a087f, 0x09442f18, 0x0813269f, 0x0a734c8d, 0x063a6cb0, 0x0010d46a, 0x06638790},
&bigNumber{0x0689ba7e, 0x081e4dc6, 0x0c1ef0d4, 0x068f65c6, 0x03cb2bd2, 0x09c5100c, 0x011feeda, 0x0f3d4306, 0x00af4e32, 0x0358eba7, 0x07994455, 0x03534ba3, 0x0ffa2ea6, 0x0621d409, 0x0b854ef5, 0x06997a18},
},
&bigNumber{0x0a3dc259, 0x04b1a065, 0x03a2fa7c, 0x0099ce98, 0x0434976c, 0x04a0786d, 0x0e76a8b9, 0x0d291d23, 0x01dc0175, 0x05d1717b, 0x0c1d478a, 0x04ba7edf, 0x0b4b4324, 0x0c5f36a8, 0x0ed933aa, 0x0ac6d3f9},
},
// 4
&twPNiels{
&twNiels{
&bigNumber{0x02df046b, 0x057e1a14, 0x0005dcd2, 0x035667ff, 0x0f83f892, 0x0d6b9dca, 0x0f8fb738, 0x025946da, 0x08263015, 0x01e7865e, 0x0c2cba18, 0x0e10546f, 0x0f091335, 0x0df8e689, 0x010a9906, 0x0830b70c},
&bigNumber{0x0115bbe7, 0x0867aaae, 0x0ca910ef, 0x0c0ae406, 0x0a5a57ce, 0x03c2d826, 0x0457e63e, 0x0f34b795, 0x048c73f6, 0x0eb2313e, 0x0678f5b1, 0x05a6dbef, 0x0c78ba56, 0x094e3e5c, 0x0da22f13, 0x0678ecb3},
&bigNumber{0x0797d90b, 0x023eeee5, 0x06091221, 0x0ececc3a, 0x0ec1cca5, 0x041b1079, 0x0b4f4a87, 0x0a84bb5c, 0x0976bd53, 0x074c939e, 0x0b95416c, 0x05ea1867, 0x08ebff05, 0x0bc870f1, 0x0b309de3, 0x0010c34e},
},
&bigNumber{0x0b38f0f1, 0x03bc6913, 0x061ba597, 0x0cf921ec, 0x0bd4a2a5, 0x02fac843, 0x083f5c15, 0x07d7877a, 0x09dfebf5, 0x015ee5a1, 0x09beba6e, 0x0a89a826, 0x08e66f3a, 0x063d031e, 0x09d450f7, 0x0a90a158},
},
// 5
&twPNiels{
&twNiels{
&bigNumber{0x00235a46, 0x04d74adc, 0x0ddadd18, 0x061afbc5, 0x00b8d5e3, 0x04ad265e, 0x0b9914b0, 0x0e78fbb0, 0x09908a36, 0x0a2dde9e, 0x07ac5396, 0x0af6ff6a, 0x068ed7eb, 0x0dc11e8b, 0x02fec204, 0x0d5389db},
&bigNumber{0x08ae1125, 0x0555a7b2, 0x0b489173, 0x07472588, 0x0a70d04c, 0x028ff109, 0x058ef8ab, 0x065f78fa, 0x0c88caf4, 0x026957ca, 0x02165c81, 0x05288d3d, 0x05ae2148, 0x0108fdde, 0x0d31cc57, 0x048b9c53},
&bigNumber{0x0be9e6a9, 0x0617ae56, 0x0759b26d, 0x0c3c93e8, 0x0779d05d, 0x0789edb3, 0x081cf9dd, 0x09aa41bb, 0x07e8f870, 0x054a61b5, 0x088f337d, 0x0bb738c2, 0x06bdc816, 0x0070143c, 0x0114a075, 0x08f49ba9},
},
&bigNumber{0x048118f9, 0x0ec006fe, 0x05980ad8, 0x0e39107c, 0x0733036a, 0x0f5fc159, 0x07af1bad, 0x0e465b51, 0x0750076c, 0x0dd11964, 0x0b35aa73, 0x0a1fe8ae, 0x0294748c, 0x0f5150d7, 0x06ade020, 0x0659ffca},
},
// 6
&twPNiels{
&twNiels{
&bigNumber{0x04e37267, 0x0df7e646, 0x002c1f13, 0x07145a47, 0x07f9da71, 0x0ef38604, 0x03b74cf6, 0x04f98272, 0x0b1e5de6, 0x0961e851, 0x066a9c11, 0x0637cd49, 0x0c40ca9e, 0x0ad4f30c, 0x0eddbe48, 0x0235fe80},
&bigNumber{0x095ecd88, 0x007afcf3, 0x04645e96, 0x0929d281, 0x0c236979, 0x01487c7b, 0x01c93417, 0x0070157a, 0x000f5888, 0x0cd5c842, 0x09578536, 0x06bd9438, 0x0dde9e3f, 0x09d37fdc, 0x0c425dac, 0x081a7c61},
&bigNumber{0x0a01e5ed, 0x04ac3269, 0x0246ed1d, 0x01184f59, 0x086c9b60, 0x0b696eae, 0x0e544d50, 0x056e5ef4, 0x0e69db47, 0x0df87f7d, 0x08e76db7, 0x0f048dd2, 0x041b6fe1, 0x0d26dde7, 0x09177799, 0x0e5ebd77},
},
&bigNumber{0x0f762e2c, 0x0e3d5341, 0x05ab9ead, 0x081acf6b, 0x068db9ea, 0x08cde1f2, 0x08cfc97f, 0x0df58221, 0x035f081e, 0x08b0a279, 0x0ee831ac, 0x0c40fd59, 0x07ae3f18, 0x086b3bed, 0x0ffcb0f3, 0x08492cfb},
},
// 7
&twPNiels{
&twNiels{
&bigNumber{0x06baca70, 0x098c76c4, 0x06d43244, 0x063a0112, 0x0c712d42, 0x0c44c636, 0x0f7f2230, 0x040175a2, 0x05202d65, 0x08d900d7, 0x01da615d, 0x0894103b, 0x02fc86c6, 0x0b908128, 0x0ad5f030, 0x0a5d8188},
&bigNumber{0x09c62e7a, 0x0194b55b, 0x00924732, 0x00baca1e, 0x0faab36a, 0x07815f7e, 0x0a75c250, 0x0e63bfa9, 0x03260e43, 0x0d0e684c, 0x06f30b44, 0x01e5fb64, 0x0de6297f, 0x03e7ae5a, 0x0fd9af92, 0x01d12c86},
&bigNumber{0x0076d1d3, 0x0e083ce0, 0x0140855d, 0x0efb8ca5, 0x0cff83d8, 0x0f899ccb, 0x0c461c57, 0x02bc586b, 0x0eb8ebf5, 0x03f8256a, 0x071b8d04, 0x0e48f5cb, 0x08a14607, 0x03882433, 0x0c2a92b6, 0x0562a977},
},
&bigNumber{0x0028918f, 0x0f0c29c3, 0x0e1376f6, 0x09384b43, 0x0e8fc757, 0x00e5805c, 0x0455c0de, 0x055a162e, 0x0c4fd69a, 0x02330659, 0x061e4124, 0x094618ab, 0x040ef9be, 0x0a8f1974, 0x0b099f5c, 0x045c4715},
},
// 8
&twPNiels{
&twNiels{
&bigNumber{0x05a5b500, 0x0985380b, 0x03849e60, 0x06582f04, 0x013402ba, 0x07c4a15b, 0x04afb6e5, 0x019465a6, 0x035d0446, 0x0df3f9e4, 0x050022f4, 0x08332f10, 0x082f2c46, 0x0f810973, 0x0e0216de, 0x0ebdd61f},
&bigNumber{0x03aadbdc, 0x0f166b7e, 0x0a7619b8, 0x02528842, 0x008d0c13, 0x0f12020f, 0x06dd379b, 0x0736d3f4, 0x0ab1919d, 0x025ea6c2, 0x09bdc7e6, 0x0528572b, 0x0b5a9a26, 0x0f7e2e75, 0x0b326b12, 0x0ed1cd91},
&bigNumber{0x098e28fb, 0x03895751, 0x02d65b85, 0x077bc10a, 0x07b9a601, 0x066b9a42, 0x0dfabb87, 0x01bee158, 0x09b2d4e5, 0x06919086, 0x0169f374, 0x0942eb6b, 0x0bbe91e3, 0x047d5b20, 0x037523b6, 0x0473eb88},
},
&bigNumber{0x077ca5f0, 0x0fdbec93, 0x0bf4673c, 0x0bcd691d, 0x0b4585cd, 0x0c082eb9, 0x03c5a97b, 0x058b3645, 0x00ef8e34, 0x0424ca79, 0x004655e4, 0x0d4a8fad, 0x08af0bb8, 0x000e75a7, 0x0b6bbaff, 0x0d40c5f3},
},
// 9
&twPNiels{
&twNiels{
&bigNumber{0x06773538, 0x002e55cf, 0x09144496, 0x027e21a0, 0x0fa4fdbf, 0x01568a77, 0x087fe688, 0x05c6d9e6, 0x0508158c, 0x0b7433da, 0x080184db, 0x007477de, 0x00e3b950, 0x0f5b29b8, 0x0dafd838, 0x00336b81},
&bigNumber{0x0faf83af, 0x08b8eac0, 0x045af9b9, 0x00fd0239, 0x025ab82f, 0x0a5a46c4, 0x005ab02b, 0x0548c499, 0x0af1167f, 0x0e3ff944, 0x0bbc8c50, 0x08df9171, 0x08421dcf, 0x05354fb7, 0x027fa656, 0x0d88cce5},
&bigNumber{0x06592c5f, 0x0758bc19, 0x0976a5c4, 0x080e3e50, 0x05637d60, 0x050266c4, 0x06cce0c2, 0x000f76ba, 0x0b39952b, 0x08118c1c, 0x0f903a05, 0x08dbaac8, 0x02bb60d0, 0x082a0d3a, 0x06b73845, 0x00f848b7},
},
&bigNumber{0x0021161c, 0x0b667c0e, 0x08a9dc8c, 0x086fa0b9, 0x027b84c9, 0x0de272b8, 0x07dad62c, 0x0697d381, 0x03f9ac5a, 0x06b74d3b, 0x0416858d, 0x048dc187, 0x03cd18b2, 0x040eca1a, 0x0c49f066, 0x0ff05257},
},
// 10
&twPNiels{
&twNiels{
&bigNumber{0x04992354, 0x0f624b93, 0x06c88150, 0x07f72b38, 0x02b76818, 0x01e09970, 0x07856dfb, 0x0b14c688, 0x02d8e364, 0x0d51048e, 0x0674d538, 0x0b822562, 0x0e4e17f9, 0x0b6bf11b, 0x0c10ee26, 0x070319cf},
&bigNumber{0x036f3c2c, 0x054cefa5, 0x0cab8002, 0x0d1568b8, 0x0add5fe7, 0x0071a252, 0x04b3c490, 0x01e15013, 0x000e67bf, 0x01926c30, 0x0dc22cc5, 0x0d245c14, 0x03ed8abe, 0x0a7290c8, 0x058d2b11, 0x08aa1db2},
&bigNumber{0x0b43c9d5, 0x0d79d7fe, 0x040a1d18, 0x0a6369f1, 0x053e0d48, 0x09f1d213, 0x0bd51750, 0x0005ec64, 0x0297d428, 0x0acf4828, 0x090dd0e3, 0x0409de55, 0x0965d34c, 0x00b94f3a, 0x01dc5637, 0x085b74a4},
},
&bigNumber{0x09ffe991, 0x04a4ae6a, 0x0851b2cb, 0x0dd241df, 0x0cb58ff7, 0x0e6f6cec, 0x00da8c9b, 0x09032938, 0x01a53998, 0x0d5fcd05, 0x066c843a, 0x0f153cee, 0x01ab32a1, 0x0abd6dc5, 0x06a28c1f, 0x07c2b400},
},
// 11
&twPNiels{
&twNiels{
&bigNumber{0x054fad63, 0x0a6deab8, 0x03139dab, 0x08ec509b, 0x0f38948e, 0x02c721e1, 0x08dd641a, 0x0252cc09, 0x0c443f31, 0x0c8aaa66, 0x0c6458c1, 0x033b5b8b, 0x0089236e, 0x07b3592b, 0x09bf422c, 0x0261e002},
&bigNumber{0x05817da6, 0x02cbe159, 0x0253d5b3, 0x004b79fb, 0x075cbe56, 0x059c447b, 0x00211c1b, 0x096e941d, 0x004f1774, 0x0c4b650a, 0x06cc4142, 0x018ce550, 0x01754ebb, 0x0afd200c, 0x0440c27e, 0x082d3511},
&bigNumber{0x08151172, 0x0bd650e1, 0x094aa489, 0x05afdd3a, 0x03e3c4a4, 0x0c54bade, 0x030e6eb2, 0x00ffc2c0, 0x0cd3eaa0, 0x0bab2965, 0x05e31ca3, 0x07dbd978, 0x01e50070, 0x01a31a70, 0x0e187e72, 0x04a6706d},
},
&bigNumber{0x0a64587c, 0x09594b13, 0x07d06590, 0x0b62e1a6, 0x07a498ae, 0x040635bd, 0x04197574, 0x091c0d95, 0x09847940, 0x0be452a4, 0x0e2db46d, 0x077230bf, 0x0a8a3be9, 0x003e2ead, 0x090c8266, 0x01366b4e},
},
// 12
&twPNiels{
&twNiels{
&bigNumber{0x0a3a6958, 0x0b7c6460, 0x0a26894a, 0x0a7f749b, 0x0d68a071, 0x08f5f7aa, 0x0129f200, 0x0be007b7, 0x0f8b0279, 0x0a1bc934, 0x0d0ece01, 0x00317338, 0x0f371340, 0x0f79d31d, 0x060ace29, 0x0ef4c1da},
&bigNumber{0x0c1d0072, 0x0403e959, 0x0ec34cd9, 0x0c859e5e, 0x05fc7843, 0x0d850a1c, 0x0a50ccf9, 0x02dba347, 0x00d88f27, 0x08b61a79, 0x06a5f7e4, 0x0fe2f470, 0x0ecfb643, 0x05eae6fc, 0x0eeb0971, 0x0713d0d7},
&bigNumber{0x0db37a3f, 0x07c85d50, 0x04651c14, 0x084a7a43, 0x0c624b75, 0x09db7e57, 0x05b93aaf, 0x04aacb8d, 0x014b7e2c, 0x099cc5fe, 0x06c2374a, 0x04047476, 0x0c1b46d1, 0x073aed98, 0x0cb2a6e5, 0x045903bd},
},
&bigNumber{0x0e1fcb85, 0x0ef06397, 0x01551f6a, 0x07ae3bcb, 0x08a026f5, 0x02398ab0, 0x0e39a35b, 0x05a9b180, 0x0df3cd2b, 0x0e7a9f02, 0x00d7f4b3, 0x070d723d, 0x0b84e97c, 0x0b1fa785, 0x0ba13ca1, 0x0a266cb0},
},
// 13
&twPNiels{
&twNiels{
&bigNumber{0x0ec3db6b, 0x065f580b, 0x04fe9402, 0x07296ffe, 0x0a976860, 0x044b9376, 0x0060db4c, 0x08e2af69, 0x0a3c438a, 0x034a88bb, 0x06dd9552, 0x04c6d9ff, 0x0f880fef, 0x0c19a2ac, 0x003b6ea1, 0x0c5bc3a3},
&bigNumber{0x026a4750, 0x0715decb, 0x0e648646, 0x0a122697, 0x0d0de5bf, 0x0b450ecb, 0x0eb9f9d6, 0x08d7a7cf, 0x04b5e294, 0x01a50226, 0x0eee5b89, 0x05b3390a, 0x0b64958e, 0x037eebed, 0x0041d7aa, 0x0b6ccce2},
&bigNumber{0x0824e359, 0x0a93715f, 0x043c899c, 0x0ac52d1d, 0x01c6c0d5, 0x0c28ad2d, 0x075514b9, 0x009a03c1, 0x00852ff9, 0x035a06ff, 0x02461b9c, 0x0451dfe8, 0x077838ab, 0x0d925573, 0x08016fb9, 0x0fe722ef},
},
&bigNumber{0x0e50b079, 0x026c76da, 0x026b4fb0, 0x0661120a, 0x0d766626, 0x00f79967, 0x0fe99490, 0x0699c164, 0x085a39a8, 0x0ea7b9f1, 0x07103c79, 0x05046422, 0x06fe479f, 0x01827469, 0x044ee87b, 0x0cf58841},
},
// 14
&twPNiels{
&twNiels{
&bigNumber{0x0ebfe2a0, 0x0eb5fbb2, 0x0dc6ec15, 0x0668e6e7, 0x0a2b46d6, 0x09716cff, 0x0b1f6161, 0x075f2e4b, 0x092bafec, 0x04a09fe7, 0x0d0693b5, 0x0181e9e6, 0x0ae2011c, 0x0339acaa, 0x05ab0851, 0x02e7f480},
&bigNumber{0x00923994, 0x09e0df3c, 0x05d44abd, 0x0e120043, 0x0802cd52, 0x03d6dc68, 0x06848872, 0x0b6dc339, 0x0847737b, 0x0bc369ba, 0x02096051, 0x0bb48580, 0x07f1feb0, 0x01f3325e, 0x05347dc3, 0x0ac3e06b},
&bigNumber{0x0efcb0d5, 0x01516f87, 0x00c105be, 0x0c6c761b, 0x0b0e62e2, 0x0a170de3, 0x07e1d862, 0x0efee135, 0x0906ff9a, 0x097301d4, 0x0746a0ee, 0x0ebb2175, 0x0bfdd54e, 0x07828235, 0x0ed64735, 0x03c5ab55},
},
&bigNumber{0x0cc630cf, 0x04be9e7e, 0x02806f73, 0x033000c5, 0x08901863, 0x06198942, 0x057694d2, 0x0c4ea1d8, 0x0c5c8ca4, 0x0ba40152, 0x0c694dd1, 0x085ae4e6, 0x05bc4f74, 0x0db70b9f, 0x09da2b77, 0x0a6633ef},
},
// 15
&twPNiels{
&twNiels{
&bigNumber{0x077fc122, 0x08edd3d4, 0x0d81d8d0, 0x01ac9143, 0x08e4b336, 0x0f81211a, 0x0d1e5694, 0x008bd901, 0x04116e1f, 0x0fb16788, 0x092dd842, 0x0cbe52bb, 0x0ca568ee, 0x0f75e6bb, 0x03efc3bb, 0x00e50e2e},
&bigNumber{0x05fbceed, 0x0eb215cb, 0x05eeff9f, 0x083a37a3, 0x0044f669, 0x0abb2e46, 0x0807c9b6, 0x0201d31e, 0x0ef4ff9c, 0x07157790, 0x087931f8, 0x0b23a524, 0x0b4c9a95, 0x012ae723, 0x0aa48f6e, 0x08f0775d},
&bigNumber{0x01160f9b, 0x08b66bfe, 0x0d9b8296, 0x0a7bbf2a, 0x0c1a10af, 0x0f3cc344, 0x02c0089c, 0x0f4d630f, 0x07901e60, 0x0c9ce1e7, 0x02f5380a, 0x0697ba06, 0x0e6065cf, 0x0e709b4e, 0x0de4fa1d, 0x043caab1},
},
&bigNumber{0x012a04c3, 0x002a0678, 0x015d16e6, 0x04ec95aa, 0x0072c656, 0x01fee9b9, 0x0ea90f88, 0x04c44954, 0x0eada4ba, 0x0268f035, 0x048efc9e, 0x0905d82f, 0x0e8c31fc, 0x0f80f8f9, 0x0549be7b, 0x066b5184},
},
}
c.Assert(w[0].z, DeepEquals, exp[0].z)
c.Assert(w[0].n, DeepEquals, exp[0].n)
}
func (s *Ed448Suite) Test_PrepareWNAFTable(c *C) {
tableSize := uint(4)
exp := [16]*twPNiels{
//0
newTwistedPNiels(
[fieldBytes]byte{0x5f, 0xee, 0x87, 0xbc, 0x27, 0x10, 0xa9, 0xd4, 0x39, 0x2d, 0xf7, 0xe0, 0xa6, 0x34, 0x46, 0x07, 0x45, 0x97, 0x84, 0xd0, 0x5f, 0x91, 0xbb, 0xa6, 0x8b, 0x64, 0xe9, 0x76, 0x7a, 0x5d, 0xaa, 0x64, 0x0d, 0x68, 0xd9, 0xc7, 0xc7, 0xfc, 0xc6, 0x32, 0x0d, 0x73, 0xd9, 0x61, 0xd6, 0x9f, 0x8b, 0x04, 0x95, 0x67, 0x66, 0xd1, 0xfd, 0xc7, 0x8d, 0xd9},
[fieldBytes]byte{0xba, 0x47, 0x5b, 0x09, 0xe4, 0x4c, 0xd9, 0x91, 0x59, 0xa0, 0x9f, 0x29, 0xfa, 0x45, 0xba, 0xd9, 0x99, 0xeb, 0xa0, 0xbb, 0x5a, 0x51, 0xdf, 0x2a, 0x7e, 0xa3, 0xe6, 0x16, 0xed, 0x3d, 0xc7, 0xca, 0x8c, 0x93, 0xd8, 0x4b, 0x91, 0xa4, 0x00, 0x81, 0xc0, 0x75, 0xb6, 0x67, 0x64, 0x51, 0x32, 0x9f, 0xcc, 0xa6, 0xda, 0xff, 0xb6, 0xb7, 0xa4, 0x74},
[fieldBytes]byte{0xff, 0x0c, 0xcc, 0x2d, 0x5e, 0xa9, 0xcc, 0x6e, 0x3a, 0x99, 0x27, 0x45, 0x20, 0xc0, 0x62, 0xd2, 0x0e, 0x7b, 0x96, 0x4b, 0x93, 0xec, 0xb1, 0xe3, 0x68, 0xe4, 0x52, 0xeb, 0x7e, 0x72, 0x49, 0x6f, 0x44, 0x08, 0xf2, 0xa3, 0x0c, 0xd3, 0x92, 0x1a, 0xfa, 0x82, 0x31, 0xb1, 0x58, 0x03, 0x24, 0x78, 0x03, 0x19, 0x95, 0x8a, 0x85, 0x4f, 0x07, 0xfa},
[fieldBytes]byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
),
//1
newTwistedPNiels(
[fieldBytes]byte{0x36, 0xaa, 0x95, 0x64, 0xca, 0x47, 0x1c, 0x57, 0x9f, 0xeb, 0x82, 0xa0, 0x26, 0x93, 0xe4, 0x25, 0xd4, 0x24, 0x46, 0x91, 0xb5, 0xf1, 0x36, 0x3f, 0x99, 0x55, 0x33, 0x5d, 0x58, 0x7a, 0xf4, 0x0e, 0x1e, 0xaf, 0x3f, 0x84, 0x2b, 0xba, 0x08, 0xd3, 0x8d, 0x79, 0x24, 0x14, 0xe9, 0x7b, 0xb9, 0x8e, 0x93, 0x33, 0x5f, 0x6b, 0x67, 0xd6, 0xb9, 0xc7},
[fieldBytes]byte{0x74, 0x4e, 0x5f, 0x3e, 0x46, 0x88, 0xc1, 0xea, 0xef, 0x52, 0x7d, 0xaf, 0x6d, 0x15, 0x71, 0xd0, 0xd7, 0x90, 0xbf, 0xee, 0xab, 0x0c, 0xbd, 0xd3, 0xbb, 0xb6, 0xf9, 0x2b, 0xa1, 0xdc, 0x31, 0xe7, 0x9e, 0x24, 0xe8, 0x90, 0xb4, 0x8f, 0x7d, 0x01, 0x37, 0x61, 0xac, 0xa2, 0x11, 0xbe, 0x3b, 0x87, 0xdb, 0x0c, 0xcc, 0xd5, 0x3f, 0x77, 0xd0, 0x58},
[fieldBytes]byte{0x93, 0xc4, 0xed, 0xca, 0xcd, 0x71, 0xfc, 0x6b, 0xf8, 0x3d, 0x30, 0x01, 0x8b, 0xc8, 0x5a, 0xfa, 0xd7, 0x3e, 0x4f, 0x7e, 0x53, 0x2e, 0x45, 0x3a, 0x5b, 0x08, 0xd7, 0xd6, 0x7f, 0xc2, 0xd6, 0xe3, 0xd1, 0xc5, 0xd5, 0xe0, 0x4d, 0xc8, 0xce, 0x67, 0xaf, 0x8a, 0x6c, 0x7b, 0x28, 0x20, 0x44, 0x4e, 0x81, 0xe6, 0xcb, 0xe9, 0xfc, 0x01, 0xdd, 0x82},
[fieldBytes]byte{0x34, 0x57, 0x2a, 0x29, 0xe9, 0xc2, 0xec, 0xba, 0xba, 0x42, 0x85, 0xc3, 0x96, 0xaa, 0x88, 0xf1, 0x8b, 0xbc, 0x50, 0xed, 0x16, 0x60, 0xe5, 0xae, 0xbf, 0xf1, 0xf4, 0x7c, 0x02, 0xc8, 0xd0, 0x2c, 0xc7, 0x82, 0xc0, 0x74, 0x98, 0xa3, 0x98, 0x52, 0x64, 0x73, 0xd5, 0x52, 0x11, 0xa6, 0x53, 0x1f, 0xda, 0x31, 0x25, 0x94, 0x4c, 0x68, 0x1c, 0x6e},
),
//2
newTwistedPNiels(
[fieldBytes]byte{0xd9, 0x73, 0x1a, 0x12, 0x0c, 0xde, 0xb1, 0xcb, 0x20, 0x34, 0xbd, 0x0b, 0x3d, 0xf4, 0x34, 0x37, 0x1e, 0x3a, 0x13, 0x55, 0x07, 0x0e, 0xe4, 0x49, 0x80, 0xa4, 0x06, 0xa8, 0x44, 0x28, 0x15, 0xeb, 0xca, 0xd8, 0xbf, 0xf0, 0x1f, 0x4a, 0xaa, 0x65, 0x70, 0x7b, 0x9d, 0x13, 0xad, 0x56, 0xea, 0x33, 0x96, 0x7a, 0x47, 0xf9, 0x9c, 0x54, 0xa1, 0xdb},
[fieldBytes]byte{0x4a, 0x1a, 0xa1, 0x44, 0x3e, 0xb2, 0x05, 0x06, 0x61, 0x8f, 0xc4, 0x33, 0x2f, 0x03, 0x27, 0x76, 0x4d, 0x5f, 0x89, 0xac, 0xc9, 0x8a, 0xd7, 0x31, 0x24, 0xb7, 0x01, 0xc6, 0x6e, 0x0e, 0xb3, 0x2a, 0xaa, 0x59, 0x3d, 0x71, 0x04, 0x93, 0x62, 0xf9, 0xaa, 0x32, 0x46, 0x33, 0x36, 0xb6, 0x1a, 0xbb, 0xa9, 0xf1, 0xf5, 0x44, 0x9d, 0xb0, 0x8a, 0xa1},
[fieldBytes]byte{0x4e, 0xe7, 0xb1, 0x79, 0xcb, 0x6b, 0x8f, 0x01, 0xad, 0xa3, 0xc7, 0x97, 0xd1, 0x57, 0x0d, 0xa5, 0x1d, 0xbd, 0x9a, 0x37, 0x1a, 0x70, 0x99, 0xb6, 0xe5, 0xc6, 0xe0, 0x25, 0x86, 0x21, 0xc2, 0xec, 0xdf, 0x05, 0x4b, 0x78, 0x71, 0xf6, 0xe7, 0xdb, 0x40, 0xae, 0xb9, 0x89, 0x9a, 0x20, 0x9a, 0x68, 0xd4, 0x29, 0xee, 0x3f, 0x8a, 0xe3, 0xe5, 0x77},
[fieldBytes]byte{0xe7, 0xa9, 0x71, 0xf5, 0x59, 0x77, 0x3a, 0xab, 0x5d, 0x5f, 0xb1, 0x22, 0x20, 0xdf, 0x06, 0x71, 0xd5, 0x3e, 0x5a, 0x87, 0x7c, 0xe6, 0xe3, 0x3f, 0x48, 0x60, 0x8c, 0x61, 0x6f, 0x14, 0xa5, 0xd9, 0x33, 0xc8, 0x5a, 0x21, 0xed, 0xf7, 0xa5, 0xbf, 0x95, 0xf9, 0xee, 0x76, 0xfd, 0xb0, 0xdd, 0x74, 0x65, 0x2d, 0xb8, 0x74, 0x9f, 0x91, 0xa1, 0xdb},
),
//3
newTwistedPNiels(
[fieldBytes]byte{0x70, 0x0b, 0x26, 0xa9, 0x93, 0xd4, 0xec, 0xee, 0x78, 0x66, 0x90, 0xfb, 0x09, 0xb3, 0x80, 0x1f, 0x47, 0x9a, 0x89, 0x35, 0x46, 0x21, 0x70, 0x9a, 0x48, 0x5b, 0x97, 0x86, 0x12, 0x85, 0x3f, 0x0c, 0x5f, 0x0c, 0x42, 0x74, 0x26, 0x79, 0x22, 0x96, 0xb0, 0xc4, 0x09, 0x54, 0xd8, 0x04, 0x73, 0x6a, 0x30, 0x70, 0xd6, 0x67, 0x76, 0xf9, 0xc6, 0x51},
[fieldBytes]byte{0x7f, 0xc4, 0x2a, 0xd0, 0x3d, 0x85, 0xeb, 0xf2, 0x03, 0xeb, 0x29, 0xd9, 0x09, 0x81, 0x9a, 0x27, 0x25, 0x92, 0x9e, 0xc6, 0xdc, 0xb5, 0xe2, 0x99, 0xd6, 0x3b, 0x92, 0xfc, 0x1f, 0x28, 0x90, 0xd6, 0xa8, 0x74, 0xee, 0x73, 0xfb, 0x53, 0x4b, 0x08, 0x50, 0x59, 0xf4, 0x31, 0x74, 0xd4, 0x23, 0xd5, 0x94, 0x7e, 0x3d, 0xa0, 0xe1, 0x0e, 0x06, 0x08},
[fieldBytes]byte{0x65, 0x06, 0x32, 0x4d, 0xc5, 0x5f, 0x3a, 0x61, 0xa5, 0xc7, 0x20, 0x09, 0x3f, 0x9b, 0x18, 0x27, 0xe0, 0x9f, 0x5c, 0xda, 0x74, 0x48, 0xb4, 0x5a, 0xdf, 0x1b, 0x07, 0x07, 0x86, 0x07, 0x24, 0xfa, 0x9b, 0x02, 0x41, 0x54, 0x74, 0xab, 0x7b, 0x9c, 0x33, 0x3b, 0xff, 0x22, 0x3c, 0xef, 0x7c, 0x73, 0x31, 0x3e, 0xab, 0x3a, 0x4c, 0x56, 0xdb, 0x39},
[fieldBytes]byte{0xe9, 0x49, 0x27, 0xff, 0xf0, 0xbb, 0x4e, 0xea, 0x01, 0xea, 0xa8, 0x54, 0x8a, 0xfe, 0x7f, 0xa7, 0x3c, 0x01, 0xc7, 0x87, 0x5e, 0x80, 0x0c, 0x01, 0x3e, 0xe7, 0x64, 0x24, 0x47, 0x9e, 0x4f, 0xd9, 0x06, 0x42, 0x63, 0x18, 0x1e, 0x05, 0xa8, 0x82, 0xde, 0x8d, 0x8a, 0x68, 0x2e, 0xaa, 0x31, 0x93, 0xee, 0xda, 0xe8, 0x31, 0x72, 0xc8, 0x58, 0x10},
),
//4
newTwistedPNiels(
[fieldBytes]byte{0xd4, 0x3a, 0x2d, 0xda, 0x0c, 0x94, 0x10, 0xa0, 0xc7, 0x07, 0xa3, 0x11, 0x5a, 0xdf, 0x81, 0xcb, 0xc2, 0x6b, 0x80, 0x8a, 0x9f, 0xbb, 0xf8, 0xa4, 0xbf, 0x92, 0x8b, 0x63, 0x98, 0x59, 0xd5, 0x77, 0xca, 0x61, 0xd3, 0xb1, 0x60, 0x26, 0x3a, 0xc4, 0x4c, 0x32, 0x53, 0x4d, 0x9d, 0x62, 0x70, 0xc4, 0xd9, 0xfb, 0x5b, 0x68, 0xe6, 0xfe, 0x12, 0x76},
[fieldBytes]byte{0x96, 0x8b, 0x16, 0xc2, 0x86, 0x98, 0x1f, 0xef, 0x23, 0x9f, 0x74, 0xa8, 0x63, 0xd0, 0xde, 0x27, 0xa7, 0x84, 0x72, 0x32, 0x98, 0x23, 0x3f, 0x82, 0x22, 0x1a, 0x43, 0xdd, 0xfa, 0x68, 0x62, 0xce, 0x97, 0xf8, 0xdc, 0x96, 0x44, 0xf2, 0xaf, 0x83, 0x28, 0x29, 0x24, 0x13, 0xb7, 0x0b, 0xd7, 0x32, 0x65, 0x0c, 0xf8, 0x68, 0x47, 0x12, 0xc8, 0x62},
[fieldBytes]byte{0xee, 0x44, 0xe8, 0x7f, 0xd7, 0x10, 0xe9, 0x29, 0x50, 0xc4, 0x4b, 0x2e, 0xe7, 0x2a, 0x2e, 0xea, 0xc6, 0x7c, 0x18, 0xd1, 0x24, 0xff, 0x95, 0xb7, 0x75, 0x8b, 0x96, 0xe8, 0x96, 0xfd, 0x30, 0x57, 0xc4, 0x4a, 0x7e, 0x08, 0xd6, 0x55, 0x56, 0xb3, 0x42, 0x6d, 0x93, 0xea, 0x9a, 0x54, 0xd3, 0x49, 0xdc, 0xf4, 0x0d, 0xb4, 0x11, 0xf5, 0xf3, 0x1c},
[fieldBytes]byte{0x0f, 0xcb, 0xf8, 0xb1, 0xa3, 0x3b, 0xa8, 0x77, 0x36, 0x94, 0xaf, 0x47, 0x62, 0xfb, 0x25, 0xd6, 0x7a, 0x90, 0xf9, 0x77, 0xac, 0xd3, 0x20, 0x7b, 0x1b, 0x25, 0x82, 0x23, 0x83, 0xf9, 0xc7, 0xcd, 0x97, 0xe5, 0x5c, 0x5a, 0xbb, 0x6e, 0xf2, 0x5d, 0x62, 0x7f, 0x34, 0xed, 0x02, 0x35, 0xbb, 0x2d, 0x11, 0x40, 0x3f, 0xd2, 0xa8, 0xd8, 0x0f, 0x4d},
),
//5
newTwistedPNiels(
[fieldBytes]byte{0x21, 0x84, 0xf1, 0xf6, 0xe4, 0x21, 0xac, 0x4b, 0xa9, 0x67, 0xe4, 0x91, 0x15, 0xcb, 0xb2, 0x02, 0x6c, 0xf2, 0x8b, 0x52, 0x3d, 0x15, 0x9b, 0x1c, 0xa5, 0x82, 0xf7, 0xea, 0x9b, 0x81, 0xf3, 0xb0, 0xa0, 0xa0, 0x4f, 0x52, 0x65, 0x58, 0x07, 0xf8, 0x94, 0x9c, 0x10, 0xa9, 0xcc, 0x93, 0x0d, 0xe0, 0xd6, 0x46, 0xcb, 0x3c, 0x36, 0xdf, 0x69, 0xf7},
[fieldBytes]byte{0x4d, 0xe1, 0xbe, 0x4b, 0x26, 0xe3, 0xad, 0x5e, 0x1b, 0x07, 0x31, 0xa2, 0x1b, 0xa5, 0x4c, 0xb7, 0x1c, 0xe2, 0xfb, 0xd4, 0x24, 0x68, 0xe6, 0x27, 0xbd, 0x07, 0x2e, 0x9e, 0x84, 0xe2, 0x21, 0x36, 0x9e, 0x8d, 0x31, 0x44, 0xf7, 0xee, 0x66, 0x88, 0xf5, 0xa3, 0xad, 0xa3, 0x60, 0x35, 0x32, 0x00, 0x10, 0xe9, 0x4e, 0xb8, 0x0f, 0xcf, 0x04, 0x65},
[fieldBytes]byte{0xfc, 0xdf, 0xea, 0x0b, 0x1a, 0x99, 0x16, 0x1f, 0xc0, 0x03, 0x6e, 0x2c, 0xc6, 0xca, 0x44, 0x3b, 0xf2, 0x24, 0x4d, 0x8a, 0x81, 0x99, 0x84, 0xfd, 0x61, 0x77, 0xa2, 0x54, 0x00, 0x86, 0x0b, 0xd6, 0xdb, 0x6f, 0xac, 0x63, 0x85, 0x8f, 0x14, 0x00, 0x9d, 0xb6, 0xa4, 0xda, 0x8f, 0xbd, 0x7b, 0x79, 0xd9, 0x49, 0x52, 0xa0, 0xe0, 0x62, 0x88, 0xf0},
[fieldBytes]byte{0x45, 0x88, 0xc8, 0xb2, 0x29, 0x7d, 0x53, 0xdf, 0x48, 0x94, 0xaf, 0x73, 0x19, 0xcf, 0xa4, 0xd1, 0xd9, 0xa9, 0x82, 0x26, 0xfd, 0x9b, 0x36, 0x6d, 0xd4, 0x99, 0x10, 0x6d, 0x32, 0x3e, 0x64, 0x80, 0xe3, 0x9c, 0xc7, 0x18, 0xea, 0x67, 0x90, 0x04, 0x5e, 0x83, 0x8d, 0xa0, 0xc5, 0x99, 0x36, 0xba, 0x09, 0x69, 0x07, 0xb7, 0xcd, 0x7e, 0x71, 0x27},
),
//6
newTwistedPNiels(
[fieldBytes]byte{0x2a, 0xd6, 0xfc, 0xfc, 0x10, 0x7d, 0x16, 0xaf, 0x7f, 0x08, 0xca, 0xbb, 0xb8, 0xa6, 0xca, 0xcf, 0xb4, 0x81, 0x46, 0xa0, 0xe3, 0xd0, 0x94, 0xc0, 0xb6, 0xb4, 0x76, 0x78, 0x7d, 0x3f, 0xb3, 0xed, 0xcb, 0x3c, 0x4e, 0x16, 0xb7, 0x1c, 0x17, 0x65, 0x4d, 0x6c, 0xaa, 0x72, 0x6b, 0x7f, 0xdf, 0xea, 0xc4, 0x21, 0xa9, 0xaf, 0xb8, 0x31, 0xc9, 0x12},
[fieldBytes]byte{0xc6, 0x07, 0xf8, 0xdb, 0x1b, 0x24, 0x3c, 0x9b, 0xa8, 0xd1, 0x03, 0xb9, 0x10, 0xbb, 0xd2, 0x38, 0xd9, 0xff, 0x53, 0xc8, 0x1e, 0x41, 0x01, 0x4b, 0xfa, 0xcf, 0x56, 0xbb, 0xd8, 0xa3, 0x3c, 0x82, 0x0f, 0x7b, 0xa5, 0x35, 0x2a, 0x56, 0x3e, 0x76, 0x17, 0x23, 0x8b, 0xbf, 0xe9, 0x70, 0x71, 0x56, 0x06, 0xc1, 0x7e, 0x48, 0xb7, 0x60, 0x1e, 0xcf},
[fieldBytes]byte{0x68, 0x98, 0x0a, 0x0e, 0x51, 0xe6, 0xcb, 0x23, 0x99, 0x9a, 0x60, 0xa6, 0xac, 0x45, 0xd9, 0x15, 0xdd, 0x22, 0xe8, 0x4d, 0x61, 0x47, 0x56, 0x8d, 0x7a, 0xad, 0x43, 0xba, 0xcc, 0x11, 0xaf, 0x50, 0xd3, 0xd8, 0x90, 0x5f, 0xbd, 0x51, 0x2a, 0x4a, 0xe4, 0x60, 0x40, 0x23, 0x5b, 0x79, 0x2c, 0xf7, 0x5b, 0xdc, 0xc7, 0x6c, 0xea, 0x92, 0xd1, 0x27},
[fieldBytes]byte{0x4c, 0x79, 0xe0, 0x2c, 0x72, 0x2d, 0xcc, 0x29, 0x3f, 0xc4, 0x22, 0x9a, 0x5a, 0x98, 0xbf, 0x77, 0x2b, 0x7b, 0x18, 0x7a, 0x4d, 0xa4, 0x4c, 0xe7, 0x47, 0xb9, 0x7a, 0xd2, 0x2d, 0x3f, 0xae, 0x78, 0x7f, 0x56, 0x23, 0x49, 0xcb, 0xc4, 0x98, 0x11, 0xd6, 0x79, 0xc5, 0x72, 0x84, 0x82, 0x56, 0x40, 0xfd, 0xc8, 0x52, 0x51, 0x37, 0x98, 0xea, 0x89},
),
//7
newTwistedPNiels(
[fieldBytes]byte{0x27, 0x85, 0xf8, 0xf1, 0x06, 0x11, 0x10, 0xa2, 0xcc, 0x34, 0xb0, 0x42, 0x96, 0xe2, 0xa2, 0x36, 0xbb, 0xa0, 0xda, 0x86, 0xdd, 0x45, 0x78, 0x0c, 0xdb, 0xe3, 0x5c, 0x3d, 0x5d, 0xda, 0x75, 0xca, 0x5f, 0x58, 0xe7, 0x91, 0x75, 0x56, 0xe9, 0xd9, 0x37, 0xd0, 0xd5, 0xf2, 0x75, 0x75, 0xb1, 0xe2, 0x7b, 0x47, 0x94, 0xe0, 0x89, 0xc7, 0x65, 0xf7},
[fieldBytes]byte{0xbb, 0x72, 0x9b, 0xcd, 0xc7, 0x95, 0x1d, 0x45, 0x10, 0x17, 0x12, 0xbb, 0x5f, 0x27, 0x2b, 0x18, 0xda, 0x55, 0x09, 0xe2, 0x96, 0x87, 0x86, 0xdc, 0xec, 0x73, 0x8d, 0x63, 0x94, 0x3b, 0xfc, 0x25, 0xd4, 0xbc, 0x1a, 0xf3, 0x73, 0xf7, 0xb0, 0x80, 0xfe, 0xe7, 0x9a, 0xcf, 0x52, 0x9d, 0xc5, 0x5e, 0x36, 0x5f, 0x0b, 0xe7, 0x56, 0x4e, 0x86, 0x05},
[fieldBytes]byte{0x17, 0x2a, 0xc7, 0xf3, 0x25, 0xe9, 0x9f, 0x7c, 0xa4, 0x81, 0x4c, 0x60, 0xb1, 0xa0, 0xfd, 0xb6, 0x7a, 0x0b, 0x63, 0x5b, 0xe4, 0x4d, 0x08, 0xa5, 0x12, 0x8a, 0x09, 0x60, 0x53, 0x75, 0xa7, 0x00, 0xbd, 0x1a, 0xd0, 0x23, 0x82, 0x5b, 0x99, 0x7f, 0x45, 0x4a, 0x44, 0x3a, 0xa9, 0xe6, 0x78, 0x2c, 0x4c, 0x10, 0xd8, 0xf2, 0xc0, 0x31, 0xc3, 0xa1},
[fieldBytes]byte{0xf1, 0x7e, 0x0d, 0x5f, 0x9c, 0xd2, 0x39, 0x09, 0x4e, 0x07, 0x15, 0x17, 0x93, 0x3a, 0xc5, 0x01, 0x01, 0x2f, 0x29, 0x58, 0xc7, 0x84, 0x9f, 0xa8, 0x29, 0x83, 0xff, 0xf6, 0x24, 0x29, 0x8b, 0x16, 0x60, 0x17, 0xb9, 0xd5, 0x2f, 0xc9, 0xbb, 0x88, 0x5e, 0xd9, 0x17, 0x97, 0x7d, 0xca, 0x15, 0xc7, 0x2b, 0xbc, 0x54, 0x50, 0x0c, 0x6c, 0x0e, 0x73},
),
//8
newTwistedPNiels(
[fieldBytes]byte{0xd9, 0xe0, 0xd3, 0xed, 0x61, 0x80, 0xcc, 0x10, 0x35, 0xb4, 0x07, 0x27, 0x44, 0xed, 0xd4, 0x08, 0x63, 0x92, 0x59, 0x2d, 0x8d, 0x54, 0xa8, 0xe0, 0x4a, 0xa1, 0x13, 0x03, 0xf5, 0xb6, 0xfe, 0xf2, 0xe3, 0xe5, 0xaf, 0x89, 0xc6, 0xa6, 0xba, 0x3b, 0xa0, 0xed, 0x1d, 0x3f, 0x07, 0xe6, 0x42, 0x7e, 0x94, 0x07, 0x02, 0x73, 0x52, 0x0e, 0x3e, 0xc8},
[fieldBytes]byte{0x7f, 0xe8, 0x10, 0x14, 0xd8, 0x32, 0x36, 0x48, 0x5b, 0x6e, 0x4a, 0x6d, 0xc5, 0xcf, 0x9e, 0xe9, 0x15, 0xc2, 0xcf, 0xe4, 0x36, 0xe1, 0x31, 0x7c, 0x2d, 0x26, 0x82, 0x0e, 0x7e, 0xe9, 0xef, 0x99, 0x11, 0xfb, 0xbd, 0x83, 0x12, 0x5d, 0x45, 0x16, 0xeb, 0xfc, 0x51, 0x40, 0x1a, 0x9e, 0x04, 0xf9, 0x52, 0x35, 0xc0, 0xff, 0x90, 0x6e, 0x96, 0x31},
[fieldBytes]byte{0x6f, 0xfd, 0xde, 0x6b, 0x9b, 0x7d, 0x8c, 0xfb, 0xa5, 0x9d, 0x2d, 0x42, 0x31, 0xc7, 0xc5, 0x70, 0xd8, 0xc4, 0x3c, 0x20, 0xfb, 0x7f, 0x8d, 0x59, 0xce, 0xb5, 0x0d, 0x36, 0x04, 0x8d, 0xa2, 0xee, 0xee, 0xe3, 0xb1, 0x4d, 0x7a, 0x33, 0x9a, 0xde, 0xb3, 0x9c, 0xc2, 0x6c, 0x93, 0x4d, 0x17, 0xf3, 0x58, 0x17, 0x75, 0x71, 0x3a, 0x0e, 0xec, 0x8f},
[fieldBytes]byte{0x74, 0x35, 0xad, 0xe2, 0xbf, 0x3a, 0x9b, 0x06, 0x6a, 0xab, 0xde, 0x20, 0x5f, 0x69, 0x30, 0x5d, 0xcd, 0xf9, 0xe6, 0x7f, 0xdb, 0x89, 0x2d, 0x7f, 0x48, 0x9f, 0xb2, 0x6e, 0x14, 0x5c, 0xf0, 0xbd, 0xd0, 0xa4, 0xbf, 0x59, 0x57, 0xd0, 0x99, 0xd5, 0x9b, 0x2c, 0x32, 0x72, 0x47, 0xd3, 0x31, 0x54, 0x71, 0x2d, 0x9d, 0x66, 0x48, 0x85, 0xa5, 0xee},
),
//9
newTwistedPNiels(
[fieldBytes]byte{0xd6, 0x70, 0x1e, 0xb5, 0xb7, 0xda, 0x6f, 0x3d, 0xc0, 0x12, 0x9e, 0xda, 0xd6, 0x41, 0x7f, 0xe4, 0x1f, 0xcb, 0x6a, 0x68, 0xac, 0x55, 0x3b, 0x15, 0xe9, 0x42, 0x4c, 0xe3, 0x6d, 0x9b, 0x33, 0x61, 0x35, 0xf8, 0x88, 0x42, 0x75, 0x69, 0x35, 0xf8, 0x37, 0x6a, 0xba, 0x72, 0xec, 0xb8, 0xd6, 0x5f, 0x17, 0xf1, 0xcf, 0xc0, 0x34, 0x4f, 0x8d, 0x6c},
[fieldBytes]byte{0xbc, 0x0f, 0x44, 0x15, 0x06, 0xc5, 0x35, 0x57, 0x1a, 0x0b, 0x18, 0xed, 0x4d, 0x57, 0x46, 0x8b, 0x25, 0x46, 0x30, 0xee, 0xdb, 0x91, 0x05, 0xb5, 0xf7, 0xb5, 0xf1, 0x9d, 0xdd, 0x1f, 0x89, 0x66, 0x30, 0x94, 0x20, 0xb5, 0x8a, 0xf7, 0x1e, 0x66, 0x70, 0x9f, 0x94, 0xcc, 0xca, 0xc5, 0x12, 0x38, 0x65, 0x10, 0x93, 0x93, 0x72, 0xa2, 0x76, 0xc1},
[fieldBytes]byte{0x20, 0xa8, 0xe3, 0xb5, 0x1f, 0x00, 0x47, 0x37, 0xf4, 0xc8, 0x78, 0x31, 0x08, 0x97, 0x66, 0xce, 0xa5, 0x50, 0x03, 0xcb, 0x59, 0x61, 0x58, 0x17, 0xe9, 0xb9, 0xaa, 0x72, 0xe7, 0x10, 0xe0, 0x71, 0x8a, 0x19, 0x93, 0x8f, 0x1f, 0x47, 0x59, 0x24, 0x1f, 0xc4, 0xff, 0x6c, 0x53, 0xa6, 0x2f, 0x58, 0x56, 0xf5, 0x29, 0xd5, 0xce, 0x4b, 0x92, 0x95},
[fieldBytes]byte{0x69, 0x4e, 0x97, 0x87, 0x5a, 0x9a, 0x92, 0x33, 0xd0, 0x75, 0x0c, 0x57, 0xed, 0x37, 0x79, 0x9a, 0xd2, 0x7e, 0xbe, 0x6b, 0x1b, 0xba, 0xe1, 0x69, 0x1a, 0x31, 0xea, 0xab, 0xa3, 0x28, 0x7d, 0x0d, 0x07, 0x1f, 0x4e, 0x17, 0xe9, 0x1e, 0x6c, 0x3d, 0x14, 0xea, 0xfa, 0x52, 0x02, 0x29, 0xc6, 0xf1, 0xdf, 0xc7, 0x2f, 0xfa, 0x64, 0x9e, 0xcf, 0xc1},
),
//10
newTwistedPNiels(
[fieldBytes]byte{0x5c, 0x93, 0x5e, 0x68, 0x6d, 0x43, 0xd5, 0x9a, 0xdc, 0x5d, 0x9d, 0x82, 0x8c, 0x2a, 0x25, 0x1f, 0xdc, 0x6d, 0x87, 0xbc, 0x0f, 0xe4, 0x2f, 0x86, 0x7b, 0x7b, 0xc1, 0xf0, 0x1c, 0xa4, 0x11, 0x08, 0xa0, 0xc0, 0x39, 0x58, 0x45, 0x65, 0x4e, 0x46, 0x18, 0xd0, 0x23, 0x58, 0xbc, 0xd2, 0x1c, 0xd0, 0xa9, 0xe5, 0x18, 0xe1, 0xe5, 0xeb, 0x30, 0xd0},
[fieldBytes]byte{0x45, 0xed, 0x7b, 0xef, 0x3a, 0xb1, 0x04, 0x60, 0x3e, 0xda, 0xf4, 0x3f, 0xe7, 0xcb, 0xa8, 0x21, 0x91, 0xa9, 0x1b, 0xef, 0x40, 0xc3, 0x03, 0x40, 0x58, 0x54, 0xd8, 0x9f, 0xb3, 0xf7, 0x7f, 0x56, 0x15, 0x14, 0xda, 0x80, 0x65, 0x52, 0x05, 0x7d, 0x9b, 0xae, 0xdc, 0x92, 0xc1, 0xfc, 0xdc, 0x01, 0x5d, 0x2c, 0xa8, 0x58, 0x05, 0xce, 0xc6, 0xf6},
[fieldBytes]byte{0x85, 0xd8, 0x28, 0x66, 0x15, 0x5d, 0x89, 0x7a, 0x38, 0xa3, 0x81, 0x28, 0xd6, 0x25, 0x11, 0x52, 0x2c, 0x53, 0x7f, 0x00, 0x27, 0x56, 0x4f, 0x11, 0x33, 0x32, 0x74, 0x0c, 0x67, 0xec, 0x3e, 0x9c, 0x21, 0x5e, 0xd4, 0x1c, 0x2a, 0xfe, 0x60, 0x16, 0x5c, 0x2a, 0x6d, 0x93, 0x6b, 0xe9, 0xbc, 0x11, 0x05, 0x11, 0x8e, 0x01, 0x71, 0xd8, 0x01, 0x55},
[fieldBytes]byte{0x04, 0x2c, 0x65, 0x63, 0x32, 0x3f, 0xbd, 0x64, 0x91, 0xf2, 0x9a, 0xdf, 0xae, 0xbc, 0xa9, 0x74, 0x51, 0xba, 0xf3, 0xe0, 0xab, 0xd2, 0xe7, 0xc3, 0xc5, 0xda, 0xec, 0x4e, 0xa0, 0xe6, 0x01, 0xb6, 0x9c, 0xb0, 0xd9, 0x85, 0x11, 0x3e, 0xc7, 0x10, 0xd2, 0xc7, 0x68, 0x11, 0xda, 0x70, 0x63, 0x22, 0x44, 0x7b, 0x83, 0x8d, 0xb0, 0x97, 0x59, 0x4f},
),
//11
newTwistedPNiels(
[fieldBytes]byte{0x92, 0x91, 0xed, 0x7f, 0xb8, 0x11, 0x83, 0xd6, 0x0a, 0x4f, 0xa7, 0x39, 0xf2, 0x78, 0xc1, 0xf5, 0x46, 0xd1, 0xfa, 0x01, 0x6f, 0xdb, 0xbe, 0xd3, 0xeb, 0xd5, 0xa9, 0xb9, 0x03, 0x13, 0xe9, 0x8f, 0x9f, 0x17, 0x0c, 0x14, 0x12, 0x18, 0x07, 0x0a, 0x95, 0xed, 0xf6, 0xd9, 0x30, 0x8d, 0x12, 0x90, 0x75, 0x50, 0xbb, 0x4b, 0x8f, 0xac, 0x49, 0xad},
[fieldBytes]byte{0x2a, 0x7b, 0xdd, 0xf5, 0xdd, 0x1e, 0xad, 0xf4, 0x70, 0x9f, 0xf3, 0x1f, 0x69, 0xa1, 0xca, 0x7f, 0xf9, 0xcb, 0x53, 0x4b, 0x94, 0xc2, 0x3f, 0xa5, 0x0f, 0x7d, 0x1b, 0x6a, 0x6c, 0x21, 0x1a, 0xf7, 0x50, 0x11, 0x76, 0xd9, 0x49, 0xbb, 0xc7, 0x73, 0x5f, 0x48, 0x09, 0x40, 0xe6, 0x37, 0xb6, 0x5c, 0x7e, 0x41, 0x80, 0x2d, 0x63, 0x00, 0x66, 0x82},
[fieldBytes]byte{0x8a, 0xd6, 0x1f, 0x0a, 0x1b, 0x91, 0x55, 0xc5, 0x21, 0x8c, 0xa2, 0x03, 0x8d, 0x82, 0x05, 0x37, 0xf1, 0xeb, 0x6a, 0xd9, 0xc0, 0x03, 0x39, 0xda, 0x45, 0x93, 0x3a, 0x3b, 0x10, 0xb8, 0xa8, 0xa9, 0x33, 0xd8, 0x84, 0x70, 0x63, 0x1c, 0x26, 0x12, 0xac, 0x2e, 0x87, 0xbd, 0x3d, 0xfe, 0xae, 0x14, 0xb9, 0x57, 0xf0, 0x31, 0x49, 0xb2, 0x93, 0x3e},
[fieldBytes]byte{0x89, 0x1e, 0x0a, 0xbb, 0x40, 0xf9, 0x5e, 0x7c, 0xb3, 0xff, 0x32, 0x43, 0xcd, 0x20, 0x11, 0x26, 0x3e, 0xc1, 0x20, 0x85, 0xc7, 0xdf, 0x18, 0xab, 0xa8, 0x6d, 0xb0, 0xd6, 0xad, 0x41, 0xa7, 0xe1, 0x75, 0xb9, 0x6f, 0x6d, 0x29, 0xdd, 0x82, 0x3d, 0x7c, 0x59, 0xe7, 0x8e, 0x53, 0xad, 0x27, 0x8f, 0x10, 0xcf, 0x36, 0x30, 0x47, 0xf5, 0x02, 0xb3},
),
//12
newTwistedPNiels(
[fieldBytes]byte{0xff, 0xca, 0xcf, 0x02, 0x66, 0x70, 0x60, 0x2f, 0x4e, 0xc4, 0x31, 0x4e, 0xb8, 0x41, 0x43, 0x5b, 0x61, 0x51, 0x42, 0xfd, 0x8e, 0x78, 0xf7, 0x00, 0x9d, 0x17, 0x42, 0xda, 0x2f, 0xfb, 0xe2, 0x90, 0x4d, 0x6f, 0x81, 0xb0, 0x24, 0x3e, 0x58, 0xf4, 0xa3, 0xcc, 0x55, 0x5d, 0x42, 0x00, 0xdf, 0x53, 0xfa, 0x88, 0xfc, 0x09, 0x22, 0x8f, 0xa6, 0xde},
[fieldBytes]byte{0x36, 0xff, 0xaf, 0x76, 0xf6, 0xbd, 0x72, 0x31, 0x88, 0x95, 0x7c, 0x65, 0xee, 0xde, 0x7c, 0x9a, 0xc0, 0x0b, 0x2f, 0x01, 0x65, 0x8c, 0xbd, 0x1f, 0x55, 0xa2, 0x5c, 0x0d, 0xac, 0x8e, 0x91, 0x06, 0x22, 0xd5, 0xf5, 0x42, 0xae, 0xb9, 0x45, 0xe3, 0xdf, 0xd4, 0xca, 0x87, 0x20, 0x24, 0x0b, 0x69, 0xd4, 0xd9, 0x89, 0xc3, 0x8d, 0x1e, 0x4f, 0xfd},
[fieldBytes]byte{0x17, 0x1e, 0x96, 0x11, 0x6e, 0x04, 0x7e, 0x38, 0x59, 0x73, 0x34, 0xcc, 0xd8, 0x6c, 0xec, 0xb2, 0xa1, 0x2f, 0x4c, 0x06, 0x79, 0xbd, 0x12, 0xe8, 0x20, 0x57, 0x21, 0xeb, 0x9f, 0xbe, 0xec, 0x01, 0xde, 0x9e, 0x3c, 0x93, 0xa3, 0x7f, 0xfc, 0xbe, 0x0e, 0x3a, 0xc7, 0xa9, 0xe1, 0x14, 0x3c, 0x72, 0x4c, 0x1d, 0x4b, 0xd6, 0x53, 0x1a, 0xe2, 0x96},
[fieldBytes]byte{0x99, 0xe3, 0x76, 0x4f, 0x04, 0x88, 0xcd, 0x7e, 0x4f, 0x76, 0x1f, 0x62, 0x53, 0x74, 0x18, 0xcc, 0x60, 0x27, 0xf9, 0x96, 0x87, 0x72, 0xe1, 0xd4, 0x74, 0x7e, 0x59, 0x48, 0x5a, 0xec, 0x11, 0xda, 0x5e, 0x17, 0x46, 0x05, 0x79, 0xa6, 0x59, 0xc4, 0x5c, 0x2b, 0xf4, 0x75, 0x49, 0xe8, 0xdb, 0xf4, 0xd3, 0xe0, 0x68, 0xd0, 0xf2, 0x89, 0x65, 0x0b},
),
//13
newTwistedPNiels(
[fieldBytes]byte{0xbf, 0x0f, 0xcf, 0xaf, 0xcc, 0xdd, 0x65, 0x3c, 0x0c, 0x03, 0xa1, 0x6c, 0x2f, 0x7c, 0x27, 0xde, 0x4e, 0xec, 0x5f, 0x4f, 0x19, 0xaf, 0xf6, 0x31, 0x9b, 0x79, 0xf9, 0x42, 0x6e, 0x98, 0xa2, 0xfb, 0x8a, 0xab, 0x92, 0xb3, 0x57, 0x83, 0x51, 0x87, 0xff, 0xfd, 0x0b, 0xe4, 0xfe, 0xc5, 0x54, 0x9e, 0x4f, 0x57, 0xb5, 0x2b, 0x3b, 0x03, 0x9d, 0xe6},
[fieldBytes]byte{0x39, 0x2e, 0x8d, 0xf1, 0x70, 0xcc, 0x11, 0xf9, 0xe2, 0x4b, 0x70, 0x30, 0x9d, 0x2a, 0x8c, 0x60, 0x7a, 0x2e, 0x76, 0xc6, 0x7d, 0xd8, 0xe1, 0x74, 0xe1, 0xe5, 0xc6, 0x0a, 0x81, 0x29, 0xf8, 0x9e, 0xf4, 0x86, 0xab, 0x0c, 0x59, 0xf1, 0x7a, 0x6c, 0xe4, 0xc3, 0xa5, 0x1f, 0x47, 0x7f, 0xf1, 0xec, 0xb8, 0xde, 0xd7, 0xcd, 0x86, 0x4c, 0x9d, 0xf8},
[fieldBytes]byte{0x0d, 0xd3, 0xb8, 0xe0, 0x2e, 0xd1, 0x6e, 0xb0, 0x8b, 0x10, 0xf0, 0x39, 0x5c, 0xa8, 0xda, 0xad, 0x99, 0x55, 0xea, 0x53, 0xc7, 0x7d, 0x82, 0x81, 0x32, 0x59, 0xad, 0x20, 0xe0, 0xe9, 0x8a, 0x5a, 0xe6, 0x69, 0x2f, 0x67, 0x31, 0x7d, 0x31, 0x47, 0xa1, 0x0f, 0x28, 0xb1, 0x49, 0x48, 0x6a, 0x70, 0xec, 0x65, 0x26, 0x59, 0x68, 0xa1, 0x61, 0xd9},
[fieldBytes]byte{0x8d, 0xaa, 0x22, 0x6e, 0x35, 0xc4, 0x76, 0x57, 0x8b, 0x33, 0x2b, 0xcf, 0x96, 0xc9, 0x3f, 0x11, 0x39, 0xed, 0x41, 0x8e, 0x54, 0x78, 0x44, 0x22, 0xf8, 0xd2, 0xfd, 0xa3, 0x13, 0x73, 0x74, 0xb8, 0x67, 0xaf, 0xdf, 0x91, 0xf7, 0x68, 0x20, 0xe9, 0xe2, 0x26, 0x52, 0x1e, 0x5e, 0xff, 0xfd, 0xbf, 0xea, 0x3e, 0x4c, 0x82, 0xbb, 0x0d, 0x00, 0xb0},
),
//14
newTwistedPNiels(
[fieldBytes]byte{0x1c, 0xa9, 0xb7, 0xca, 0x99, 0xb9, 0x5d, 0x40, 0x89, 0xb7, 0x34, 0xd5, 0xa3, 0x7b, 0xd8, 0xd2, 0x5a, 0x88, 0xf9, 0x39, 0x5e, 0xa8, 0x6a, 0x5f, 0x5d, 0xb4, 0x4c, 0xa5, 0xfd, 0xbb, 0xf2, 0x3c, 0x01, 0x2e, 0x15, 0x11, 0x2d, 0xd5, 0xb3, 0xff, 0xb8, 0x87, 0x62, 0xbf, 0x68, 0x66, 0xc5, 0x69, 0xca, 0x48, 0x06, 0xe2, 0x4b, 0x0a, 0xbe, 0xea},
[fieldBytes]byte{0x3b, 0x25, 0xe4, 0xe7, 0x1a, 0xfe, 0x2e, 0xf2, 0xf7, 0x5e, 0xf2, 0xd9, 0x5c, 0x86, 0x79, 0xf0, 0x26, 0xea, 0xb1, 0x91, 0xa9, 0x60, 0xa1, 0xda, 0xac, 0x19, 0xa2, 0xc4, 0x83, 0xb1, 0xba, 0x9e, 0xaa, 0xb5, 0x1e, 0xc0, 0xb4, 0x3e, 0x97, 0x64, 0xbe, 0x35, 0x78, 0x87, 0xb8, 0xf2, 0x59, 0x97, 0x52, 0xf1, 0xd4, 0x3b, 0x6b, 0x1b, 0x6c, 0xb0},
[fieldBytes]byte{0x9b, 0xdd, 0x6e, 0xc1, 0x13, 0x7e, 0x05, 0x3a, 0x85, 0xe8, 0x9b, 0x54, 0xff, 0xd9, 0x78, 0xbc, 0x3f, 0x61, 0xc4, 0xae, 0x30, 0x35, 0x04, 0x35, 0xf8, 0xca, 0x4e, 0x14, 0xf8, 0xea, 0xba, 0xf7, 0xd4, 0xc9, 0x82, 0x39, 0x9b, 0x58, 0xd0, 0x45, 0x24, 0xaf, 0x26, 0x46, 0x98, 0x91, 0x57, 0xfe, 0x55, 0xa9, 0x32, 0x45, 0x13, 0x75, 0x0a, 0x7d},
[fieldBytes]byte{0x32, 0xad, 0xdc, 0xe9, 0xcb, 0x48, 0x9e, 0x53, 0x7e, 0x19, 0x16, 0x7c, 0xf7, 0x2e, 0xcd, 0xd2, 0x8e, 0x2e, 0x12, 0xec, 0xbc, 0x94, 0x89, 0xdc, 0x41, 0x07, 0x94, 0x20, 0xb4, 0x29, 0x6f, 0x16, 0x1d, 0x2c, 0x8a, 0xad, 0xe9, 0xf8, 0xae, 0x01, 0x47, 0x06, 0x31, 0x88, 0xe1, 0xe4, 0xf1, 0x9a, 0x57, 0x53, 0x2e, 0xac, 0xbb, 0x11, 0x9a, 0x13},
),
//15
newTwistedPNiels(
[fieldBytes]byte{0xcd, 0xb6, 0x4c, 0x2d, 0x35, 0x80, 0x1d, 0x08, 0xfd, 0xe5, 0xd3, 0x05, 0xfc, 0xe7, 0x02, 0x4f, 0x99, 0x7d, 0x2c, 0x0c, 0xed, 0x8c, 0x3f, 0x30, 0x1b, 0xac, 0xc3, 0x39, 0x87, 0xb3, 0x8a, 0x54, 0xa8, 0x33, 0x37, 0xa7, 0xa9, 0x38, 0x84, 0x8a, 0x27, 0xc1, 0x7a, 0xd0, 0xdd, 0x83, 0x37, 0xc1, 0xf2, 0x27, 0xf2, 0x40, 0xfd, 0xf0, 0x58, 0x3d},
[fieldBytes]byte{0xe7, 0x73, 0x8c, 0x78, 0x94, 0x10, 0xa0, 0xac, 0x6c, 0x5f, 0x47, 0xf9, 0xd8, 0xe9, 0xaa, 0xda, 0xa4, 0x67, 0x34, 0x38, 0xe9, 0x2b, 0xfb, 0x4f, 0x5c, 0xe6, 0xbb, 0x92, 0x4f, 0x21, 0x33, 0xc0, 0x28, 0xe3, 0xd0, 0x7c, 0xcb, 0x7d, 0xc6, 0x33, 0x45, 0x99, 0xf1, 0x55, 0x9b, 0x43, 0xcd, 0xec, 0xb1, 0xf0, 0x1f, 0x49, 0x60, 0x0a, 0xb8, 0x3b},
[fieldBytes]byte{0x04, 0xf6, 0xfd, 0x1b, 0x2f, 0xc1, 0x3b, 0x10, 0x1e, 0x61, 0x52, 0x66, 0x22, 0xa5, 0x71, 0xe8, 0x93, 0x9d, 0xfe, 0xe5, 0x3d, 0xaa, 0xaf, 0x15, 0x5d, 0x24, 0x66, 0x13, 0xa7, 0x43, 0x6c, 0xdc, 0x74, 0xd9, 0xce, 0xc5, 0xcc, 0x85, 0xca, 0xf7, 0x14, 0x12, 0xe2, 0x63, 0x2d, 0x9d, 0x28, 0x6f, 0x75, 0x2a, 0x4b, 0x0e, 0xfe, 0x3a, 0x83, 0x93},
[fieldBytes]byte{0xf1, 0xc9, 0x1f, 0x03, 0x8d, 0x8b, 0x98, 0xf2, 0x32, 0x5f, 0x00, 0xd1, 0xfb, 0xe4, 0x69, 0x09, 0xda, 0x16, 0x2a, 0x59, 0x91, 0xab, 0xe0, 0x3e, 0xc3, 0xa0, 0xac, 0x7c, 0x25, 0xee, 0x86, 0xf8, 0x09, 0x22, 0x2a, 0xb0, 0xa6, 0xf9, 0x1c, 0x43, 0x48, 0xa3, 0xc2, 0x7c, 0x70, 0xec, 0x6b, 0xda, 0xd4, 0x0a, 0x45, 0x51, 0x66, 0xc1, 0x57, 0xac},
),
}
dst := make([]*twPNiels, 1<<tableSize)
px, _ := hex.DecodeString("4d8b77dc973a1f9bcd5358c702ee8159a71cd3e4c1ff95bfb30e7038cffe9f794211dffd758e2a2a693a08a9a454398fde981e5e2669acad")
py, _ := hex.DecodeString("27193fda68a08730d1def89d64c7f466d9e3d0ac89d8fdcd17b8cdb446e80404e8cd715d4612c16f70803d50854b66c9b3412e85e2f19b0d")
pz, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001")
pt, _ := hex.DecodeString("4d8b77dc973a1f9bcd5358c702ee8159a71cd3e4c1ff95bfb30e7038cffe9f794211dffd758e2a2a693a08a9a454398fde981e5e2669acad")
pu, _ := hex.DecodeString("27193fda68a08730d1def89d64c7f466d9e3d0ac89d8fdcd17b8cdb446e80404e8cd715d4612c16f70803d50854b66c9b3412e85e2f19b0d")
p := &twExtensible{
new(bigNumber).setBytes(px),
new(bigNumber).setBytes(py),
new(bigNumber).setBytes(pz),
new(bigNumber).setBytes(pt),
new(bigNumber).setBytes(pu),
}
prepareWNAFTable(dst, p, tableSize)
for i, di := range dst {
c.Assert(di.equals(exp[i]), Equals, true)
}
prepareWNAFTable(dst, p, uint(0))
c.Assert(dst, DeepEquals, dst)
}
func (s *Ed448Suite) Test_DecafPrepareWNAFTable(c *C) {
p := &twExtendedPoint{
&bigNumber{
0x0bd513ab, 0x0becd4e1, 0x0feea16d, 0x0c91aeb8,
0x04f702d7, 0x0e8b2517, 0x0b4cf299, 0x0de1577f,
0x03ccb3b5, 0x071757b7, 0x0fa556d7, 0x07b94301,
0x0486b2ab, 0x0fe6055d, 0x08da7f70, 0x07449138,
},
&bigNumber{
0x09d75bb9, 0x0cd01f0c, 0x02119414, 0x03c3ddd0,
0x0bab5b96, 0x0953a473, 0x078081d4, 0x0299b4cf,
0x0481778a, 0x03068548, 0x0b4e8cd7, 0x08736621,
0x00b3d6f6, 0x0d1fee8f, 0x00ddafb6, 0x0baca9cf,
},
&bigNumber{
0x04cedf4d, 0x0f2f0323, 0x05c0b0a4, 0x0e586b05,
0x0e57c90f, 0x0872aa63, 0x0c48bb32, 0x001f2977,
0x071ad8b7, 0x076b4771, 0x01fb4fcd, 0x064153d7,
0x021a4fdb, 0x0e5d0c3a, 0x055c631f, 0x084a9aef,
},
&bigNumber{
0x0c71ac9e, 0x0858983e, 0x07d8fc55, 0x08cd5508,
0x026be50e, 0x03585457, 0x0eb5ad9b, 0x06c8c5c2,
0x0a9c39d2, 0x0a789234, 0x00d1d85e, 0x020eb608,
0x07931bd4, 0x0b8881ca, 0x0fe7be4b, 0x0c24434b,
},
}
size := uint(5)
dst := make([]*twPNiels, 1<<size)
exp := [32]*twPNiels{
//0
&twPNiels{
&twNiels{
&bigNumber{0x0e02480e, 0x00e34a2a, 0x0222f2a7, 0x07322f17, 0x06b458be, 0x0ac87f5c, 0x0c338f3a, 0x04b85d4f, 0x00b4c3d4, 0x0bef2d91, 0x0ba935ff, 0x00ba231f, 0x0c2d244b, 0x0d39e931, 0x08033045, 0x04681896},
&bigNumber{0x05ac6f65, 0x08bcf3ee, 0x02003582, 0x00558c89, 0x00a25e6e, 0x07dec98b, 0x02cd746e, 0x007b0c4f, 0x084e2b41, 0x0a1ddcff, 0x0af3e3ae, 0x002ca923, 0x053a89a2, 0x0d05f3ec, 0x09b82f27, 0x02f13b07},
&bigNumber{0x0c0a3674, 0x058b402f, 0x082b4fd7, 0x0a50fb9e, 0x08b2816f, 0x0a887e3e, 0x088d1e4e, 0x0281e1a3, 0x03d86bed, 0x0a3f4876, 0x085c3b56, 0x0c4cadbb, 0x0f93232c, 0x04932f2b, 0x0e3d584d, 0x0fec60de}},
&bigNumber{0x099dbe9b, 0x0e5e0646, 0x0b816149, 0x0cb0d60a, 0x0caf921f, 0x00e554c7, 0x08917665, 0x003e52ef, 0x0e35b16f, 0x0ed68ee2, 0x03f69f9a, 0x0c82a7ae, 0x04349fb6, 0x0cba1874, 0x0ab8c63f, 0x009535de},
},
//1
&twPNiels{
&twNiels{
&bigNumber{0x07d8a999, 0x086d13e5, 0x0a832fe6, 0x018c7955, 0x0e135dfb, 0x05813ec4, 0x0e0af2c2, 0x0b7ced7a, 0x0b6461f4, 0x06b1b29b, 0x00150b6f, 0x0411118e, 0x07bccb48, 0x02414599, 0x0bd0cf4a, 0x08a4fb89},
&bigNumber{0x0cbfd90c, 0x0c19f35f, 0x0535378f, 0x02177b4e, 0x06a368f8, 0x01a66074, 0x004dc4fe, 0x09a3e1c2, 0x08f69882, 0x0225519e, 0x04450419, 0x0ccd8724, 0x03feb6bb, 0x0433e957, 0x06f8e3e6, 0x00589935},
&bigNumber{0x02663083, 0x0f213fbe, 0x0f22adf9, 0x0da65f39, 0x0bb74c3b, 0x018627fb, 0x0a436b8b, 0x0f722322, 0x033461e2, 0x0bef0dec, 0x0284cf25, 0x04e4b6d8, 0x0e6cd5f9, 0x0c89130a, 0x0a5bcdcb, 0x0d75d96d}},
&bigNumber{0x06b2c3e4, 0x0da3841f, 0x0881b3d6, 0x0dc38ed4, 0x001c3b51, 0x09d2d9f8, 0x0334ccfc, 0x0d47bb7b, 0x0b9a8001, 0x04d711b7, 0x003f3cb1, 0x0d1e5814, 0x072127d2, 0x04cb73c3, 0x06c18980, 0x00c2c3b4}},
//2
&twPNiels{
&twNiels{
&bigNumber{0x0116cad6, 0x00b5b71b, 0x050e98cb, 0x08a2baba, 0x027ab2fb, 0x062746ba, 0x02ddce80, 0x047e0aa5, 0x0f800b51, 0x0931d8a4, 0x0bc99ae9, 0x02435167, 0x04c4772d, 0x082a8b28, 0x0df2451f, 0x075f8078},
&bigNumber{0x03a237fb, 0x0145b05b, 0x08af3e84, 0x0f75b502, 0x02a2de9f, 0x0597d7fb, 0x09a73e10, 0x02435252, 0x038c2062, 0x0d6189a6, 0x03c0544d, 0x028c0ea9, 0x04cbf10a, 0x09d8d0b3, 0x05bc818d, 0x0767c013},
&bigNumber{0x0f1396cf, 0x05dfc89f, 0x0ca2c145, 0x0112a7f8, 0x02efdf82, 0x025ea018, 0x022e4ced, 0x04229e12, 0x066bea07, 0x0bed76a8, 0x097d8fb7, 0x093576f2, 0x0058e7ec, 0x01ad3052, 0x03ecd4cb, 0x0c296313}},
&bigNumber{0x02f93b02, 0x098e6cc4, 0x0941868e, 0x0a9ae43d, 0x08f4a2f6, 0x03be5400, 0x02a294e3, 0x01c2ab64, 0x0456c243, 0x0ed995d2, 0x04b7c610, 0x06e7a635, 0x0dcb0ae8, 0x0b2a5480, 0x06e74a5e, 0x0c428e49}},
//3
&twPNiels{
&twNiels{
&bigNumber{0x02142a14, 0x0a4f5780, 0x096563c8, 0x06387262, 0x029ed560, 0x0eaf2197, 0x0550f9ca, 0x0ab20392, 0x0914aeda, 0x028895c8, 0x03049a33, 0x07a327e3, 0x06c9b471, 0x0b7b5b6a, 0x01dc5a03, 0x07396d41},
&bigNumber{0x0b1707c1, 0x085872a0, 0x020de63d, 0x06fce297, 0x05608ea5, 0x09173851, 0x017acf79, 0x0eed67fd, 0x00d6f215, 0x044ce0be, 0x0e546987, 0x035c92a6, 0x07df3108, 0x0e9d729d, 0x01306dd5, 0x0cbf6502},
&bigNumber{0x0f55e92d, 0x088e84c6, 0x05f017b4, 0x01f3c579, 0x0e4de524, 0x09e8f780, 0x0208875b, 0x0b4ac08f, 0x0ec88d32, 0x0eff2c37, 0x05fa0cc0, 0x0c19af13, 0x0a971abb, 0x02270b8b, 0x0c5552e8, 0x0b3f162c}},
&bigNumber{0x00c72b78, 0x0569e88c, 0x0951fad0, 0x09b6296c, 0x0ab540b2, 0x09d46a7c, 0x09c28922, 0x0acb87e6, 0x018f3e9c, 0x065070e5, 0x09c0cc34, 0x0685d1c9, 0x021f845a, 0x0fbb4fc5, 0x0128d192, 0x05f3f75f}},
//4
&twPNiels{
&twNiels{
&bigNumber{0x02e2a2ed, 0x0cf6bdef, 0x0b8efb60, 0x08b3232f, 0x00ad2d83, 0x055730ab, 0x0bf87121, 0x04aaff07, 0x056b1770, 0x0e10d48f, 0x000382b9, 0x044118e0, 0x0b70075a, 0x0a7789f6, 0x02add7af, 0x09ea318d},
&bigNumber{0x03bae26c, 0x07dec209, 0x0bae5f9f, 0x07b09e9b, 0x00ad7ba2, 0x01490d8d, 0x03df6478, 0x08bf6cca, 0x0d53064d, 0x086fb512, 0x07fd0436, 0x09d51195, 0x01a813a0, 0x0a550eb8, 0x04dbd9a9, 0x01dd0d91},
&bigNumber{0x0a8bbcea, 0x02e49481, 0x047803cd, 0x0a0ae7b2, 0x0d4c5238, 0x0d638c95, 0x01d4e11a, 0x0e9025eb, 0x0d213d88, 0x053a2a1b, 0x005da428, 0x047c3bf1, 0x0cfd9bc3, 0x00e78d99, 0x079a0e42, 0x0037415e}},
&bigNumber{0x0cd7bc1f, 0x09c0f756, 0x02082038, 0x0f9fb7a5, 0x0732ff1a, 0x080b9bda, 0x063bb423, 0x059874fd, 0x0ba87f5e, 0x049e83b8, 0x019880dd, 0x0c231c83, 0x03c1f599, 0x02b1db2c, 0x09b11705, 0x025fccff}},
//5
&twPNiels{
&twNiels{
&bigNumber{0x067d0fd2, 0x08f1bbf6, 0x02b7ef4f, 0x039c2fb5, 0x001c2dc1, 0x0cb25ac6, 0x0a7092f6, 0x04a402a3, 0x092de108, 0x02093921, 0x06018176, 0x061676c1, 0x0208171e, 0x0f2ebeb0, 0x0f65cfb9, 0x083b33e3},
&bigNumber{0x0fb5b47e, 0x0aa810f4, 0x0f91cba5, 0x0ae7fed8, 0x049fbc66, 0x06b4afb2, 0x0c8ba27f, 0x0867fcc9, 0x09dc21e4, 0x01fe7e02, 0x05192ff9, 0x056c8887, 0x0b92ee14, 0x02c5ca84, 0x0a70f539, 0x05cfc060},
&bigNumber{0x0f471744, 0x0e675cfc, 0x0f6192c6, 0x0ca2fff7, 0x0b5f9066, 0x09e90b89, 0x0cb92fb7, 0x092352bb, 0x06cd2234, 0x02a02b36, 0x0f4bd54d, 0x0adaf4d4, 0x0b3d0d66, 0x0c9518c3, 0x01298f12, 0x08d2355b}},
&bigNumber{0x04aa2a72, 0x08d46715, 0x01e1b60c, 0x04a99865, 0x01f30666, 0x05bcdd4a, 0x098f988c, 0x007e6385, 0x076e5019, 0x0fba21c7, 0x0fd7354d, 0x0e0851fc, 0x06865743, 0x050716eb, 0x08e4bb52, 0x0031f720}},
//6
&twPNiels{
&twNiels{
&bigNumber{0x013d183a, 0x000037b0, 0x099ec810, 0x0bbfb9d1, 0x0b4f15b8, 0x070bfe6a, 0x0d81c75f, 0x0a319047, 0x086df950, 0x0bb2513f, 0x0b2616e7, 0x01ca77c2, 0x0dd43cf6, 0x076b712b, 0x05cbc933, 0x04b467cd},
&bigNumber{0x0d35b011, 0x0610f74b, 0x04b9c6af, 0x02ea4e98, 0x0f90318d, 0x0e3b963d, 0x0f960866, 0x05b6860d, 0x0465092a, 0x0b0638a3, 0x0de29843, 0x051e41fb, 0x0c36ea36, 0x0686b656, 0x0188e253, 0x0d67f2e6},
&bigNumber{0x04e1964b, 0x0860d4d4, 0x0586ea58, 0x01830071, 0x02e67b73, 0x03438d31, 0x017f8fd0, 0x046cac25, 0x02530dbf, 0x08177f65, 0x028cbf0c, 0x0396a605, 0x0d43f2ae, 0x0a59325f, 0x02661135, 0x0614f8ab}},
&bigNumber{0x0baa9c9c, 0x04be91f3, 0x0dedac99, 0x0f6433b3, 0x0f644eab, 0x0dee8f14, 0x038e844d, 0x02cc1c5b, 0x0a041bc5, 0x03250d46, 0x0c1d47d9, 0x073af384, 0x0e08a811, 0x06e2aeb9, 0x0cc044d0, 0x00d8e589}},
//7
&twPNiels{
&twNiels{
&bigNumber{0x077c8112, 0x0e41d736, 0x0ff9bba6, 0x0a6fef91, 0x052b9394, 0x0d51cc2d, 0x0bff6d55, 0x0c7dbedf, 0x03948fe4, 0x09c9de7e, 0x0f152415, 0x0186f90d, 0x0d57b320, 0x0e338e25, 0x04a87bdb, 0x09efd9a1},
&bigNumber{0x07177242, 0x0a1995b2, 0x0ca669b2, 0x06dd8fa3, 0x0cb01da0, 0x0c88802d, 0x078e4925, 0x07c2db4c, 0x0f134406, 0x0b9eb2bd, 0x081d6021, 0x0e1160ac, 0x098cf073, 0x09bcf20f, 0x03036dbb, 0x0ef2399c},
&bigNumber{0x082d4ff1, 0x0722accf, 0x01e8025a, 0x0327107a, 0x0f2be0c5, 0x018cc830, 0x02a05726, 0x0321fd66, 0x0ac3040b, 0x0de80aef, 0x01fa1516, 0x00685790, 0x03f29a4d, 0x07abf7dc, 0x012467af, 0x0d31c50c}},
&bigNumber{0x04dc3c8f, 0x043ecbce, 0x077f6ad9, 0x08ed5445, 0x0bfa155c, 0x0f4ddcea, 0x0a5c167d, 0x0c81cc19, 0x0c75e667, 0x0db39bc1, 0x0316a293, 0x087711cb, 0x05f285c0, 0x0b2e5c9e, 0x0bb94908, 0x04b087a2}},
//8
&twPNiels{
&twNiels{
&bigNumber{0x05021d6f, 0x0edf14f6, 0x0bd393a3, 0x09e9f1fd, 0x0133dd79, 0x0bd8286d, 0x0f635f50, 0x032434d4, 0x0ae4da74, 0x0d931561, 0x04dd4e27, 0x00fefdfa, 0x061d0982, 0x0764ce08, 0x0cc980f7, 0x0a240d15},
&bigNumber{0x0484130a, 0x0c1e4667, 0x053e34da, 0x050297eb, 0x0eeac0e0, 0x08472f8c, 0x080dcfa8, 0x0aed527a, 0x01e4971e, 0x05b27f29, 0x01a49eda, 0x0b9df7a7, 0x0171fb3f, 0x0006285f, 0x031fedfd, 0x07d0818b},
&bigNumber{0x09a28e00, 0x0d62f966, 0x0eec2fff, 0x0e4bf432, 0x0a584ebf, 0x0a600e2e, 0x0157dfe7, 0x09a8f6af, 0x077bd729, 0x0cc62c8e, 0x04358fab, 0x0f570c20, 0x06579792, 0x07e9cf52, 0x0920f29e, 0x00bc7bc6}},
&bigNumber{0x01ea0f05, 0x0f7457be, 0x0cb2d4ed, 0x001f381c, 0x054ba528, 0x04c29a74, 0x0bd59205, 0x0d22c521, 0x0ce0cd27, 0x08806a3f, 0x066ea993, 0x0756e925, 0x04acca20, 0x0b1d6df2, 0x08447cef, 0x02106fe2}},
//9
&twPNiels{
&twNiels{
&bigNumber{0x07e4eac7, 0x00afc806, 0x034db468, 0x0daf34c7, 0x07fae0b4, 0x010a4727, 0x0c6611d8, 0x0b99b05e, 0x05d75734, 0x094a94ae, 0x0fa1e36c, 0x05109ef2, 0x09767787, 0x0c3193de, 0x0afef19c, 0x0c2b6199},
&bigNumber{0x0cdd708b, 0x00bad934, 0x0e55c940, 0x0af14a3c, 0x06dc3c82, 0x078a7971, 0x086e1398, 0x0db2f5cd, 0x04b68950, 0x0780b4e3, 0x0dd51697, 0x047f6e02, 0x0d1e0f82, 0x098425dd, 0x0dad2220, 0x0a65a126},
&bigNumber{0x096e13a3, 0x08a6c862, 0x0fa01794, 0x04e17aa6, 0x0db9aee3, 0x0dfa8831, 0x0309538f, 0x05560f7f, 0x06ce8dd1, 0x00d2c98f, 0x0efa5b45, 0x0e8608d5, 0x09c61837, 0x0857e159, 0x0f960430, 0x0fdc2b4a}},
&bigNumber{0x0c470aac, 0x0cb76dd4, 0x07d9bdf6, 0x0fd61f5b, 0x0dd8dd2c, 0x069a2e84, 0x0f4a4d3d, 0x083d4b83, 0x0a8a0bf8, 0x04381f8b, 0x02343749, 0x0cf938ef, 0x0d6bc8c4, 0x076c424a, 0x0dd76733, 0x01fa0fee}},
//10
&twPNiels{
&twNiels{
&bigNumber{0x04f70357, 0x0c4a5a90, 0x0831b8eb, 0x0bb6f10b, 0x0c2b152d, 0x0037f50e, 0x0de7302f, 0x09b73d47, 0x08c0f6e6, 0x0c934a4c, 0x0118e2e8, 0x0d7aabb3, 0x0d74e8de, 0x07052415, 0x02c18037, 0x09123af7},
&bigNumber{0x04956452, 0x03e8aba0, 0x046f2ae9, 0x0316ec8c, 0x0ce3f30a, 0x044067fd, 0x0706944a, 0x03287f88, 0x0116b794, 0x0ad9ba44, 0x0b262237, 0x074411e8, 0x05c9e6e1, 0x088407e1, 0x0bb639c1, 0x0994b02e},
&bigNumber{0x0c6272a4, 0x09a02d92, 0x0a43b1eb, 0x0ab22837, 0x032ed61e, 0x011e832c, 0x09f4ca15, 0x0595291c, 0x01da4f27, 0x051148db, 0x0180cea5, 0x07cb6a58, 0x0943dfbe, 0x09b0a2e6, 0x0fdfb3a3, 0x0c858c81}},
&bigNumber{0x0a5bfa2b, 0x0d1cdfae, 0x04dc9758, 0x0bf46f97, 0x0baf412d, 0x037d1741, 0x08772355, 0x0673a0f0, 0x02db8a7d, 0x0e8b4e8d, 0x0cb15e6c, 0x054b7042, 0x007bcee2, 0x0ee372d6, 0x06b444fe, 0x0f7bcb49}},
//11
&twPNiels{
&twNiels{
&bigNumber{0x0ce546d5, 0x09d289f9, 0x0bbfb9b1, 0x084350a0, 0x0a081189, 0x0d139549, 0x0080de8c, 0x0ddb45c6, 0x0033fbb5, 0x0b45fb27, 0x0526e0bd, 0x0df24d00, 0x04f15671, 0x0b93be58, 0x0638a2d0, 0x089d8585},
&bigNumber{0x07bcc98c, 0x01991010, 0x048f803b, 0x07d9ee26, 0x01ceea12, 0x03b2d9f3, 0x0dcf818f, 0x0aeb6f47, 0x0af4727f, 0x0a7ed2db, 0x04b77ff6, 0x0539a273, 0x0bc5af85, 0x07b31e64, 0x0cfede69, 0x0da70c7c},
&bigNumber{0x03028e52, 0x098a0ddf, 0x0c77dafe, 0x00e797a5, 0x0fa77a6a, 0x02290dd1, 0x0793250e, 0x0983443a, 0x03d4c87b, 0x0c925c46, 0x05daf322, 0x00841d6c, 0x0f9b9e7e, 0x0791dc55, 0x0d32418a, 0x0eeaf2d2}},
&bigNumber{0x055336f2, 0x0fdaa2b8, 0x0f7e503f, 0x0dd88ca5, 0x0026fb3d, 0x06e58190, 0x0aae82f8, 0x0332b810, 0x0e6cd331, 0x0af91798, 0x0ad1730d, 0x06cafa27, 0x0c478141, 0x00e21fda, 0x0ca6e66b, 0x01e7fce3}},
//12
&twPNiels{
&twNiels{
&bigNumber{0x0f47ebb0, 0x0285daee, 0x05143854, 0x0886d42d, 0x054bf760, 0x0158bbce, 0x04043df6, 0x06989231, 0x0413a875, 0x0ab6bf78, 0x0aab7bef, 0x02346dd7, 0x0b045fc1, 0x08c5c301, 0x03095e62, 0x05be386c},
&bigNumber{0x044b700a, 0x09b5837d, 0x09b60704, 0x053455c1, 0x0c4aa946, 0x00d66bc7, 0x01cfea37, 0x0a17b4ee, 0x0cc7e596, 0x014043cb, 0x0a20cf5a, 0x07ab5ba9, 0x085d6f06, 0x0e6f4a6d, 0x0493983e, 0x0facd06d},
&bigNumber{0x02434ec8, 0x0e73783e, 0x0c8dad85, 0x04e12915, 0x003a3747, 0x025b50c3, 0x018224e6, 0x0993d0b1, 0x027056da, 0x01d9639c, 0x0258cfe7, 0x0bd3272b, 0x0611432f, 0x0cd7b804, 0x08184728, 0x093f2593}},
&bigNumber{0x0f39da24, 0x04d9afa6, 0x08a38330, 0x0b5af168, 0x07608147, 0x05db1080, 0x0895e2ce, 0x0ab8d5db, 0x06287d42, 0x03fdec63, 0x02acc334, 0x01f34eb1, 0x0a5a9a21, 0x010fbc10, 0x080c6cd1, 0x0755234d}},
//13
&twPNiels{
&twNiels{
&bigNumber{0x07c6cf20, 0x001cf371, 0x076df2a7, 0x0c285400, 0x0cb4914c, 0x0db4bad4, 0x09f464de, 0x0e676a6c, 0x09affc50, 0x067ef790, 0x049b8d85, 0x0b12c405, 0x0ccd6a6e, 0x0e2b6120, 0x07b33a14, 0x09a50f7d},
&bigNumber{0x0cba1232, 0x06a09d13, 0x0c43aac0, 0x0b392e40, 0x06070734, 0x00e41c41, 0x0a314dd1, 0x02d62f7e, 0x0958fd74, 0x0d2ece57, 0x0978403e, 0x0ed3a7bf, 0x04495711, 0x0f7e27fb, 0x0b81b131, 0x070b4310},
&bigNumber{0x0dd0cde8, 0x0f415277, 0x0346ff2a, 0x09fecaa1, 0x032c03fd, 0x0d2f3672, 0x0c006934, 0x06396565, 0x08b66446, 0x03ace940, 0x0e0e6074, 0x04152031, 0x063cf406, 0x0641a7e6, 0x0fe9b736, 0x09790603}},
&bigNumber{0x04cbb5c2, 0x0b0047d1, 0x0a6ee1b9, 0x003c3d2b, 0x0e243ccf, 0x052e9536, 0x0edde163, 0x0eba9a9e, 0x004d91a9, 0x05911034, 0x0f6416c7, 0x0f046134, 0x02c05bf1, 0x05ca66d0, 0x005ba5d0, 0x0b068b7d}},
//14
&twPNiels{
&twNiels{
&bigNumber{0x044b05c5, 0x0c18dc3e, 0x0c420784, 0x0fc1b748, 0x0d521b46, 0x02b95eb4, 0x0498c83f, 0x02c18470, 0x0f9c15cc, 0x01088083, 0x0c200d67, 0x0f6169bc, 0x0f358795, 0x091c0102, 0x08e1b32f, 0x0eeb49b4},
&bigNumber{0x0ef146f9, 0x05b769c0, 0x02d0ca94, 0x0157e02d, 0x0ed47cec, 0x079c0e0a, 0x03df43a4, 0x0fe76598, 0x02599624, 0x0da67ded, 0x021d0cac, 0x0e012fdf, 0x003bfb72, 0x053a424d, 0x09598992, 0x0b964588},
&bigNumber{0x015a1494, 0x0ac38eab, 0x0489da78, 0x0a0efb2e, 0x0da03dcd, 0x05488c90, 0x0e9b5cdf, 0x08db32bd, 0x0fd3a908, 0x0bc78c2a, 0x04ae49ed, 0x05199f4d, 0x026fe285, 0x0369cd3e, 0x0529493a, 0x030d1ac4}},
&bigNumber{0x0af7cc81, 0x00404e02, 0x004cacad, 0x08b0cc77, 0x06277144, 0x084c5502, 0x0033ad61, 0x09e727ad, 0x0b9d99a6, 0x09715392, 0x027419a5, 0x06622f5d, 0x04e1832f, 0x03fb7717, 0x0272adf4, 0x0bc61a74}},
//15
&twPNiels{
&twNiels{
&bigNumber{0x0f618715, 0x040c0120, 0x0ee981ee, 0x00460b03, 0x0790d5d4, 0x0cbd0a8f, 0x0273a6c0, 0x059707be, 0x05636cb5, 0x0fe59645, 0x09d310ed, 0x0b06987c, 0x0149a5d6, 0x0c11980d, 0x01964e8e, 0x0e4818f3},
&bigNumber{0x050c7520, 0x021a5f09, 0x001ddb6e, 0x07994384, 0x07025158, 0x0aa2d8b8, 0x0869875a, 0x0feee22c, 0x0fdd0f00, 0x0c7eb583, 0x0008d756, 0x0804c146, 0x0da186de, 0x01cc4147, 0x07be1bec, 0x0045b0d4},
&bigNumber{0x0c6c0e13, 0x054c7fc4, 0x056fd528, 0x0c516bf1, 0x0ebb7d71, 0x03db56b9, 0x0e07b485, 0x0b0c5a09, 0x03e460a9, 0x08cb33f9, 0x078e2d9c, 0x0f5d3825, 0x042a03fc, 0x0c172616, 0x0a8d679d, 0x04195679}},
&bigNumber{0x0a24c32f, 0x0633341a, 0x0ff2b4f4, 0x0d4aeeb3, 0x05427a66, 0x0ba06393, 0x093857f9, 0x070981a5, 0x0e5f362e, 0x01bea0ba, 0x04852079, 0x08a97e80, 0x0496cb83, 0x0ae0e2ab, 0x0ec1ba70, 0x0eeb3132}},
//16
&twPNiels{
&twNiels{
&bigNumber{0x05d22b84, 0x0832515d, 0x000c3bdf, 0x0538d82b, 0x044aa201, 0x0ababd04, 0x032bdc3f, 0x043c1257, 0x06920ff2, 0x0f5544f6, 0x0c47baee, 0x0f77f8ca, 0x0f142230, 0x0a59e0a5, 0x0f79b74c, 0x01d73a22},
&bigNumber{0x035d0765, 0x00119230, 0x0d1991a3, 0x0bf22588, 0x0ccf50f1, 0x0c828e6e, 0x02070852, 0x018624b2, 0x05d9ba09, 0x0585ef91, 0x0a6bf7d4, 0x02df5e46, 0x0fbf9380, 0x02c3e5cd, 0x0d5af748, 0x0a2f33c3},
&bigNumber{0x06c8c5b6, 0x0187c3e1, 0x0188c067, 0x056193c7, 0x082f1043, 0x0dbaf811, 0x04b9af36, 0x03fdfc60, 0x051f27cb, 0x098e6251, 0x04e381ac, 0x05c3ce9b, 0x08b9c4c6, 0x07069d25, 0x0ca0e7bb, 0x0bd4c1bf}},
&bigNumber{0x045d65f4, 0x0fe7a140, 0x0428e6de, 0x08047ea4, 0x01773898, 0x0fdc0615, 0x0160ff00, 0x05247683, 0x068a7199, 0x0ae4f568, 0x0da30950, 0x0c285ea4, 0x08167df9, 0x0fef8523, 0x05fdeb5c, 0x042a1883}},
//17
&twPNiels{
&twNiels{
&bigNumber{0x0b983e35, 0x0fb0bfb7, 0x0b0bd053, 0x03a8adf0, 0x08d91c2e, 0x089551cb, 0x0ff7ca0e, 0x02245891, 0x039d92c0, 0x04576bbb, 0x0d997e0f, 0x002168f3, 0x09f4d2ba, 0x0f07fa40, 0x085161ec, 0x0807cce1},
&bigNumber{0x0d38f0cc, 0x09e3bf87, 0x04dc86dd, 0x0ffd0b3e, 0x0371a818, 0x05fadabc, 0x0acb7e70, 0x0e44f5ea, 0x0d52b256, 0x0367530c, 0x046f3353, 0x0329dab8, 0x083f9364, 0x06846387, 0x01f4585b, 0x0702580f},
&bigNumber{0x00964b7d, 0x0082b623, 0x0dccdeff, 0x048b2868, 0x0b99b9cc, 0x06f174fd, 0x035d6675, 0x0bf1d099, 0x03d6763b, 0x005181cf, 0x01a865da, 0x00b0eca1, 0x09bbc320, 0x0993d29b, 0x0c945c4e, 0x0fad34d8}},
&bigNumber{0x04af95c9, 0x082ebd39, 0x09d8331a, 0x0e915118, 0x0d0668ad, 0x01c46d99, 0x044ea9a8, 0x00b4bfc8, 0x065d416b, 0x0e202efe, 0x0c884ef8, 0x02d7e253, 0x05bfb5e0, 0x0c5df68a, 0x0e9046c0, 0x0ddb83ae}},
//18
&twPNiels{
&twNiels{
&bigNumber{0x0d71fb1a, 0x0fa6e6ed, 0x0e5e3524, 0x006fd237, 0x008e7a9e, 0x08f1840a, 0x0ba37b17, 0x092c56f4, 0x0986321d, 0x0c262318, 0x0e9255f2, 0x088c73f2, 0x0267c81e, 0x0f53868d, 0x04c8e6e5, 0x02ba23b9},
&bigNumber{0x0264a210, 0x02bd7cb1, 0x0f7b5def, 0x00d3ff20, 0x0f7baa6b, 0x072c889b, 0x096eb875, 0x072ee80d, 0x0fb77d81, 0x0f43b6e9, 0x084e2285, 0x0d5970cd, 0x0157850e, 0x05c2d71e, 0x066910ac, 0x02d0a03d},
&bigNumber{0x09336fa0, 0x0d0018d6, 0x03c6905e, 0x0e7b3f51, 0x0ef5b819, 0x0f334898, 0x0867c95a, 0x03f0f05c, 0x04e3c1ea, 0x0bc4613f, 0x03e02795, 0x02c7a953, 0x01c3cb85, 0x003d972e, 0x0810f4a1, 0x0a56fe1c}},
&bigNumber{0x06435bc4, 0x01b043a1, 0x0264d8e8, 0x0d78da60, 0x073ffab1, 0x090290cc, 0x0e5d35f3, 0x03fc320e, 0x0a38baf3, 0x097d64a1, 0x08c87d52, 0x0b2616fd, 0x08636e64, 0x0dcf6246, 0x03c9bd98, 0x09629d51}},
//19
&twPNiels{
&twNiels{
&bigNumber{0x053a5b9a, 0x0bca7974, 0x09633cce, 0x0d038c1d, 0x05d6f852, 0x072167ff, 0x06073ab7, 0x02cfb27e, 0x0155454a, 0x04dc0e65, 0x0d26fce8, 0x0ab15e3a, 0x0d931a58, 0x087c3af1, 0x0f895db1, 0x0abe0e9f},
&bigNumber{0x01beb52a, 0x0dc6decb, 0x0baf859d, 0x016899ea, 0x05aa8090, 0x04eaf2b7, 0x0be4c8c5, 0x02e75ada, 0x006e1b3e, 0x028567f4, 0x042f209b, 0x04f1109c, 0x075f9729, 0x0eaabf25, 0x0cf8467b, 0x0db979c2},
&bigNumber{0x0414e827, 0x0c43cd80, 0x06b84c4e, 0x0815da24, 0x01e65366, 0x0dca82be, 0x0588f202, 0x01971d0c, 0x06909faa, 0x06864274, 0x0ea12757, 0x0fd7c03b, 0x04aa85b8, 0x00bb8a36, 0x0adc9067, 0x09f5aaaf}},
&bigNumber{0x0c4a2129, 0x0addeb2d, 0x07ab16fc, 0x04fbe370, 0x0d5efdd1, 0x0dad00fd, 0x0bf0fa84, 0x09b661bf, 0x0da55772, 0x038f022f, 0x0ef90853, 0x0abedfe5, 0x06ce5c57, 0x0f4d2444, 0x071d09d0, 0x0c34eb64}},
//20
&twPNiels{
&twNiels{
&bigNumber{0x092bf60e, 0x07e7998d, 0x003f1b51, 0x0ee1a79e, 0x09b02d41, 0x0f9b2032, 0x0cea965b, 0x0e9cb2f4, 0x0e561a02, 0x06d14dd7, 0x09a65da5, 0x0a847e33, 0x05d80bd0, 0x098ea9a2, 0x0176bbdb, 0x0ccac2a7},
&bigNumber{0x07ffb0ad, 0x082fc859, 0x07eca4c2, 0x0e9348d1, 0x0ec8b17c, 0x0f612443, 0x00545f50, 0x0cc0f47c, 0x021747b7, 0x05d28d56, 0x00eedf06, 0x0af62452, 0x099869ad, 0x0da82e24, 0x072612f3, 0x02dc03b0},
&bigNumber{0x0d247834, 0x03f02cef, 0x0af9ddf4, 0x0da17089, 0x0bdf8a78, 0x0e934b82, 0x020233d2, 0x007867e4, 0x01281d9a, 0x025aa969, 0x033c1ed9, 0x07ddf488, 0x03528e64, 0x04b2831c, 0x06cedfc0, 0x034d0a6b}},
&bigNumber{0x05aad254, 0x02b41646, 0x0f98eee0, 0x09d1c361, 0x0f18d193, 0x0af854af, 0x0f8aedfa, 0x014b8d08, 0x09a6a94f, 0x0c12fc50, 0x0266fb92, 0x03fee00e, 0x006b0171, 0x0774247b, 0x087c0508, 0x04d5cb47}},
//21
&twPNiels{
&twNiels{
&bigNumber{0x04ba150b, 0x0a63ab58, 0x02977c93, 0x0ce093cd, 0x01d58c9d, 0x0df2fb7c, 0x03b9edd7, 0x01d1ef5c, 0x0d2e421b, 0x0fb36b3e, 0x0497b820, 0x07a0545b, 0x04d3dab7, 0x0e1d322f, 0x06658a1d, 0x075a5dc4},
&bigNumber{0x0e4483f5, 0x0fa89739, 0x035b1da2, 0x0fa9cab9, 0x09d5439b, 0x01cacbb5, 0x01ac8964, 0x03afae22, 0x07b47c8b, 0x029b3cb9, 0x0a29e120, 0x0ae8e712, 0x0f903a3b, 0x0a6aa003, 0x01754500, 0x0f44cc4b},
&bigNumber{0x05f856ea, 0x0a66669f, 0x023f80d6, 0x00dc32a2, 0x0770ed75, 0x0d3718ee, 0x00a71f86, 0x0bc5a8f3, 0x07a9204d, 0x012ee16a, 0x002532e0, 0x0ea751c9, 0x0120819b, 0x05b37c93, 0x006b92c6, 0x07362cd0}},
&bigNumber{0x0ff0a2ca, 0x00054c2c, 0x0f48c8b9, 0x02006e64, 0x0be7e838, 0x0e62fd18, 0x0a37bb46, 0x03184067, 0x0e9da307, 0x0d89d6be, 0x0f2cfb5b, 0x0180afae, 0x0360528a, 0x03b6e461, 0x008ec534, 0x0a30f966}},
//22
&twPNiels{
&twNiels{
&bigNumber{0x0c8a6bb9, 0x04059a5e, 0x0d41f172, 0x0e39ac90, 0x039c4e99, 0x039da832, 0x055ae45d, 0x0f25fac8, 0x0b42048c, 0x01f8aeaf, 0x0411b645, 0x0a21c7ca, 0x0015e5a2, 0x0bf03e81, 0x0d2044b4, 0x051a0dd0},
&bigNumber{0x021df414, 0x0223a2e7, 0x0fd1a934, 0x046471fa, 0x0ed745b6, 0x0c0d4919, 0x0fcc19a0, 0x020251ff, 0x09dc5aa2, 0x0f8e2b5e, 0x019635fe, 0x037c9a94, 0x0dbe88f8, 0x051feb5e, 0x058e503f, 0x0487e9b8},
&bigNumber{0x027809ed, 0x04fe2990, 0x0793bef0, 0x00c6d2b3, 0x08f63710, 0x0433f901, 0x0bd77f68, 0x092afeb5, 0x03ca59e7, 0x00b5155d, 0x09103857, 0x0a1de6b0, 0x07513bfd, 0x0a6b5aff, 0x045eff6f, 0x055edda2}},
&bigNumber{0x0775cf2d, 0x0715ce56, 0x061a3653, 0x07ad70cc, 0x0e57d17b, 0x04cc10ca, 0x04ed1da6, 0x0dcfa4e4, 0x03d93a11, 0x05401a6c, 0x0e6d7333, 0x062806c3, 0x02c1ce71, 0x0a8167bc, 0x0e78f5fe, 0x0bf26f4d}},
//23
&twPNiels{
&twNiels{
&bigNumber{0x026697d6, 0x07857260, 0x0f1cc9ed, 0x0c04418c, 0x030b4159, 0x0d9ff50c, 0x00349acb, 0x0129f395, 0x0af3ae12, 0x073161a7, 0x09acc538, 0x0aeafa14, 0x001d3c5a, 0x01e396e0, 0x07543368, 0x05cd308f},
&bigNumber{0x02b248c6, 0x0585c035, 0x0c51969e, 0x0ec6db9d, 0x0f232a87, 0x0605cb67, 0x0fa325ff, 0x0c6ec545, 0x0e1f5602, 0x02ed8a1b, 0x00fe0a8c, 0x08146dd7, 0x08a58f97, 0x0f828e59, 0x0c936fe3, 0x055b8200},
&bigNumber{0x05716f6c, 0x0171ac29, 0x0220b051, 0x0ae6dba1, 0x0b27db4d, 0x0f8ed2e4, 0x0608fb70, 0x031df9f6, 0x0cd37d7c, 0x0f3eb803, 0x062141f8, 0x0e0d83cf, 0x06b40ef6, 0x026b3a5f, 0x0a2129b0, 0x04157656}},
&bigNumber{0x022e1c93, 0x01faed54, 0x04b9fdc8, 0x04cc92f6, 0x04424e2c, 0x0456858f, 0x086b4a42, 0x057e5f08, 0x01df1f75, 0x0cce6d07, 0x0431d1be, 0x003a5f6b, 0x01ff72d6, 0x083f7c7e, 0x0c9e11d2, 0x0e22a52b}},
//24
&twPNiels{
&twNiels{
&bigNumber{0x000388bb, 0x0fe8ec5d, 0x05ce870a, 0x021a8a88, 0x06ac9200, 0x0aa85e00, 0x00c1bc32, 0x0d1fc942, 0x03fd9ba0, 0x0667e5cb, 0x029e2874, 0x07acffd9, 0x03f8f426, 0x06e41bca, 0x07691414, 0x02f33400},
&bigNumber{0x09dacc19, 0x0456db3d, 0x0aa9a6e4, 0x0d91b2b0, 0x03e69453, 0x0ead8a2d, 0x0ece38e0, 0x052f56ce, 0x04463fa7, 0x0c64d7c2, 0x00bbca56, 0x0467d354, 0x0ed78fff, 0x001794d8, 0x066a52fb, 0x075ad449},
&bigNumber{0x0e5cea7a, 0x036a71bd, 0x033989dd, 0x0f962b52, 0x02e45a2b, 0x0e95ed66, 0x0d83d28b, 0x04635759, 0x0a2d3ffd, 0x0974d601, 0x0e0475df, 0x06c454e7, 0x041fe7d6, 0x06703fb5, 0x010c09dd, 0x063b4595}},
&bigNumber{0x0db69624, 0x0801022c, 0x0ab33ee8, 0x07eb7a0d, 0x02c702a7, 0x07095448, 0x08b4fa50, 0x02a6f26d, 0x08877db0, 0x00f874ac, 0x025fe2c9, 0x0f40e19c, 0x0c3be232, 0x03b1b3c5, 0x038834f1, 0x09c2088e}},
//25
&twPNiels{
&twNiels{
&bigNumber{0x0c6d2a84, 0x07f8fd06, 0x0aa1316e, 0x08e5be5f, 0x0a8be9da, 0x099cc00f, 0x0cd658b7, 0x0bd0ae42, 0x0ffc452d, 0x0b6812f9, 0x073c3cc9, 0x0559663d, 0x08364f67, 0x086d2927, 0x0e1cb072, 0x088d3b05},
&bigNumber{0x0327b535, 0x0730964f, 0x0bcbb919, 0x07198153, 0x035d453c, 0x020c7650, 0x0cda4096, 0x0826262d, 0x06a572e6, 0x0de5de24, 0x02e36b31, 0x0f2e771a, 0x0c36acb4, 0x06e51a1c, 0x0c22cf90, 0x00cd36d1},
&bigNumber{0x0c782d6d, 0x0a0a074e, 0x0fda0f1c, 0x02abe819, 0x026bc3d0, 0x0262cde4, 0x05c26b89, 0x0a578d7d, 0x01962957, 0x03bc78bb, 0x0b24a743, 0x0f9e3286, 0x0374dd04, 0x0ac41ea7, 0x0f88e7ae, 0x041450b7}},
&bigNumber{0x0eadae5a, 0x0686bee4, 0x06478bb4, 0x0cd475d7, 0x039a9eed, 0x0df508fa, 0x05fe91f5, 0x0437c7a9, 0x004dd029, 0x0eb5b0be, 0x02a510e5, 0x053de6f9, 0x0786c1e9, 0x02a48eb2, 0x0e7d5555, 0x0a7eb782}},
//26
&twPNiels{
&twNiels{
&bigNumber{0x054fa786, 0x0fad2dd3, 0x0fce93c7, 0x0f12a2a1, 0x040e2508, 0x0e470a04, 0x0dbdd0e1, 0x0b701c94, 0x0f9b9556, 0x0b980072, 0x058ba06a, 0x0070ea6d, 0x090d1277, 0x00f31d63, 0x0f2e6fcb, 0x04d78c70},
&bigNumber{0x062796ce, 0x0ca68bd1, 0x022b70d2, 0x059b3aae, 0x00f344a3, 0x0bf8e9cb, 0x0615b91d, 0x06a2c989, 0x0403ac6d, 0x019ae328, 0x080f2002, 0x085e71cb, 0x00cfdb0e, 0x0bf2b488, 0x07633160, 0x0d73b31f},
&bigNumber{0x03ac54de, 0x04c7f5c7, 0x04ffcbad, 0x05db32f5, 0x00be3d11, 0x0731f83a, 0x04a6e699, 0x01fd0713, 0x0f31f995, 0x02f6c69a, 0x061e8247, 0x09c59aba, 0x0cfbc198, 0x0188c3de, 0x03357190, 0x059e0cc1}},
&bigNumber{0x055aede7, 0x0d83c011, 0x0336566a, 0x03a79ec4, 0x01854404, 0x03e94f79, 0x0a338faa, 0x09e73598, 0x007ed9d1, 0x0774a44f, 0x00dea711, 0x0b1bfe33, 0x0106b0a2, 0x0b3eddfa, 0x05409e02, 0x02c1ee82}},
//27
&twPNiels{
&twNiels{
&bigNumber{0x0e05ed26, 0x0e1b4021, 0x05a8fac3, 0x07dc9179, 0x05536c98, 0x0b3a7703, 0x048f3bac, 0x08f930b5, 0x0ed95a4d, 0x06309bf3, 0x09b9e4aa, 0x09daac12, 0x0cf3cc67, 0x0107ec4a, 0x0ef09cbd, 0x093f0ff8},
&bigNumber{0x06a7183d, 0x0549ae5e, 0x0e9824a1, 0x09aedcbc, 0x01f1d828, 0x0c06342a, 0x089526a2, 0x094b0a01, 0x0fcc8f79, 0x06594e0b, 0x03c25530, 0x078a10bd, 0x0a6e6e44, 0x06cc75da, 0x068c0021, 0x0bb0e16e},
&bigNumber{0x080fba0f, 0x0727c791, 0x0c6941e9, 0x0b442291, 0x04a8fe03, 0x07e6b583, 0x052cf0b4, 0x055f1c1d, 0x0732d0e1, 0x0e9194fb, 0x00de1362, 0x01c1484c, 0x0636c91b, 0x0e9f088e, 0x033d8235, 0x066c7a60}},
&bigNumber{0x05b54d93, 0x0e2159e2, 0x03380af9, 0x0354584d, 0x07bd9f8a, 0x03ede7ed, 0x059e239f, 0x080f70f3, 0x07d8f0db, 0x08d34d5d, 0x0b0ab94c, 0x0f96130a, 0x0b9ed5fe, 0x0655d173, 0x0f883ecd, 0x0565e751}},
//28
&twPNiels{
&twNiels{
&bigNumber{0x0a2b9fc0, 0x05ecc9fa, 0x0d281bf4, 0x07be0f56, 0x00243506, 0x0407f766, 0x0f5b7a7d, 0x00af3a2e, 0x0f511be1, 0x0ecb4122, 0x05985a51, 0x06496308, 0x0855cb56, 0x0af618a1, 0x0032b3e4, 0x0bef2fff},
&bigNumber{0x08e4cc5a, 0x0161c09d, 0x0436caa5, 0x00b4ba19, 0x0603c9f8, 0x0ef6ff49, 0x06e475fd, 0x0269e409, 0x0c17c97c, 0x08220a40, 0x0a7f267c, 0x0eaaf84d, 0x07d92884, 0x0c43dd51, 0x09fbc533, 0x017f9fce},
&bigNumber{0x080cb63b, 0x0bc37e1e, 0x0256bfab, 0x080a517f, 0x0b4a9e41, 0x0f1f75ce, 0x00a0a511, 0x05b6fed0, 0x0e571bb9, 0x06daeba5, 0x0522a3a2, 0x0b5e35d9, 0x0228c047, 0x0ef1a28f, 0x0950d65e, 0x0bb5d441}},
&bigNumber{0x0601c11d, 0x008e191c, 0x08d1be25, 0x083fb58f, 0x07fa7daa, 0x0e7fa0e1, 0x088c7cbe, 0x0c75c979, 0x0e19b089, 0x06927a71, 0x0c56a485, 0x036708f3, 0x05b942c7, 0x09b827f0, 0x068d4b56, 0x05a8523e}},
//29
&twPNiels{
&twNiels{
&bigNumber{0x0e45dca2, 0x004a26aa, 0x09768c5c, 0x02f05e0c, 0x0ecbbb6c, 0x0f9e635c, 0x0dccf26c, 0x09c1174f, 0x0ce50350, 0x0e75e8dc, 0x05ce0b7c, 0x02079c07, 0x08a2c4f3, 0x0bf49206, 0x0252ecce, 0x06bf6a83},
&bigNumber{0x04dc7a33, 0x0758f41a, 0x074b6596, 0x09de1bf8, 0x06119400, 0x0a22b418, 0x076fe78c, 0x04e52dc6, 0x0dcbc7fd, 0x02a06942, 0x0e0f020c, 0x014dfd2f, 0x09c14947, 0x05d60866, 0x0c8cd42c, 0x0576dcf8},
&bigNumber{0x070945de, 0x0dd661e5, 0x0a6aec04, 0x00b96dda, 0x08eefa44, 0x0dde4a22, 0x02238574, 0x05dfdd1b, 0x0240f21e, 0x01019337, 0x018058f4, 0x05a253db, 0x0520524b, 0x0d23d34a, 0x090d7459, 0x013acfc0}},
&bigNumber{0x06ac8d69, 0x0a6a9b5d, 0x09d4d1d5, 0x0a5cbd56, 0x0e31c105, 0x04ad31bc, 0x01c950a0, 0x09077a48, 0x0025dc2e, 0x043bce01, 0x04a866b3, 0x0f45fdac, 0x0c5e1fa1, 0x0a733b45, 0x042dbff5, 0x0d125d27}},
//30
&twPNiels{
&twNiels{
&bigNumber{0x0dea0c04, 0x0d6646b9, 0x05a4382b, 0x057be2b0, 0x09b5ab77, 0x03e33645, 0x089acd41, 0x07592779, 0x041f7239, 0x02a36ab8, 0x02a3ed96, 0x0ffdd860, 0x09d5ae78, 0x0f4d5c3b, 0x02c169c2, 0x0d20db63},
&bigNumber{0x092d2add, 0x0fa5f6a4, 0x0fab0ba6, 0x0d67d53c, 0x029d522c, 0x0529b037, 0x006e62df, 0x0d4ea141, 0x0117d0d8, 0x0dc52b0a, 0x0ec9a354, 0x095ad303, 0x07ca5e97, 0x0a9a2975, 0x070dc079, 0x07ad5ab2},
&bigNumber{0x023766d5, 0x0210ef00, 0x044f8260, 0x08b1a9de, 0x033d0279, 0x03f8d55f, 0x0d99f11b, 0x09eeb542, 0x0fe4db6f, 0x0f2668e9, 0x00c79764, 0x0b9505d3, 0x0c9b3125, 0x0f089364, 0x0820b2d9, 0x0c5d78ed}},
&bigNumber{0x03fb5c56, 0x06a0ada8, 0x0af9fca7, 0x0d0dcf30, 0x0c90f342, 0x0430de71, 0x0ab774fc, 0x08933984, 0x07e014f2, 0x052d3493, 0x07e98c7c, 0x0683c514, 0x06337968, 0x0535e404, 0x068a1491, 0x0cb124f6}},
//31
&twPNiels{
&twNiels{
&bigNumber{0x0d2bbce7, 0x0a48aa43, 0x0f1cac86, 0x0e10f2d2, 0x0613fed9, 0x0d751235, 0x0e38c7d6, 0x0d352c00, 0x0e384ef8, 0x0c01a832, 0x0fb8147e, 0x0545d75b, 0x021516b6, 0x0c59a786, 0x03f971e9, 0x0da5db66},
&bigNumber{0x09242250, 0x067eb2e5, 0x0e424354, 0x07ba0732, 0x05a5b5a8, 0x05d6bbd7, 0x040dffe3, 0x05c90bd9, 0x086c6509, 0x0364f39e, 0x0a4f2037, 0x0ec4e819, 0x0a7f242e, 0x07226fdf, 0x02c16f8f, 0x031caab9},
&bigNumber{0x02b454cf, 0x0e038fd7, 0x094132a1, 0x0675743a, 0x090d0d14, 0x08be5083, 0x0d2af072, 0x091e2ac4, 0x0f56f64d, 0x03733bc0, 0x0d545b71, 0x09f71741, 0x0e4eb671, 0x07bbe5fa, 0x05ab2f4a, 0x0b2898ba}},
&bigNumber{0x06f5139c, 0x01a89ab4, 0x0cc95459, 0x0748e27f, 0x05b2e11f, 0x09b57ba1, 0x017f1ce1, 0x074f6bca, 0x0d698bba, 0x016b374e, 0x0560fcd8, 0x01bfa3b6, 0x0650f275, 0x00cf2e46, 0x0dc705c1, 0x0620ac64}},
}
decafPrepareWNAFTable(dst, p, size)
for i, di := range dst {
c.Assert(di.equals(exp[i]), Equals, true)
}
}
func (s *Ed448Suite) Test_WNAFSMultiplication(c *C) {
px, _ := hex.DecodeString("4d8b77dc973a1f9bcd5358c702ee8159a71cd3e4c1ff95bfb30e7038cffe9f794211dffd758e2a2a693a08a9a454398fde981e5e2669acad")
py, _ := hex.DecodeString("27193fda68a08730d1def89d64c7f466d9e3d0ac89d8fdcd17b8cdb446e80404e8cd715d4612c16f70803d50854b66c9b3412e85e2f19b0d")
pz, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001")
pt, _ := hex.DecodeString("4d8b77dc973a1f9bcd5358c702ee8159a71cd3e4c1ff95bfb30e7038cffe9f794211dffd758e2a2a693a08a9a454398fde981e5e2669acad")
pu, _ := hex.DecodeString("27193fda68a08730d1def89d64c7f466d9e3d0ac89d8fdcd17b8cdb446e80404e8cd715d4612c16f70803d50854b66c9b3412e85e2f19b0d")
p := &twExtensible{
new(bigNumber).setBytes(px),
new(bigNumber).setBytes(py),
new(bigNumber).setBytes(pz),
new(bigNumber).setBytes(pt),
new(bigNumber).setBytes(pu),
}
a := &scalar{
0x6c226d73, 0x70edcfc3, 0x44156c47, 0x084f4695,
0xe72606ac, 0x9d0ce5e5, 0xed96d3ba, 0x9ff3fa11,
0x4a15c383, 0xca38a0af, 0xead789b3, 0xb96613ba,
0x48ba4461, 0x34eb2031,
}
b := &scalar{
0x2118b8c6, 0x4356acd5, 0x26d7e73c, 0x459174b7,
0xf10bea31, 0x83e528bb, 0xb960d695, 0xd0da7e28,
0xbad7f9a1, 0xe9f5ba01, 0x94ea1518, 0x12c58cca,
0x302c76eb, 0x3bd0363e,
}
px, _ = hex.DecodeString("d902fadbeee8dd1ef391dcce59cc75d286c9efc7229dd919a35236a5447384e84617bf94d4129af02d7667fad1df88985132c1ce1b133428")
py, _ = hex.DecodeString("ba1d18df944a527ec4ebad9c84cc32643064dcd26bf003a9763dad575104e1a3c9fbb02f971169c2736ed5d8812ad8eeedcfa8226977ddb4")
pz, _ = hex.DecodeString("2d35e8b251eb6b421291cf3a466597759059e01b7cc89f332f96f801ced244299f4da20b9fcedbaa66c5fd3508dcb61888e2b89bee4fea45")
pt, _ = hex.DecodeString("8713cc3806a247771ae8567b3b73dd874a8261a610de7c34202fab877f15213120e2fd14e5b191663c1e62d404c54b9f63e1e2e3d98eafb2")
pu, _ = hex.DecodeString("eafb1cd470e2728ee254c7a312092e820656c14a993f2896479aa211b0a1bb515deee36d06acee20a40a1cad5dc5cc38072cdd63447587e9")
exp := &twExtensible{
new(bigNumber).setBytes(px),
new(bigNumber).setBytes(py),
new(bigNumber).setBytes(pz),
new(bigNumber).setBytes(pt),
new(bigNumber).setBytes(pu),
}
linearComboVarFixedVt(p, a, b, wnfsTable[:])
c.Assert(p.equals(exp), Equals, true)
}
func (s *Ed448Suite) Test_WNAFSMultiplicationCase3(c *C) {
px, _ := hex.DecodeString("3ad455b204ac920bddb750a6478ff733f487f45369770d989ad919944d8f1cb30a682d0d6e46892a94bc268688515d835e4d05a2697d78b6")
py, _ := hex.DecodeString("918bf9573f40be92567052b0c02fbf49cbfa43f68f5fcd7bdf44f877594eb6bfff690413befd9952d5710cefc1839771b9660f69b17790f5")
pz, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001")
pt, _ := hex.DecodeString("3ad455b204ac920bddb750a6478ff733f487f45369770d989ad919944d8f1cb30a682d0d6e46892a94bc268688515d835e4d05a2697d78b6")
pu, _ := hex.DecodeString("918bf9573f40be92567052b0c02fbf49cbfa43f68f5fcd7bdf44f877594eb6bfff690413befd9952d5710cefc1839771b9660f69b17790f5")
p := &twExtensible{
new(bigNumber).setBytes(px),
new(bigNumber).setBytes(py),
new(bigNumber).setBytes(pz),
new(bigNumber).setBytes(pt),
new(bigNumber).setBytes(pu),
}
a := &scalar{
0x150252d4, 0x91f90541, 0xfbc32870, 0x5055d9f0,
0x3e5d3a5c, 0xec7fe32d, 0xd043954a, 0xd6038f2e,
0x41d8bc06, 0xff202e0e, 0xda461aa0, 0xf8e1491a,
0xf2ce123c, 0xfb54751,
}
b := &scalar{
0xc6a3102f, 0xe9e887ee, 0x393be2cb, 0xd6dbb642,
0x3a20bf34, 0x8a75ad11, 0x093a1124, 0x592da916,
0xaf4ef0b8, 0x92d3af99, 0xcd91dae6, 0xa55b2817,
0x5cbf02a2, 0x28bcd317,
}
px, _ = hex.DecodeString("6aa15c7918e4995298d1774924e4394788ef77a27a8a660ec971f16c337869011a19041bc52fdad9bd5e6aab5360c32d71a910cda93a8d02")
py, _ = hex.DecodeString("e0656f99c1a5774f5e8eda93b676d2673c55a7ec50057a3ee2a373deb4847020e7fa2b7e7c1e0bea4adf3004b474ff3c7a26f330a2a2565e")
pz, _ = hex.DecodeString("8365faf96687fb3419ed919ab8e995d3cf77b9dcec47bdc5b51d10f6110eb60c19be4daf24a1e0cdb0cef9f10b9bdbf19ae3d433a60c93a2")
pt, _ = hex.DecodeString("6221c6e5950a608b30063f8b83d7eef50ccc97fbf8b5c20de61eadebb734b10143965090f5cdbedea08afee791819a25269b63d764b29d89")
pu, _ = hex.DecodeString("8b8ee5a52914b36d6b04fc18bdb7dbd826efe424e074c2799e83e43ae3da3357df975d158228bfa5b52fdaac1f637c5cb1bb27bce0367f6f")
exp := &twExtensible{
new(bigNumber).setBytes(px),
new(bigNumber).setBytes(py),
new(bigNumber).setBytes(pz),
new(bigNumber).setBytes(pt),
new(bigNumber).setBytes(pu),
}
linearComboVarFixedVt(p, a, b, wnfsTable[:])
c.Assert(p.equals(exp), Equals, true)
}
func (s *Ed448Suite) Test_DoubleScalarmul(c *C) {
p := &twExtendedPoint{
&bigNumber{
0x0e0fbf9e, 0x0ba1bcd7, 0x01cc6d39, 0x053b56e8,
0x0635d142, 0x0383307a, 0x0f8a159b, 0x097fd2cf,
0x0fa310f6, 0x05522bde, 0x0b981703, 0x0b095b1e,
0x042d4780, 0x05ae11df, 0x0934fe80, 0x0dc6474d,
},
&bigNumber{
0x02c1149c, 0x0e72febf, 0x05259893, 0x0723e184,
0x0f7232ff, 0x019a5600, 0x05581d2c, 0x07331444,
0x04e0124a, 0x09c3c5e5, 0x0945536e, 0x0b786a20,
0x0f75623f, 0x00ba30e8, 0x0cc589a3, 0x04a2eea8,
},
&bigNumber{
0x02406c71, 0x0b2fdb67, 0x02591aa2, 0x085fc24e,
0x0dc50d09, 0x08692c5b, 0x0ba917d7, 0x0aefea74,
0x037d0084, 0x04d5defa, 0x08bbe7ad, 0x050da977,
0x08adf827, 0x05425cdd, 0x037d816d, 0x0d59cd0a,
},
&bigNumber{
0x0baf8c30, 0x06686ad3, 0x0c149bac, 0x0f57f68d,
0x05cd321a, 0x02ff8d60, 0x09dcc4bd, 0x0f731ec2,
0x0cd7ea75, 0x0be970e4, 0x043d30e0, 0x0dd64b9b,
0x04f78bf1, 0x0d1fde20, 0x05c88e97, 0x026ce314,
},
}
a := &scalar{
0x9a1044c6, 0x92f78393, 0x68cea2bc, 0x5f23f942,
0xd4384e9e, 0x76969060, 0x4d82f8cc, 0xb8016c73,
0x1db9b587, 0x061aca05, 0x9f0333f5, 0x5a2a7f4a,
0x216a1e70, 0x1d22f534,
}
q := &twExtendedPoint{
&bigNumber{
0x06172a44, 0x0731d576, 0x0da247e0, 0x0d9fd318,
0x072d1c77, 0x073e77aa, 0x09a004b5, 0x012507b9,
0x09a684c3, 0x08b559f8, 0x0d445c85, 0x07941c89,
0x0c942cd4, 0x02bcfe3e, 0x022ccaaa, 0x0be3a6b3,
},
&bigNumber{