aboutsummaryrefslogtreecommitdiff
path: root/core/crypto/_weierstrass/sc.odin
blob: e119eec2ea36253209aac266bf7c087f99997cce (plain)
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
package _weierstrass

import p256r1 "core:crypto/_fiat/field_scalarp256r1"
import p384r1 "core:crypto/_fiat/field_scalarp384r1"
import subtle "core:crypto/_subtle"

Scalar_p256r1 :: p256r1.Montgomery_Domain_Field_Element
Scalar_p384r1 :: p384r1.Montgomery_Domain_Field_Element

SC_SIZE_P256R1 :: 32
SC_SIZE_P384R1 :: 48

sc_clear :: proc {
	p256r1.fe_clear,
	p384r1.fe_clear,
}

sc_clear_vec :: proc {
	p256r1.fe_clear_vec,
	p384r1.fe_clear_vec,
}

sc_set_bytes :: proc {
	p256r1.fe_from_bytes,
	p384r1.fe_from_bytes,
}

sc_bytes :: proc {
	p256r1.fe_to_bytes,
	p384r1.fe_to_bytes,
}

sc_set :: proc {
	p256r1.fe_set,
	p384r1.fe_set,
}

sc_zero :: proc {
	p256r1.fe_zero,
	p384r1.fe_zero,
}

sc_one_p256r1 :: proc {
	p256r1.fe_one,
	p384r1.fe_one,
}

sc_add :: proc {
	p256r1.fe_add,
	p384r1.fe_add,
}

sc_sub :: proc {
	p256r1.fe_sub,
	p384r1.fe_sub,
}

sc_negate :: proc {
	p256r1.fe_opp,
	p384r1.fe_opp,
}

sc_mul :: proc {
	p256r1.fe_mul,
	p384r1.fe_mul,
}

sc_square :: proc {
	p256r1.fe_square,
	p384r1.fe_square,
}

sc_cond_assign :: proc {
	p256r1.fe_cond_assign,
	p384r1.fe_cond_assign,
}

sc_equal :: proc {
	p256r1.fe_equal,
	p384r1.fe_equal,
}

sc_is_odd :: proc {
	p256r1.fe_is_odd,
	p384r1.fe_is_odd,
}

sc_is_zero :: proc {
	sc_is_zero_p256r1,
	sc_is_zero_p384r1,
}

@(require_results)
sc_is_zero_p256r1 :: proc "contextless" (fe: ^Scalar_p256r1) -> int {
	return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe)))
}

@(require_results)
sc_is_zero_p384r1 :: proc "contextless" (fe: ^Scalar_p384r1) -> int {
	return int(subtle.u64_is_zero(p384r1.fe_non_zero(fe)))
}