Skip to content

Commit ed08e45

Browse files
authored
change mul and div functions (#19495)
1 parent 55bf601 commit ed08e45

File tree

3 files changed

+24
-107
lines changed

3 files changed

+24
-107
lines changed

shamir/shamir.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -86,31 +86,40 @@ func div(a, b uint8) uint8 {
8686
panic("divide by zero")
8787
}
8888

89-
log_a := logTable[a]
90-
log_b := logTable[b]
91-
diff := ((int(log_a) - int(log_b)) + 255) % 255
92-
93-
ret := int(expTable[diff])
89+
ret := int(mult(a, inverse(b)))
9490

9591
// Ensure we return zero if a is zero but aren't subject to timing attacks
9692
ret = subtle.ConstantTimeSelect(subtle.ConstantTimeByteEq(a, 0), 0, ret)
9793
return uint8(ret)
9894
}
9995

96+
// inverse calculates the inverse of a number in GF(2^8)
97+
func inverse(a uint8) uint8 {
98+
b := mult(a, a)
99+
c := mult(a, b)
100+
b = mult(c, c)
101+
b = mult(b, b)
102+
c = mult(b, c)
103+
b = mult(b, b)
104+
b = mult(b, b)
105+
b = mult(b, c)
106+
b = mult(b, b)
107+
b = mult(a, b)
108+
109+
return mult(b, b)
110+
}
111+
100112
// mult multiplies two numbers in GF(2^8)
101113
func mult(a, b uint8) (out uint8) {
102-
log_a := logTable[a]
103-
log_b := logTable[b]
104-
sum := (int(log_a) + int(log_b)) % 255
105-
106-
ret := int(expTable[sum])
114+
var r uint8 = 0
115+
var i uint8 = 8
107116

108-
// Ensure we return zero if either a or b are zero but aren't subject to
109-
// timing attacks
110-
ret = subtle.ConstantTimeSelect(subtle.ConstantTimeByteEq(a, 0), 0, ret)
111-
ret = subtle.ConstantTimeSelect(subtle.ConstantTimeByteEq(b, 0), 0, ret)
117+
for i > 0 {
118+
i--
119+
r = (-(b >> i & 1) & a) ^ (-(r >> 7) & 0x1B) ^ (r + r)
120+
}
112121

113-
return uint8(ret)
122+
return r
114123
}
115124

116125
// add combines two numbers in GF(2^8)

shamir/tables.go

Lines changed: 0 additions & 79 deletions
This file was deleted.

shamir/tables_test.go

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)