mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
core/crypto/_sha3: Cleanups
- Use `math/bits`
This commit is contained in:
@@ -11,7 +11,7 @@ package _sha3
|
|||||||
To use the original Keccak padding, set the is_keccak bool to true, otherwise it will use SHA3 padding.
|
To use the original Keccak padding, set the is_keccak bool to true, otherwise it will use SHA3 padding.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import "../util"
|
import "core:math/bits"
|
||||||
|
|
||||||
ROUNDS :: 24
|
ROUNDS :: 24
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
|
|||||||
0x8000000000008080, 0x0000000080000001, 0x8000000080008008,
|
0x8000000000008080, 0x0000000080000001, 0x8000000080008008,
|
||||||
}
|
}
|
||||||
|
|
||||||
keccakf_rotc := [?]i32 {
|
keccakf_rotc := [?]int {
|
||||||
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14,
|
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14,
|
||||||
27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44,
|
27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44,
|
||||||
}
|
}
|
||||||
@@ -53,18 +53,8 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
|
|||||||
bc: [5]u64 = ---
|
bc: [5]u64 = ---
|
||||||
|
|
||||||
when ODIN_ENDIAN != .Little {
|
when ODIN_ENDIAN != .Little {
|
||||||
v: uintptr = ---
|
|
||||||
for i = 0; i < 25; i += 1 {
|
for i = 0; i < 25; i += 1 {
|
||||||
v := uintptr(&st[i])
|
st[i] = bits.byte_swap(st[i])
|
||||||
st[i] =
|
|
||||||
u64((^u8)(v + 0)^ << 0) |
|
|
||||||
u64((^u8)(v + 1)^ << 8) |
|
|
||||||
u64((^u8)(v + 2)^ << 16) |
|
|
||||||
u64((^u8)(v + 3)^ << 24) |
|
|
||||||
u64((^u8)(v + 4)^ << 32) |
|
|
||||||
u64((^u8)(v + 5)^ << 40) |
|
|
||||||
u64((^u8)(v + 6)^ << 48) |
|
|
||||||
u64((^u8)(v + 7)^ << 56)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +65,7 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i = 0; i < 5; i += 1 {
|
for i = 0; i < 5; i += 1 {
|
||||||
t = bc[(i + 4) % 5] ~ util.ROTL64(bc[(i + 1) % 5], 1)
|
t = bc[(i + 4) % 5] ~ bits.rotate_left64(bc[(i + 1) % 5], 1)
|
||||||
for j = 0; j < 25; j += 5 {
|
for j = 0; j < 25; j += 5 {
|
||||||
st[j + i] ~= t
|
st[j + i] ~= t
|
||||||
}
|
}
|
||||||
@@ -86,7 +76,7 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
|
|||||||
for i = 0; i < 24; i += 1 {
|
for i = 0; i < 24; i += 1 {
|
||||||
j = keccakf_piln[i]
|
j = keccakf_piln[i]
|
||||||
bc[0] = st[j]
|
bc[0] = st[j]
|
||||||
st[j] = util.ROTL64(t, u64(keccakf_rotc[i]))
|
st[j] = bits.rotate_left64(t, keccakf_rotc[i])
|
||||||
t = bc[0]
|
t = bc[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,16 +95,7 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
|
|||||||
|
|
||||||
when ODIN_ENDIAN != .Little {
|
when ODIN_ENDIAN != .Little {
|
||||||
for i = 0; i < 25; i += 1 {
|
for i = 0; i < 25; i += 1 {
|
||||||
v = uintptr(&st[i])
|
st[i] = bits.byte_swap(st[i])
|
||||||
t = st[i]
|
|
||||||
(^u8)(v + 0)^ = (t >> 0) & 0xff
|
|
||||||
(^u8)(v + 1)^ = (t >> 8) & 0xff
|
|
||||||
(^u8)(v + 2)^ = (t >> 16) & 0xff
|
|
||||||
(^u8)(v + 3)^ = (t >> 24) & 0xff
|
|
||||||
(^u8)(v + 4)^ = (t >> 32) & 0xff
|
|
||||||
(^u8)(v + 5)^ = (t >> 40) & 0xff
|
|
||||||
(^u8)(v + 6)^ = (t >> 48) & 0xff
|
|
||||||
(^u8)(v + 7)^ = (t >> 56) & 0xff
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,6 +105,7 @@ init :: proc "contextless" (c: ^Sha3_Context) {
|
|||||||
c.st.q[i] = 0
|
c.st.q[i] = 0
|
||||||
}
|
}
|
||||||
c.rsiz = 200 - 2 * c.mdlen
|
c.rsiz = 200 - 2 * c.mdlen
|
||||||
|
c.pt = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
update :: proc "contextless" (c: ^Sha3_Context, data: []byte) {
|
update :: proc "contextless" (c: ^Sha3_Context, data: []byte) {
|
||||||
|
|||||||
Reference in New Issue
Block a user