core/crypto/sha3: odinfmt (NFC)

This commit is contained in:
Yawning Angel
2023-11-17 16:53:29 +09:00
parent 14a46c6d5e
commit d50380709d
4 changed files with 629 additions and 594 deletions
+9 -4
View File
@@ -56,10 +56,15 @@ keccakf :: proc "contextless" (st: ^[25]u64) {
v: uintptr = --- v: uintptr = ---
for i = 0; i < 25; i += 1 { for i = 0; i < 25; i += 1 {
v := uintptr(&st[i]) v := uintptr(&st[i])
st[i] = u64((^u8)(v + 0)^ << 0) | u64((^u8)(v + 1)^ << 8) | st[i] =
u64((^u8)(v + 2)^ << 16) | u64((^u8)(v + 3)^ << 24) | u64((^u8)(v + 0)^ << 0) |
u64((^u8)(v + 4)^ << 32) | u64((^u8)(v + 5)^ << 40) | u64((^u8)(v + 1)^ << 8) |
u64((^u8)(v + 6)^ << 48) | u64((^u8)(v + 7)^ << 56) 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)
} }
} }
+17 -5
View File
@@ -11,8 +11,8 @@ package keccak
This is done because the padding in the SHA3 standard was changed by the NIST, resulting in a different output. This is done because the padding in the SHA3 standard was changed by the NIST, resulting in a different output.
*/ */
import "core:os"
import "core:io" import "core:io"
import "core:os"
import "../_sha3" import "../_sha3"
@@ -56,7 +56,10 @@ hash_string_to_buffer_224 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_224 :: proc(data, hash: []byte) { hash_bytes_to_buffer_224 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_224, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_224,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_224 ctx.mdlen = DIGEST_SIZE_224
ctx.is_keccak = true ctx.is_keccak = true
@@ -138,7 +141,10 @@ hash_string_to_buffer_256 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_256 :: proc(data, hash: []byte) { hash_bytes_to_buffer_256 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_256, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_256,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_256 ctx.mdlen = DIGEST_SIZE_256
ctx.is_keccak = true ctx.is_keccak = true
@@ -220,7 +226,10 @@ hash_string_to_buffer_384 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_384 :: proc(data, hash: []byte) { hash_bytes_to_buffer_384 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_384, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_384,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_384 ctx.mdlen = DIGEST_SIZE_384
ctx.is_keccak = true ctx.is_keccak = true
@@ -302,7 +311,10 @@ hash_string_to_buffer_512 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_512 :: proc(data, hash: []byte) { hash_bytes_to_buffer_512 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_512, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_512,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_512 ctx.mdlen = DIGEST_SIZE_512
ctx.is_keccak = true ctx.is_keccak = true
+17 -5
View File
@@ -11,8 +11,8 @@ package sha3
If you wish to compute a Keccak hash, you can use the keccak package, it will use the original padding. If you wish to compute a Keccak hash, you can use the keccak package, it will use the original padding.
*/ */
import "core:os"
import "core:io" import "core:io"
import "core:os"
import "../_sha3" import "../_sha3"
@@ -54,7 +54,10 @@ hash_string_to_buffer_224 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_224 :: proc(data, hash: []byte) { hash_bytes_to_buffer_224 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_224, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_224,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_224 ctx.mdlen = DIGEST_SIZE_224
_sha3.init(&ctx) _sha3.init(&ctx)
@@ -133,7 +136,10 @@ hash_string_to_buffer_256 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_256 :: proc(data, hash: []byte) { hash_bytes_to_buffer_256 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_256, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_256,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_256 ctx.mdlen = DIGEST_SIZE_256
_sha3.init(&ctx) _sha3.init(&ctx)
@@ -212,7 +218,10 @@ hash_string_to_buffer_384 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_384 :: proc(data, hash: []byte) { hash_bytes_to_buffer_384 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_384, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_384,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_384 ctx.mdlen = DIGEST_SIZE_384
_sha3.init(&ctx) _sha3.init(&ctx)
@@ -291,7 +300,10 @@ hash_string_to_buffer_512 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_512 :: proc(data, hash: []byte) { hash_bytes_to_buffer_512 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_512, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_512,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_512 ctx.mdlen = DIGEST_SIZE_512
_sha3.init(&ctx) _sha3.init(&ctx)
+9 -3
View File
@@ -11,8 +11,8 @@ package shake
The SHA3 functionality can be found in package sha3. The SHA3 functionality can be found in package sha3.
*/ */
import "core:os"
import "core:io" import "core:io"
import "core:os"
import "../_sha3" import "../_sha3"
@@ -53,7 +53,10 @@ hash_string_to_buffer_128 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_128 :: proc(data, hash: []byte) { hash_bytes_to_buffer_128 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_128, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_128,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_128 ctx.mdlen = DIGEST_SIZE_128
_sha3.init(&ctx) _sha3.init(&ctx)
@@ -135,7 +138,10 @@ hash_string_to_buffer_256 :: proc(data: string, hash: []byte) {
// computed hash into the second parameter. // computed hash into the second parameter.
// It requires that the destination buffer is at least as big as the digest size // It requires that the destination buffer is at least as big as the digest size
hash_bytes_to_buffer_256 :: proc(data, hash: []byte) { hash_bytes_to_buffer_256 :: proc(data, hash: []byte) {
assert(len(hash) >= DIGEST_SIZE_256, "Size of destination buffer is smaller than the digest size") assert(
len(hash) >= DIGEST_SIZE_256,
"Size of destination buffer is smaller than the digest size",
)
ctx: _sha3.Sha3_Context ctx: _sha3.Sha3_Context
ctx.mdlen = DIGEST_SIZE_256 ctx.mdlen = DIGEST_SIZE_256
_sha3.init(&ctx) _sha3.init(&ctx)