v

Зеркало из https://github.com/vlang/v
Форк
0
121 строка · 2.6 Кб
1
module edwards25519
2

3
fn test_proj_lookup_table() {
4
	mut table := ProjLookupTable{}
5
	b := new_generator_point()
6
	table.from_p3(b)
7

8
	mut tmp1 := ProjectiveCached{}
9
	mut tmp2 := ProjectiveCached{}
10
	mut tmp3 := ProjectiveCached{}
11

12
	table.select_into(mut tmp1, 6)
13
	table.select_into(mut tmp2, -2)
14
	table.select_into(mut tmp3, -4)
15

16
	// Expect T1 + T2 + T3 = identity
17
	mut acc_p1 := ProjectiveP1{}
18
	mut acc_p3 := new_identity_point()
19

20
	acc_p1.add(acc_p3, tmp1)
21
	acc_p3.from_p1(acc_p1)
22
	acc_p1.add(acc_p3, tmp2)
23
	acc_p3.from_p1(acc_p1)
24
	acc_p1.add(acc_p3, tmp3)
25
	acc_p3.from_p1(acc_p1)
26

27
	assert acc_p3.equal(id_point) == 1
28
}
29

30
fn test_affine_lookup_table() {
31
	mut table := AffineLookupTable{}
32
	b := new_generator_point()
33
	table.from_p3(b)
34

35
	mut tmp1 := AffineCached{}
36
	mut tmp2 := AffineCached{}
37
	mut tmp3 := AffineCached{}
38

39
	table.select_into(mut tmp1, 3)
40
	table.select_into(mut tmp2, -7)
41
	table.select_into(mut tmp3, 4)
42
	// Expect T1 + T2 + T3 = identity
43

44
	mut acc_p1 := ProjectiveP1{}
45
	mut acc_p3 := new_identity_point()
46

47
	acc_p1.add_affine(acc_p3, tmp1)
48
	acc_p3.from_p1(acc_p1)
49
	acc_p1.add_affine(acc_p3, tmp2)
50
	acc_p3.from_p1(acc_p1)
51
	acc_p1.add_affine(acc_p3, tmp3)
52
	acc_p3.from_p1(acc_p1)
53

54
	assert acc_p3.equal(id_point) == 1
55
}
56

57
fn test_naf_lookup_table5() {
58
	mut table := NafLookupTable5{}
59
	b := new_generator_point()
60
	table.from_p3(b)
61

62
	mut tmp1 := ProjectiveCached{}
63
	mut tmp2 := ProjectiveCached{}
64
	mut tmp3 := ProjectiveCached{}
65
	mut tmp4 := ProjectiveCached{}
66

67
	table.select_into(mut tmp1, 9)
68
	table.select_into(mut tmp2, 11)
69
	table.select_into(mut tmp3, 7)
70
	table.select_into(mut tmp4, 13)
71
	// Expect T1 + T2 = T3 + T4
72

73
	mut acc_p1 := ProjectiveP1{}
74
	mut lhs := new_identity_point()
75
	mut rhs := new_identity_point()
76

77
	acc_p1.add(lhs, tmp1)
78
	lhs.from_p1(acc_p1)
79
	acc_p1.add(lhs, tmp2)
80
	lhs.from_p1(acc_p1)
81

82
	acc_p1.add(rhs, tmp3)
83
	rhs.from_p1(acc_p1)
84
	acc_p1.add(rhs, tmp4)
85
	rhs.from_p1(acc_p1)
86

87
	assert lhs.equal(rhs) == 1
88
}
89

90
fn test_naf_lookup_table8() {
91
	mut table := NafLookupTable8{}
92
	b := new_generator_point()
93
	table.from_p3(b)
94

95
	mut tmp1 := AffineCached{}
96
	mut tmp2 := AffineCached{}
97
	mut tmp3 := AffineCached{}
98
	mut tmp4 := AffineCached{}
99

100
	table.select_into(mut tmp1, 49)
101
	table.select_into(mut tmp2, 11)
102
	table.select_into(mut tmp3, 35)
103
	table.select_into(mut tmp4, 25)
104
	// Expect T1 + T2 = T3 + T4
105

106
	mut acc_p1 := ProjectiveP1{}
107
	mut lhs := new_identity_point()
108
	mut rhs := new_identity_point()
109

110
	acc_p1.add_affine(lhs, tmp1)
111
	lhs.from_p1(acc_p1)
112
	acc_p1.add_affine(lhs, tmp2)
113
	lhs.from_p1(acc_p1)
114

115
	acc_p1.add_affine(rhs, tmp3)
116
	rhs.from_p1(acc_p1)
117
	acc_p1.add_affine(rhs, tmp4)
118
	rhs.from_p1(acc_p1)
119

120
	assert lhs.equal(rhs) == 1
121
}
122

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.