2
0
Эх сурвалжийг харах

core/crypto/_sha3: Cleanups

- Use `math/bits`
Yawning Angel 1 жил өмнө
parent
commit
7c1119f217

+ 7 - 25
core/crypto/_sha3/sha3.odin

@@ -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] =
-				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)
+			st[i] = bits.byte_swap(st[i])
 		}
 		}
 	}
 	}
 
 
@@ -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])
-			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
+			st[i] = bits.byte_swap(st[i])
 		}
 		}
 	}
 	}
 }
 }
@@ -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) {