From c24454ae70759b77cd6ed8b3f313eb32bc19ab21 Mon Sep 17 00:00:00 2001 From: zhibog Date: Tue, 9 Nov 2021 16:50:13 +0100 Subject: [PATCH] Removed context switching system from the crypto library to simplify the code --- core/crypto/README.md | 78 +- core/crypto/_blake2/_blake2.odin | 36 +- core/crypto/_ctx/_ctx.odin | 79 -- core/crypto/_sha3/_sha3.odin | 11 +- core/crypto/_tiger/_tiger.odin | 21 +- core/crypto/blake/blake.odin | 797 +++++++---------- core/crypto/blake2b/blake2b.odin | 169 +--- core/crypto/blake2s/blake2s.odin | 169 +--- core/crypto/botan/botan.lib | Bin 3298832 -> 0 bytes core/crypto/botan/botan.odin | 480 ---------- core/crypto/botan/hash.odin | 498 ----------- core/crypto/gost/gost.odin | 323 +++---- core/crypto/groestl/groestl.odin | 558 +++++------- core/crypto/haval/haval.odin | 1063 +++++++++++++---------- core/crypto/jh/jh.odin | 594 +++++-------- core/crypto/keccak/keccak.odin | 422 +++------ core/crypto/md2/md2.odin | 200 ++--- core/crypto/md4/md4.odin | 249 ++---- core/crypto/md5/md5.odin | 252 ++---- core/crypto/ripemd/ripemd.odin | 646 +++++--------- core/crypto/sha1/sha1.odin | 271 ++---- core/crypto/sha2/sha2.odin | 636 +++++--------- core/crypto/sha3/sha3.odin | 413 +++------ core/crypto/shake/shake.odin | 259 ++---- core/crypto/skein/skein.odin | 487 ----------- core/crypto/sm3/sm3.odin | 262 ++---- core/crypto/streebog/streebog.odin | 337 +++---- core/crypto/tiger/tiger.odin | 320 +++---- core/crypto/tiger2/tiger2.odin | 318 +++---- core/crypto/whirlpool/whirlpool.odin | 320 +++---- tests/core/botan.dll | Bin 4555776 -> 0 bytes tests/core/crypto/test_core_crypto.odin | 183 ---- 32 files changed, 3124 insertions(+), 7327 deletions(-) delete mode 100644 core/crypto/_ctx/_ctx.odin delete mode 100644 core/crypto/botan/botan.lib delete mode 100644 core/crypto/botan/botan.odin delete mode 100644 core/crypto/botan/hash.odin delete mode 100644 core/crypto/skein/skein.odin delete mode 100644 tests/core/botan.dll diff --git a/core/crypto/README.md b/core/crypto/README.md index c21fba44b..5955f9c56 100644 --- a/core/crypto/README.md +++ b/core/crypto/README.md @@ -2,48 +2,43 @@ A crypto library for the Odin language ## Supported -This library offers various algorithms available in either native Odin or via bindings to the [Botan](https://botan.randombit.net/) crypto library. +This library offers various algorithms implemented in Odin. Please see the chart below for the options. -**Note:** All crypto hash algorithms, offered by [Botan\'s FFI](https://botan.randombit.net/handbook/api_ref/hash.html), have been added. ## Hashing algorithms -| Algorithm | Odin | Botan | -|:-------------------------------------------------------------------------------------------------------------|:-----------------|:---------------------| -| [BLAKE](https://web.archive.org/web/20190915215948/https://131002.net/blake) | ✔️ | | -| [BLAKE2B](https://datatracker.ietf.org/doc/html/rfc7693) | ✔️ | ✔️ | -| [BLAKE2S](https://datatracker.ietf.org/doc/html/rfc7693) | ✔️ | | -| [GOST](https://datatracker.ietf.org/doc/html/rfc5831) | ✔️ | ✔️ | -| [Grøstl](http://www.groestl.info/Groestl.zip) | ✔️ | | -| [HAVAL](https://web.archive.org/web/20150111210116/http://labs.calyptix.com/haval.php) | ✔️ | | -| [JH](https://www3.ntu.edu.sg/home/wuhj/research/jh/index.html) | ✔️ | | -| [Keccak](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | ✔️ | -| [MD2](https://datatracker.ietf.org/doc/html/rfc1319) | ✔️ | | -| [MD4](https://datatracker.ietf.org/doc/html/rfc1320) | ✔️ | ✔️ | -| [MD5](https://datatracker.ietf.org/doc/html/rfc1321) | ✔️ | ✔️ | -| [RIPEMD](https://homes.esat.kuleuven.be/~bosselae/ripemd160.html) | ✔️ | ✔️\* | -| [SHA-1](https://datatracker.ietf.org/doc/html/rfc3174) | ✔️ | ✔️ | -| [SHA-2](https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf) | ✔️ | ✔️ | -| [SHA-3](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | ✔️ | -| [SHAKE](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | ✔️ | -| [Skein](https://www.schneier.com/academic/skein/) | | ✔️\*\* | -| [SM3](https://datatracker.ietf.org/doc/html/draft-sca-cfrg-sm3-02) | ✔️ | ✔️ | -| [Streebog](https://datatracker.ietf.org/doc/html/rfc6986) | ✔️ | ✔️ | -| [Tiger](https://www.cs.technion.ac.il/~biham/Reports/Tiger/) | ✔️ | ✔️ | -| [Tiger2](https://www.cs.technion.ac.il/~biham/Reports/Tiger/) | ✔️ | | -| [Whirlpool](https://web.archive.org/web/20171129084214/http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html) | ✔️ | ✔️ | - -\* Only `RIPEMD-160` -\*\* Only `SKEIN-512` +| Algorithm | | +|:-------------------------------------------------------------------------------------------------------------|:-----------------| +| [BLAKE](https://web.archive.org/web/20190915215948/https://131002.net/blake) | ✔️ | +| [BLAKE2B](https://datatracker.ietf.org/doc/html/rfc7693) | ✔️ | +| [BLAKE2S](https://datatracker.ietf.org/doc/html/rfc7693) | ✔️ | +| [GOST](https://datatracker.ietf.org/doc/html/rfc5831) | ✔️ | +| [Grøstl](http://www.groestl.info/Groestl.zip) | ✔️ | +| [HAVAL](https://web.archive.org/web/20150111210116/http://labs.calyptix.com/haval.php) | ✔️ | +| [JH](https://www3.ntu.edu.sg/home/wuhj/research/jh/index.html) | ✔️ | +| [Keccak](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | +| [MD2](https://datatracker.ietf.org/doc/html/rfc1319) | ✔️ | +| [MD4](https://datatracker.ietf.org/doc/html/rfc1320) | ✔️ | +| [MD5](https://datatracker.ietf.org/doc/html/rfc1321) | ✔️ | +| [RIPEMD](https://homes.esat.kuleuven.be/~bosselae/ripemd160.html) | ✔️ | +| [SHA-1](https://datatracker.ietf.org/doc/html/rfc3174) | ✔️ | +| [SHA-2](https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf) | ✔️ | +| [SHA-3](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | +| [SHAKE](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) | ✔️ | +| [SM3](https://datatracker.ietf.org/doc/html/draft-sca-cfrg-sm3-02) | ✔️ | +| [Streebog](https://datatracker.ietf.org/doc/html/rfc6986) | ✔️ | +| [Tiger](https://www.cs.technion.ac.il/~biham/Reports/Tiger/) | ✔️ | +| [Tiger2](https://www.cs.technion.ac.il/~biham/Reports/Tiger/) | ✔️ | +| [Whirlpool](https://web.archive.org/web/20171129084214/http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html) | ✔️ | #### High level API -Each hash algorithm contains a procedure group named `hash`, or if the algorithm provides more than one digest size `hash_`\*\*\*. +Each hash algorithm contains a procedure group named `hash`, or if the algorithm provides more than one digest size `hash_`\*. Included in these groups are four procedures. * `hash_string` - Hash a given string and return the computed hash. Just calls `hash_bytes` internally * `hash_bytes` - Hash a given byte slice and return the computed hash * `hash_stream` - Takes a stream from io.Stream and returns the computed hash from it * `hash_file` - Takes a file handle and returns the computed hash from it. A second optional boolean parameter controls if the file is streamed (this is the default) or read at once (set to true) -\*\*\* On some algorithms there is another part to the name, since they might offer control about additional parameters. +\* On some algorithms there is another part to the name, since they might offer control about additional parameters. For instance, `HAVAL` offers different sizes as well as three different round amounts. Computing a 256-bit hash with 3 rounds is therefore achieved by calling `haval.hash_256_3(...)`. @@ -51,13 +46,6 @@ Computing a 256-bit hash with 3 rounds is therefore achieved by calling `haval.h The above mentioned procedures internally call three procedures: `init`, `update` and `final`. You may also directly call them, if you wish. -#### Context system -The library uses a context system internally to be able to switch between Odin / Botan implementations freely. -When an Odin implementation is available, it is the default. -You may change what is used during runtime by calling `foo.use_botan()` or `foo.use_odin()`. -It is also possible to set this during compile time via `USE_BOTAN_LIB=true`. -Internally a vtable is used to set the appropriate procedures when switching. This works for all the procedures mentioned in the APIs above. - #### Example ```odin package crypto_example @@ -67,12 +55,16 @@ import "core:crypto/md4" main :: proc() { input := "foo" - // Compute the hash via Odin implementation + + // Compute the hash, using the high level API computed_hash := md4.hash(input) - // Switch to Botan - md4.use_botan() - // Compute the hash via Botan bindings - computed_hash_botan := md4.hash(input) + + // Compute the hash, using the low level API + ctx: md4.Md4_Context + computed_hash_low: [16]byte + md4.init(&ctx) + md4.update(&ctx, transmute([]byte)input) + md4.final(&ctx, computed_hash_low[:]) } ``` For example uses of all available algorithms, please see the tests within `tests/core/crypto`. diff --git a/core/crypto/_blake2/_blake2.odin b/core/crypto/_blake2/_blake2.odin index b2e18d6c7..7b75541e9 100644 --- a/core/crypto/_blake2/_blake2.odin +++ b/core/crypto/_blake2/_blake2.odin @@ -6,7 +6,6 @@ package _blake2 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the BLAKE2 hashing algorithm, as defined in and */ @@ -76,7 +75,7 @@ BLAKE2B_IV := [8]u64 { 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, } -init_odin :: proc(ctx: ^$T) { +init :: proc(ctx: ^$T) { when T == Blake2s_Context { block_size :: BLAKE2S_BLOCK_SIZE } else when T == Blake2b_Context { @@ -139,17 +138,17 @@ init_odin :: proc(ctx: ^$T) { } if len(ctx.cfg.key) > 0 { copy(ctx.padded_key[:], ctx.cfg.key) - update_odin(ctx, ctx.padded_key[:]) + update(ctx, ctx.padded_key[:]) ctx.is_keyed = true } copy(ctx.ih[:], ctx.h[:]) copy(ctx.h[:], ctx.ih[:]) if ctx.is_keyed { - update_odin(ctx, ctx.padded_key[:]) + update(ctx, ctx.padded_key[:]) } } -update_odin :: proc(ctx: ^$T, p: []byte) { +update :: proc "contextless" (ctx: ^$T, p: []byte) { p := p when T == Blake2s_Context { block_size :: BLAKE2S_BLOCK_SIZE @@ -161,7 +160,7 @@ update_odin :: proc(ctx: ^$T, p: []byte) { if len(p) > left { copy(ctx.x[ctx.nx:], p[:left]) p = p[left:] - blake2_blocks(ctx, ctx.x[:]) + blocks(ctx, ctx.x[:]) ctx.nx = 0 } if len(p) > block_size { @@ -169,13 +168,22 @@ update_odin :: proc(ctx: ^$T, p: []byte) { if n == len(p) { n -= block_size } - blake2_blocks(ctx, p[:n]) + blocks(ctx, p[:n]) p = p[n:] } ctx.nx += copy(ctx.x[ctx.nx:], p) } -blake2s_final_odin :: proc(ctx: $T, hash: []byte) { +final :: proc "contextless" (ctx: ^$T, hash: []byte) { + when T == Blake2s_Context { + blake2s_final(ctx, hash) + } + when T == Blake2b_Context { + blake2b_final(ctx, hash) + } +} + +blake2s_final :: proc "contextless" (ctx: ^Blake2s_Context, hash: []byte) { if ctx.is_keyed { for i := 0; i < len(ctx.padded_key); i += 1 { ctx.padded_key[i] = 0 @@ -193,7 +201,7 @@ blake2s_final_odin :: proc(ctx: $T, hash: []byte) { ctx.f[1] = 0xffffffff } - blake2_blocks(ctx, ctx.x[:]) + blocks(ctx, ctx.x[:]) j := 0 for s, _ in ctx.h[:(ctx.size - 1) / 4 + 1] { @@ -205,7 +213,7 @@ blake2s_final_odin :: proc(ctx: $T, hash: []byte) { } } -blake2b_final_odin :: proc(ctx: $T, hash: []byte) { +blake2b_final :: proc "contextless" (ctx: ^Blake2b_Context, hash: []byte) { if ctx.is_keyed { for i := 0; i < len(ctx.padded_key); i += 1 { ctx.padded_key[i] = 0 @@ -223,7 +231,7 @@ blake2b_final_odin :: proc(ctx: $T, hash: []byte) { ctx.f[1] = 0xffffffffffffffff } - blake2_blocks(ctx, ctx.x[:]) + blocks(ctx, ctx.x[:]) j := 0 for s, _ in ctx.h[:(ctx.size - 1) / 8 + 1] { @@ -239,7 +247,7 @@ blake2b_final_odin :: proc(ctx: $T, hash: []byte) { } } -blake2_blocks :: proc(ctx: ^$T, p: []byte) { +blocks :: proc "contextless" (ctx: ^$T, p: []byte) { when T == Blake2s_Context { blake2s_blocks(ctx, p) } @@ -248,7 +256,7 @@ blake2_blocks :: proc(ctx: ^$T, p: []byte) { } } -blake2s_blocks :: #force_inline proc "contextless"(ctx: ^Blake2s_Context, p: []byte) { +blake2s_blocks :: #force_inline proc "contextless" (ctx: ^Blake2s_Context, p: []byte) { h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] p := p for len(p) >= BLAKE2S_BLOCK_SIZE { @@ -1404,7 +1412,7 @@ blake2s_blocks :: #force_inline proc "contextless"(ctx: ^Blake2s_Context, p: []b ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] = h0, h1, h2, h3, h4, h5, h6, h7 } -blake2b_blocks :: #force_inline proc "contextless"(ctx: ^Blake2b_Context, p: []byte) { +blake2b_blocks :: #force_inline proc "contextless" (ctx: ^Blake2b_Context, p: []byte) { h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] p := p for len(p) >= BLAKE2B_BLOCK_SIZE { diff --git a/core/crypto/_ctx/_ctx.odin b/core/crypto/_ctx/_ctx.odin deleted file mode 100644 index 0a0e0e6cf..000000000 --- a/core/crypto/_ctx/_ctx.odin +++ /dev/null @@ -1,79 +0,0 @@ -package _ctx - -/* - Copyright 2021 zhibog - Made available under the BSD-3 license. - - List of contributors: - zhibog: Initial creation and testing of the bindings. - - Implementation of the context, used internally by the crypto library. -*/ - -import "core:io" -import "core:os" - -Hash_Size :: enum { - _16, - _20, - _24, - _28, - _32, - _40, - _48, - _64, - _128, -} - -Hash_Context :: struct { - botan_hash_algo: cstring, - external_ctx: any, - internal_ctx: any, - hash_size: Hash_Size, - hash_size_val: int, - is_using_odin: bool, - using vtbl: ^Hash_Context_Vtable, -} - -Hash_Context_Vtable :: struct { - hash_bytes_16 : proc (ctx: ^Hash_Context, input: []byte) -> [16]byte, - hash_bytes_20 : proc (ctx: ^Hash_Context, input: []byte) -> [20]byte, - hash_bytes_24 : proc (ctx: ^Hash_Context, input: []byte) -> [24]byte, - hash_bytes_28 : proc (ctx: ^Hash_Context, input: []byte) -> [28]byte, - hash_bytes_32 : proc (ctx: ^Hash_Context, input: []byte) -> [32]byte, - hash_bytes_40 : proc (ctx: ^Hash_Context, input: []byte) -> [40]byte, - hash_bytes_48 : proc (ctx: ^Hash_Context, input: []byte) -> [48]byte, - hash_bytes_64 : proc (ctx: ^Hash_Context, input: []byte) -> [64]byte, - hash_bytes_128 : proc (ctx: ^Hash_Context, input: []byte) -> [128]byte, - hash_file_16 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool), - hash_file_20 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool), - hash_file_24 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([24]byte, bool), - hash_file_28 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool), - hash_file_32 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool), - hash_file_40 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([40]byte, bool), - hash_file_48 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool), - hash_file_64 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool), - hash_file_128 : proc (ctx: ^Hash_Context, hd: os.Handle, load_at_once := false) -> ([128]byte, bool), - hash_stream_16 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([16]byte, bool), - hash_stream_20 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([20]byte, bool), - hash_stream_24 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([24]byte, bool), - hash_stream_28 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([28]byte, bool), - hash_stream_32 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([32]byte, bool), - hash_stream_40 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([40]byte, bool), - hash_stream_48 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([48]byte, bool), - hash_stream_64 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([64]byte, bool), - hash_stream_128 : proc (ctx: ^Hash_Context, s: io.Stream) -> ([128]byte, bool), - hash_bytes_slice : proc (ctx: ^Hash_Context, input: []byte, out_size: int, allocator := context.allocator) -> []byte, - hash_file_slice : proc (ctx: ^Hash_Context, hd: os.Handle, out_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool), - hash_stream_slice : proc (ctx: ^Hash_Context, s: io.Stream, out_size: int, allocator := context.allocator) -> ([]byte, bool), - init : proc (ctx: ^Hash_Context), - update : proc (ctx: ^Hash_Context, data: []byte), - final : proc (ctx: ^Hash_Context, hash: []byte), -} - -_init_vtable :: #force_inline proc() -> ^Hash_Context { - ctx := new(Hash_Context) - vtbl := new(Hash_Context_Vtable) - ctx.vtbl = vtbl - return ctx -} \ No newline at end of file diff --git a/core/crypto/_sha3/_sha3.odin b/core/crypto/_sha3/_sha3.odin index 1038eb77c..76e09bf24 100644 --- a/core/crypto/_sha3/_sha3.odin +++ b/core/crypto/_sha3/_sha3.odin @@ -6,7 +6,6 @@ package _sha3 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the Keccak hashing algorithm, standardized as SHA3 in To use the original Keccak padding, set the is_keccak bool to true, otherwise it will use SHA3 padding. @@ -115,14 +114,14 @@ keccakf :: proc "contextless" (st: ^[25]u64) { } } -init_odin :: proc "contextless" (c: ^Sha3_Context) { +init :: proc "contextless" (c: ^Sha3_Context) { for i := 0; i < 25; i += 1 { c.st.q[i] = 0 } c.rsiz = 200 - 2 * c.mdlen } -update_odin :: proc "contextless" (c: ^Sha3_Context, data: []byte) { +update :: proc "contextless" (c: ^Sha3_Context, data: []byte) { j := c.pt for i := 0; i < len(data); i += 1 { c.st.b[j] ~= data[i] @@ -135,7 +134,7 @@ update_odin :: proc "contextless" (c: ^Sha3_Context, data: []byte) { c.pt = j } -final_odin :: proc "contextless" (c: ^Sha3_Context, hash: []byte) { +final :: proc "contextless" (c: ^Sha3_Context, hash: []byte) { if c.is_keccak { c.st.b[c.pt] ~= 0x01 } else { @@ -149,14 +148,14 @@ final_odin :: proc "contextless" (c: ^Sha3_Context, hash: []byte) { } } -shake_xof_odin :: proc "contextless" (c: ^Sha3_Context) { +shake_xof :: proc "contextless" (c: ^Sha3_Context) { c.st.b[c.pt] ~= 0x1F c.st.b[c.rsiz - 1] ~= 0x80 keccakf(&c.st.q) c.pt = 0 } -shake_out_odin :: proc "contextless" (c: ^Sha3_Context, hash: []byte) { +shake_out :: proc "contextless" (c: ^Sha3_Context, hash: []byte) { j := c.pt for i := 0; i < len(hash); i += 1 { if j >= c.rsiz { diff --git a/core/crypto/_tiger/_tiger.odin b/core/crypto/_tiger/_tiger.odin index 50caf0944..e1629c4ca 100644 --- a/core/crypto/_tiger/_tiger.odin +++ b/core/crypto/_tiger/_tiger.odin @@ -6,7 +6,6 @@ package _tiger List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the Tiger hashing algorithm, as defined in */ @@ -291,7 +290,7 @@ Tiger_Context :: struct { ver: int, } -round :: #force_inline proc "contextless"(a, b, c, x, mul: u64) -> (u64, u64, u64) { +round :: #force_inline proc "contextless" (a, b, c, x, mul: u64) -> (u64, u64, u64) { a, b, c := a, b, c c ~= x a -= T1[c & 0xff] ~ T2[(c >> 16) & 0xff] ~ T3[(c >> 32) & 0xff] ~ T4[(c >> 48) & 0xff] @@ -300,7 +299,7 @@ round :: #force_inline proc "contextless"(a, b, c, x, mul: u64) -> (u64, u64, u6 return a, b, c } -pass :: #force_inline proc "contextless"(a, b, c: u64, d: []u64, mul: u64) -> (x, y, z: u64) { +pass :: #force_inline proc "contextless" (a, b, c: u64, d: []u64, mul: u64) -> (x, y, z: u64) { x, y, z = round(a, b, c, d[0], mul) y, z, x = round(y, z, x, d[1], mul) z, x, y = round(z, x, y, d[2], mul) @@ -312,7 +311,7 @@ pass :: #force_inline proc "contextless"(a, b, c: u64, d: []u64, mul: u64) -> (x return } -key_schedule :: #force_inline proc "contextless"(x: []u64) { +key_schedule :: #force_inline proc "contextless" (x: []u64) { x[0] -= x[7] ~ 0xa5a5a5a5a5a5a5a5 x[1] ~= x[0] x[2] += x[1] @@ -331,7 +330,7 @@ key_schedule :: #force_inline proc "contextless"(x: []u64) { x[7] -= x[6] ~ 0x0123456789abcdef } -compress :: #force_inline proc "contextless"(ctx: ^Tiger_Context, data: []byte) { +compress :: #force_inline proc "contextless" (ctx: ^Tiger_Context, data: []byte) { a := ctx.a b := ctx.b c := ctx.c @@ -346,13 +345,13 @@ compress :: #force_inline proc "contextless"(ctx: ^Tiger_Context, data: []byte) ctx.c += c } -init_odin :: proc(ctx: ^Tiger_Context) { +init :: proc "contextless" (ctx: ^Tiger_Context) { ctx.a = 0x0123456789abcdef ctx.b = 0xfedcba9876543210 ctx.c = 0xf096a5b4c3b2e187 } -update_odin :: proc(ctx: ^Tiger_Context, input: []byte) { +update :: proc(ctx: ^Tiger_Context, input: []byte) { p := make([]byte, len(input)) copy(p, input) @@ -380,7 +379,7 @@ update_odin :: proc(ctx: ^Tiger_Context, input: []byte) { } } -final_odin :: proc(ctx: ^Tiger_Context, hash: []byte) { +final :: proc(ctx: ^Tiger_Context, hash: []byte) { length := ctx.length tmp: [64]byte if ctx.ver == 1 { @@ -391,16 +390,16 @@ final_odin :: proc(ctx: ^Tiger_Context, hash: []byte) { size := length & 0x3f if size < 56 { - update_odin(ctx, tmp[:56 - size]) + update(ctx, tmp[:56 - size]) } else { - update_odin(ctx, tmp[:64 + 56 - size]) + update(ctx, tmp[:64 + 56 - size]) } length <<= 3 for i := uint(0); i < 8; i += 1 { tmp[i] = byte(length >> (8 * i)) } - update_odin(ctx, tmp[:8]) + update(ctx, tmp[:8]) for i := uint(0); i < 8; i += 1 { tmp[i] = byte(ctx.a >> (8 * i)) diff --git a/core/crypto/blake/blake.odin b/core/crypto/blake/blake.odin index 5046523b8..9d53f8a89 100644 --- a/core/crypto/blake/blake.odin +++ b/core/crypto/blake/blake.odin @@ -6,7 +6,6 @@ package blake List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the BLAKE hashing algorithm, as defined in */ @@ -14,102 +13,59 @@ package blake import "core:os" import "core:io" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since BLAKE is not available in Botan -@(warning="BLAKE is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_blake256_ctx :: #force_inline proc(is224: bool, size: _ctx.Hash_Size) { - ctx: Blake256_Context - ctx.is224 = is224 - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = size -} - -@(private) -_create_blake512_ctx :: #force_inline proc(is384: bool, size: _ctx.Hash_Size) { - ctx: Blake512_Context - ctx.is384 = is384 - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = size -} - /* High level API */ // hash_string_224 will hash the given input and return the // computed hash -hash_string_224 :: proc(data: string) -> [28]byte { +hash_string_224 :: proc "contextless" (data: string) -> [28]byte { return hash_bytes_224(transmute([]byte)(data)) } // hash_bytes_224 will hash the given input and return the // computed hash -hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_blake256_ctx(true, ._28) - return _hash_impl->hash_bytes_28(data) +hash_bytes_224 :: proc "contextless" (data: []byte) -> [28]byte { + hash: [28]byte + ctx: Blake256_Context + ctx.is224 = true + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_blake256_ctx(true, ._28) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Blake256_Context + ctx.is224 = true + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_blake256_ctx(true, ._28) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -121,29 +77,53 @@ hash_224 :: proc { // hash_string_256 will hash the given input and return the // computed hash -hash_string_256 :: proc(data: string) -> [32]byte { +hash_string_256 :: proc "contextless" (data: string) -> [32]byte { return hash_bytes_256(transmute([]byte)(data)) } // hash_bytes_256 will hash the given input and return the // computed hash -hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_blake256_ctx(false, ._32) - return _hash_impl->hash_bytes_32(data) +hash_bytes_256 :: proc "contextless" (data: []byte) -> [32]byte { + hash: [32]byte + ctx: Blake256_Context + ctx.is224 = false + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_blake256_ctx(false, ._32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Blake256_Context + ctx.is224 = false + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_blake256_ctx(false, ._32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -155,29 +135,53 @@ hash_256 :: proc { // hash_string_384 will hash the given input and return the // computed hash -hash_string_384 :: proc(data: string) -> [48]byte { +hash_string_384 :: proc "contextless" (data: string) -> [48]byte { return hash_bytes_384(transmute([]byte)(data)) } // hash_bytes_384 will hash the given input and return the // computed hash -hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_blake512_ctx(true, ._48) - return _hash_impl->hash_bytes_48(data) +hash_bytes_384 :: proc "contextless" (data: []byte) -> [48]byte { + hash: [48]byte + ctx: Blake512_Context + ctx.is384 = true + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_blake512_ctx(true, ._48) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: Blake512_Context + ctx.is384 = true + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_blake512_ctx(true, ._48) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -189,29 +193,53 @@ hash_384 :: proc { // hash_string_512 will hash the given input and return the // computed hash -hash_string_512 :: proc(data: string) -> [64]byte { +hash_string_512 :: proc "contextless" (data: string) -> [64]byte { return hash_bytes_512(transmute([]byte)(data)) } // hash_bytes_512 will hash the given input and return the // computed hash -hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_blake512_ctx(false, ._64) - return _hash_impl->hash_bytes_64(data) +hash_bytes_512 :: proc "contextless" (data: []byte) -> [64]byte { + hash: [64]byte + ctx: Blake512_Context + ctx.is384 = false + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_blake512_ctx(false, ._64) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Blake512_Context + ctx.is384 = false + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_blake512_ctx(false, ._64) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -225,231 +253,188 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() -} - -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } +init :: proc "contextless" (ctx: ^$T) { + when T == Blake256_Context { + if ctx.is224 { + ctx.h[0] = 0xc1059ed8 + ctx.h[1] = 0x367cd507 + ctx.h[2] = 0x3070dd17 + ctx.h[3] = 0xf70e5939 + ctx.h[4] = 0xffc00b31 + ctx.h[5] = 0x68581511 + ctx.h[6] = 0x64f98fa7 + ctx.h[7] = 0xbefa4fa4 + } else { + ctx.h[0] = 0x6a09e667 + ctx.h[1] = 0xbb67ae85 + ctx.h[2] = 0x3c6ef372 + ctx.h[3] = 0xa54ff53a + ctx.h[4] = 0x510e527f + ctx.h[5] = 0x9b05688c + ctx.h[6] = 0x1f83d9ab + ctx.h[7] = 0x5be0cd19 } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok - } - } - return [28]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - if ctx.hash_size == ._28 || ctx.hash_size == ._32 { - _create_blake256_ctx(ctx.hash_size == ._28, ctx.hash_size) - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - init_odin(&c) - } - return - } - if ctx.hash_size == ._48 || ctx.hash_size == ._64 { - _create_blake512_ctx(ctx.hash_size == ._48, ctx.hash_size) - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - init_odin(&c) + } else when T == Blake512_Context { + if ctx.is384 { + ctx.h[0] = 0xcbbb9d5dc1059ed8 + ctx.h[1] = 0x629a292a367cd507 + ctx.h[2] = 0x9159015a3070dd17 + ctx.h[3] = 0x152fecd8f70e5939 + ctx.h[4] = 0x67332667ffc00b31 + ctx.h[5] = 0x8eb44a8768581511 + ctx.h[6] = 0xdb0c2e0d64f98fa7 + ctx.h[7] = 0x47b5481dbefa4fa4 + } else { + ctx.h[0] = 0x6a09e667f3bcc908 + ctx.h[1] = 0xbb67ae8584caa73b + ctx.h[2] = 0x3c6ef372fe94f82b + ctx.h[3] = 0xa54ff53a5f1d36f1 + ctx.h[4] = 0x510e527fade682d1 + ctx.h[5] = 0x9b05688c2b3e6c1f + ctx.h[6] = 0x1f83d9abfb41bd6b + ctx.h[7] = 0x5be0cd19137e2179 } } } -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - #partial switch ctx.hash_size { - case ._28, ._32: - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - update_odin(&c, data) +update :: proc "contextless" (ctx: ^$T, data: []byte) { + data := data + when T == Blake256_Context { + if ctx.nx > 0 { + n := copy(ctx.x[ctx.nx:], data) + ctx.nx += n + if ctx.nx == BLOCKSIZE_256 { + block256(ctx, ctx.x[:]) + ctx.nx = 0 } - case ._48, ._64: - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - update_odin(&c, data) + data = data[n:] + } + if len(data) >= BLOCKSIZE_256 { + n := len(data) &~ (BLOCKSIZE_256 - 1) + block256(ctx, data[:n]) + data = data[n:] + } + if len(data) > 0 { + ctx.nx = copy(ctx.x[:], data) + } + } else when T == Blake512_Context { + if ctx.nx > 0 { + n := copy(ctx.x[ctx.nx:], data) + ctx.nx += n + if ctx.nx == BLOCKSIZE_512 { + block512(ctx, ctx.x[:]) + ctx.nx = 0 } + data = data[n:] + } + if len(data) >= BLOCKSIZE_512 { + n := len(data) &~ (BLOCKSIZE_512 - 1) + block512(ctx, data[:n]) + data = data[n:] + } + if len(data) > 0 { + ctx.nx = copy(ctx.x[:], data) + } } } -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - #partial switch ctx.hash_size { - case ._28, ._32: - if c, ok := ctx.internal_ctx.(Blake256_Context); ok { - final_odin(&c, hash) +final :: proc "contextless" (ctx: ^$T, hash: []byte) { + when T == Blake256_Context { + tmp: [65]byte + } else when T == Blake512_Context { + tmp: [129]byte + } + nx := u64(ctx.nx) + tmp[0] = 0x80 + length := (ctx.t + nx) << 3 + + when T == Blake256_Context { + if nx == 55 { + if ctx.is224 { + write_additional(ctx, {0x80}) + } else { + write_additional(ctx, {0x81}) } - case ._48, ._64: - if c, ok := ctx.internal_ctx.(Blake512_Context); ok { - final_odin(&c, hash) + } else { + if nx < 55 { + if nx == 0 { + ctx.nullt = true + } + write_additional(ctx, tmp[0 : 55 - nx]) + } else { + write_additional(ctx, tmp[0 : 64 - nx]) + write_additional(ctx, tmp[1:56]) + ctx.nullt = true } + if ctx.is224 { + write_additional(ctx, {0x00}) + } else { + write_additional(ctx, {0x01}) + } + } + + for i : uint = 0; i < 8; i += 1 { + tmp[i] = byte(length >> (56 - 8 * i)) + } + write_additional(ctx, tmp[0:8]) + + h := ctx.h[:] + if ctx.is224 { + h = h[0:7] + } + for s, i in h { + hash[i * 4] = byte(s >> 24) + hash[i * 4 + 1] = byte(s >> 16) + hash[i * 4 + 2] = byte(s >> 8) + hash[i * 4 + 3] = byte(s) + } + } else when T == Blake512_Context { + if nx == 111 { + if ctx.is384 { + write_additional(ctx, {0x80}) + } else { + write_additional(ctx, {0x81}) + } + } else { + if nx < 111 { + if nx == 0 { + ctx.nullt = true + } + write_additional(ctx, tmp[0 : 111 - nx]) + } else { + write_additional(ctx, tmp[0 : 128 - nx]) + write_additional(ctx, tmp[1:112]) + ctx.nullt = true + } + if ctx.is384 { + write_additional(ctx, {0x00}) + } else { + write_additional(ctx, {0x01}) + } + } + + for i : uint = 0; i < 16; i += 1 { + tmp[i] = byte(length >> (120 - 8 * i)) + } + write_additional(ctx, tmp[0:16]) + + h := ctx.h[:] + if ctx.is384 { + h = h[0:6] + } + for s, i in h { + hash[i * 8] = byte(s >> 56) + hash[i * 8 + 1] = byte(s >> 48) + hash[i * 8 + 2] = byte(s >> 40) + hash[i * 8 + 3] = byte(s >> 32) + hash[i * 8 + 4] = byte(s >> 24) + hash[i * 8 + 5] = byte(s >> 16) + hash[i * 8 + 6] = byte(s >> 8) + hash[i * 8 + 7] = byte(s) + } } } -/* - BLAKE implementation -*/ - SIZE_224 :: 28 SIZE_256 :: 32 SIZE_384 :: 48 @@ -542,8 +527,8 @@ G512 :: #force_inline proc "contextless" (a, b, c, d: u64, m: [16]u64, i, j: int return a, b, c, d } -block256 :: proc "contextless" (ctx: ^Blake256_Context, p: []byte) { - i, j: int = ---, --- +block256 :: proc "contextless" (ctx: ^Blake256_Context, p: []byte) #no_bounds_check { + i, j: int = ---, --- v, m: [16]u32 = ---, --- p := p for len(p) >= BLOCKSIZE_256 { @@ -595,7 +580,7 @@ block256 :: proc "contextless" (ctx: ^Blake256_Context, p: []byte) { } block512 :: proc "contextless" (ctx: ^Blake512_Context, p: []byte) #no_bounds_check { - i, j: int = ---, --- + i, j: int = ---, --- v, m: [16]u64 = ---, --- p := p for len(p) >= BLOCKSIZE_512 { @@ -646,189 +631,7 @@ block512 :: proc "contextless" (ctx: ^Blake512_Context, p: []byte) #no_bounds_ch } } -init_odin :: proc(ctx: ^$T) { - when T == Blake256_Context { - if ctx.is224 { - ctx.h[0] = 0xc1059ed8 - ctx.h[1] = 0x367cd507 - ctx.h[2] = 0x3070dd17 - ctx.h[3] = 0xf70e5939 - ctx.h[4] = 0xffc00b31 - ctx.h[5] = 0x68581511 - ctx.h[6] = 0x64f98fa7 - ctx.h[7] = 0xbefa4fa4 - } else { - ctx.h[0] = 0x6a09e667 - ctx.h[1] = 0xbb67ae85 - ctx.h[2] = 0x3c6ef372 - ctx.h[3] = 0xa54ff53a - ctx.h[4] = 0x510e527f - ctx.h[5] = 0x9b05688c - ctx.h[6] = 0x1f83d9ab - ctx.h[7] = 0x5be0cd19 - } - } else when T == Blake512_Context { - if ctx.is384 { - ctx.h[0] = 0xcbbb9d5dc1059ed8 - ctx.h[1] = 0x629a292a367cd507 - ctx.h[2] = 0x9159015a3070dd17 - ctx.h[3] = 0x152fecd8f70e5939 - ctx.h[4] = 0x67332667ffc00b31 - ctx.h[5] = 0x8eb44a8768581511 - ctx.h[6] = 0xdb0c2e0d64f98fa7 - ctx.h[7] = 0x47b5481dbefa4fa4 - } else { - ctx.h[0] = 0x6a09e667f3bcc908 - ctx.h[1] = 0xbb67ae8584caa73b - ctx.h[2] = 0x3c6ef372fe94f82b - ctx.h[3] = 0xa54ff53a5f1d36f1 - ctx.h[4] = 0x510e527fade682d1 - ctx.h[5] = 0x9b05688c2b3e6c1f - ctx.h[6] = 0x1f83d9abfb41bd6b - ctx.h[7] = 0x5be0cd19137e2179 - } - } -} - -update_odin :: proc(ctx: ^$T, data: []byte) { - data := data - when T == Blake256_Context { - if ctx.nx > 0 { - n := copy(ctx.x[ctx.nx:], data) - ctx.nx += n - if ctx.nx == BLOCKSIZE_256 { - block256(ctx, ctx.x[:]) - ctx.nx = 0 - } - data = data[n:] - } - if len(data) >= BLOCKSIZE_256 { - n := len(data) &~ (BLOCKSIZE_256 - 1) - block256(ctx, data[:n]) - data = data[n:] - } - if len(data) > 0 { - ctx.nx = copy(ctx.x[:], data) - } - } else when T == Blake512_Context { - if ctx.nx > 0 { - n := copy(ctx.x[ctx.nx:], data) - ctx.nx += n - if ctx.nx == BLOCKSIZE_512 { - block512(ctx, ctx.x[:]) - ctx.nx = 0 - } - data = data[n:] - } - if len(data) >= BLOCKSIZE_512 { - n := len(data) &~ (BLOCKSIZE_512 - 1) - block512(ctx, data[:n]) - data = data[n:] - } - if len(data) > 0 { - ctx.nx = copy(ctx.x[:], data) - } - } -} - -final_odin :: proc(ctx: ^$T, hash: []byte) { - when T == Blake256_Context { - tmp: [65]byte - } else when T == Blake512_Context { - tmp: [129]byte - } - nx := u64(ctx.nx) - tmp[0] = 0x80 - length := (ctx.t + nx) << 3 - - when T == Blake256_Context { - if nx == 55 { - if ctx.is224 { - write_additional(ctx, {0x80}) - } else { - write_additional(ctx, {0x81}) - } - } else { - if nx < 55 { - if nx == 0 { - ctx.nullt = true - } - write_additional(ctx, tmp[0 : 55 - nx]) - } else { - write_additional(ctx, tmp[0 : 64 - nx]) - write_additional(ctx, tmp[1:56]) - ctx.nullt = true - } - if ctx.is224 { - write_additional(ctx, {0x00}) - } else { - write_additional(ctx, {0x01}) - } - } - - for i : uint = 0; i < 8; i += 1 { - tmp[i] = byte(length >> (56 - 8 * i)) - } - write_additional(ctx, tmp[0:8]) - - h := ctx.h[:] - if ctx.is224 { - h = h[0:7] - } - for s, i in h { - hash[i * 4] = byte(s >> 24) - hash[i * 4 + 1] = byte(s >> 16) - hash[i * 4 + 2] = byte(s >> 8) - hash[i * 4 + 3] = byte(s) - } - } else when T == Blake512_Context { - if nx == 111 { - if ctx.is384 { - write_additional(ctx, {0x80}) - } else { - write_additional(ctx, {0x81}) - } - } else { - if nx < 111 { - if nx == 0 { - ctx.nullt = true - } - write_additional(ctx, tmp[0 : 111 - nx]) - } else { - write_additional(ctx, tmp[0 : 128 - nx]) - write_additional(ctx, tmp[1:112]) - ctx.nullt = true - } - if ctx.is384 { - write_additional(ctx, {0x00}) - } else { - write_additional(ctx, {0x01}) - } - } - - for i : uint = 0; i < 16; i += 1 { - tmp[i] = byte(length >> (120 - 8 * i)) - } - write_additional(ctx, tmp[0:16]) - - h := ctx.h[:] - if ctx.is384 { - h = h[0:6] - } - for s, i in h { - hash[i * 8] = byte(s >> 56) - hash[i * 8 + 1] = byte(s >> 48) - hash[i * 8 + 2] = byte(s >> 40) - hash[i * 8 + 3] = byte(s >> 32) - hash[i * 8 + 4] = byte(s >> 24) - hash[i * 8 + 5] = byte(s >> 16) - hash[i * 8 + 6] = byte(s >> 8) - hash[i * 8 + 7] = byte(s) - } - } -} - -write_additional :: proc(ctx: ^$T, data: []byte) { +write_additional :: proc "contextless" (ctx: ^$T, data: []byte) { ctx.t -= u64(len(data)) << 3 - update_odin(ctx, data) + update(ctx, data) } diff --git a/core/crypto/blake2b/blake2b.odin b/core/crypto/blake2b/blake2b.odin index da5e1ce24..85f9611f9 100644 --- a/core/crypto/blake2b/blake2b.odin +++ b/core/crypto/blake2b/blake2b.odin @@ -6,7 +6,6 @@ package blake2b List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the BLAKE2B hashing algorithm. BLAKE2B and BLAKE2B share the implementation in the _blake2 package. @@ -15,49 +14,8 @@ package blake2b import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../_blake2" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_64 = hash_bytes_odin - ctx.hash_file_64 = hash_file_odin - ctx.hash_stream_64 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_BLAKE2B) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -71,22 +29,50 @@ hash_string :: proc(data: string) -> [64]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [64]byte { - _create_blake2b_ctx() - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: _blake2.Blake2b_Context + cfg: _blake2.Blake2_Config + cfg.size = _blake2.BLAKE2B_SIZE + ctx.cfg = cfg + _blake2.init(&ctx) + _blake2.update(&ctx, data) + _blake2.final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_blake2b_ctx() - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: _blake2.Blake2b_Context + cfg: _blake2.Blake2_Config + cfg.size = _blake2.BLAKE2B_SIZE + ctx.cfg = cfg + _blake2.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _blake2.update(&ctx, buf[:read]) + } + } + _blake2.final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_blake2b_ctx() - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [64]byte{}, false } hash :: proc { @@ -100,87 +86,16 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +Blake2b_Context :: _blake2.Blake2b_Context + +init :: proc(ctx: ^_blake2.Blake2b_Context) { + _blake2.init(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc "contextless" (ctx: ^_blake2.Blake2b_Context, data: []byte) { + _blake2.update(ctx, data) } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_blake2.Blake2b_Context); ok { - _blake2.init_odin(&c) - _blake2.update_odin(&c, data) - _blake2.blake2b_final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_blake2.Blake2b_Context); ok { - _blake2.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _blake2.update_odin(&c, buf[:read]) - } - } - _blake2.blake2b_final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_create_blake2b_ctx :: #force_inline proc() { - ctx: _blake2.Blake2b_Context - cfg: _blake2.Blake2_Config - cfg.size = _blake2.BLAKE2B_SIZE - ctx.cfg = cfg - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._64 -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_blake2b_ctx() - if c, ok := ctx.internal_ctx.(_blake2.Blake2b_Context); ok { - _blake2.init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_blake2.Blake2b_Context); ok { - _blake2.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_blake2.Blake2b_Context); ok { - _blake2.blake2b_final_odin(&c, hash) - } +final :: proc "contextless" (ctx: ^_blake2.Blake2b_Context, hash: []byte) { + _blake2.final(ctx, hash) } diff --git a/core/crypto/blake2s/blake2s.odin b/core/crypto/blake2s/blake2s.odin index b47a0bf90..72d15b227 100644 --- a/core/crypto/blake2s/blake2s.odin +++ b/core/crypto/blake2s/blake2s.odin @@ -6,7 +6,6 @@ package blake2s List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the BLAKE2S hashing algorithm. BLAKE2B and BLAKE2B share the implementation in the _blake2 package. @@ -15,49 +14,8 @@ package blake2s import "core:os" import "core:io" -import "../_ctx" import "../_blake2" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_32 = hash_bytes_odin - ctx.hash_file_32 = hash_file_odin - ctx.hash_stream_32 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since Blake2s is not available in Botan -@(warning="Blake2s is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -71,22 +29,50 @@ hash_string :: proc(data: string) -> [32]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [32]byte { - _create_blake2s_ctx() - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: _blake2.Blake2s_Context + cfg: _blake2.Blake2_Config + cfg.size = _blake2.BLAKE2S_SIZE + ctx.cfg = cfg + _blake2.init(&ctx) + _blake2.update(&ctx, data) + _blake2.final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_blake2s_ctx() - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: _blake2.Blake2s_Context + cfg: _blake2.Blake2_Config + cfg.size = _blake2.BLAKE2S_SIZE + ctx.cfg = cfg + _blake2.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _blake2.update(&ctx, buf[:read]) + } + } + _blake2.final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_blake2s_ctx() - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [32]byte{}, false } hash :: proc { @@ -100,87 +86,16 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +Blake2s_Context :: _blake2.Blake2b_Context + +init :: proc(ctx: ^_blake2.Blake2s_Context) { + _blake2.init(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc "contextless" (ctx: ^_blake2.Blake2s_Context, data: []byte) { + _blake2.update(ctx, data) } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_blake2.Blake2s_Context); ok { - _blake2.init_odin(&c) - _blake2.update_odin(&c, data) - _blake2.blake2s_final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_blake2.Blake2s_Context); ok { - _blake2.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _blake2.update_odin(&c, buf[:read]) - } - } - _blake2.blake2s_final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -@(private) -_create_blake2s_ctx :: #force_inline proc() { - ctx: _blake2.Blake2s_Context - cfg: _blake2.Blake2_Config - cfg.size = _blake2.BLAKE2S_SIZE - ctx.cfg = cfg - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._32 -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_blake2s_ctx() - if c, ok := ctx.internal_ctx.(_blake2.Blake2s_Context); ok { - _blake2.init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_blake2.Blake2s_Context); ok { - _blake2.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_blake2.Blake2s_Context); ok { - _blake2.blake2s_final_odin(&c, hash) - } +final :: proc "contextless" (ctx: ^_blake2.Blake2s_Context, hash: []byte) { + _blake2.final(ctx, hash) } diff --git a/core/crypto/botan/botan.lib b/core/crypto/botan/botan.lib deleted file mode 100644 index 5731855cb19dff1909cc06aa464f5770cf956253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3298832 zcmY$iNi0gvu;bEKKn1#nsC*dD0Lm~lFf%c=Fji1dNZ?{%FyFzT(A2`9(6Wp{q4gGn z;V~I7)}F-00LHyr7_@u0FsQ^{0As~h5)5Gcat4Fq%NY!+)nX7_HGx63Y664yly6|H zQu>4egq5uCFhFn^gOYU^gX)|r2%i0pL3Q>!2JLBwz*wa`g8_t&^U zU~E~#pk!IYpgKDaf@hs!P@Q##L3?5u7^_4DFo3Y)Lk9*hez1o@@xdMj)rtrRE)R@lCd0fJQ+6t=4{sEWLU;y4CXkvImG zRZU>5^ox%HjDNNP`y0?ikTQxZ!TofDME4N+vMYp2Nie z#{D-KwEJ%`sNAgrW91c13=qt~puB>CK}~826w5HENy#v1Pe}q}m69h6Agp9z#{kCW zyBL(rcQL5Wa)IEPyBJhw?qblM$p^+N-RBrUSgBWr0gQX5F(~y+V^BSC1&TcwR1bJC zs8keyv69;&1_)MQP;ygXP+cSg!3(D_s4kqspmL%HjFm(C7$BI9K{=F-L5+b4j8*@a zFo3X1*Bu5BR_YL90OR&92Br2c2GzZDpqP(AbuS--%JO+&tn`tK0gOMiFerU!VNkv9 z2Eo^MF{obK#h`rA2#i%;%wYgwXZAgs&m!2rSrKh`mT zu%V+H0|@Il$}oVi#>Wf>5Z28vU;yKHc?`Pm@)%S^tRPr;7lVrME(V3G9Z<}`pm3Fe zK~+u#tP>u7{K`KHwJ~X-xyS7r65>l5`(JDBnGAF$Dr7XL20@b zgVNM8FxFOE!2rTK+j$tk*g1qj2ZSTHFz7^XVbD0`1;%QQ7Z^ZTv!;Lngw^5?F@Ug2 ze-{G?D@_w%0OKit7?h^`VNgB%28weSR1fDcD6FpmV-+4J1`t+Q8^-{~Ywj^9thvXa zDyRd&0?Qaw1(q=w{7?d8!}$&jAZ$=CzyQM9${7qGtY+=P0KzKVrx-w3Vbwhb2##S; zSQW#dDxd(t{4*F-`DZYw&(i>7ZJ!DT5Z2o4!vMkx+m&agQ~CtgPIK#yPjZBb3MVJnDGjVgBTPuf*7>zH$bq11B14M1A~TV7X*8G zFlcyrFsN8P0%OJWOAKI~#>SwS#>Su;kO0B{HyBj?Z!qXwdI83Y?JNu+tl}iV0K$r$ zlNi9b;}L@*7~3!?cGxiJ*k*yTic<#z2V*p`=%Rd;v_@V@Z!bJ%NowN^NthMSN z0~oJ-z@P=fD>gA`t=Pn%lQ9R3RfL@wKv?ap3WM5{9}H^GiWtn3~Hq|3~FUF7}VCCV^CY~ z#GrB33xdxyFld}UV61SBj{%I&A7D@b z;d4J26wdu%P@2{O#yUdJ7(iG%@EHRLYwg&@0K$ff0t{d*ZpL6JZpNS%kO09UAq;9E zAq*;9VPLGV+=~H(_5QXnfbs7<2EE^T3|dQ1fw97}6AWOy@(P2($}0>y3^yQ{DTzUc zDTzUa+Y5{pR{Ai2@rpwX3M&pVsLx#n#){Ld7(iIXO@;x46{l`ufM5*<#i<$$s__yK z9M{I68rR04@H7O1A8uh#0O1Eq7!)2XVNj7!17lU?0}NoS;>4h;;>2L^Aq;{)B{3L$ zN@7rpvxDM&3~F)v7}OH>KyacBgBl3?eqvAqVZUb#Y9Q=e!Jr1hemM+kAZ&GkLCxv{ zgTZAhFxJfIU;tsAFJ25_{L_a)2ZVo|W6=3=jzO306c`%_i!gw&?$j0r5Z1A7VE|#n z<2no=Y!Kza0Kq3145Cgj===zP;NOoJbbdc#FvvRr#`?R%7(iJ2j~4?78+ht5fN^~f zg8>NV`7jvd`7r3d`v%5Z^R*a2Sf^cw0fHYe=(Imz&{=c^j196C7(iHm^E3t!*1Xxo z0LHf_F=*bJ#Gvo+plx)DL2Hc+7^@XuU{EXB$Dp<;fI-_k z2#mEhsWE`CE{78X7_&Gr=(0F5D6Ecy;58Bq3Tq@7w7s8!vDT(t3?OVM?ZyDY`pst; zK-l2F00RhX9@)YG!V2paFo5yeI}8eI?=Toj7J#wA|49sB9ALp<5MaTecd`wP)vS*& zfU&C&gBl2jdoZYhaKtGFH4qNI!Jr1h;YS$M!jCZMbpL?hloAFV5cYn-paa5@MhrS2 zoE*cT1Huhf3_1-~49dTkfw7wL9|j06Vo)>s> z=`ko=(qqucU;|_Q$PflFjyS-eA8~*|_u36GHe7dv0gTuFVK7|#he4aC1&j?=ePaM& z?WSi8AgpzC76TZsZe!2_;Z+$7S|GgAi9rj5mrY>M0^#Le3|b((f{#H9gpVmPXo2uX z1_rH-3=9ev+Q3-J>=OeBYfnDH0KzIIaSR}=WR}7J#->*oluWNMsLoV_;29GbRA)?J zP@J@mOjNeXRPAx9_&6Vf1{n7-XdLfj&^XEi#m5*ljviysIMxQnnlUB}5d4Kf zGv*6}%GN1htSl|S0LD@i7?hu)F7<6CmU{GBh z2EnTiF{rLO#GrDg1dMeThcSThiDeABCzdf7_NsxgfgTeB1kYkH(3{0zxKR#_4gQ)i zfUxq?2MiD##h|=2ia|{x3yjsh7#Iu{Pk^ynsu=?a8<=V_fUwfse+*ze=LLfj2rpn_ zP+Gvmpl0g?!EUD*)Id1k7K0iHNBvo1+a0KytBaSR}= z9Cn2PgjG)bVgO-vr+kJ~cU*iQBYbWF|fUwqa z4+ap{j(^1f!dl0UF@Ugk!x;t;)_Rr30KzI#91I|=@M0MQ1gkM9yij9MRXGI4%7|zv389L0|;w9-NyjJx;|SN zKv-dN1p^4HFtIU!u)?H63?QuXUycEc|0OV}{7YcaPCEp~S{Gs%Kv*;R2m=V~tLwvL#?K%b!)_U&20K&R{Q4AogFwKbpgjJYR7(iHIY7YYlt1<~OfH7kT zgDPVPgLb+H7;9a4!~nvYDK-ostgl|e0K&Q-^cX-`bK(I85Z2rCfB}ScH7_uLu)@3v z3?Qt+F2Vr93iCu5zwb8`0K%G+ycj@OZ*Kwv2{&;j99DGWLwyo`-O z2ZUEAG3bEs#xe#S5MJ8Hpaa62su*;@_zQ#1rY{US+uI;`!yg765MFhML1)z+2F<=6 zFxFX9!vMkt+tV08SXE~k0|cuusOqRNs5RVUP!BXpb^dm#yS`67{K`a6b7C1Qy4VDr-8A~#WM_Gd_jpp=YkT0Mg#=w zT#8}<;|m)YbS`XQFg#!b!TV+~7=rM@2MmTFeBcCwAqekRVK4;YLpcnFAbc={!4QP^ zZ(uM4;X^+d3=jQa(9Q?}W37wt7(iGvbrk~$>wXqv0AbC^MGPRUtDV6B!U~Iv7(iHs z;|l`_D=hlP0KpXu3X3WjRC!vUn1Ml+hk-#m;|>^WT`FS$Va+rZ1`yW$e2xKxH7EaJ z0AXG2cMKq`u;dW~2&-^rF@Uhbk~9V|Ui^YVVetzFRo*TrW@Aw0Wn<9JOaWu9OaB-^ zSTk)N0|@JWX=4Ck%_(gRAgrrX!T`bw%Yqm{ScUTe0|+ZDy~Y5+5ey1TBN$ZqCO|O{ zgDM{ngIZA)gIduW2DRci1}zaNc6z{|<@A6--+TrbYy99~0AcMiAqEiEy1#}2gmvAF z7(iH|ql^KBmH#YZ0AYppBMcy{^0|lsj6dyQQ2DfjL0c&VjCFrYF@UhEoyis6KRZD_k)q4!8s`nW5m_C8A=Bye95LV=?V*p_l^?wW? ztjPP10fK876nSeHR81Km*rb9%)ue(!k9i#!YtH6k0AWS`Uko6uqEW#B!ixM=3}DRn zgF%t+2ZO2^9|W7WF{qlhG3c>mfwAW784Mt-C|Je-!YUe{7(iH2;2Q%3moO*_lrX58 z%RsQ%6b4nZDGVBae85<{Y90d!Ydx`G0AXEkAqEgun6QNbgjE>UFo3Ya1O^5WR{3MV z0LH&d7*u|jFzEii1jd@v)-iyv!iO0QAgm(uj{$@gKFBbD@%woU3h(DJsA@Dou=*bc zRrNm%8h@FAgnM+gaL$A7$X=!SYcuU0|=}9UB&>$e_k=D z{CUNo`=<+xHK$uJfUv?R4h9fbku6~WVTF%93=qu6pzx88K~=L2ikTQxHJKPRnWey3 zH}nw$2&-u3Fo3Yek9`avtX+160fe<4XDmJY!G| zc*dadO9PCxE5aB+SnJ^j1`yWuSik_n3O$n;Kv?5U~!pi?c7(iH|*MR|qReriKfbowG29+Nj40>GOz*uu$ z00RgsW^ZEvVHN9B3?QtSZN~t{Sw|QYvyL#R2Bko7;1dSbz$XlPhtt4VCH)-(2rF?Z zFn}@VGzKNkX$-3E7ogaILABk1L464m7;F5V#sI?Fm3J6GSnF{a0|@JSIWd5+LVpMY z2&*tKFo3W^-vR~@R{6Dy0gQkCV^I0|k3n-08yG8bxG;b*+Z+ZZwmA$c=_O#S#D0hY zg6$ZT*zFip+jc;)9)oI|9)rfuA~4o2pTYpbS`YOYKv>uP0s{yubQ>{%u=3wu3?Qt~ zRmT9rD&Ha)!1(JN29>XK81!U*fwAUNCk7B!(idX@VU@yP3?QteH;(~=RTz}?R2WpJ zoP%ON2GuEk40`fvV63_91_KBy`BX4~uuA1O1`t;A{>K2pO$ZF9y{m zzZg`mz5-*z8}}GMSTlry0fe>QM=*e}Vb?1L5Y{)7U;ts|9wi1a?q0;8+`WiFjb8(d z^>rpOfUruw2m=V~?CfCxVI|dF3=nL^prmTWpgOSuj5S#l7(iGz`V#{f=an(&=9Mw% z?^6R~m4;OeAgmNy!2rT~s$C2qtht(j0fdz@S22LFN^=ea2rFe8Fo1E!76zq^Eexs~ zjzO^tgX#ts20b+gFxFh%!2rTaT|o>WtkNCD0K!V0*BBr;ffPyz!8D@QzH0AZDrWegy!9FfKV#^Em*l*3;zs4)sbFhd`M8bcq0Cc_*s)~+{W z0AZ~c7Z^ZT*Z&^_2rJCwVgO+kmIDkRtS}>l0fbdq*%-i>#e+eW#e+f5%mj=zH$Gzk zVP$zK1`t-+R>J_o%5w7KmH4jc>0Ab~$VGJOw@^lje2rD1C z#Q?!E49Z7h7}S*YAXsS?gPPJR22I8=FxIaB!vMlsFQ+kpux`L51`t-5RmA|pDy#(z zAgnNR7Xt{ZvUM?lG3y})Rn|icdI1GsthxUa0|+bcImH0NDvzTWKv;Q?2Ll-IKEj~9 z`v`-Yd>I7Gy_#@g8}3?Qs^RgM9KHS_csKv>ss z6$1!s=Lj%>u-4U83?QtTw}t_Pb&X6IKv+9x4g&~lT{B|^)Kv>tVE|$6k_HA4*19Lf0K%Hxn;1Y?*F}Z_gthZ57(iI-`XvSs)+`cY0AXFzJO&Wf zKl+0KjE}W3=pSoiP~utv#@cy%7(iI-Mi>JKYnD7<0AW2*76uSj;$&a|VO@(31`yWH z_h0~Fts9RRKv=Wv90LgJ>jp7^u-^VO1`yV@oW=mc2FsHeKv+Bf3{%D=Zj5SWjsO0|;xb%wqsyrPxmlAgpUOhXI7O3$8JM zu-2^t1`yV)l3)N~U28c85Z2)5V$d#(0b{LO-xxqxU+)?N2y0eNU;tsg{f`(xSl41 zO;#{~u-?Hm1`yVD2w?zW?cy&CAgpz_j{$@Yg2Nas# z0s{yeH2q)zVU2q-3}AehfkERg1A}%c2N-MJTf_junmsxUAgt@MgaL%re_miv|K-M@ z{%a3|`fno!4W2p%4W3U78Ul3;>R$pFG`LC_v`hQISnIw90|;yO$}xbjuB#RU2x~k# z#Q?#43>uI47&IO-Kyep?#=|ZKjR#H;e18gq1_<9<$DjeiPvaOgK=|=51`QB?vWGzf zgdYbnXn^pmT?`r^{PG`z1_-~%VbB2MZwwkQzAwcF7&M+qLGT+k1`QB? zS;e67vWh|H_#r6fV9+_v!Ju;_4T|3|=p1>&pmTT?6mu}>9OhuqIiv@{$HEwNK=^15 zgU-<$2CZfrD89s?)qIITtGxt*JFOVBK)6GIK?{r*FlcowU{Lz=3yNzPl>XE(sNRtQ zW0loi3?Qt#X%hn&uM1$%T^GQh^)m#FmA+LlfbrKK3`$>rFsR;)0%Mhx6Bt0)V8<&4 z5Y~Gv!~nwD&ng%|Sm}lo0~lYQ#GrJ25`*fwMPRJ5po9U0H4?QLKv;Wz4g(15s_tU| zVVx=k1`t-fQN{qmDiK#0Kv?l+4Fee8_`;xg;|qgoDIWxvG%%=^G%%=7{sP826)zY- zSS2Ea0fZH=l`(+v)gT7Nt3eE^#b2N}jX||IjX`~K2^eccUtj=X?YTw_AgrsR!T`eh z!8{Bgte9BB0LDpj42mEe|A0X;{sDuEWdRr~CcI&Q;3Njcgd_%4KL-f*-N2ygyMaNy zR{)IlgCZC}Sf^8j0fbd7-Z6l%V(b+LFpgQppcu1?LDg3Qf_?fJRDJpw)O&g$SXPHY zU1}GDy0j64x=Q) z2DJrI3~CG87}OSgU{H^_#h@O?#-JWsz@SwU0>MRJ7_>mRl!-wLgo_t3Xn}CyECwwQ zE^uMc0^uSj1}zXSc*CFt!sRjyS|D7yi$M#7%TFY>A+agzs(b?5G40AY;_cNjoe>q8s^2&=GZF@Uhb>`e?1Y{H;0+k`=tJphc=X1`-l z%a>x%YHWbus%s2dAY7fnpasH}s~EIExXO+}3xpfKFld2rMH7P-2v>?QXn}AO4}%sM zFJjPYTEw8$b`OkIS|b=h*kENE0|b9#Fj)DG!Eoam2;P*!V7MuTL0^vxjFk#5F+i{j zgHnMDgX*RPFjo7#ghB0#9fMZgBnYncV9)~LngtA6AYA>AK?{UyUomKbaJ?Oa78qY( z(5k<{pw)Q|f_tnOw7~cRgI3Q42Cc3PDE`Nw)%A}-t9up%_iHg|f$<&&t^Pd>S`$K` z_ydF1gbxf_6PqA-k_3Ym2sflLXn}BV7K0WT|651DF^90n~AZe?Q70^v!U7_>lm zvIT<{81G}yn!Jy}plbsZ>o6E}=`a|y&w}7iH3kC^?pVNJ0K#p33G=o7u*#L}Hj0_k+Skc&r0gR00R|A(&){MJVGY+31`yU|T*Cmu8VXSiAgtNBjRAy} zS5+{8u*%&p3}767g+V3!3WMU6OHk~^pm@cLLAB@_7^}@(!l3S5!k~7vj6qAR2aFY; zw=jUPO3V!g5Z0Nuj{$@=f(|i&u(s|W1`yVJvxotV-2*Pg+7z{!9eF1|Z2*2LJU{Y^G1jf%8jJ%#P82PV*Vj~74eWeeFalv;2L>Y$_BqC21jc?0Mm~NFMt)Wh98|zy1j3$w7>qzTK!d>u zgo6_pj6gW(34;*`hw3mGfpEw^1|u-`VK55uVK53^0KvhR7>t51F&Gr}L2yMGg8>K^ zn=u#^n=vTA+5*OEdIuOlSYv+y0|=|UZD0Ulul_NBu=3p^1~9(!ghBbv69zTyCJ5Gg!=R@1hC%sG9vG{<>R!1%@< z2IU)j7}T_~AXxJmgPP_u22I%@FjiFSVt`;421PX%2331GFjmx@!T`c5dTk6Ktf)SV z0fIRg6xBHxR2`fk*nSm*s{JYk<(DTQ_(c(eG6+BW#i0D`7lV!s0~l-THZg!P{{seX z{s#;i`uo6G=Neb#Gq7v1A^-s7?kQ781x?UfU)+{Z44l+(s7Ofgq7+; z7{Ivp7lTsmF9y|}Y!JMoia~Wp6@!X)8WuppefzMVDR$+80#f}VE|#}#w-R9 zR=LE+0K&=*j~F00f;#bBY*r=M*uhEHwaQr6>OwAUKCX=}8WQ>g6&BzI2a4_0l~C z_2q3~tSME)0K)p)moR{^Mo|z02rIpIV*p{5rMnnFSm{Lt0~kMl!=Uv14TI{Hc~H#5 zpn8ReK|Q>KK|M@>L9Hi*K|QpOK|NH4L2c>;2DND*IWY#c@+k~zl|2knb$c@g!%u4<__G9qAsDwX7=CVHF#NUzf&%k zAqao|#b5}+A6*y>LHKI~gCPii$zw1C<2ww7U+yp%emw!f-^>^cLHPYM215}35W-*x z!oPGF3_G|9u!hSV!4>5qSnrsjQ2pdV5F+lJf1|x|%3`UN8 zP+Z1f1z!XJb$b z$bw-1PYg=_pBPk^H-WL*e;o#Ou>=Nnv1<%!uQo9lF0oIhh!YKv?Vx zgAoXe$1xazF#90}BM=tuU@!vX9}GsqKNyTe?m=+|gONxEgOR`_DE`M_B=C>HNURHj zxz;flfw1@q1|tyWox@-R!aRoX8n7fI=2!w@Y7>q!e zLx;hLLx({p`4JfFzIwy}!Uog*7(iHS<`o7I)_J&&0fd!`-Y|f$O6xra5LPO@#{j_* z3`&I&462(OAb8Uk2Gvbp7>uNSp!g7jk@O)3BN+<_mb%Aa1j3SK3`Su5hQUbk4TF(X z5(Ggl3l`JB&Ptyix`aL7BLvfYyo5KABE(>%lK{aQ8Vp7ttl7q31j5P-7>qzz^BaQ^2y1;|FaqNO z1|zKk1|zE|2-dD(FalvqHU=XQHu=V21j42n3`QVq(ZgT_!j>frMj&i@i@^wlm5msT zl#Lja&MX3Bl{tM3Agpvojsc8M&tOnGJ%d5@Y!4JOFsPnoU{Dt@U@%hO0>Ns23`QWV zdW*pbgw<^rj6hiB3xg2|tEMp+fw0;U1|tx*e8FG@!rJc`j6hhwiNOerzc3i-e_=2( zmV;mu4hAC-Hax*#1j0sZ7>vN!iowXpiowWu0tDL@F&Kfcy%mEI7_VV4vR}hsq-zJk z)@BSwAgnQi!3c!S_AnTMu(=+C5eS=kF&Kfc`2q$b5Y{=zUvM} zkHLtIk3q#M1B|uiR55_@To(qdxh@QfsXb84#h{qV#h~gR0LF?bQy3svfI%@ufI%^N z3K*;UonruD9bF3sFt+Gm&;j9s4h9_%E?&l<1Hv6s7<52b&xJt;ge|8q=zy@cAA^pz zAA^SI1PB(J!k{5Gg+b@%F$jL?$Ds4lkHJu48yM>dCNY4qkQ{@KkQ{^V?KlX&Bgde7 zM~=Z@vIrDkVlbF|i9z?)0x&k16u|((y3gzwK-gev7y}r8xWZuY;R=JAofR0XSbkyv zVI@-m1`t*$zQq8-N+xX#U~K%0LCN?RgX# z0AU@Ec?=+|vTOqb2rKTM#sJ1UFEJ>BaR`Ir&JYIGtQrW;{K24_`GY|xn*o9!>M`g% z)MHRQYy!rr*=-CUtP(hb0fhDanHWG=Tdafugw@~0F@UhP_#6fh)_W1h0K$rgb}@kQ zz8egR`))9(X8i+W75{GxAgs7|6$2Po&S6ljoWr1Ervb)_Ww#i>xa1FmV#yx{)zCI5 zW@1ncWn$3r`2oQZVhlPU-1Ue-2ZR@HV9){KMNSMlAiPkHL1&>HgKF3`FjlP1V*p_l zdj$p%R;+!;0Kz(*rx-w3HH?D+gcYkkF@Ug&-8=>mR;(^z0AY>vE(Q=*W-nj>VU-O{ z3?Qt`k;eeW?5`M<*tBFz*u+v8wN05UB;lhx{N__@fk2y@tVc}!ir1IF+i{fgW?ho z231hm2f`_J45}%04C)hpfU)9Y76ve0c#1)B;VA|cF9|SKT-3k-#tU5-6c@TMs3w1b z;tU4W+Q6V}+Q6XtF#>`= zoMTY^aE?KJ_7*T!od1Raj2En8P+YKzK_gBIjP=7K7{EBJk3m1Ik3n%>78t8|&S3yy z#ratbU_9>`gW|kr45~>Fpg4>{H7Sfiz5gE=E6!cS0LF8&7!>DZG3bXrfMO8_{ZJ7G z6;A~)R-7xx0LHVQFeuJ`!l0UX28taRR1+N-)cYI2SSjxl0~qHXVNl9F!l1hG3K*-j zBrt%mMsghk2y5EyU;tsAHX#Nuc3j1v1Hx687<8&GF{pW*17oFJ7X}bkpZ1FZgmtuU zFo3a67lRH6H!Wk(0b!pk1|1M~vS840vS3j2a06qdtbGh1th&*S0fg13RWN|CM$8Nb z5Z0OR!vMmH1xgHHoVScYF>e`zip@4KR?J_-0Kp0jiuno*sv$KH9Q=hrHTVmIdLJJc ztJv5ufUsh290M5VXfP<|XfUV-=Rk1KBL>x=M-1w{lfYPQ(If`7M}HX99LUzlt2QvGt+r!OPkzIoo*c)Zo>Ib~o^*~uZTmF__3TFs>N#-? zYTK?bsBQOSP|w`Opq}N%pq_PsK|MQ)L0#_*gL-EhgL)SOgSzfH26a6*2KA1A4C?I} z4C?J47}Pr|7}U1KFsNs2V^GgDVo=-a!l1Tg7lYc?D-7ysObqI2Jq+sU^BC0A#Te8x z^cd7WYcQzSDlw>il4DT&G>1XGx`jc#hJ``BW*URqvL*(#rQaCT6HhRxCpj^wEq=zJ zwzP;rZAl!1+LAX6>hVGh>IqvI)DzSg)DxW;)Z=F`7&&V|@gxQ#=Sd7kP6r^^g^9rk zjPn?bT=E!<9G^h2QwW2RQwW2G%qlQepRd3G!ba|C3}Ecm#b5-+KNyVMKv<5!$W4yH zVEq*^)^6uw0AYur`|0AZaQdJG_JU@gS}#zqGi z42%viXk3~H#){t$F@Ug2;tmE7*0{Wi0fZG>9x;HhilZC@2@P+gG3V0a}4f-mo5Fuc5vLF@e^Fjik7zyQK3GEEF1 ztjT_e0fe&IksjXdN(C zso%l?!io+V3?QsxTE_swdR{FIAZ&Q8i~)?hOBf8hOBf8aS3$6D7K4Fq7K3i$8!%Sx zGh%??V+_iD#~74*=0I?79D{Oi9D~ZW6fictP{jbk+U+e2Agm{Kh5>|?)IKmkunB{b znhAqSejgYcUSePXVeO883?QthoWlUZ20FJGKv*}Xg8_t!tS8;Z0KzJTTnr$rzNCc#gbmL;VgO;?Ur7ugtnkc^0fbc~W-)-U;khCP z5Z2?6U;tqiV;KezR$nxO0fY_D|6>4Q0~;v@5Y`hiU;ts2lno3ZtahP}L2d0L2DNAJ z7}T0Q7}VZ%F{rzUFsR)-#h~{734>Zg7K7oL7%_n0fg1+N*L5?|1c<;>p}4b21WA?3`&e`5X{8Epv1(%pf;<6 zLG5w^gW=gXV65HRzyQJu@8uXkSke9(0|*;vv@n3NjuV4{juV4!_yI6B>^Q*y!g?HM z7(m$Y+&cykHduFp0fe>Nm>57Sn-Dq0|@KIvN3?L_HQ2s5H>W}!~ntu*7F!Z zSmUx50|*-!hcJM!PI?;y2&-NA#$b4{4ve)s8W=!WNmqseg6A

CR)&w!H<$h8O-Y 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%0AaP?91QxRLSSqlsKo%n zy7T-PKv>UCi~)oV%VZcpST{k50fY@FtzZCQ&6Y9-5Y}IJjRAyJ_C+v&u(HVy1`sw7 zXJPlh$djzQt2 z9D}N=2N)Z+n=pW|o}LQ>2rHeIV*p{5IU)=otaNG)0|ZMjD4mjEP(4!t!KdFbsGfeu zVA%2xjCDVSF@Uhb!e0y^tin;o0Ky6jOBld-!5apJ1#cKsxl16J>luS8*E0sgwnbp9 zr+I||gq0RfVgO;4i60n1SZN^_0~jx8U{G4nz@U1J1A>oMFsL4_U@&a$17kgb0}LRn zc=-|o2&;t0Fo3Y)@zMnb)uI3hE*0fY^Ew=saQX4W$X5Y}JS!2rSvUtckRux3ab0|@KwOkx0GO(rP@5H{GhhXIUt zWHA_k@R~IY25Z(Z=;{lBv5I^c0|+a8o5BFXs@e+}Kv?0683PFG^UYxZVeMB53?QsG zeF6gr>+Vrw0AUrmGzJh>_`Hb$gjKaBF@Ufl_a_Dr)|R&0qjw-F?p(K-jSV z2?GeLsBe5zvrVO1>-1`t-{dcXj}+HapQfUxeq2nG-~>g+cd! z1{fO_XE1=U?%oRwU>qXFpc^8^pf_^^7;Am}!vMmDeWw^eSTp+;0|@J{u3-RSg+Eyg zAZ(EEjsb+Vcd{{nux98y1~6ut#h}SFi@{*+7BJQ|kYfO06(u7E5LWo}g#nCz-(pbs zeTzX~Ko5+y-x@H0u!`a~1`t;G9mW90zm72|{5r;<&%X?ewcpe*fUt_96$1z>{BmLd zVYSW-2DOe43~C(}4Eh$Iz*tK(j{%IGe=uk{|6ow={{qJPqEi?^So`||1`yU;^N0b2 z4a=4=fUxdS2?h|>`qah%!iJNL7(iGzX#xWX>v_8|fUsuA4h9g`Umw5#!UmhO7(iIp zDT4uoRjxf@0Ac0+90m|p<6p-B!iMD+7{J(`hrtkxI~WY@I~X)0?I1X60)uAM1O}Cl zK47f;TY~|Ne+e-t{}N(Q`EUV@m4EgzKrjP?@=pc^l@B3cto);f0fg0ECNZeTWH6{l ze_&9Lu3*pz;sRsCcsT|T*6>$i0Aa(ZR}3Jm5$MAJ!iI5^7(iIV{~iMf8^+vW0AU@g zbqpY^7iPo&!n(&^F@SOM0|wpX2Mk)Dw}G+Ylq3ca*6f|a0K)nk5*R>O`PTvl5H_rS z!2rSrTlyG4Sl4w80|@Jj+c1Ez_OBTXAgs4x2LlM}i)~>5VeOw!7(iHWgB}A2>xh~$ zfUu@U7Xt|E$jo8@VNI`13?QuY>jDD^D=nVG0K&Tb0t_ImGU){a2rDgCU;ts&<8llj zthBU_0fbd1$1s4f(vn{cAgp?P0RsptovdR3VU^jl7(iI*#2*F_Rz01@0K#hjTo}~; zZDCO7cVbZ3cMObG#h);Mu=>v!1`sy*JdXi{^)^pp0AXD|J_Zoh+xvh4gmsrqU;tr5 zy*>sIR^fMGfZ#0*D*Rg*6b{%x@ctbP3j233Xq=D$W3`GU3~H4k3>qg>Ao#=r28|O7 z7!>w9fU(x^00s~?lwn~2VTA+x7(iI}>lX$PHnhCO0K!^d92h`YhkX|V81wvK(Bb*P zpuArTik~nj?|;Ied|(Cy@7utjyl(@8n*2X7HjLn40ON%k42BCe81zr(fwAruKL#+q z9>t)0J&HkV9v>KMFS@`0!aAu<3?Qs6s>cArnrwOuV9X=Mpvfb}puN}wjP*}GV*p_T z@pTL!tn$Q-0fZIqO=EyyF$RTuVhpNEGGMIr`wjyL8_Mis0AXFe9tIHB+ZV?G!n(@^ z7(m!iUxWdKRm61|Kv>~{3Iho1{#?KS!iH9l7(iI-s~iIe>u}6r0At=83_83w7*xcU zfw986~EzVa>H73?QsBTY&+Dm5#q- z0AbZr_ZUD}Y0(r05Z2S0#sI>aYkC+!Slcd*0feI` zJ;$If*TkSM_k%(2vJnJd)MC&B;R}5XdKdZ_l$IEQv7u520|;yV|H1&mdfEXDAZ%#; zfdPcIzA-U?unuPn0~qt|W6y4(40@L= zz*y;j7y}3!s+?c|VQtoV3?Qs$!omQ;hBiMKKv?VB0|pS*;YwowWBz#zI{fn(v}Ark zuxAT{mS+otzWo+3Rt_j*0Aba?F$^HA{(A)j2&;_+<^syRGhtm7xe0KzK0RtzAl zG$DWigjEmaFo3Y)$ps7`tP;G80fZG#DlmZYiFpi)C+0Dz<_bY@P8Wk}P8WmXX%R41 z2~l7GVZ~E37$8`RLGhFngKC}(1n16RP|cmepmyLBgWAtk3~C1x7}O44W6)i=3XGK| zPGA7z38xs8CY)l>+c5`>4P&1$fUsWSCI%4JT`+|Kg!Q(wF@UgPbO{3p>n>Dc0AaoD zR~SIpFh+|3gjGV>7(iI_>LCUYRy@nZ0LEv!7!=QRF{py}Pv$Ey==fcM;JpVJboL%# zP&~r|#ySU77(iGhWC{ZaE1vFP0AbaW@wqkz z#dB>8ss-DiSc5^eK!ZVjF%KB4EV{t}!bO~I* z5Y}9f#Q?&J7yTGOSS7500fZGVTw;LW5C+8yAq?t^d%#%9fQtcwXD}!k%wSL{$^l~~ z{SF2YR-Nj@0K!U!s~A97rRW(02rC(CFo3Y?)GG`itafMzgW4ev2DKwS3~Gnf7}O5W zV^A06V^9~ZVNg3F#h~_Z27}roJ_gNs*T7hhSAhY9HLqM_0Aa(FWegy!pJ&AY!rBp8 z3?OW{B!&Tm70>=)0Aa&a6$TL2&wIoG!rGBm3?OW{l!F0;HLtB<0Aa(_RSY1kpFfEK zgteoD7(m!?=^h3URy;q20fd$A^)Z0)eIW*=`$7zw>r}v4PoIGSgf*`(U;tsmoE;1x ztY7qx0fe>V+!#REaODdI5LS91#sIKy|J8!jth0Aa;TZVVu-C&0k~!iH&E z7(iIR;1dG~Yeyeq0Aa)BDhwd3_jnHj2F#sI>GD;gL;SaVqb0|@KMWif!TVa6^75Y{j9V*p|8*gOUhHe6}K0K&SP_c4I5 zPQw8P5Y`Z>W6-(31dKJ6pD}>3$~*>5m3a&XmKL7e`4ud)f->+g&2jM$M7}P;{PXU8E2=6|_pbo;9Qbr3!+ z$Dj_zhZxjPA7W5HsRF^rZ!oBX@X2co>L7fghCv;K4^%LygYdo@26YfVsKuZT!uu~U zsDtp)XAJ5feE1E6ItU*(VNeI*W78PaLHMWxgE|O5;$u(;;RjL->LC0?ia{NOA7(MA zgYe@N26YgAw1+_*grA*ZPzT|s9SrIq{Nf&iItV}0U{D9)7itXZApE?BK^=sTOkhw4 z;r$8>>LC1J4}&@gAH2e#4#H<;7}UY|34{9CCk*PZ^dR`j9tL#~KGedX4#Ia!7}P=d z+$IKf5Wet=K^=s5YcZ(r)?!fFvkr{4XD(s@VU_9s7(iHQj~W9Q@1Db;w0jPN>M1`6 zKDmcM_2eD~r6X6sSf}n30|;yP?O*_5m05fYAgpx6jRA}gZ(~q8yp2K4>mC^EL1|V$vg24cU4cizDKv*n`!2pD%mM|DdEn!f(8VAP8T?GsvY``^v z0gO%Z7z{u->>qnZQ`-cNhZ*8~A20fU&z1g8>Lj=Ye>B|KM5H@hX!2rh6R~QUH zSdxjs0EE3<7z{u-Qij0*ghN>v3_w^xiopPc<8l}bK$!Cbg8>Lf-(oNT;h;kd1|Tf* zkHG+hV`Uf&Ksd~c!63|wLFIT27%K<8U;ts=lqv=gR&krd0K$sXb}@jk(#$suAgt2= zivfgn76&kZu>PMz3?Qs~aTWszE6p%t0Ac-&1q>jpcyt*92y4r8F@Ug2kPrh1D<0)w z0OMnS7!;5FVbGR82f+$`4B85P3@Sm(z*zBE5(5Y;?J8jaf7P?=r^#!9<+ z7{GX^27}U04F<&nhrn1Rpnw5{6%QyefbqdE42lQ8FlftpfwAHIKMWwO63E5?!ionY z7(iHQ2Ll5bZ+Br(0^w~j3`*N#7_`M1z}Ub^g8_u~{iiU1u-;1+1`yWwdBFg}x@s2~ zKv;W09|H($ItVa;utr`N0|={3d&dC6N;_sSfbrH-3`$#1F{o8BFsS`G$Dr;k#-O$~ zhCyvo8H3uJX$P7{20_Wonuh@6ULyn{}O}RffNRHj(rU399j%&`)nB0 z_MKx;XRBjSXP?2K&d$Q1v~C>)ul>ZJwDuE&MyePXYp<+h0AZD>eheV2wBCaOjMv67 zD6NfSP@lmD#!7397{GXS34;;{uj*n@TGhp%k>Ucz`VlM)AgsOO8UqOHGeU@e70U#V-tM8kfLWrJ&K`C?=gX$_HFjlGA!2rTaK?Mw8 z9QceuDexJC>WWEVtWsmf0K!UvDGXp7aEn1H;1+}G3I;G%XBJ{mXR2XPZOI%5!nI)eyQzQ_1bw1>h&oM>UC-i>UGB$)Xo?%sBJW0P!G{!PzRkc_Ev;J z?ezi%wbu#^N?YbZ@a6{$N}C@rXr%1`W9?Pv7(iGn$4~^ zfUu^090Lezh2CQTVU?*j7(iHQ(+&nOUVn>0Y5gq*^%)buSV!^@0|=|LzF|;j4P#Jm zp2DEs^p8QkDTP6uc@cv;%K-*;7A*$#Mm+}g#&Zlx#c!ZEgF&e{gF&S&3XJt9C@_Gq z!jVG^Agp2hi~)>8(ik*A*iel@1B}lxXc(Sj(9jD4W2ISn3?QsBp@ad1wT~Atfbmxr z2JNpb3`(;vfU$Bn8v_U{wnQ<2vG^kfMe#=rN+G`>`1cD2B@q6a#Gv#wi9tEI3XBz} z2Qh%K(##|VFrIOML21ST1|1VVFg6g}#Q?(EoH7g`tofOP0fd$I7BGOYo(>NK2oI_^%7#A-Ags)FiUEXmud*A*S$Fy8x*L22(l z2KAXMz*tAlj{$`B_bp-oVHL?K3?QtoG=V`~S&2cN`wN3QPYZ*3YYcKpeGDM1bGv~7gq2&SF@Ug+`6&i4ZW3b90pUb31|1MiNMXeqgNfrj7xGm7j1ifUwfBeGCxH#GrJHi9u!76fjmg9>oC0 zM{^jIj^;3^hjlTi^Uh;X=QCi?X|4fd1D|CKAgr<|jsb*~?#^O>U?~QryHX6Q7o5OY z@yP}T5LSuyV*p{@LI(yA*3me^0Kx`rXBa?Of1(is2dU;trtkr@nXr*#+wvG47!;Q7?fS>AlS`~LD|iXL3`E>2=4b_(C+tO zP&qsSjFnwJFhFnugR)BkgX;G)P;A1W`rU*<<;pEER_=Vm0Ko|i%AE-eYJAhcSmlTq z0|+a-_c1^)AA_v zgk#MZ6hSyHjzKXljzJ?b1dR3mFJk~Z z`7wa7V)Y*eFs`}8pjdN>LDPH=80#~nF@UgQl@J3MmxnPZmWMH@e^dZt#WFJnFfOfP zPz2$M2@Hy0%)_8q!NZ_fDFVhig?tQPT;0K-1Hz$?7<57(F&M7*f#5A(42B@QHjTk> zZ5o66zeN!Io{d5MJsX4W`4bTQW(|Yxn>7qNFVw(T_d*B*7{9&2pbN%M47zWf7z}0_ zfU(YtT?`pFwa`5`%tJ z5`*@N5D1=oj6r+uF$VQDaS;6X5rg{QM+^o%eqgM@Hj4p-b&EDIfN^megD&V!sT3lUv=$hFvHHhX3?QsnqQU^i#TE>T#TE<(rW+twIgi0WIgdeGUj>YH=T|U*ux4Tm z0|=|wu3-RS#i9fTFfJ@%P%JEAFi<)H#@d1*3?QucWEukqtJoSafUw%~1_rg|Yz&Ic zMqsQJyMh6P6&nl~z_{)ggJRt;22G1MV65dQ!vMmX0XG;xSaCNC0~qhw!Jr7n77U7e zEEp7b`GK+er%MbVthm>N0fbfj8yG-X{rxruF#eyzp#DFHLB~S~j5WlB7{FLuh(SYK zh(V`l83Y%rG3bDBUIBv+7=K~V$@{{fQ#b{Jb@wsofUqSWgANE=$ua1Fa99R|4j6x6 z&1>k0NADa2 z>qjx@=tnVV|2YQ1f87|g|GF{gyv+e)y`C)$AZ+k4gaL&0GbS*Aai$)Fex@FSnv(|@ zYiR2*fU(XV1`VA(47$&mp!fiT?(+i-YCb7otp4W^0|d)3sQ-~+(0$PW#tP52Fo3X% zqyPg5YkXb80K$q#3K+on@D>Ke!&?|MvY&ymzLx?62y0r`F@UgvMG6BLTNN=FSQRno zs#<}u_PhrSAgs7gg#nEBM=>bwk7CegRD)oSYYh4v*BG>H_JOhDG64n<*6-+G0Aa1T zI}9MKY1zjB!dm_*3?Qty#)$!pS2r;zu5Mz`h+hE4x*N(Ez<3P{gYFs@2CW1kFjido zivfgHyeBY#u;QwJ3=mwwpt!1nK{ee9g45P9sHUxBP@nh>j1^ZJFo5y$FAR#yzc6T8 z8G*4@z&ZvHR`C{M0Aa-ys~Es|c@Bf(@*D=$G$ja5ox-4+I)y=fVi_2#?F?g3&lh1( z&!5Dgwj+Q+ZO0h~^_*u6>bWHh>Uj(d>UmuZiW}-6c>OO1#r3}!RD9dOSX=Z70|@J% z%3uItgW7ovAgp;zj{$`Bdej&|Sku{q0gNxDFlb&%VbGOo0%OHZObifwgF$iA4F<)H zRbZ^*$HV}_S`J4Tz*ylKgBA$?{Kug6^B;q5Ul158uGe7zVQscO3?QuH%fNZzhN-Yf5V`y{|bzC7qBsaux8>L1`t;9>0$t3#WnXB zK-fSN%yuhHiV+RCp z|G}WR{Re|aLJAn`Ze(Bp<292Qbk|H`&`R_GW5sPb3?QuH&%^-2irb4AzIN8V1^!?FVHLk71`t-n;(~mHyPbvXpwLOOz)QkKW)QiqAsO{dvpti??LA^kRLA_uN zgLf+22C3X*2w8%0AYQva||G?c#DYvf)6n$-a5pfmDB*nir3dLfbrE^42mFp z?GJXjFkk!7{Hi+3WE~=6b6l?Z4jJm!l03B!l3Wn0LHo-dlGK{=%U5C;^PMLMAYPuu4V&0|+betYZLU?kol+(3<~_cMPgv9LJ#A5yzlDwFHdS zZs;(mS5+{mSN&j6yRO8bc6|YZdSwKIdW8*xdc`RQ^~yI4+Ko|QY*2iQ0fcoXF)@Jg z%qa{yGp8^Z%sd3fI+Ge0z<4qXgANE!7h%u=;i)_fIv_l45`zvH3oz(R6JXGp+y=o@ z`xtaUcuE(84hT=5#-IbjGb9*vKzIrVgANGK6l2f<;XVci9WZWU(CKSp(CMv%;C>bc z9T1+t!k`1jO$<5{nizCui9qoT2Ax?m7<48wL2!Q?gANE!Y+=v=;Tf|SbU--3gFy#` z9i}npI80;E5ak17B^EOV5Z38sU;ts=Wqb@Etd!@)0K)pQuNXjBBliIV2n?f20LF`-G3YLS#-Q@a4vh6;8yLVi?g4`y z7~3%D#n~|Eoza2d^DGQ{AbfTWgB}QHY3?Qr*vX23Tb@tUTfUvgG0|pQ_ zG-+c1+>fUxr0R}2uG z!l3*%g+a~W1{C`+s2TV$D1UQ<;4j-4l)r3aFnqoSj1A(s7(m$YMF;~JKmEgC2*M{e zFc^aH$!83PpfynYPci84KgD3+)(63^Hy8|DZ!qW|sDR*rHw^j#Zx{?*SZ~elVy<)-k9@6fmfFwK1r7cQL4UGco97?*e0k+a(Mjto`C10|;wr z_c4I6c@~2f2&Y#tXr)&$=yNE5vGxl-1`yU#sbK(P<1_{>5RT|!&;num5(X_0Hnd~V zGPGk*-!KJ?H5jxQKv;c!1Oo_bFnnPEVf9VR7(iHqC5i!r)in6)fWb>S6>*EZp;B=l?C4zK-e&=i~)oV3ePcsamfn?gOV2v zO1CP&SY=@j0|*;#-opUKIVKE-IVKF6K73$opqjt{!b(>!F@Uhj{BH~(ta?t20fd#V z`Y?d7Hj4rS2x~+MFo3Y`A_E2xR=Oa<0KzKsY8XIRGpU9FgtZMeFo3Yq*;@=CtoL*i z0|=|kZD9amZJ`ScAgpwG0s{!E%&%YoVeM221`t-dc!2?gRp$L-0Aa1un;1Y?T}XgI zT~L8Rnc*K8tE_#*0K$5icNjoeN4AOqgq7PDFo1D~AA>RoxAQS5gK)<)2IY=t3>xxR zz*v99D+Ul&xst#D!n(8XFo3X1&K3p`R(DchQ0Djm!JKOtlsVThXgVf=u|~cf0|@K; zE@1#+os=I8VC*}ALC1FjgRXiK7;7)oU;tr#w_OY%tfg~>0gNs7Fld2r#tH_lj1>$z zw?2WfGRq4FFlJrHpbWyyXBd>3&oF2@8~|gTA}IziuHj?Q0b#E*3_2j}z{Q{g!k$|g zbU@h4fkDU1fkB^j3mEJDd&dC6TB=7Fz}RFLgBA!!USQCQyuhGyD*=pE9%V3qu;K9) z3?Qt&>H`A^Yh-dUfUs8P9R?6qHn(B`V>1>8Wiu8AO(zJ}ik4siVS|=k3?QtfC&vKB z>U<1Z>U<2^e0QKYfkB%ufkEf$12EQByukp%>Knf?fUpMBB?b`IZ4qLC;8hH|Evp!G zTZ_P0^V=5&5H@^vf&qk;-{moY@p~NxWf1;Y#-I$sA5JhRgYYL42IWsC42JPbz}O)8 z9s>yLuPkB!VXc@11`yU~%VPlJ(j5%?r8^i5jaa}~zx@;g2pbwNVgO;~uU!ma{6&aC z`HK*PR<-~b>-z;UfN{AJgMPUZgEof)80#l*VF2SS1_u2s1_qsf5@4+T{~QAd>o4qK z0AUTsH4GrE`)vaQ2y3QKU;tr-vlR?reC8g50tla;#h?JfXY?2p&ge0y2>F4rTJ;hJ zMYC;C%*UW;#>b#&S^>c(HVleje1<{MYVI3JR1`yVqu#EwP)$SB9D1G|?#u~TF7(iG*^%VmMYdHHbfUy2z4F(X_ zGrYq9!s^mn7?l3SfU(By9}HkDcY;Af?gWE=S`ip)IA3D`Vg1El7(iIh*oy&#bs5wc zKv=(W3j+jOG3ZxXF{rF50%LVKJ_h})SrD9ki9sKPm+WEC2jS(b81$E~V$hv@2aJ`& za~MEa=fMI75Y}bXVgO+sh7bl2)?eYm0KytBuNXjBKfQ?ojI*s6^g%eMfI%OGm&GvX zFNE32L3?OWHBa8ur4K&yo zK-jRug#m=M-kxCqVcl>I1`yUPSjPaybG9*P&e_JG$F>5D^)L1?fUvGf1_KD|+?&S$ z!kUU63}CEa#Gnbrdl)no_AqFMX@RkUdItjtYrXYg0Aa)S0}LRn8|uXX!g@?L3?QsI z^B)5k=Wb)r%-zPI$ms{gR~QsIuQ2Fe6aiyhLp25v)-Y9L0AbB=Jq8dq&|Jj;!dmYF z7(m#t^AQ6G>&EV50AW2%B?b`ITqDE)#?^lqG^_tGC{3vXWBp4k3?Qs)vyK6TRr;kE zKv-!C0|N-F9(uz7!fL;(7&ODzfw6&>8UqMx*4|(MVLhW63?Qtz!G{5ab>rSJfUwfv zR}3JmvWAHPg!L~~F@UhH?KTDw))Cpq0K!Utix@yyeZ?;ZFqU1wpc%0Xj19E47(m#t zD}@1swccG~0AbyPJq#eM*?NNkg!NojF@Uh<9t{Q%)<4w70Kz(FmN0;@{^cSD5Y~0L z#sI=P_Z1jGSXqgW0faRp^cX-`|I!Br5H`?S!~nv&@eK?htl40|0K$6aix@yybJHIN z5Z1MKU;ts2?P&}ktgP6@0KqH_%8D!us;>kf_+<-&>dO`eb+tYQEjc*|_S(dt<+X`H z-%$jNRV?xtK-kc90|N+a-(_O}VNLOA3}7r7z@RA^z@X2r0md3vwHQFyV8J2=FkWQC zU;x641sDt#3oz)rT0yW&8iPIvJF_t8JF_q-#%Mus^dbhu=tT^wJ`7;2HvbNTZf*hu z=O{7g<|r{J{bYgQ@9!9tK=?-igAxdT&tg#ep2c9;QUS)g{do*veAbLX_pBL%;VvmK zR&zSW0LGrT7}P*G(v3ka(v3m&RuKf>e88Z3^8tfOd<+;Xeo|uq^X};*>e_y z>aS@~%*LSli;cnH$SE*3^p;`(VP(NO1~3*l$Dk~5jzNEB9~f(^%Q1kk%H~N7AgnB4 z#{kCsJPgYGJPfK2>mc~S69&}>PZ$giF@dq6Lk|N8>#NoF!o_#Q1)SA zQ2o6Rid7g?f2%MU9FYNIL-!yC5Y|?cVE|#pk1`A(tP*#H0fZGl^e}+&`zQv*_fZV0 zwFMAdbAv&(<_3eo;Sw-5bX&&&!rH3S7(iI@i5>$8t3;h)0Aa<)OBlfTQ5}QgqdErF z$|4A^c)*}q@qoeL&>=83be_fl!rH2A3?Qsi$HD-{wKfbowKfcjsuf_YqFciN!ivhr z7{FMmfGC^#@aeX3?Qt$M1}!`4fk$f0AZEe z9~eMbdGQ1WFkTeIpu8xEK~4My6uU5}iMucuE?fY{+B&}&K-e%ii~)pIUPv*3u=2Tk z3=kZ|pnNWfK}}r=g4OyM)YSSIG&JSFSVwCS0|+aA*~b9EVhoC3#28c({2(|_fBAjGwuol2B)gBqIy zgUWI>Fjo4&!vMzbdl;17_b{klGXZ0b$qyL7cufw21_&?Nz@P!bbHW%jKzK_UgT|IL z23`4o5Pa$ugYKzY3>qD65ZvRzpaH@YxEM4*xJHXX1BB~8Flf|&U{I=l0mdrr=NLd( zsXBoHjH|9OC{~Qx0x|$Oyz;#wF?+DKzQj51`QCN+sB{*!dvGsXl$Ls zpsVl#f=`z)=$iV9=Pf4T4u&Fld1Aq67vF5S}f^paH_0jTkgG8!_n0 zi-564vmOH&w@zTtXq~{I|KkxD>qYP|fUxdKGX^l;>c^l9!rK`bbU}EB3WF{P@4UmH zyYmi%MtcDScN;NifNlidZxOyIg1_;-uFlf}LFevu< zfw7A79|jOs>^;T+!8Qzvy*3Q0QBR;ah(R?fh(US!F)&uS>BRuT%F`VfzM?yTM=p z!b_wW43=h0%QFxFBm{rMdt?t2rDW&Fo3Z< z1B0SG1B0q<7zEoKVo<8ONX@8OLBy#skKRGRqjiSk8$-QO=1$ z|4|(ntLRiPfUu(ME(S1`kzr7jkzr7^F@j+01q`az3m6PtT)cqrg=>7+S*X&_1T(gHkC21KLEB<`P0LDKyFev`mz@XY_2Eh$$ z7*re9Fc^Azfw4*f8v_U{Y0O{%WA!=)CG|Q6)k)K!n2kYo5*ve|pA#7C9sR-p!umf< z7(iH4Oojo3Rn8PJfUu$O3I-5XIrV@6gq4#wF@SMW6@zk86@wa+1_U!sVNhe7!eHoC z2gU~fsu;ld? z#{j~L){_`OSjB{k0fZH;*%-jss)9k$s)9k)eHIk6F{rw;F{qte!Juw!z@TpYi9ub( zfI+Q-k3rpbAA`C_4THMJF9vnHEez@=c?@djR2bAwtz%G|%E6%S*}$M4tizyoH;zGF z`~ZX6mun1aUqcwwY8x2THdryJyFFu2_j|;kc7G3p+PoYFwTXWi)TVSWs7>KwP@6u3 zLG5B1gW7!u26Zbv2DNW73~IA}FeoaXfnbFc21O8-?_*Gu?_EPwu%d1R z0~qU_V^GvP$DsdY4H)aPMlpb}&X*$$AZ+Ns#sIqu=a!~1~8s8he3PJ90rvK9bl}yX$k`b^DroH;$cveae!dy4Ge11 z8yJ*N9|L2R=Nt?mtbE#v0gO+rVNgD`hCxl`5ESb%sHx~NsHnGqv7rDP0~m|+F&Kg{ zcMyXi2y;3x7=kc|5`!TauVFCcSi_*m%LKtZ4GfAr4GgNr@4#3wGp{2L4g^KUTdpZWyBGj1{H z&$z{4@XiH-SppagK=?Tig8>M?KE+@F!q2BM7=ZB0A_jw(MGX3PcY(29(isL2HdwNV z0fY@JA{ane^Ys}95LWa`VE|)~bqtCi>?6aV=p)0R|4aakl{DBGz*tj`K}l1NLH|_} z7^}_w#GvRK0KxuB42u3r42H|EfU)9F69zE;RluP5tAIiOk$NN zPhe2ep1`1=Z~%;z6S5eDty^BHr!xb=Aw_3-b)cgX9tr(P=tr(PAy}(%i zO%4MHtDMVY0Ac0QH4G4}!k}EL!l1?;1jf1*lNi9b%#1;|%#1;Q>Kq83EWw};!bi*) z^pBV^7%-NBv2ukH0|={}uV4USYH zKv=nA1p^4{RwglkaoH~h-LhW{`qM%nc=8GceGoo!jzRy(IR*nJ8!*;)%3}awmGl1? zKv>;+3xm4NE(Ud58wSJRUtp~NAcO&g6*fF#0AXFpZ44l+al?uMjISp#Xn=5G9)m_< z9)m$C6z7&P803~Q=xgHQr({6e@vWK^q1`5EhMNFa%+y za}0(c%)-K82*PYf7z{y}SBk+9ggH+!7=kbxAA=zXGrnUm1YxcQ21Bj}27NIFFxK-k zVE|zR{vQk=Y*=o_0K&S-CJZ2KIQbX@2pfE#!~nutpQRW;ShLHB0fhC}Uts`Y)#IAgp`LivfhSf66g{u%<{C0|=|!FJb^;<#ikkV7z7lgYudM40>xnfwAt+drhfY+-R%HlU5y+D5Z0d&#sJ3WJ~8N@`@~?#AOXf&25k%=tf6p^0faS`W-)-VvIB#r zvIB$u88Il{!=Qg=4}<>MBnUpI#h?$uM^hN|L3qP02K^1U7<6uI0Au}Ia~Qz*_6-Jo zF!o^3zwNxa&Zh`EK$Xv55nR{81%)D zFsRM0V9?}R0LD5zdJJIvcN&Av-)Ri`&bPo=ThWIBgf)eu7(m#d{0##L>t)Pi0OL#( z2E9xZ2E$qnFxF+c!T`dGPIU}m>|(;82*Pe*42o`H3_3UUAh=9{K?j5%?O@P(w1Ywa zx&Z{syD{j?yD{iR&jVw%xpfT6xmsYX|FMk$gq6Ki7(iJ6?JEWlR_33_0K)ojYK z(ElSKr1`t+! z%*6o0`j781fUu%U6ayG5^D!tY^D*du%>rZPC0iK4c+mp}&8HYZSm!zu0|;wWUSj~`HWLO75Eh@npdmhiL2p787;ALSV*umc1O^Qdo~Xp2 z0m8LT3>qNZ$ibk|$iblXW*r#oZhgc6#=A-wbU}E>E(To?K6#8m7lgM@W6<3`jX~2p z4~%tAI5B{*0qYtDFkTwOV6ZfZK|_WKjCFH%F@UiCjYA9|tRbDm0K)n|I~YJ%FJc)3 z2pc^3!vMni^XD;u@!U%c`g1QaXf(|OW6k&%3?Qs6@s9zFrGyx?L0DRkL0ejnL3iFG zFxF`K#sI>4e{L{K?8*6e`C-9;VuOR4G`{q#GnDf z6PGY(fN|xMo>|s!j41?e(I|gMCj%i|0j%i}hOLPKbjU!GBAgog^#sJ2T zqZo7^M=|It=s~db1_pf)mb78e2Vt3c4Ei7}^^ZXxj0G6>oaRyp~K0ff~p9T=30njpADk3kuP3r{d87oK2H|4;zN+NmEHKv?VS69y30 zU=m^gVg0`W3?Qsrro#Zjy5)Nqz_>JzLANxIL4V3U2%gl!pbx@_XEEp>p2eVBWdz3R zHbx8@1ziw4qlG~Ogf|*7Xn^oaHwFz5UZ}&M0m9q=F=%Z6$DpgU1&j^rq8LC}qiYod z829BcXn^n}Jq8UBt_xt$0O2Mv1`QByiDS@ciDS^YJ`IdDs)`uExa|UiM%x7j{ape?@ygYca}l$ z4i^UH9WD$yasQy$f>D0KzXWFc^UFvkC@-XB7-;5e{IiaqbZV2pjy-VSwOG3jsgP+Yjgi& z0Ac;ABMcy{cTlj_4^nUr@sMX6?ZKL5Z2!!zyQLAvULm~toUjg z0~o&%V^9R)*M1C&ul*R5Y!x8bCV@c-gl+FJD1oqZ0fQ0>yZE44K+fN|?L2Bp?-461t?Ab9r&2G!jk7<4w&L2!^4gHDhagW9({3WVZ(GY1~AUu!eE%Yg+Y6F1{iA=e_;S&{j~)QV61(ML0|h8gU;Lr zFxGHSVE|!W^Ckum)|oBC0LF8^FzA5r>`M$fAUr3DL1#`9gObuWFxH-IzyQK3xpNpm zSV^gf0gM&jFeoX$VNjir1i}4R7*zYOFsNBcfw9gxHwG|1tHz*nR*gaZ+Z!;};QGJ- z!iF_j3?Qs>xqtzLm0Ra9K(HKxGUyCf-VO#e5We$-LEX`eLFZ`<7;99VV*p{TCA%0v zSox0z0|={pJj4LP8kG?YAgs02g8_tf?kO;Uu+|h81`t-tpThvcDlHEfKv<)~ivfhS zmKZUBuukPN1~7JOV$cC$cNPX65O!l>&;j9yH4Hi++}g*W)7rn<}nytY64@OS7Hocd|HY@=d=`q-g`DEZe!4U-^QR{ zzXyyplX)0GSiebu0fhA?3NV22Bo78X5T4w_pf|aPLHT$E1RvYOpnPl(gPL;y7^^%} zV*p|0V=fF}eDoB9^3hWaIxJie%-Y1D1Hx=}3_2jpa)d#Le2CEtv!1(+Z27~io7}UZ%z}QfI9|H*M@04JG;9Cs(J8v;4pR$7B<1ZML zLHOhX2IZ3r7}S(EfU)w4G6o2K$Dn-T9fP5!0T^q%-@pLEYR)GZz}PE=LCq_LL6`Lg z7^^&+#sI>Gdwwy1@vdbIhP#$A7$m-f;sOSP!~zDx-EvSogTZk33ARN4iK__?-gNAMg1p7HLX!toX zX!D1GvChUX3?Qtqi-`e*4dv_@Kv+eOg8_uK&vh|?@dFbE?FS|diW*u_{DnbL;|qg^ zQ2_)S%Q0wxu<0@e4G=bSVbB2K5;+Eq5;+F#^JNfxLW)5fgfF`=XoK(#9tLd?e(;Y$ z`@ug3C5AmvtjD0lpvR#2e;ydCw#;CFU?v9D7A6LbvIStQefkFj7++Ij&<5e#91PkZ z{J4xk`*9hAN{R*;t6jRopr|DS#@ZKh7{K^s8iO_nU$J7)2H~4L4B9t&7&J=0fw9ix zKMWwOKgEmzgtecpU;yL$91Pm`IT&=FECFNv>Dw52H{6b7_>py z&yGRc&yGQBs}LCL-}}V?!rIG^Fo3XrD;EO@Yj51a0K$sQHyA)zYyJ`j5LUA}#sJ1{ zehg}Eehiv#cYv|N-4+HA)`>1+0AYjOZVVu-*Yb=3j4Ssr=vD4vP!XF4#tL`dF+gw_ zgTkFK235rd2v&H+psMhQL46??7;Aof!~nudQIi-zSjYJX0|*=JpTYpbdYx(vU|iqD zpjY3;V345z#wzuC3?Qr&#lir_ktGaDktGbOYkMGg%{K3?Qs>^8^D3E6;eu0KqN{$}?OT)P%(#Sg3$OO{joD zeN_|~>*zmY0AYiDpBO+`ucM6tgf&09Fo3X<*9`^`)~nmV0Kx|84GbWxQkld6!b)B? z3}Eazk3q?E9)s$V2nb%hg+X=k76$dD6=1CSVGRQaE519!0Kp6litiX0baF+&*kE4> z0|@K2zhVI6+B*z-wRac{(w=~^N}L-52rItLVgTbemlzb^Tw+kIv4Y_0Sq!Sxvlui# z6@jr*lL7-6H`XyIHP$icq}hP6!2t~h5Z3G5!2re$VGMc=VGITto4{D5(~ALwl^R|# zKyV0yQbP!X>MlJ9-Z_Cmb>{>I%@0CgtSH^X0LD`L7!;-UG3ewtKyU>QgH8nxgTdY{ zV64~f!vMy$Yz%s}YzzizZeXmU{el666{XY|z*w?}K~b`YLDiZ8g012hRITC|G~YCU zvBHTN3}Ad*i9zAG5`$jx8Zb84#l!%@ddY0|=`KYB7MY z!m%a>Fh2T#LE-2F234sIP|U`lD#ga2$Ogkb42o<$3=iH)jkFgR%Bnn0Kp;*itHi`szweFY`BC$)o=-e`obAt ztoNLY0fZH&G%0(em)5V~s`U#3d7}Qil7}V{vkyB%Px ze|!o92oI zVbB0!)f5H|5LRhn&`@b%Q0zGZ#wyM&3?Qu7-*>b_^h_B%H$l!rB457(iHSdmjS`>rUIo0LC*uFzAA@4ukFt z9R}T5O<=4fx`Y9QwFCVaKv-*s5(5Y;3-d5Q@H_@(;du<|8~wmo z69#3`Ck&cCbHLbeYYhVk8=THz0Aam8B?d6=HDl20HDgc|ZUAGQuTBggtnGJ!0fe=- zE@1#+?VutC5Z2o1#sILL%F{qwc#h~_o4uiJu z8Zg${(!c=13Wr4)!1#~_gTf&T27>|-D1OCYQ1FUDlV=VX>qQkYfUse~Ed~(Qi#*2w z!iM>e7(iIJ{|^HgPt;=2ov6j2eDw?jUpvO248m95F(`v^0fX|D0tPkBBrsNaCBgv0 zx|7lvKv*+y0s{!Eyl!FuVdeWi3}Afk2!ryyBMfRfOQ2YcK}|=DL4EZ-FxL6YzyQYe zMGQLiMGU%JCSa_+bshrpvC~gTHAgxfUxG%M+_jWq0zoJ zc;X)h{fU1VbTqetvG%413}C!Xhe3Or4uh6{1{mv!26|2x~qoV*p`oHz@`X);bWv0K%G2 zEf_%9aONQf5Z3kxVE|#RLsJ+)So8S_1`sx!9>4&?+O81{Agr~20s{zZKIvfqVQq(7 z3?Qtvn~ed4H6QdbfbqL`44UuWG3dD0fw8vp69y30+9$yP!kUj=7(iItWex)fYwf$l z0K%G&pD}>2wtor(2y1P#U;trlX9Wfj*4i7y0K%G&rZ9l8w$~H}5Y{?!ivff+Umjxs zVS}Gm3?Qs?UrTmH0Aa&zRtzAl>8HW~!Fw1q{q`_u2hRgztzAV7AgsYWivff+ zgBCG>ux`m61`sy5qr?Ehx*ZM-AZ&0qhXIW5uVOF&;X4Ny3_$pv8iN5CKVvYs_l!Z8 zYabXJ+|Xly;6n@sHx4oAatDC1en}7m7?(0J=!0E0lrY`~wVn z`3D#bpF9C${rgK8Kv23i&IdUL5Z1iozyQM9OZphV zc#RB$_8J)my|7mh{OTKn-m7m6nzBE@*swW<0gM~JFc^Yx(+UQ|rWFhZ*M5PqF6R^m z5Y{W1zyQLUd<6_3td( z_~8-;We|Rp#Gnkqk2x5WA9FBhaBhI$eNGG-`dU;ttD9hVqD z*uZ=W0|@ICgfM_{-VX-7ydMl2CT$Sxc7{O%gkAqIXt@4iP`-Z&jFq12F@Uh4MH&Mb zoANOjn({FiJV*g!y$k^c5H>vA!T`ehJG>Y`*zl+i0|*cc_;^p>0RNznco)}T=OE935dWa~r2LY^ zJcjsqzfd0^OlgLCuslRI#3R(tJKn`H#F4?iJR`Bh!L=eewV)(3KhMDlWQv1BsH>A> zfUA>BL=;1Od}eMzJYjYAsYONkMe!w-1*zE0vv&+PaRsRf0Vy$ZK$uO2PN;3k`6)PT z^FTKqzfya9Lo9*d=!oP>JSyz%4KQ>Ex;i>KIJ!E885lY^z=M&nLY!u)s06w?5@#B+ zQhR$7tZs9J7>4OWB9#*`7ugBWB!u4~$Qq!r3rQD(4%|tHBwfVWg6uAs zPl$0HvOa9-$vd?&-X}FLy(EL|6h*WVNNEb29vrC(w^F3o$5ccpWf9at*mUHug~bUx zb>T1{Sr1aoV^>W$g%PQbSeuYt2lEj;mEpAuStqu1<{3t5G9%Umq*R7Q3ywsFQzcR= zz)(Xdi4oF3&}`&Dg+&KEfnhftSqoCEV^vHzc@d|LNPCc-2J;O(apAKGStC;HI_9M3 z7iE@YevWe0~oGr-yg#{Em+VR+ftPd$paO)tP07%eF zijBxFh4~Pk6bRahtQ)zkam`E4Psz+nj|aD}5edS{k*F3DN!mdzWgOO_r9WK8LX?5p zxmeA?mEN!$ho&08smS363w;AT<|3;HwRds47k7HXZ90Y?Vr)Qm5zGfB1nof9g`93& zQYlI|Bx$#|H^ikLk|1E-A)w6O-T=EfXej|^9C51gn~EHM#F&e$-rn8>w|g1T$1A85N5BEn3I#AoLG`yOy#gK@{UP6FC9Ek`25+{qrN zi!rniVLq~RV6KN(wzwRHtjXTqFd)d!Jw7zAI5jmTH3d<#q7_+qRoUAcV3h|48Rqy4 zQHt@JiR=ZKzwwxgtlZw-1gBduq5x(#30jCSAK5uX+kmVIIfsL~ZhrYC@xiI24;&G% z*WTU`t75cNf=7+Ly#W?kTq%UGQat7%2Nf)QaaxY7*xud*hsC&42C*6lnvLubn5zjm z2U&}~y@5}Des*aAY7-eAz*MWeXle^`%Eo39(Nz}-n(gfkv8zT)-1rm`3VldT1dCSu zF$GbJ&qU;SCu}CNYI}PVY~BE+65L6gXdQ%2M|KO$<%C>>tjFHo5UCHDUlQ+@Uz&%z z)*?c!y}bb*RiJ>uHpfA{79z|?_8=@!2s#Q`lfAtO0SDoZTv9a>Z5OfwVZI{LnaEl} zEtI1Cvdom!qIgg}hd;st2r31&D{v~p72UXvMbkmpbY#E5g2jM<`N(=e?F+o_#~s!9 zZNbn-tWC(SgZapWD7%n#BA5KIHnL-BNk(d3NoH~)XzDgTBrzS)J|%MGhis#e`ZM^P zfmTNlV;w{bQm+KJ`Dm#N7P{~b3eh@=w+%T?NVN}HFH-LXzbi4)9n4mEM}|cGq}q(^ zYVzzxHUT*u2bUD3Cg#R_`lGhVh;GD?rr+M)5T^!6nuGa{kUD#N0~{vdN|3}UCtxme zFv6UQ*CEIn?CnkPI0APfBSjNYb|51|IlSYs&}I(iW7Q zfW;!>vjOp%p>~3o!eH|p$WH7FXYi>8%xN33qd9a}hDilKp^ z*~kuoxfj78VH(=>@6ZqN7e!^@$k4EBbs1#nBesRhBhMYL3SER zHX&;SjRfZBWF}X}hh^sHfQN)|7O?>Y6oSU-a412GDVTE&a2biFo{-7NJ|fO+WF4R} zIXv#hh#!~@Ciq;Bp^G?MkljU!J;?g(?F~Znic1R$@{3ARF_*x@!`$^mNdYIc#AI=~IJK2xx)_ zdD|SR+U&ujKBQU#+N?*c9{cpvlKAAD#NuKHVzoeno^*}&NuX7Q*sTe0b#g_-0AYpp zIna$j*kjWhVHRP9_PM1ciAg!B@i?q?baiwLaCLNz_eQLFBt?t8y&*PFqjjQjD}n0A zz9tn`>_B4$VikU+(43215x8JSlpio-!TFac9fVCs&XvTPkE{n;PT+P8{<4h(eZ<;? z>^hi_z$FtwyO4E4rXy>yw>Ll=l0j($VUfe4Bg|eUGcU6wGchN#Dzzv+C$qT3 z!4q>$HM(K=wPCRb;&6MFveabI%56`Sb=)uu!7IEG#TusnNHWDfHMgLo(gDTksC6rD z1@;+<#qni{Ii;!i^y60qsm=0p3-a?)^Gb@*4FVNw#DoW;@&H$I)G!b1vdk3fxQHTi z>=TP&3;xmK$=)%HqHZZ7*l1~my}bpRyW{;p5ew<_!7?>IHTKClsfk6XQQ_zqfp9)f zd3*av6uTW^i#4+CITbZkz;YrisTpFi6{ZH3!%$5CC30+w5U?18rWB8P z$cY-}G)M`6#d2iDu-t{I3?n1L%!TAGA~X;*8`&X5nvSf+-ag(9N2noHt@st$r-JtD zrp9OHmE=3X7jk>1fY!{WWu_J(rbnC{BS1mo;u;hW-b+<8*NkL z(~9zQ@w>zk;u28z9o*YPa|y-ffYKT4^Z?9|04GXB%LQreKW?=|mU>T;5*6>MKY zVo_plYDsEQF)`K>2v~3`LX;~YN72N5dxWX+iAAaLd8Iiygq)8&R!^>WbbFy~8hiyU z>OcmX#l-7Jw;AN)`23=H;!S{7&S)+m-5gMx3b%)0?Ix&gNc+?<3woGZB1;7_Y7mGP zBFsl_lE9o!u#Q631ZpSY4i!*|32Jy47-DHPB6fpe1`$?`MB9bzK$x$Hv<+FSy}bpr zKNaZ+88yLHWEwaaAPr{_ufyKnl4R3~*8w{31F5wKwFwlgD1Ck879pA%JSK$MtE83Y zC4+WlIjE>OnmI;*CZs?UKG0ef-mM`EfeL}I1AMO5=k zacXjDQEEKmWEEFf=LS8+QOi?A*a$lDhj1P<#1V<0e26EHfua*qjKfMWoLLE>6pwkx z1sg#VkrjhZ-@)!nQ0~KCvg7bFh6aLWBRd4I8@?sH)LZbEU^*qZXEicbMvq< zC*-ycD4ap#QP8R!^)zdc1hJa%*a0b&K!%ZI3wCYbP|HiLC;=}*!s0qmIcsR-0HTnr zL~f&i;+;$rpksZ6?T+_DG&LaOdPM3W-Ug&4Mnu~H(nGWjVNRLpo_QrGqou^!grXN7 zXYu*TC8;H_Ib~4vV2MER+%j|}0-kXz)DZ_zd{WtT=o%X=E(En+;Q1VfFOb#5n`0c( zZsz0wJAB_h-W;|?2>lpz?5aS=E}Ivqv``oqfWk|DZo9HgsKqH z%7nELaLJ>!JV46q6N~c<<4Y3L<4f}41u^7akVr>x(M!QWpGci@0~fiO(#KPXsr6Fx?k{lvIoy zpyM|bq&!4xYe4J+IN;c^09xLT z7IO%j$kB@2YrrU&!JTYS2Zf@EID`WsyKS&HQ>bPa)JJGl2z87{ielvA72+?t*hn|u z8KOrU?Y#%G63ZG$swP0B#shVdghLdAJ!s(xtSU#cAQ)7ggL}eGlnwVGqJj=K!RH}B z>w1uU0~!P&dL0i@`k?(_$hsXA9VD#NAxfV;qN#k$qTIw1 z&_-qG5%9G12^}o6xA%ZHm%zgBXN7D~ekM zXjUDxgVYTgwn&TC&;}F1od=xCKy%$#%>kD&@qVDmN%&|3WOX5iS;$K53yL!HN}$c> z)Wlp!BNK}j=+Zh^{hVJ6KJ*XQ?EsK5VDwRQy4VHr5gvbl+shPWM6AA|hkeje42M;Y zuH-}!Z0r==R01zjL{34_AwcX&lByQsPuHM|8EujfyPLpC8=)FzYCutHNl9gV04S{^ z){BA_$9o&Z`xzJ@=VC~_`)yqiDK_dr)cyB|HAB|0r76J^o zJD?#EpOl$L-_QUB1=KK+6Kn-4J!fFcai3wv;6Pyq5t0f{AfWi=42E%SJIO8C+ z5Me%Kf`>#KkTt>Ak>hp|mi6TL6@%tFGeJjgJ5@%d7UerY=RlyfJlKT9xDgT&$g^IA-HN1#2peD#L7E*Xx8m=USJ%wS{2Z|!+U{Q_FRD|ydn~6|sUtFG8fF-ws`j*0Zn-yP_nvTmnc+C{=9cHhBvA84N8#b^HX)+^HJ;-kA8f5=2(OxtnNTa!$Jg$I}nQO?ak5sg1Q18r@Vb}X%d!90?P4*Mh=0lPVwIH-r**} zndx~BsF{#debAlU==vMuL4=fnV;rkH9UUVOL4X?P zM5%}D5628yHM7fMO;dlwvVc7bvHoL<)X&@Kd%@5=#;>5+L}5Eo4W*4%i}~ z+8(RClVbp=mO;3VfGTjg0`g@%baov*G$03kkl4aQSPv?WXkk1-cRM+PntL>JH@U{! zrx)dy$CqGs#GO#<7DCGGi!+Kc^RhvM+G#}8R75GZFG|IlA;3jBA_o#sWuKg%S6mWb zl9`(tUyz?!oR6)Ifi#Xmta4;?OY=xHnSciSg8cH-qWJu@cq6p@37d69u40K(44wJI zW*$6M;#m(0O1&seMCbw;)cgr{9%;rw-4&mcpPUW45CNrSf@vN`Zw_s@4i0xx-*~9I zF~Tz<(ACiuhbssvhRrr$2~j8!KI^Uoydx6drjkGHTewS!=WgGU()1@UcN8X@-qzqX(U%BY5r@HW3PO7Or_v zl(QJH-;$2SFQ73^s#roxKOjv>p{`J(nTODA#LU;oOL9ri)x_z>%+sj)NX^m2=?1OK zfF?C?_#*3~ZgxhjE}@l0_Mp96;G=cv<0E=mXAf@Ifl8ay5=gO&9!tn)R1l}wJ~_7l zyICF>^*S+1VI=~p%iv`i*ii-fnRz7+p~a9L3CW=jWx6U^a0Y?ClM3#h9a`gC`guw+)CtHqickQuaIK|v}X*P#pD=DiW@Q4 z@i2 z3s zQsXmAQgb1f;b3?cb(WM!)%InnMVV=p@u_(!xPlN=h8ZHq7b#kZHy;#H6tzeZ5lgfK zsbQymN@j6#Vo^$bQEF~tW*+R`C5-5SOwyqQBpEvGi%SxVO5#BiGPvT)9(*(#O8Xpn zj-Oop_NjR(c-XYyO z;{65gwZUt1REHyqVq!B5+UbrM#zEbMa^6mSQf4}6gb;t`2bCMp=|JRx3W&p~U>?k6 zpdz`XC^0iHH3c-omzoaR;DfzE4O(9a4nF8nlE@R+PS@ zPNYdsEux2=_Nhfh`9+WkJc8DOrhe=l!%bX4dO|=KA0juSs9=)4y&(~fK-<_!v<{MD z6RqDs&=PnufM_JzE=c1Tq6u0t+Y^}pkhOwuz9%B3f=UnU9eARAh@qWCdy$;66+k z`pq4YxgecG67+$6L8N+ApAfIfz9_Lg9(?F20gs>$Gm@+iwh#l{jU*V#&|D8$vj^!$ z64V2=fq+MlPvV3aPmBg4%?6#PiQ;rZW`i^kXEvx+hNY=Ylo!zT5@#bM%29GBA~h3b zFLo1%vmI@v7ETbK00YJiV|QTXA@^HN*rOBL5dUbn?#&zu*95^5#_ND zHiI}9fP4Y&he10+$o)g2QUF#1$UTG~5*~;EAoFB>xH06q1LP?x4aAb^1!}l}T;ID= z904E`Ahttp!VQM)tc?WS#RfU92Xt68)sDylhcd10g89g(xCDGTExmk2d;7pXD=sNA z0^Mun@99DppV7rWu+Q={Q?Nu?fUA=WQac!$gzzY|&(BN&#RcLrDAb?=_X#LiJ_gG3 zpo6TC%V2t1X%CGNJpO|?59ClP6_50^5;^`#GK%ucK{rezC3PCdAI+__&qypwjmONw zkR#Hl6k#;A!@jg2C9x#c!KpMYEwv~$CEhtdx1h8Hvc45*IYtD$hKIJ;NY+QRO^~!s z!axP0@+8(#G(g5WIM_PFWVG&LJf-;4K zneLE}V5Fr_iE##v!-2fwmVN<5f%`y5!{KQr!%i)P)&lm1_}bJk#h@hb9`E%v&X^Cj(#W?Jb^<6 zH1dF`KJ5+gsA6 z!(6|3Z{#6Fm@A0W1+oRZx!|@V1sMa}8G@GliACu&w1k#^0G044%`zH#1z{J+NAZcp z@CA%mvj^x1I<$xR>knp%AB8*jBdTXiOk0wYN9HY9-F54w1?Un2YQLXxW6{ zA;=o+b5irtOEMh%L06fgp96z>&>ayfA&2e}VHWtHF?{OmlQK(+ zzQOiMsp*+{xLg|G>g0;ZWyB~2t(+pxG|<*69H9uc7O8cGLm@aMDX0?>enT{`XlE7Z zN-Jzh6@I)2326eksgBjfWEx6}8!<-_z%6jHoQB&hdwWA%9z;YRUNr>#gjVw6vJ9o{ z#iaQC|40j1ktOkN+V{El7tY+Q+-$QDkp#0J=*U za+z{`a6xKvW?E)4#w4Euax0b;EySCTde;n*jsk14FH6kHOo`7`^}C##6G6Rr)mi9b8FGQK#q1dn$;L6^TF zFMo$_#V19lJ$S7UsC19d%P#?07!TemhsRpb2~S8hF!=_6dYd>i6L|O(I~}LKcyrtu!K40&v1sH34`00mIy9fMp>;&~ z)59uz`*<^~9>G)B5U&HAfAdpP;tLXsGD|A4cPCMf>Idaq;xrKG3s7l6oITDqKPZ(_ zY6)IHIEDo!=B4E4`jzG;r53rT=A{-TmgE;X7@{?uaYP?@e;{5H@YoJ78R2;rmo0FW zn8(N=Ye79A%>tTVV28V5s>D1>4pR-xZRm%|VX8#Gm=>w;4!@ulX}}ll8e3ed?d?P0 z{;+pMsQ|H>N}OtYdqeE82DJ;LaYU4AdwT=C>M)9aqEy=#fm0~x+6D)L8o)z5Bn*ro zH>+uGk3IN&CeS86!X7~yNFz}f#1`oNLEtTeq}xWiZs;{l9*IRM<%vb9@j-s>$SrN8 zc13ay=qN#a3hnI;ut{SiAAE}J?G3R>VRiogezr>3T)ra1VO=H#II3Dg%yRHNW? zg7K@gPfSiuEhqs^3l)@>5HyiU)zEOqbRSBM2MKdril8|xvnmyfs~jD{_YPoY6vE2E zJ10`}N{aFeDsh?YgmUo!Xa@yx8tlOn&zL@UF)QED-L?L{fMaC;YH6A5zpMT|C3PZ?`21eXP%1BI}+cu)_n#BLKY zMu0}hu-cDNo?y2FU0J+2cK1S?m7vZoG(+0Qn|oksE1;@CFT_w~u{#N*#=ao2C^07| zH7Bz;*TD&N42Ls##RQ^7f;!(zta7-y;AT}ZHlxvp{a{8Dp#!v#6?B1h5jJxnryxrry#G6joC61uY4p5Vc zR854NkxeD+Ua)FdILGJ3SEN>83vE!+0k`4c-Dp&IlcE#m2U7GvZG-xU6rG?2%Gh!* z+7cS9IUJ$}v~(EL1aQ%aXuR7SU@-xv29F7#(HXSqU|a?vl!BHTV|Nj#>cl?pg2Pk{ z4fgg1A?2xw+2HF~z?$Mw3qF{qpix4sa(jD2{N|$914Jq(&b^4RBgNSWUBuafJaI&d zJ;?g(?M?896Da&KVhv^+IeJO45!t1r+lj2(J_(e9{XBxTD)6kMQTcXKw?p1 zZn1-kfs-SQ05J^0z-m#`B(6%Crgor}npE`!5oIk6?L#Y}X=oEP4WX9nG_(&iZ69A; zkecj3RZHw0!*I@PBcC)0o_(Xg?e_KtRP!#V_yJ9*L1T^vCfnN^Qq8p(l?v5Orh3>S zDjgaHF~S0SdlRaK2Pj?Ou9j$P4UPPPTwTH9f+himY!RYXad31EjyE*2K(5^2Js#w- zRA}EJK98^tM9EHAE!4~KvYD_B=)f0-yRnRT;ZTFLFf(?J*QwpiqlQU9NN^>xr z?&=C2jz*m(09VCCX#m{}h?)~YWgSW#h~@*ByuH04nhZvLghL*Oort0vnhfj>&3#yYO^SF`#wtf;2l2^#FKG zhL{SJXbY&+yCBm(L>)vYpTTP|TH6OHg@|q66CHds>0MCIb|PEAL|F(fzK}=NsFvh=|?=)onoTU7#9HWbc9qO_;q4R84q$7g&@+>UEUP0zws$y$f6# zU@dfnJg5-D>|J2W!+IA88Cb0WjYVkh15+M{ort0vW&osjfiM8=!_0&90|+R_YbLVgM3{=KoW$ORGpJ_)!Ze(_Akhv)JwR-mn0O1Q)4L$o zK13ZvC!fJ(RSimz{FVyF1|?YU65unalH%T%)}_oiD>4M zW-`^o7Ev|8N>pNc7sNRl9C-)}h-;M-Z#3?jhHAkM@&Sf5H1Y>>bp?wHVtN-O2N<$N zh*|~Qnl~~vBe8dZR|leGC)#v)*-TgmQttxA6*zhqSk$2QE>INEtam|uTM)eq>YEKs zi16M8^=&}vU7#6GTUHGa1(GV_dKWk~KwIcY@}NQpqj!Nt z9@@J=lEJ8tKm+_(oN7eK2%Ku5 zCKRU{6E*^uBB&XuCWeH~z@-Ro1~FbS!LA5wMq*h7c3Eg*1O+HgH82xQ4UN(W`6aQe z0;e)0b5aV4GYE$|B$JZLi8Bd@IwX_gGm}$u60=i@GY_w7WK$DUi-|N5mr7*Ql5=uP zbBHt#w_31?Nx7K>lO|3zFcS!-s-)aZ>}tR!B&HU}=VcP~4{lXpQ*e6}DS6{o1U4fx zuOu}mzBnV1kYn&G1e=wZQbEWRTuQ+Di&8)vhY1;hM-|i*@D?XLr8_9s7p34-1vaIu zAhjr$kW+9g0-KRh9*-++BSjD%RbW$+6N`!}b5e_oVMi=g5^@%iIv{QR_~e4p%#`?~ z%o22CBf?FY9bay2#%RteE(~(#;f-bBrK`YRl9UWaA zLm_s!B$gzCJcOw5i%URP9f4(GO$;0w?Cl|;0#gQRuHkM$p_qtODIW8Xn?uk9gWGa! zisQ|Z*C}D$I);ChJ!lIU%;tD=B8C9KtJDb&@}e3GYCt0`@I#d(#!jN90#S_x+ld%A zN0lVPPT~d#P>luIiPV}#l1ztWB?o&$d!mxAk+DNWl!HmAiIK5`BLg&oR6>G-4M;V@ z!;!&0F|{}^6MVi=F>?0{DM}o%Egd6On?0nUi^sW66MSkCXlE5@FB|g8PSQ2P>_Q#+ zK=F|iXg9u-D-OFz(1CZA6|_xyHJAxuNG)7hNg8AG}?n(A!KALlJ!AtLUkK4nF?YP3HqQm z;ai=GHBCS)B3>KR9@HdZNJKJ+SVV$8s7+{LK(tLH=!4pX83@RhVOa_c@e=Xcp!T4K z0WnD&Vi5`Ypf;g~0r57Gpbu&jMj)VAMts=e)P_7o5aj7d>i!0TT979R2r7n_JV?Pr zPz$8%;NXa%5ZgQf4n@!*b_`i+&JsYz*lA-0Y>*v`=|qgO6RQhtSR73o5#!=`b$|w! z(G-9>DX1gkI23?}#?hoO$Hs9ez-2FD*c+NC?G4b=7}$LXb+}Bz)*Zrb7P3mvU^beQ zLH6P9-(hndhHCt#BHIu1wFw?`k=0|ABZx8{dR75u3m2*21$z~r7L0NPpJJ%v(aRBh zT2RUnWQ91(5lltMIYNXkY~=_-8?ogGE*e0&)q=pNzVV}!Bn9AniWsPcW@Ic1VC4vs6!vliivnEsBFYD7 zqQqf6LLDxXkaHV;vyfH7ay*igLE%B593i9{zp2Rf!(0j}pRk*YO?|vMdIJV&w9_6Y zizx1}$Rb$=lC@7RN(BwkV;Rs6b_AbQTbh?ySehDNP*UW8?QoP(dzF;bw8YY!lK7O= zoYaz3tg0L!H|c;$P^6N3WVDF`(gDRo(dp3ej?XWO2OnRL?KrF<67WOR5AcO_SWm}; zhCTFvX39>p3$s^2Tmwa!Q4U7X^Cv0GJct7;VP_PK%s?Q1i-oz0fq{yF3ur2gHv20` zwgAzlBw|YdDW+4rvx0of5baoc_zB(urm1C+79HUY6{Lh3m3LE6)oOyv{fV^=)DlDK z;o_e+Ce>Jin<$7i5Tg}L9e2WvrEYkF>J7A$AgSYAaBLw=C%EB&*w6);i@QBeJ-1`n zK?@&XYs(YZFF{5)A=_e~nq7>#_P{A8zdS9oI0Jcs4fw#Pcy9wkM8kk&eUSb=y6K?d z4RH5?Dz}+}=No8b1+;&U&2+;3d!ltg4r#@R0F-hL-7ruV04abRGK-=YR!G1)l7{Gd zVG3~Bi^#DsBS1&YqSyhp9-$7GNyw=VzgfsCA&1Oj*oToDVJ4cOdl2M04AuBeMYf+9 zbCK0UQn_?H=MF>)hZ%+2IS94*OhisMgv~@&4O+B_C5eH;3nQ(=Og6z5I#_iOHXYe5 z#F~$+2R)Y{Mxtm?A0Yfqb!#wk391dGl8#aBCMK5<&_URAWVgUvj+6_rnvbjpEtepT z$kH;GP~RH#T!Ll;3AuzAoychkNj*5lAFKNn>7DQz(pBy@k?-I zhBR}D8LcDEM2te7N-l+&OXV;{R1eV1Kl9 z1)vrnniMPp!{XS`8HWN~_9F5U%m@Q?Bf#!MsKaFva$3M|7P3lETMW&~Ap0^4 zjXO%LBdK*qiAB%^LrU|G66=U<-;rhql^b|ewwz#Vgn0WvWeG~zioYf&-C%-kJmQVS zD9fqkR+z!m4p&5-0L>JHnt8;B1vuUi<`Zlqk!CVReF1YnfhH1#w$R2G$h8wK{ef%` zQdk*?1)>1-J3r^R_T~2Uw28#k%TMtPJmW^SN z3~B3OQGm-{M1F!90cqQJ`DIQ15jerJ3y^dQU$+a{EMuE~B4lhFPdW8j^AudZG z%8d2K2RlEQ*m0$~)NLON1Z&Yz5%v7p|C8C0aCVoNX~LfK(++Z(sgkSMjou8awC`erbFAeXa*B*+7hF|-rfL7 z892!zmn~T2?ClMaL}57+7Jb;{u-Jjf7BGz%&Oj)^q8~X@ahiav$ll%r$<-i#;?6^a z6yh`s*+Q7Ba9E41l%!S`xYz0g+67`xlTk=>*hS>TTS01Div%xFqq#-4b)>eq$hHWY zR!D4gk!>9b?Jg4RpnlVfnwAsOVj$8!P~kzsC?xS23T7}dZ7?F;icvfhY=)6&Ftx)K zQR+i81rd!gBApBlUWEC?v}Z^#8FzI;tsn=vAHx>f_yW0hg2e;jrX}g2g=`O`Z5C3L zS&);8R0D$sWvJXjqm>=db{baW3AfgW*Jf{TfT0+aI8X{DoGR??4Kd^}iV2)5aN3Q? zSg-_x!;uJuIL$&%76eQ~R%&l=g5hpZxL{-&n3+T>CtxnJ6NoYySp#WpKTw;D;Mu#N z9D`#RlWiOr2{g`1$Q$j z1)vl;$cDfqA!BiHJ+Mp)i$~C49EKz|dl2~qrWG_C2iFR=4xt8{3CQt_+YDq?kWn-g zJ1|l_%p}kt8h(|yO+&Vmka@^z!PlSV#)CI}yZZ-+#2Z-{nwZC1SjGn=7A58u!_sb` zD>cuLD*%~IH%sm94e@&oG7St1Hlh^U+Zzxx6Ooo+Mw6n47#omdl6X6ib=ljS5b_7^ z^h&Z$;%!5ABg|*Sx)fQjy?wkJA!kM)%>@vrnxy^=crh(a`!gikKx%)6c;l(jpCQ*a zQu{OH+5=6EB=%>>wT*=S4DnV_zdu7oyNPLg6K5T`LPyHm1a2=jhpu}km{nos64Rd{ z&ZQVl8iEaM(#)lDm}05esN`U9&?1Z{rY}HTNPrB+U6E1I^%$1W#1F_-9JD~PC)}SQ zIjE4Wf%XefDpOeN5HuJ^xPw5NR`m7{%q~z&I)IW0xo4V!4@E^Bz=YP2qq;S?`~kZ7 z1?msz>6e};2UvO{pW#Z-xulwg-X?~58>1w`5owSnGcLcu;|T2tG^~c9DaLCia)N}V zd(=iX%p+h^k(HyjJ&_e+WLlWns7+41T8Jyx*bpMkTq=htsMbfTQK;l#aFij8C#KCtTu6Wn#$CHm(e)UX(8LeO zl@YW+BBI?%a!?^#0~ts6ba8crRllGri^_{7Xka|Fy^L-$;bt;XI_&KYkkx^b8Ok_1 zHc5MXLu6r$%#TeHn>~np0!spzZb7KQW&(2j;x+?WmA$)$3rVHkj=`b6o-|CSG_e4hQZdaYoK}g{V{dPOsuC1`DCrfuw7tC{ssu)w#V(EA zK17;?#Vj^gAyi>E1v%F7nS-p(-rfY&p&nEJ+2Og4KJ4+1ndnOI4s4M=4eCDZ*z4q6~l~dEE9P)Y{vd;Ia^RUME@yA`U$gi!V_UEDTO@$aOV5 zz2H>^X_xwX28To%(x$8cFCC$Y1<-aWrrCtsr9|qnw>Lml2@YlCp&RVd_V$LT5*RUx zT^hT6hS0PkkHwA0jz+w)vI(vH)Ocl6G5F*s#GZEQlm``!rkE|M!iv99a zvr}nR<$;qiZES$1V=RUfPRPV+vbQ%tQwmNr$VnN8yuH04nhZu_#vzZxPDDb5MKV^W zA(Y`T2RQ-YH3?avy}b#VYeC_FJ4q9x7_XVgmcv|$#|g;FA*njp)zyWDB{L0-ho)zA zlL;qgqI7`TqTVNq#-tQG7Qgc@unAjdCm zGmuq*dJRZ!2ibu;xuUxULnUt0knM!I%mjyd$ZC;WgZRg*!Na^@0=&?GHaoY$=7R|m zEFo#;5o|b^AkGHx7(<||lPhuu9ez7K5qI8!?E(|zSV+?RBiI%&L5@|>WJAgnB-k!6 zL5_up9t3q$9?AU=I$KY0-V7X~V1jV4f=U#W5|nzLff;RYZ%92uF-mXh8%_Q2Mbrw= zOhRaj4>3v#h=v`Jn!vkFa&l60GK+H^f-yBAk1m1sh!9c=YJs7e0xOYV zv2K873rrr=Vno%6QS6}UgvsNu6OldfT8&VK!yM!Uh1Voxg`id+s&7F4#GS3tyoOaV zUNey`hq=-Ox2ed=iEmGW3l(tj;tE=1Mw|1<$+Co`_9Uq`P~4uR%tDgdlayHnO*y2r zCn>X#*!Co;woth}Np zHi6wMq&OQKg9sZ4w!%m?8+XNnzbQ|#J+$%(a{UF14+3ptGW~*V6SO_);ppt>V?@jL zBu#99wI?wRC!#$`q$W@s3RNjMX(Nw%2V<89wf|6MFp3E@oiKSEb|SJ9EP)uH831+~ zLKzNokP`r2laLjH+G?o20a=DS8)9)8hGM*CB3lk~r3r3Rk(EPJwXX>+Q#930hoxpz zgNaDVL}&n|1cWkB%%N1T!I*NO)Qb>>rA$~v7$WI_$zibrkrZJX4UjZ~oqEn$vO>@~X{f#dS%#57Vdj}&aT$hUyk;U>PK2q*%8Bo5gL~Lu0@T$u2n#7sP0UVA z%1MoP%E?d8M!Q1-IfEdN*&wY5!r#&Z+XN=avW}$wH`p35L8@I8_r$@rf(gp3CaF&j zwhv5DW+^nSk`*>e++M2NUF2Ld$qS)KoC95a{iLeE}v&@d`LP5Oxvl zErTrp6QtULQNzLfMWELVwhT;AY$NS`hg{Rr%YVprLffnvMX9NvR%^VeAuUGLp{JIKEnsS#!pVU@T|L$;HUdDzs(o8xbnnX4EWs2I3_4l2ca2#1-I0|U(dcyp(m z{Bls00qe)1$~q_Jrsm{iCL-U7j!T6lyvo6$0_n;^R22mMMcmEqsD^@XUo*TY_pX+AIf} zBw~CURRV1k5LFVtQ^5`d6OhzJ+|V4V4OkmUs7jElLy!z&jLiYPx&ZBYjsUHA4s>Er>BKA{0ZbF8Ej!5nAkv6LU&ZQ{szLOF)~^F?4{ce6T0ty$uZGz2p55XRMK- z(>^&THL(c85>T56>3CWEiXfw2$r-6Br8%h>M!C8=IzruxaA|gGWqdJlI>4r8W|CMTsS;@x@8`6&PLs?Y@ivHM8thkdC}7PE9T? zN{vs<$;nSnEXgl&fFGa%IRVen)zQ-sl-lCGjS&u`gH1>|09%uYh+IINHl&I(Geq^;!_AtP4JY5O(o&~@x7(g^RNs0k{+OWm|J`H$c0G~FD7(iBx zHwG{j;)(%;N>X9~mo98EfYjC{B?jOzSDTo<~7OK#k?F|Pa1ogg&|Tq8;>kYpF4W+vJ$NM(piIo7zq?j(p($hZzJvbX&8%$z{RT?DO~ZY!w6Ems-dBYq6SMqVv$D; zLnH-+gAb=-q>#fHks~7fh|q%+ibSZ!2umXLKtmLZN-W`uQx$6HVkjdV#sst=g*5Uw zBoTp(UpZ3v;#Y_fwD^@nLlspKmH@@305vR;RS*tF+^X$C-T(O1ypp0y2b8f@EVoLz z#(N``=%j0e*j132SwxOir07FGnI6M4j*id+{gV=lGn3aEW zgf^t~j6A(UL^8&&94YnUSBQ~l@hgX>Ra8Y-k|;I>h%+HkWvQ7c;pchMzzUT8;OOQf zFDyph431SDYU)B(LO4<3R&8HgoN5%GnUb0qpI;Df;ef0XJeUm{mIjTU1iCu8BQgnz zx{y*V>a-sbX_k-%q*O~tDMq>_qyd_8(UoCIyV#YW#u=&_!m)-=JyM7wPjnIyp7@m` zg(iN57-5NDIW#0u6=4ZSYziQ?6RHd~^FMgBiw4F+$GFf%x~J*0!=y?hGR)PIMkptG%(blo(YWH*1)9{H8G;8BAgoW zYOpWP%uR`h4J(?UCrXrd2U44ZBux-IU_*-}*+H}>qC{ygI_sPj=`@GBfH>N z4ozjKim)UxYzk1*1F{Oji2=821L8^w0-7LpATm7x<=Vl>jNmn_1$rdo$Ty^Eg4h8|NF>=ov?fU2M9TlDp2p!1 zaNZs1Xki8mt2_s! zQz1$38G=hOQu@KVuo^RMV5B4>^&zDxB6UD*LZmJt_1S~gNtb|5eQ>~`1IzMblJr39 z7~G~KHeN!~JYJQE)Qv+KP0~3n?LtZMI4#1J_VH^#%>`K163!1qXtOWQPR-1VPfJZr zNh?pmo|3>T%|Vk*@KxaP-eLAC7|X!py~> zgO(>y6%mmeh|u8c5^Ugrw)Mv#(8<#YwinaaCD@RV0wY2SjPWW6#O4B5xC;WY*^iJ8 z3dUkMLfSPVAU?!DKEU5660bUt0+2%2hyd*Bkdh+uMkFHAA%5jZi4ea+Xo^APA^ggr z$q!W#mb8aW0cyfSRzWz`;Z|**lvtc<4DQzCr=-G)&Pd02??6{a7tlmyytkvPBkE2k zlJwxRfztjb#BGS7OdO7)nl&(gq@*TehLmfdtCI^nq)aeeMWiNT>_Faf2K6&O)4|H| zn+vH`DOi03wgZ|K@H&Y)HsSIOII5vr#9Xnp4P0UA8`3m@#2FEer@&xpxs{TTGj^bX zAF1FVaM+kyfco$#ISL%y6eLG%B?B$3f%zjjBQ-gjUcRBRWiUUX7cJnpLCRx@{g%nCMIA*AvYp^(q zYSzH~fgX$CkiuJ^nwelEBpjNEu>-wqBw#vNIev2~DH@AQQXDXfYn)D^j!n3H1CDB> zypGY=CaONg;&=)Srj}bN2|3LAlnQ>Nf`edTlbQ!=p~mMXR>bF*mK2o2ZxsSH>ygJC zKy5X67RRR^W-=tN;!}xKrosaSpL+X@)C!Ek5_EzpwC@4VZcsysQHs?(aC)P-Xe8tm zD%t|}1thRxO;%9cLD!5TIvR)y78EwbX&`7exVZSa7D11Ytl2Oa5#QQ{^_LIt&q!xr*H`h^OPKnjC+(6Q2~DTqvg?h4ZDD1_gr zX*f0AOobrCNRt%%l?slsPcEt~D9Mj6PEO28EXpm-DTz-mEh@su*!Q08#4Vv!Adba5rS8=f$U{fV~}`l3J1oI+_Q&^#P!v zI7t822-6v4n}gLQWvNA(X_a^#@+M#Tcya$WE;U@3+I6Adseauvtz} zFIF3iQ&Uso@oNRe0saUe-Vl3xgMiYcoXq5S@6<|If(LJ|LdakBrO-lroa22Komhr`z>3NAIp!2KJ@{4j4OK{j`?-*_p z3|Hy~QHs2^fx3o*(os=n8R#G`ya^Gv8ayT-5*V~DvNs68VGu$oC@o@FgeNf)sR5K4 zF_mH_N8D=ci%SwqQqxLv;`0kY=a+#FNWw^A0jK0sLQ?}JGs~*J~1afzbLaL zBNw!>EUzRpEi<*q0f%k&j$w{4<(?_2FxAK@hq{K^r)B1)rxq0yW#*M&b5x)!`6Zh?Nf_OGIJBb z$4!Q8U@Sd)Yj>ruZ!Yb|U4RM-=kqHQ@#OF3}BM}seXhj50L(w!4 zG#lID;f_VF%wU59icCNWAOIR@Iw zK*=%?F{FYHYn~xA;(?ZVAclf^H;B9m5u<`d$SEJgP~1r$r&8qfiJ=Ib+VCZQLOKYW zjvVi>1cONa*v&`QgPbn0swN@>5T}n=n~+@x^AREo;Ij)^CrTc`stHFXz^N9go_B_i z0maj;s;7gU*lK%1))J`jiPDZ-=M$v?nkuA#GKMp2YgyU#TdA~MtE2q zQFzhFbkGTwc+wlZj3K6(f*237H^A?I_#sS$L%<=5fh;!?sun17ED@#?a5YA=3SWr9 z6x-Vy;!}oE!w{pGfIHzS0Ii9I&uBC~#Mppbx0Vnivc327qA4&-D@f-T6}(DD~nXAzg3 ziPK7geaOy)`3@yRMUuCl|NI)^p9G^Oz zZbdi(!*p{exQXB~CQzRh#h-Zf;gQNsvXC5A`LoRFol`vt{SSWFX0OM0lmi0nEH6U>QlJW4=eF#)IJ32MaUc-T~KVrpVad~!x&az>(&K|y{_rJ=Eb zX?$jCNg8OO8EDA?;kk8VBO}cDbt)Q6gj=C|itxDA05l05?`>pEnp;UVml19c(6CrcqOqc1K=Bt|s>QxP3+{N_bOG1!+Dq$HN4;&dRWV@Oh`AK5oF zG21?|v?K$x5G5Hj-HpxRpwSiNRWihDurEnWhpfNC5@BFty%Awclv>0oAvjC~k6u${ zwE_Gr9NO6g8nVbN$Ve^1NXaPE+E^R_O6?#upy3)!6EFv9aI3-N2G9rj6_pIBkb)tNGlmJ6$Wh$5w8zs6DU8$XXGX(6SfUY*RixDg9Obu z?2Lyjw8!RA9Lx0498HV?IP3;p+=X>{J|ut%dYK6QxNRoJ-OvOGjbAj68=0CBV+PCx zu+%}o(Ku5TVSO;0kljf@7yck7LNg9Ki3u3oflFe@=I5oBWag%Vy$u_MLEFP! zOplFj=mL%dP%Yo(KmqfyNI(3)C+?YxbeA($qocHfr2mI4^(xc zbj)xpctw;QG_}K?3Z@g9Po}C@h_DRNcOxQBDBqQUNImeL9KGzdw>KbY6(~=kvz7OBhC_pMtge`qO{;{S5l@u-khL*Gbg9gw6xTs)RcJV{M>@llEf0wb{~{U zGh$2$uFTC%Eh)-OhHubu0GRLz2qY3TBijjbC4pgSkiCYuV~11|V73>R6s0ES!soED zhd$`YBPUnP$vqM^yo`~H(JUs)1U$CKXC~uyfDvY9#o_{@Ou^*} z(3%14ZXh!7!K)4knSjrBq5=^$@1X|*$P+{vL&zP3g3^<4guvWFlu>Bzflu%d3Qw%T zL9}jMwh|SD_^l?&2z>Sv3O3wX0`7f~8;CLn-5t=T2zh}|q-Gp;g4~SVUP5INtN}%o z33zNLD#WlyKGf?V7Z7C%%oWM`MXB)_P~EtFkEO~ZMJLQQXrY1EIs#=Lk$SP)2nrtD zp2Sz(K&>Up0Ni#H6*X8R7|DL346(O22!^!kaqb<*A#ZPQh$aIXR6y?C;gZK;C!zxe z^%-`jA(Y`T2YDh2uSv)X?d?s_d;{vM;_l%QqZqH5$dvA`GybOh7%%f1XROJ1uIJ|DoU)xVKP!~geEJ|una6fZ2~1zMBt&>Mv@UI_Lt^mg3kHE@SmqA zcFXXp2Q9|RNOaCfgtZ?rT7k}3r9n%kP$WR@Ei9+G8K7!MQ-$3WY>g#s<{+yBEs4T# z5AOCKrmHa2;xiH1W_arlrj0XF}6wr;;B}MrKl@2&fcS13p6fO3d#qppSlhhQf zraL(zuQw%1tv#sJEhs65EPo@yRHD^GZwA5<3W!-o$lX-9m4Uiw7zqxXhY@Dj8(`{( zDFJmdG4x}UFqrybNHaucu{m|US?rwYJ5RSkwX}Eg`xH; zu;r2|sX3`7skjtE?m~c&ps=-9A#cSs@|l4{*$bd#i#6zB=^7T(2G|20rVNxtv6=(R z!!UCUv6}-^W}lvupOlyrUz`t02gMGks*7QHKG+eIU=5KEpCnx)xT=6ygv%a~_aegV zRcMp~5iK=P6*SOJu}{rQOv*`3Ar$zaBOt)}5_)Du7`d4Ud>DV2y$YoJQ<7igK$%ev zMh=jiji{D}lb7rZ@^fMUX`% z@m`_!DqyyQih+TOfs4N>~hGuixYEGL1X?< z4R9`sn&hI=BxFT!KC&v%owuApWi381TkT*iZ>4l01G4s`Jc{6;LOQdBW4s-fmU zQX^C~RLtJqz|GAw-W8N|A?Z5a&CS!n0bKS&iaPQ-HQ>t51G!M8u|4*X><7A8%mJ%a zpe=?TNUb@Lm*WX5hnibbS&)j`T+l@b;4lmUDRTl92M$P8C&X#w8DVd4h{HRmr4)Wu z1mhWPg)~+x;fVsG7_XVgBb1ONNwji%dlQ`2gSu+ice)aZB%?RWOr|7US^fm- z36cU4`e5QXbd|!YZ6qC~1<)P!=w^ZZ3$C}p8=hb>i_nQKkKInVs?>@C(7tSp@WD`k z-JHDql6c56dJGegq;Ts^Oe;x+HK7oG0BMEDVAlz99MT0M7*?ap<2I!@wJ0+&Cq56{ ziN|UVstVjDf%ZLu?s%yLW%~F`%oGQ56ow+)<`tJFWq~G(K_@xmFbz!!ZnL1rFN2Iq z$}GX2X3*6TV;a@~Ll}f71!oo)m!=lQr{rNZ0wIgr6)?}^Fak*$yBVOX>yX>~h}4IW z!LAcDidLSQ5?>0s&I-f*sIu5i$jC1)0Tp`jxk#;igago|v6}%|ScG9cR2YYz#GK3& z@UT=o=pLg|%#=`up#sySq8xCM3MmMYizgHbocd6l4Ap`qr4;3WdW%T4HY9wIgfVQ$ zERHWqEz8eNMag_fq8K{B^#dfx;>$BjGUAhqa!}j{sz1=>?co=IIYfZ&1M>%GR7eK_ z)H!f+g!B!dqd7!fjY3T$!R|{il%qdAN$^+f_7U1d|pOcuB znp2F;*PzbbP?<*SzgFx7C3=WFr0xHJODRL>0+UMYF-LmEP@6!y{v=9I@YK{9oc|HJsyRG%mUR_ z*ork=Mk3V1$~GJ-2^4U|>VoAVEb6gmBs>a1>)(QW;z1+UxUXt;#-#$Zb`M<+!wDF= zVJdLijR;U^Dzi7hFa&dO3A++(qbxW~Lskk}dx!2bkd?Tj5UceV$_bc@>;#zKP4JnF ztO1^`K@JBES3*m-ARk1j2CcOznl?usr3Dw}UL3k7 z+))P#SeVTy1|WqnN|Hy^#L&j9Gg_Vi9e)FDnIK8Qk_gOQ@FWE@9Hs!5y;uq|SfIj; z0Qm))NIv{VivMWq_{v<0|`4MTVW=`10Jtx{H7w?PmH<9>g_?j z&&;$;P)jU6J1@UH&jG3KiVrTyFM==711$xDoInH#QlvHA6l z+znAl&@?QG2fv{R4WL>EpG$Ek0K7I}Xv5}*c+b3e-_+dvB0TL0bhqKw18QLqRt?LC zu=Hk#;SEe1V0uXK10sN778wv>5oQi2Rugj8AlXJ_&DhcdW{7|siV?*ydrgRRG=>2r z+l}mSGHpjT0#>5B_#qc+NVBcbDgjd-hfYu`uvf_~%>i9@T;LGq@96?FnX)y6q4p{{ zpgmB?COVja7AAs5P?Hlus}w`+RSFU_iyTx`oSl%>QD!rA!JP?g86MKv#o)pfEo??a z2oM?j6t$$o42>M%u}+am4n}y=2}LG@+z3q{ur;n29RLF9gJS!KW*C9*v;)m9LHc3H zfke)LIB2$v3Z~ho<`$GdN5N5@guE;dzasmTy!gz#w0wddgB4dOMU`W)pJ9A3c%})y zY#L=LHqpA^+7S)>LFh8@V*kXFlA_F{(vnonFmrT_0F|hqdIZuDqbR>1GAC$ZKRvC5 z_0bWj3f9JgRpXEj6sA0$vKHGw9KrxllLe_CgTox;<^aqokj@jDNyrLey&O~}7|k1) zd62FX0mXRDM7Ep=Q<0T}OB#4o7dtpYr$I8yQvDKhQMyc^l!n}Tp(w3^>V_d$HX}+4 zP?IQrQ3PE8GZ%;t;6gXNC ziQV475tj;ZZIPdu;($d3q+trmhbS8yQ%mBB(*QQRAh9ShH?<_Ss2H~u#2g!r@C~Tc zp`xjvT!kJwuzUiGUPFw~fvLb5`k=ZMt-XR_2soM$3UQi+oOEDL!V#s&NmUlBxs6SIf!IP zYil4UY|!2xpp|wGG_=Ov-VlrFu>1pyQG9CfqzOdkffVzd|SjNU?F0y(=Zo#4wqb`G)4$CgY z=pn`iWET-{2eK}Edjn8DaR%*1EK1DGE5X=e3p1CHIszs^EQPnh!m!5+O79DY8fb3| zynherbUFMUp`G>i1)x*WN=i~w9B_stq>P}p=Mk-hfpmg>YDIERY05x)e*j%zZ*Pb* z)=^uNgwzqpKcLD9tq83b0Han1e1|9*xQ@naRlySkQ7Zs*@5gRSb;@^(~z~H z&HKAnl%(c?cBI2*S}`g#xz1y8aZ0g))rv63tT}W z3J!aeKpzW12c5uthU6900?7cIZy`!>>qo>FJd$x3gHQ=N z%MGh*FyaJerU`a4G1TLBCvwh)nTpH9$Z83>6P#@)&V;B1S2Fc3KmSy!<0bt zp{I+3zjJT^tYiWuZ_F=IblH?(iv}lWg!Rw=l z(?ZyM6z9N#mXHl7njkAFQyhXb^U`xtgHnqN^7D#Q(Gn^oVL{WUkug%L1+SVUT{qZP z=tfFHRwH+sLDrF?&AucfvpBxA0CboOA$#l{A+t>(nYpPB$bO{A4Ewy)iV{j)K#>`s zlTqE6ESi+9ur||iEtxQZYJ8TNP38{0VQ7$Z3l`j&_x`$ zLk3hT;VT*N1QZUf#M_7BOql0Ph_n$!Gqf&p2udw1O)W0LT2z1+1A@v6=o)R5`~<0T z$k1;O-I-2?R;Z83HvsBu@CgOr8W^AV;X?*wRl!s++1}m|yD5+i3=IwZitOzTaGHUX zv0!Eqr5K-?D2a@)sVK_r?M-mG6<>xUK@Sl&ptuO;0fO#A(FG14tW_{-#2MhIs3EHG zngWVCV$vsKc^D`i;BpfQrh#_TmXsDd;BY$VX!vjwm}Go#Nn%N9aXk1YZj=@Wp7SFTdgp;R>!+-`-|X?RjHDEYvHGYq3L#5xXv zOBMD(2~b0LK-~eZVQ`fSh-3n)V(_RUSW=;Np74}=pfHE3#%n4{c?&D0@tBLE9$X9H z@DKiqhImcH*n#3Gm?z+cCt9)M2tJ4$6gDW@?ClK#5=%1T!w~1z1cA=BZ2$^kdzIqU63`9;3XVH~ui~R8&8 z91TlY5F%EFk{FiuMX80QnMJAKqll6rhb@724;1Bs*$%`7G3sbMHI1~-PcANqPt3`Q z&&(@HEy_(z$xJLsEhfud)G*4vq^PvGBsC=-)FC0k9U~$mBkG{hP|Anw2}G>fhG$XG zN^R&$6mZuTbRTYBdPxTHX&Q4$3k3#&R=dPQvPOC;(QW{rze8-P4PJnNNF2F|6?C!? zba*(i^)14E_J+ijdhnhf(aJ%k0NMmH8G1=+MZlULvh;=KZS%$Q_2;N*G z+XT{WM|L~8_9L4CS|d)Z^HCR!lcEdU+leno#9kbf=9D0&vLG`Ah(3?KN^wSFQECeK zLL~4$4E+5Y)HzvFbt4yN(BK7ikcOJm?Tb>2L7|EzjzGfDZX@VC3(&dXNW-hBqa{ew zGt@KC9@OlCjJ;rQX`s0fRJx!fhtv{>aPZ6&wA+f}W~kR-Jp+OYAq{bqL_=5)Y}Y!9 zwlGMKhM;cxI1Nie9u0T!SqB6oh@vEc9PZd_G?e7+=!hpR8xpGCNHhw2y8+!00xbqC z%8BzQC?6AUC7>IR&_$dr$aNdE0LMByfo>17KJ2wJnhug$1BCRFVk5FkVLrsxhQV$p zHr?^&;3^gM2wlVl0QUA!1xWP-tiDE71wKD3uLN-p52`fS7O)zuC%0i&jKe1M6MBeL zhIs@H7F!Wps!=6zY>`7#guWLFRT{eN8MFWryOW^`&{l|}8iEuN@$kh$*o}ir!-wH8 zjY3;Pf~o+|#4bW1*ST z6c)YUS=2fKa) zB|*Rhv8XRfEl!19Is&x;B7{XP$e6_9;{0ULs9H*VN@7VOYMLodEr~~0fX$qe#3D31 z!RP8ikD^6!IwYJ?t$~VRF&T1g35o#_AuMWP7gwODh6y68Pb)}`PfIn7N4lN`MF?Fj z%nXRZAf+%7bd}I+N}#?2sf3B3tAt)df}|2Af~*oW%!uqv1Rq0Ha(+Q2c%c^TCJ?Y% zBvA|5%I<;qeAi z3>U*tot%-HoDEGj86c$)0egD`5C0I+1s0-8xC#JBCCSL5^-wn?F~Zc5>rOVQAIy1?d=UQ zEJKbfY?9c*1Y7uGh8(ggdwUaf!|}xx(P|-?xF9JzB@LSKAZ$piBguk~cZc2Q0agPQ zK~Y(r0xH>HCP8^vR6zAY&4;LiiXp2mPA;k}fYrWG4zfJL)gTtKOcGdUJiM%d*n}>M zMMq|FJh(9k^#fD~TolxQcJg*{gSE6_Yfd31;gYpaNiE7OO9jnkI0PVThYY`kA(v#J zdy7G(8%1SVpsSOs0n*0E0keN#e2#D49rNC2QwK*^N959fKthXLH-pARP?Hp7_6C+B z4bT!CL>8+qP_jcGp2090p$If$fi4X#ln{zw&M?7n28L2l?nx{zF3&GY@klJrz@5eL zD6-E59|9Z?KDNan0INzTN90`q#A~nz8Jd%mnv+?aOO(+>tG6%7FG4;n1Pj0Tt@d}d%qy8*T+02_r+3ra^gT!oQF5Xp&H9cZb_ zEipGU2YyI2X7P<=EOw=6{zp{=_8C%(0LA;*l@c}&5mGSU6EYT|11)SZoj_a&6QR%E z-Vk5Ch(!*$Za|WT)`{@>9?-J);?(5QqEygo8R+T*S6Jx)8L5x=2G@9o28P%xJ*pZ{ zRd<7;%GiXW-iwI?Qgaxo?xNV!RC60GLJS;stUfm}8F`=y&P7*) zI#LI*3#1rT99nHUQ6LvCHe6gsTI(q zky{WC1Rh@l=Xh^9U*C$k_Pv{MM-7K9L*+RWnks??%wT*r*o7 zxgb8Ks?;+0q!>gQSO85O=;-rO6``qu^3ha*yqlRQL}yb7o>rW>snmJ`W?`@j;3fdwT<%sRpfWPe7f$y&(Y= zkaSI09RW9i(h^$l0iVSPs1mYp}OB!Q%+rJr+_l5oHImqhP)u!fBY= zAXQR9c6@$8JaipGd~#80VhOAW#3}``5}RJshA*mSm>h21sC^P_=A){>X%e&$MX?`c zr3pj^x}E}?kI|$sZGtI)`3l*!=yJGqqxuJ%8K^37nuOwGsQp-c3~Kjb^DeSDrX65e zY#v3Cz@ZP-1IS(k>qeEvVFt8MiJ=)Pjzd>kW?p7-21>|)t%QnW>MBbu%1o=o7Cxvl zICWwRBdAuG6i&TRzaaY&sue1OQzz6vSad>VFm-~4ArjMzQd4tN^GdLJ7^?z8=D_@j z>=IOiU@8cilv+`cUsMubP@0sJnT!&HsOF)nBV;Plf+R=*fNB_6nt&O&-NIlGEkGRt zyyIQ-z!T^BD9tnQmbkLiWYATBpwW25#elAm;dclL8pMnD2Gu4(iFqmcxqhX&NvTDU z#jGH$$cLiQ(@M|`3s#?@H6gHjAEF2}i-g4t%=sfciXiTANyP|Zh!v0sB%lc54h%D} zxdW#nh!w$^>3OM0(G0z#JD@1DEU_dt-aEC@feMSN!c9Q-B$j|?Z`|@hd#@b~9Sjkz zU3-H7?|6`s0dxxZWRv*Z)Z*eq&^}RY?x8^r0GH@=v(z3^7K5@lW@tyaA|iyKI{YSq z+OyRF6#HKzm zCp{m0%qN-_gg7=`5CdTY%;M0IlkSQ%Q_LT!c0q38xHkB2CL=|U01q8brZC{9BN zW6=ZN_=cQxA(kM7vFJ%HF3HSI1fAdpJ9i7sg_!bKOi9bkOHVB-D9X%(%@ISwAs$%* zi#}MQNAV*}5Ji1oLPJtv65;YN} z9Gfpp@PrT4Y1p)Z>NKq3ioeo|FDiy@KZliVklG9^0r5FB=RgZ6sB~&_3ND=xDg1ij zlSmk*W}r^8p~~kbr{-j)Cd21aameDaI|YZ$DR}M0=~s{h9@|oL(i3yxOOVh)7$%9L zA5xxz7MP@Erslv4B6MLCJ4`7MPA)ctmF7_EU^=0a z*z^|_C&q(Z3tLzP3mAkrK3#=q7Q%EDVofFBnw!G!*rsFV$p$c5H!{yS`fl`^uU7zRS)(M0Xq$pNuc&X10ODo z#U8jER13r!xG0JasBtOK^aNY@3k|DyggA;Wh>0*scp^j>#-j(G1X1;%r9f24bkyj9 zS)Y!YCQ$Xj){8@%IxszzsCuBG00|=W@(m`6#Wyf1ECG#H8bVwJRu3z+Fg3wsP;5eW z8%zOID>fAfCmxGDiYXAggYmile zMNqwuDUD(V)Gc67KpGa%XvCC2(Fe8(5@;yeFvRibf@dXEO=x)o%^`427~;5WD$a$i zVuxmPuxCM{C_0eM14&{D2aqs|9wdhs=Nf_f-Kc>Nvk5GNq7%(FumbEhf~8ROLTm+D zn4F(mP+F22Uj=VuVwFSIotvDRnOY1o6zPZsG(jxtp(967??KhW1VNYel@^tyy1Ny` z2c;Ik7Z+f3cAW94vQGxdf)<`TU{wcNFbp2;L|?ya2x_;(hd|@K!KZPe?Hi5vhV>>P zYgP~w9CWr7>dWH7A`*Q`1y9n;QqV<-ptwX&58ys1@-Ar{@eElPgVz+$oDORD(Ezt$ z2*sew5OKK-6u{U!rZ`Q;(1PSdWXOTgP|u_95Fkzi*z6=y%_dF**z5vQ%_dF* z#O!#`p%}$jZ9qQD0^Hdnq!w&qc`^8uGonl+s1|HuVti35abAKZ3Xo%o*95jBi5xqK z*95l1kQ_UR*JPgSv5^C14dvX@9GY82q<;ck zo#MSg%NW4kqNscz&R5j1&>p$@joik;8dnr~iVijr=^J>!QBd9y=NpP_!kO-{lnw?I zMGda>Mm>vg#tarKDDn!fc%hm-pjaWX7^OIJ=wlx!j!3kL(x{?~b@rg`{8(xUM@MiW zXNcT%Bu1&dy#=iEja*{J`+=IHkS-~-S3y`I(kKO1Ie^A4TM4h0qJ@DusW~8Ft zbPPQ&3yX`O>g*F!Qn1K^-Rl%)XaqV_8!@y6J8K7eH6QAwc~H+m<)HI&Xq!RlWE;p= z@rh|^nR(dLeFUg*poQn?XsLYx=rks53BcYF5^*$$Kf2m!pORmil#?2tpN1ucg7-~Q zJqqb)qdm?H42eHP9Z6UrxMTy*d}9qMP-=&Fg^-JT(A*6v+CU4TvDAIYhmIR!rbu|7 z%hfsFy(qsFwJm_+ILJa`xDgO8v|uqrJ|EfMfEtF`<1q%Uje*lTh&o&*A=kvPnj5>* zkyYB;n_#mKqtyU2kvP@(O+~h!7;}-;gVSGrW{Lx*tHJq{qD}@PBY=`C4Q)X=1`V4} zaGigKQ!OM_KsKv_PU3*pjc7dxSZIUN1tGPNIK-+7Z|WdUhrPX_t8+YtT8vH>K1KGB zLv!K_Km`RTL0}jMTKNOY_3&(tTqKdH+dd^fH!(90uYK@nLbi`&efBP{LGc81q3`U& zancSVWmDBmXjsHUMzwGT3Fy9PSdf4=;pV4g=B1+?+z9a{1?Jd;69H&-8pLpH=?0V< zKu&Sa&n+lQEiTT?&x;SKEI?|wAx9VW48)N)JzXKy72Zq2nV zhChoFrv;kFF%)CX-rkUqUYrVW*$XO_ zAoV%i{aEclsKaFva_xxUEM%4T_9ocu!yWBJsm5AuV9~uzvR-?zOXCa3 zwG$Llr0a&-T1b(tBsxj2g#S>?1OgiPMQ1f*5-6 zMKeytsPT-U3>JB?qywr4VTl5#Vgl|&i#M3j$f**;Xf!?c@V)X5LBWog)kLT(H9L#+ zvCQ7y0IOdxq7|aZGyrWmi8$V~wvOhs01Z*PLrdfX)} z@mh#5AK5uD*AsLUvL<``co&>5ia=_^5>N(0f9t7oE~CqKz0$#2asfd&kkf=@N|Gx1D1q6+sX+6zy= zQj*pdLfdn&K?(fc3patDGK;;-0B*-pWD=v-cd z6iov`vyrnZEQ1q>5M(W&@fcho0dflNf(ow>FtibA53zA+)jCS;AE5(}>$)Iy7( zQsmTvQMkbp0nD|AaN}?)MUGPpMW8@OT7LsG77?X{bPzTjIjo2^A6XA_Tw-+%M(o3E zK}02S`iQj&*>$AZg{%`L-C%Vfj)a3#EmDo=LeD+{EiFT>>G0S@LM=zSDfZAq$w7B$ zmlQkTGyr+yAt_o=%!lkkB-svPw1N7i*ir_(7@%G)jn)0svj>+?V0A7mUm9R_2TT>H z?~g4!Fp62MrodF;atqwIXtgm`!_XAtH50iQ!S7M9smRJf<2BfP3{r@@AjRoo3@t>M zkL(rDvRfUF5ra^h5vT4>@`28(@+0u>gqFxMG^jlro57FQSwK!J*_cExTSnri%} zB8LaenUJ)O-4)2{VR3|2B}R^R9vyZUZUFaFv@cDK_qyxc0D_|%vg$P$ruY7hT;9rVuLTZiRu!~k>l(e-DrLHb^ zz+)Ni)&L<*D0V<9c0yX9SqQn+L7Yb1sSZ|4LXF0mx?$=-Js0e$3Zp>9=^My`0o-mv zDz5_;#5dD9Gt??n!?bugJC2n^@CFeL_Hysk<%_L$s6D`8(9Y;S7CJr!K_Q1F5+xK zb{EViu*{3k9%Ow;xfiPztl1Z*N_%^QU|%E5v2%D7p(S4&Eh7rdAm{=jiw_(t2a!t+ z{H~H-4EjyOHU*nsRJm=7Qc51$>#y5K1fs|GAd z52rdvd%^=xrABd45A!0Z8A4Nw2>XS&3fk4#1)n?d8iLx_$6^eqQUfpKC-2rZ@XklX zA`rxKBqP;|2 ze-N}4XG(`PC^m@-J82TNpP)C0JZ7o>fH(>=KA0qn-1sm5SU2XH$IwI0B)4j$H6YYK2xPGm(u;?RUg zJoHj&Y(ve|vy!0y$R0O<#T>MH!xesHn~$wT!>|Ni&Qn~XF>Jw6aN<-)FkNCBD8id(;Qcm8hR3iORKz(T7b4Iw1P^NCG#Oa~yllg2 zHbzkhGap*C5vPeLJCGekf-T6}5G5#9cVR0+aVoU8H}Fk%1>cQ?r#(%~B0rS-7^!S3 zajt}NzF?y$so}V5_N)Y zgH}eli6upu6$I=9?O!COKtS}EKt89D4fghyxYGtW2C$r{NP-r;B@e7iLPU`RQwl1( z@j2Mh5w-XxtQH)99`VWfscC7&NKuES$cGHb!Q;*o<Q0POda z%-qyG(18Sme2-q>k){!BS8_gSnxMH4RLGF36{YmRn*2aj3wm=FsrVqM2c`VLq8fVk zB%~n%^$Bw0iI5hQwhLCp#57)r(}-GjVbz1H@WQDWsRe^=02AIvr1Hok4edf(^NeL+ z1mY=DmOPVc2x#>o7Cqo@6sY*4hx*i2;App~0g{0dTsyBNUbS_~b8O-FVM%;hEo z%tzJ(Dq(ObM=e_Lse;BhMwtVPO_<9JL5AQ|1&tvLc~D@2#}=_fIw8e)%|s3em=g`K zIuYyyWaZG9!D>B5G{VdVM+|XVh%g`7IYirltO*wPSY3n}`Gl33!w&jGxw;Q=t+l;< zygB~UtFfyEFOh+@=1`SjJJktO1%}g!QUV=vjt7l78#*{ZZ*m2B0?!!}W=^0~N~~JQ z`DFNQz~Xo^wPABMPLE-;79xhlxmdTNqXe=ARwd?6$iWI$07t*F5W-(?7wNB9LSgy}MKJbDPmn*~nI=4i+CB#I`z(n{Gq5>2{&=@dxg1ZMC6Cf#+$iu6bpnLJ^#+i=s z>O!&;;Tseun`7NXfhS6Es7JC1N7!K1h>^x{s3K@Q#2*MxLZgh3N3dw1z$%DoSke^O zR}fiHqJcWj+zBj>FTAkn!E#_3N|aiFO~s-UcN)T_11T&J=Al?-4qf^S_XN~$s0BC< zMHsPa9nhD}L5UCf<9YpHF8AMR;V>lAzF;EW-?qL**@ae*vDY4C1n-dWp_$?&W zkvK!c95EyhHxnLfNG)Uw-0DzU(g<}JA&im=ku1id5T|>Q+<~DDBL(Aei@6g*67F%- z7)L0;ViQgWnxmv4cu?YOqheQ%RCD5R9X5R!0f1c*LBqj*!0PEAcgG7c($U0pon;@P}(3=Iew zbe)MQDe=2dAc{ zq^86N`MJZ!fk0#W$cN&Sq{rSq-VM94ppib5u`i<3L1M2YzoY;;iV=Kdzk@|#UPaOf z6T(oNo|>0hlvt7q4Og&!xEO|N@PZ3ur4Rx8;*!LolK9->bO*Q0oRZWcL^z_%fD=+? zpPH9K*cAMV>=R2$5|c9$lX6nAI0hwB2`aR=H^lT0%B3LKrR|GT^HR`k2Tfo^xFXiB z;8S9sTv}9=npYBEkY7}SW{#t)lOyu9EHO&$^UL#!37CUViG5~Xa#1`)MPgolX-Pb) zzrlV(EHWTcwS93a%!fD)jrT?lG2)bi&CN@#C~OpaV}Pq;7}Og^4(RrfqaB*^ z@YsrCCBkEn6ib3WdwT<{UIUdc$jKAGDp2ai7C;yiD_HG=K^Rkh% zKaL!SQz>Xt1PE1dY_bbg!N-c5-$Sg>O#Sb{#Kr_e`-D88CckB&3 z>1r+L`b@$WVk81090}7yVn`aG+#O6>a6t8vU?XhC4f(!e;_XDy4Z1dya7cnu3}gxt zbb}sfDGiF%CPV}*4kJjnAI15w{7tG0Pz_8`@62HTQiY5~6 zI)V#5h;A_cX1LQoy3wTx;2N|Vt(-VK|qy}hARXfw7woS z|A1W+X0KA3mswbv8edRS-LFY#LB=ok^`>g0-?7a)}*(Yi2l9A2HE+li4a zgJf?+#v@KMtn|XG8hX_+fkKQdBf$1&r&c~1;f;xZ5DFpSPGcsI))j%TL2GU1SFBG{{Cgg5vSVj*&f!s-c?0|Gr6r>;n zFsuh1+=DxPV^rUGq5`HCT26Z;7H6O(caRDk?|s{(Kt zLs2**Tml{$qMa@F_6ArChZia!Ik(chWN_hVh%zQhx<)*9fzlO40ftN8IlD4tQQ$16I?)iZUN( z8$!MtKsgk(fYyq{Muz3M3P_a4yq6QSASfnw76OST9SfT|s4Mw#<&Y+Dg(6GcX z91>3O1d7!G5H+x{L^A?=SmICwZOb}kmN=CrXQ!6HM^RmIj-(M#3yB>pil|?NU^<#A zc7WzV(2WKKDsnYtfZ;)y3Q*aDt{YZ^!DAIeH%tXIKAbZWGxLau3q0x|@qng)D&Yh5 z1-O!=h54Y-aCHA8hrJ=1rHI^sA_0mJ)Cv%*G&IEB@{3TGx!~x>;Z_Fju|U>$AsGdB z1ac!7G)js`6(rVBZJ~Ok(ZG1n+9M=y!;&*Jsn{E$S_z4<`1s7+f_TstS*#0^&=xPF ztph@pC1RNZssDM;8BcdF~deB@GAzDtXNyUplsp*n!+?d9`?m<7>Zi^)I3m2H9j#fB_6y26T2Qq zM0JLI-WYkB?NjpO^Gi!WtBncThVTw)nowgFt@0)uvv@V2$1FC*IAa!vVnocMDFDY- zxCvA=-Z>*RIU6+pjyf>`4M(UdSj9(_-gtAUW>;`ZfcIHI`2$hHK-HjG08#^*b4IRh zz?On$bf7b)h7JY>D5(;o7IDC$8mpo=v?HI7nfpeW@5D* z7N7|fV_aKR3k`|Y77$R4w4nwqt%BT(G75voBxH5*<~S6B+j`(W8?>bjT_^2}ttcj_4%CE2 z*{TTI!-nh*15{gJ()M|&eu*)EO@-US_yAp=D zcJUF^0Y0Y|tLaYQU4n+l3k5+3(-N!JKHeNP6@k+*q?rI3s7LF9g0c*bz6wFr@a&CC zB_eUcvNj%-pv60w6F1;;KHS7Pu{hNMbPyfVnnf&TVXDSsDySVwn#mYCFot%pxCxw+ z(F;-ZQ5}N%panHZ9ohf^ff&TA8YKp?sl*Q6)hkuZ(&3JPxip-o)N9;kZ zTtu3{ssY>x$S*BQ2CY?spHk!F7#tGs>lz&F=QANFlF`-@`+;@QtCz?4nBCu<)h7-aB zkV9}Ou`eh}EdZVEfnhkPtqN`Hp~fhY>g^K?NHUmM<@N>n1t{STs>zY2xp7I`Lw1c~ z_!ALMxD`PC5}yWXd1IJ?Bdj1^B3c(LE{N6uFR#E+LbNt}djoVIV4J~#nogWzY-Wbp ztAI{$%1q43tV%74&&ezg(L-(bc@&U{CHw@fK11hi3u1_v=&g`9&}h$NR z-rf|eOEZZZKgHuxYMTq~TY`fG>SS<AUC%NsTsFlNXSJHgW$@*=ENuFNtqzF6{NJ2*lH9!+n zsAnkLjq!=a@z8k@)ChHS1iO}k%!1AJw6@N^AT>1`CEUSHZD^`ON(}_nVVVT#06@~G zAwHup6yh=ql4J-Qg-{0`txc*dNiB}YNY4wn0mK zETc@Ih`=%4PEa+t^l-qT3|91_mAr&iLvjgLb)eb>n(+|Eg0nCY%E2*YetVSRU83jGj9gL>G+D7R0|EhwqP7RcbNhHN51h4#gnRjD|QLK@Q`sLtNr1dAU* zbsMM+Y+#7(Xd+@YfDRSF9ESy&joc+Oz+oIn4IUFfnHO!^2A4qyrI4OpKGs+O_n8pU z3hv_JR|y&C56J)(+@N!pkQOF_if&4)TZCJ{n+<4bkG;JCR^!2Oh13VeSPn{(F1)rt z=RKjLPUy=+aodAcpS`^yRvn-+5|pl>t!x6Sz~hnN*-@;9ffEd>^*APNNz@KGa2Km4 ztP7C9%L9l|ZeIdUs_~$cq0$peQsc`(DHf|nsNYb}5+YYS%wEu;*Od;q?L$gv$fJ%> zYsu7YA8(G;Mo5?6z{$ta+tnxuHhl+9@W|D=J#H2D8K5&hz)QxU=j@@H1u6rO&o(Aj zxjkfgJ?zXgG#8?qN}OW*5Zj1CFns8HP;a|h5;?j!3!aYP!5`UDM99x zq6GvEE9}J@LKzNoVCTysk8WZuAdwYtO++zIv@Yag4vQvm=+mp1 zqp$tYDgwh&EL8*!HTL!fXfmL@fZQg0x;qmpr0yMl%3fh@!Ug;Ds|@ z#i)fdcBMEAXFSSrgb$)*f_WBeFd>xL+nb=-0t#o`eOgi!$D5<6MifTQLC!`dG%Si} zVLnPN z*g??+lLehdfUFCn$U)HslSLFbDAM?g8$3!;3ma?-aTYZ=6=Mw#MEL5?O2Ma=x zy}b#BH0~mXc%|{?C~8rP7n-(ooP(UHZa!x5f@%fc;suLRMDc137kdNe{M;my z09e}vWEXhB7Rum*p##!n94T5b#>!A_19jSv%K`MEG90SWixw0gpqq)>gTiGZWW)L4}J@hSK=xIGR#w9bIz#kmfsAKigbTRbK^{GV8Gx;P zLRJSVEKytlG6`B*BCCU$XM*Y=0;=Q9QI&(sOz_~4yMJ&{l5Z2YAy zA@!&wE>6`rOI`dr?ClLP6=0OUxRv0J6+}Z6nsso-A3`N=)3BAnxY7f%T6=pFOvi&# z4YX`W*bQ?fvFZt#jO+^H%*Li8-W=2UpxOg!Vz7s!w`;tikwv_dXGoA^h^qr!1XiCI zAngW(NE(@%p(!^qHA7KupInp*nuSDZy+dahgCPq+X;5B);)2{mDol{O7DLqa&`^)h zFN!b8D9SH)7}CK%biD!EvRIaxl3G-ZF9x9NwkbPS1?7+#%8UY?Py?RNrz{&Gt*0!? zAIYJB(E{~OO-@eCjyE(jFn|@7ptd@4^A^1cicbq#+ZmryXkm}qc*dsze4ii|*Ft(t zP~$*%4&qb;zSR&z7F2O!S<-2M#Vu$`@tB9L+QVrgvSNFC6C4)fuH1>$K+tSthrj}q zfOC+wfL1l&a0}|n20V%|QmC&>MLf1TgHSRhs1J1e1WvQj5*2R4APPZucHl4zEzQ7! z)c}`~XzB@>j2!;NnT@OiGXCW2Ld*GC>YI*M%Ai?*Ty~+BF4z=8d(CK4M0A&l(gBV= zc;JGg7I^{y$qbkrI90-RV02oLbim}W*a507(H4RuX#`t^P=ZB2auPvGRB&g3O+Z!z zOGl>2l?ZqUfO>Kvo1vM?szeuD&jyMhOj*6U{6^ zOI6tI!JWA9sE4L8>?(*zYNTkiw>Q944vul;goj&+y}co(Bt|mCtpvCISP~_sF<_S> zRN^)bIrYJlC=TXaVdtTPAt+yBu%1qfwn)P20A#Z zkrO4FSulCf5m=}?F_I&iPMACnI}ynXo^a3%09%bvhQl1>WQErxWQBX#pesVamhOA3_Fu`oomRVJEKihcE!_G=wr7<{&34)bxjD60$->`ZKnG z_e*G${-|#Qmh^{a3I6nlO)*mXLz5;l{Sl=L8iz<~!I6xf{;ZJaSs_aLi$|L4 zq){1YYG_0QTd=1?bc+b4MXVZ7(<8bP;?pE?IuUV;tR9>Iu%u0FY7prYSr%6s#ij<2 z8xV;QJ%u3~1a>Y$DIW8XlOjPAkriW%?}G|BW8`rjAnkCNN3qL7Lkq48Eihr4!EJP0im;l29DI08K~@Gj!op5m^G7J50CF~l zQat7%TMKiY2`&?n6~p`*kJKXqS&p*w32YEH70}#bj4X#WuV7Vy({4oKhxr8(U&z*g z9f?qg(=24q5-<%}DJ-nft;C2Fn3<5!Ca9c%xyVi+%4B2>h%i8FvZI%M#u&v-L=*!e zE)lwM#U-W+oOUCk2<9JHTp|p?8JB2EkUdMlG-RcSFh@0yU|bSVPQYAbC%{|_OC?xM zM%DliPxOW~W?W)X0gp>0IUI3`MFmc~amFQ*A-LiaT?w*hVW9&}8TgdK!yHW!p|~WZ zoPfF5Tnmj$>?R{?fQKh~qZBhPv8aH@C6XMDxWu9Yr`usB<1L_`oQ2xcM5T{wlK}^6jWTlXp#rOqSp$v~ zgw}Z^(Ej#zMXtg@y-lzNtSJbO$=Fg5Hs$aXgd&MG1z}MEk98zD{3!^xLY!tH2Qe&8 zpy?6aG-Rdlm_}1XCTFL;80nvKze!>Iv1 z1>sZ(H5n}h;ZzPvL70;0DF~MeP^_cNfm0B2us~g8ZxBpSDJXWZDT2m2Hd9Tonu`Cw}V;a7*tBy35>AQ+oj$SRRcLoUz3ZbNAtLJh*E2q|2U zr7@d`Sj>Pa!siY=VT5cS*v$yF_)J6&0ca|)hldr0naHY8VA;RY=&CLSqF(l8AUAQV-~$T~t>>axTofhG^zM zWI+c3BkMv7N|(M08( zPb)jnQX5ulaF+tOl|xerg z3dAr3>_~({oMs^>R05_UD+OJGl~|ORlaq>+E+JVDW{P0|0R{2qST?R8ZCtgFH^;TB z16>t-$qKpzd;vD91m=oVRC&-miJ=*M4;Q8+(j*HONyMNqrX!$vjVFma+?ZM z0laa5MGAR71FJM%H^<|3wJ~zb3d3;Ju@r35NF8M~Y4olgnl!W_3@aJ2%i;+$sD3=o zM^whBhNBeNs8SeN5hRUgZyV}a;8?N*I4gryLCZZXYCz3FB1%4zbRwThfkPv>9-_fE zZ$#;eblx=m-2kb9@!3ng{W!F<1$w#$RtvBkuYpG$;sgsUitry{K~Mwg85X#e<2=NI zfEMJ`jI?_TlyT^qis@%JG~Q7x#1h|FyoZkaKi<&rHsHGGEJ;=d=a&-VP z`rt8-J*>cM}x0^cPH5arp1bj_nJmmUmyoy0LXCaPxAXOXG?btd1Nc~>OMHjdf zLF!&iStrQZGSsVhX=DYot%l8XA{uJMYlGxVNSTOD7hNkiIy(Sud;y#7xQ7>Tss>#) zjn;JqmrS53B6}6YnJzSF_oAQmLIW${XTTt`x4i*+SPWDDBI*cq4`Zzs;dKLk)u?p> z4z)Pz0wUCdu98Mekl;QgxVZ$$`IrM5G;WwcM|lR)3D8;wo7b^4k#H+RZYg1^!kRLW z8oh*cK+0!Oy9uXC(Hp|Or(DV8Y5p$0j=(UcI1Y`n@L zaRQ1v?8>l4GajY(#l@*c@kmJxO|7$I1WJ|U8D_6i489E$bm?<`a$-q-k%K2}a13&t z7y7m6w6wy$I3v*z;rGtkL{$Q%5r;scsm0*O;ZK0_M!9guuRKl_pL8H%Mi@);I2 z@H6tj(T<{knvM7Z=oxf0vIV`gK=KDMr3Fsqkdy^0EijegEG=*-g_wtwQV|3C1Cvte zWT3A!v8c4VxN(`hqz5yvQ=x0A_ ze#d4nRfd;PY9{L2f>iFI7>=Xd!=eU}k|8+`NeOBeg7@|ySCPgOP!361upEbJD$X2- zLn*{OL`p@PCLfTLN6tE)g6fQTs^BK1K0jL2;$*3fnG2E)NLv>h_Lhuuc1qfZQ!H)6X@!lw-k;K)&2A}~+ zq#OTeV>oDrCbKvL-OUl?IoTCybwXNZ9+eHYPpv3O%uAt;TS3$KNTEv$qwNb)i*id# zQZXDH=<0}E#1c}5n43e%wOH#E_{1C@rJy)Z%!w~bEiTQ0428f`E7VNnngnHe1~yZ{ ziXrs~>Vj7AR4KAY!F35PHHi8IRR!^N3bFdo>J?0FG%VerwJLZn3tqF))dleS1&6Iv ztz&3n2cn)qHy(RkgIyI$u0mA;%>_=b$cYy@XW>(hk-M-e24@;*VnEMfxHZ6Y8Pa$f z&Rm974N5LUQbAHKBT64;E<@8c0J)5QEf@-WmZuPuzZg0 z4`TB<@%m8mIW}$d&F6G>0W_cEw3UkaoJMxQ@;RpQ*z!3pRY>_9T?v7Fj$b)iKF6UL zcRt6b!M-#p6THC*BO_wH&y+~j_L+H^C7Fpi@ku%P$=MFr%|M({Sajhd74pjHe$OMs0g8No~E1Ku)Kh5A+}tADUUM# zhmgja_Tgjcc@Dw2ltRKDJl=<)1Ua>XI}&)5!F&YW&j%ai2W_>*SZ@wH4FX*ew2Z?r zf|>&}kU=ThSOE!3Xm1Ob6*O2+jL78RSQ-!qfZ8%>UWPVh5Tyg+U=mo&Ba|SO>uAP+ zw^@M3sIYgE@Tx{D)v>EZPUfgxBs}Wj`OpD9HG9JMxF8jbu&hWxHQdyAGZUOjLHlhG zfeJI3cpbq`{t<=_DBEWZ0-ccWA9nJOFe0SDn2-V!tO_7`9K~{YIZwSd3@yw@&fVC} zr&rddr|r;k9nDHCbrn_>SkLc>_eL5Iwa0S)2SfoPFXW-7Btmr^ic3%xL*furjbT%S zTo8auQoIW73lfWqQC$XEaun}vU;ydAK{u)pHx7?9q)h{pAwGvx4H(Q;Ule(^DNwOEOaPN-~oZOEUBG zoWb222Si0no@VIy2(rDP+y=51Evo?WN2iF2y0@M+uIwWx)$yH8*Gx;QUUV0I?$|(CAyJS+1r~S8xCs7 zg63Wg3>}bF!OS8?E!17{t`#LkiOD4trBZSYK}xOYMi5T51a%-%FE*t#NX0a=2A-O+ znGZ_Oj;5V-(VHTFz^O%0y3gf9yq8wE~y$chm;09_do8Gr~a_8HkJY4MQNBJnwiNr*$< zA|aHT1*cREk!YU8QjzdUiguDiVu>)l2#lX8U00pxzO*2#RzBwT3|DilGA~#Rw#hq8OkBC5>%?G=IEZ z+zeqA6{tx?<#rDZjE6P}(M^U$0cK|&uS(E?lt@7UZeoCp@<=Ssa4XGA28}{E7@~|o zAe)Cry}i95vP#e-9MU)gc1dimL2mFsQ--|(vdLgKAgi*sH$j)j*B&B5Ej+Ez@=jWB z7dL7fk4P&hCW9gvlwGl=72GNzu>+R}hdan9{Aq<4^^mjzSBWjHU`S$f4RR_#PAhQD zU^gSHf}|A`c>-yLkXm?JF^o5~FffL%Hl|VOLK906=?04@Kv9k}^$=1Ii8VA;;8+0} zi$5h1uM3i%(9~l~RXCL3b|rG!K~7<427!HqtQL~au&5%C+KAHuNpm4S!SMk>@S$ZI zBskjG08MRJ3`9G~V$h@?YH)y~B+Om~xu=AC1P9u*!P0*ss0Y%-gpf%6B6|Zg zHxHPDKvyZCh7Cs6KyxZg9!IDmCv-{}l z(7GEqJqlN9Z*PdM2$o!62?3`9d~Pv7P4wt?z(X9O4wp&DX$|Ha?6HTe(%#+#n|;tU z35sWktuPabQ;pwLWc!IR7g;@|)C~@>FffQWG_Z(w&M(a?LA_Im%3W((+Xc6}#)3V8tOa!K zBQDp16hpHMvKE*vCU|YZq7glXyQQY4Bqb(i({S_%;Y1o)hLOgx*#k;{*y}0$?nBXs zk`mBu0Y#MqNIB`roLr+&(mA>zu;dF%D~9+y3Yh{V>_2RY5Gkpny8#>~$a+xHIyTi< z(k#paNQs?Do#?4OAhRGfCo?aVE~%YHmSLoJZ1#YXA)(YxP#;QaKvxZpS&%iPr*?9U zLP_oDhTuuO@ZMre==upm8Xgr*s-w zgp$g!*#Sy=_)<7QJ@D8^R|$?qkny1K!!dgRDN0Gu2~WG|dT^v$T*~mf8aeHurB`$V z!M;RR4^OMuR1!|7MC!swqrQ&L^hu-Cw+J(hqS*mTLx$p6kpX0k_V+t)X@Q0xkiCmNNE;s3eG|fLj_L%AQx2_i4<-O*z3qjkMmgME%qdDDOeang z%no=;A>@%VQq}Aj?}4NNob5sF34HAh#BxJ>d~Hi2j6v};ybd72 zy9D(>$_{5I=XfMvf-InN(Loy9Tr1yUt@<$F?81{hBTHv zr#RHuXQx)i7Z;=^J76dPABy3fS{d(?nwMUZ5g%NTnw*&i-Mr|494r)>VQ+7MW;HzH zIDyWcan3BrNG(E}HzZmI;?xH;Em(Kc!cWG-s~Gjn2kc6b_tK&q`G7|`BrcLOQd3HE zQqkiBt9!u#Pm~6GdqXsvF*+YO)eXEqrmR29>->l98}AhC;Etrl0O^z-n6!suum@~d0xS>Bh{*at-oiMB3!4H+A&M#k&V&>lMv3TM zgOA^$f$?aCD7p=}3sI~pp@k^A9I1sU8TuiK98?gZYqoa`BdxVZvH|w?2FQAdC|HP7 zZf|dhtPqqIQFfzXlSC9o$g=ngBit%c3nMJ*a27_m)Y=!9Bo>v#=N6}<ymgv1dzZz6{!w2Mt*<|Nq!XvvI4A61KH8ki3%SCEYbB|hW=zyKq*L9(Dy16dbl zv4Kq%t6i8&HnCWVP=wVC(xD^7#wWCoF%pg<84VJojxoW&0M#ZD=-o<0Z<$2>_GPI>nQ4{rxrxby>kW|A z@qXxbQ(yw5MH-NwQ)y^yUK@AwxEsWURhfs&hBy3$t>}DaWw6`}wcQPnEaQBUgQjOnKWc#5tHeOdCs|T$i z$t(c%FJSo^o5;huvLnWRO3H&;s zA&M3OSOXM?8c2%_Lz3#lgtV~%+8)DVIH}Ds@{B;FMl}8S6C+;5sA&KKR*;%XDKW_2-Tar$hCkgCp#?SdjA2dB(*&pf0%5~!JX=wOq5Nq&4rY6YEqLu;GtQ}e)=L83+qbZ8zr`UhG*mza~2 zpPX2dU*zBlIid|hf*SOOMh@X7PKm|f8zm8I45)7~)UENLwacj~Xz2*k$;GM3rA4Xn z$S#M@JP_%2T3Q743x+2mK=-PU9;!IC*{7u9ieEz`==t#2Vvkg9Q2)dm8k-qoc#72J zDp3C;Um6HWP1H9Yue-sa3b||9&Jj5?_#*SwyX% zGQbj6bg!W;%#vaU7f8;7kRT0) zM&P5bp{0)jQW(>~WP5v4tgg)@$+eDQ*j!6}lkM#zpcX+L4QdjB!ps12TsZ0|ATet3 znTVWz@K_91W^W&FK!VeVQfzM@Z%B%n#3;sYX1q7p6Y#+WEG9vf*xSb&<8%|MAq3Rf z+s7LbX%Yc-pq4ILp#e)5kn$Yl_HdKn%=A3a1<#1;I57pi#w4K6KDRUnw@uI@8k8RG zRiNzz;_gaBIEi)^*cTU;CKjdQbG~C3+3u!|;r2zTW%0$ONw^&y=;{QDU5dh-wwBoE z=BLEtO=-|{V?dE7Xlx7E7kFcWYQCVMEnr{Z&0?-lZ%`Z;G_(a&-Wj1~32;*%+HxRR z=#in>-rfaT<$~{Pf)?Bc;FgM^0rI6igcTAn3#AspYb#i#y}dWFE+eRrfLUPsV3j0Z z!@w%-?R|)K89{}}WAo7`G7%umKL(|9s>HbfMo2X-?y*-wOCTi5-RDfMC$i1*$3UoXQM<)g4 z0wos**d0iS<_lK0QNw)fE=OPRg4KGsB79~*`}?RJ2yEd9F%3mIK68;00UpPJRN*uQ z)V?7Q!q8TbLlgscQ*h@VL$ut3)saMK$8ImQ(QN>-g@6~(l-k?7Lkl=)5gO>Xhr^dc0HKjB;H9jddC%+u6wgffvA>|{u%A}y(OIu6qlS|?W*bo8AUF7)!xwxmj zMfS7^HaLc% zgb>UIVzj``$38w2fu+2M8Bc@`a48+1mXlc!k2{1A2_76SgjIt~EiQ>K$;?fS&&kiv zE=3QRU`KFoiNv8iP?ZVS0vpbUw!KiA{b+KKc?$;fsf9=Hw%+LiFcB7C40&86uAcC6~k#slh%S(xp$0Pbp4}FDS~)O)W;T z1)e(b&b{O6mV+DzAMr4BFpT#`y8nA1tj6zOP{~7rS5R^@)MqQj3aHK_v+;7onFsq-cSgpIVxn zlbJ%Q6-4R+m7PegiqB6;0ePr2rxdlAgXaWLp2jFl$u+?~F()^_7*rVNm89qArWRGk zLybas7nI77ib$yaNI8QdGwk#7i*gflGOJQS{>JSJ)Xa+>uap^LpPQdog4O59=@!2t zdwT=le7N&bR_!@DI)vG)6lWxYP5>+@DRNLzadrwrQXP<3l$Z;TZfMg9eoHy^4W_nR zK}iChK9NUksO)r1d#LRb$S^Jqy?|r^4crduw9(e_a2xFHEs#<$N_vM4wV{rh6RF(Z z-jXzPiBxW1oLZC#E@vEYn~%Qw4tYT&c$X?9Zz9HzsB5S_xX+KB!GTn2A=^TtE_-_qTtNdKN5s0+jRYt7Z2c(-1THS&(lR-iU zJl*948ukMXY>;jRw0{B`!owd8lv-pDTFXRRE1-U%y+z=)kGT8-&J~n~7St=Cl~Xje z2jr9Zq)PfEvfR=f+S^5vk4Vffpe%-R2s9}^BHJ$5YE{Asfr80<=%Q8H*a7uHd`U)T zF)>MvVt>%oCS>2l=YeM*XyYs7jyNQK!2Y7WouE8al39=gzH*{06+S#dD0Lv()w!iP zWEudf^D;{^$+9&u1+)@?G_4@N#wS(A8__snLW&C7Sp)NjF@5|&GizY}Frkk>Xl4z} z9~SiS2hFTOo?|V@&n(W*!|5R>N8~N@hLNyU79bvkyY4u!y&ZL~Zs3@hPAq z`SGME&~he3Ly2hh_KgNz z9v>hr*-%iPB8?Bw-cHae5zvB-cmk~oEOCg4kj%U?^36bP!K0@h+>LnbDv4^l;cm)f zF%(qrKr|3E8@XW%EpiC836Zs+wzx5!0?IT5oApF!BhnsZr@?%K+_=YS6S78d83>w^ zfG)a4-e(J1ya-tdV}M9Ypwf#d^`KdZcu>tntjWctNyMoKyBRd~K&;6iHxs2ETAm;l zCn2&GJTMSJ0VxOwDYgeM>5DHgH8Mmf1tnT&)rq{dj2NZh79^T+$dw|W{HXRlUhL%RerUkr8p`n1HhU%d}b<^$BlZjsXN{mwboa9_YaAGOGk*YFc zl-d{Mm!}qiT2J^*MKYEI9rii-hVnEYPSdNhXwCCDJ^!uuotwE z9K2~78vdY@8qu799OP6n3+$pK&~cDNI0uo&Kz5U$3v5ejML~XEYF-I39!Ir_M4k4j z6{*RkC8^jgLgaVk0a;SCfbTy5<#?nt0~+TBC2{O+dn{oKSucd59DMf!7IRU@&ry>l z=l}zx{pq0VEyy$hukDb|6EwTwvjn0Le3u5AJ3uFjBcG69h!H3-6`&geFeE_%j5MER zAMb`!iM@T08~FG}S7?fh$D$OxE(n^@K+R!rCkB!1C^5p`-hiH4tkyO6LKs zC_{vXA<_UMk&Y(8V0(K*Lg4_5a#+eDS_3KJ07;WDD~JnfkT)Uvh_wm1$4r`C$U5!q zO$db=#1!OHQnkZl6_-Y=`4hilV$1}kD|o3x zQoh7vHwlKq^CWiTaO6k)ii!0%BtOAY3^X5NHyV`2!POo_4>2|%rz+y@K-LA%1-RWr zDBqEwlX%;Z-3ap;G`|tF51U@lO)zMcGw7ONn9=d(gvtERLs+c_5c1C1&Pirp6Z(m&X?rQOkK$G!*2<+{~Pu z)S~#J#H7qT%3KLbzqmVeh~`gbaXkGk4G8k|bq$7fMvViV+?^OeBNnB}pba#r=>a;d z3+gf_>M6N1`_uorpY1T_8b6h`*^8#Ll{TYX;`Vs?!%_CPgOAO`r3Q3*AE>56m&ef@hZGNpW)`fzMRNfm-S9k4qCRNr8kT8E)J>va zk#~ua=1;Ir68#9)Lze%*Iw3g;cC#p2z+ki zNk~k~2Gp!WS^Y{EyX=$ma|=pKQsYa?Qxmh}a}$$s_>d&Opl1%+T4JA;Y6v>$6qb8Y z+TG|eV*sjI{F6&kOM)Sn0Yc&o#d|o;CqZO(`dJ9}8&WQ(kKgEOp?$nLS}p~5r|b

*z#JZ>_GPI>nQ4{r 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 z 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∾ve1w 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

%UjSP7 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�^k`U9&@3a)2`AXOuolQWKcFcmy(lrS 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 cstring --- - ffi_api_version :: proc() -> c.int --- - ffi_supports_api :: proc(api_version: c.int) -> c.int --- - version_string :: proc() -> cstring --- - version_major :: proc() -> c.int --- - version_minor :: proc() -> c.int --- - version_patch :: proc() -> c.int --- - version_datestamp :: proc() -> c.int --- - - constant_time_compare :: proc(x, y: ^c.char, length: c.size_t) -> c.int --- - same_mem :: proc(x, y: ^c.char, length: c.size_t) -> c.int --- - scrub_mem :: proc(mem: rawptr, bytes: c.size_t) -> c.int --- - - hex_encode :: proc(x: ^c.char, length: c.size_t, out: ^c.char, flags: c.uint) -> c.int --- - hex_decode :: proc(hex_str: cstring, in_len: c.size_t, out: ^c.char, out_len: c.size_t) -> c.int --- - - base64_encode :: proc(x: ^c.char, length: c.size_t, out: ^c.char, out_len: c.size_t) -> c.int --- - base64_decode :: proc(base64_str: cstring, in_len: c.size_t, out: ^c.char, out_len: c.size_t) -> c.int --- - - rng_init :: proc(rng: ^rng_t, rng_type: cstring) -> c.int --- - rng_init_custom :: proc(rng_out: ^rng_t, rng_name: cstring, ctx: rawptr, - get_cb: proc(ctx: rawptr, out: ^c.char, out_len: c.size_t) -> ^c.int, - add_entropy_cb: proc(ctx: rawptr, input: ^c.char, length: c.size_t) -> ^c.int, - destroy_cb: proc(ctx: rawptr) -> rawptr) -> c.int --- - rng_get :: proc(rng: rng_t, out: ^c.char, out_len: c.size_t) -> c.int --- - rng_reseed :: proc(rng: rng_t, bits: c.size_t) -> c.int --- - rng_reseed_from_rng :: proc(rng, source_rng: rng_t, bits: c.size_t) -> c.int --- - rng_add_entropy :: proc(rng: rng_t, entropy: ^c.char, entropy_len: c.size_t) -> c.int --- - rng_destroy :: proc(rng: rng_t) -> c.int --- - - hash_init :: proc(hash: ^hash_t, hash_name: cstring, flags: c.uint) -> c.int --- - hash_copy_state :: proc(dest: ^hash_t, source: hash_t) -> c.int --- - hash_output_length :: proc(hash: hash_t, output_length: ^c.size_t) -> c.int --- - hash_block_size :: proc(hash: hash_t, block_size: ^c.size_t) -> c.int --- - hash_update :: proc(hash: hash_t, input: ^c.char, input_len: c.size_t) -> c.int --- - hash_final :: proc(hash: hash_t, out: ^c.char) -> c.int --- - hash_clear :: proc(hash: hash_t) -> c.int --- - hash_destroy :: proc(hash: hash_t) -> c.int --- - hash_name :: proc(hash: hash_t, name: ^c.char, name_len: ^c.size_t) -> c.int --- - - mac_init :: proc(mac: ^mac_t, hash_name: cstring, flags: c.uint) -> c.int --- - mac_output_length :: proc(mac: mac_t, output_length: ^c.size_t) -> c.int --- - mac_set_key :: proc(mac: mac_t, key: ^c.char, key_len: c.size_t) -> c.int --- - mac_update :: proc(mac: mac_t, buf: ^c.char, length: c.size_t) -> c.int --- - mac_final :: proc(mac: mac_t, out: ^c.char) -> c.int --- - mac_clear :: proc(mac: mac_t) -> c.int --- - mac_name :: proc(mac: mac_t, name: ^c.char, name_len: ^c.size_t) -> c.int --- - mac_get_keyspec :: proc(mac: mac_t, out_minimum_keylength, out_maximum_keylength, out_keylength_modulo: ^c.size_t) -> c.int --- - mac_destroy :: proc(mac: mac_t) -> c.int --- - - cipher_init :: proc(cipher: ^cipher_t, name: cstring, flags: c.uint) -> c.int --- - cipher_name :: proc(cipher: cipher_t, name: ^c.char, name_len: ^c.size_t) -> c.int --- - cipher_output_length :: proc(cipher: cipher_t, output_length: ^c.size_t) -> c.int --- - cipher_valid_nonce_length :: proc(cipher: cipher_t, nl: c.size_t) -> c.int --- - cipher_get_tag_length :: proc(cipher: cipher_t, tag_size: ^c.size_t) -> c.int --- - cipher_get_default_nonce_length :: proc(cipher: cipher_t, nl: ^c.size_t) -> c.int --- - cipher_get_update_granularity :: proc(cipher: cipher_t, ug: ^c.size_t) -> c.int --- - cipher_query_keylen :: proc(cipher: cipher_t, out_minimum_keylength, out_maximum_keylength: ^c.size_t) -> c.int --- - cipher_get_keyspec :: proc(cipher: cipher_t, min_keylen, max_keylen, mod_keylen: ^c.size_t) -> c.int --- - cipher_set_key :: proc(cipher: cipher_t, key: ^c.char, key_len: c.size_t) -> c.int --- - cipher_reset :: proc(cipher: cipher_t) -> c.int --- - cipher_set_associated_data :: proc(cipher: cipher_t, ad: ^c.char, ad_len: c.size_t) -> c.int --- - cipher_start :: proc(cipher: cipher_t, nonce: ^c.char, nonce_len: c.size_t) -> c.int --- - cipher_update :: proc(cipher: cipher_t, flags: c.uint, output: ^c.char, output_size: c.size_t, output_written: ^c.size_t, - input_bytes: ^c.char, input_size: c.size_t, input_consumed: ^c.size_t) -> c.int --- - cipher_clear :: proc(hash: cipher_t) -> c.int --- - cipher_destroy :: proc(cipher: cipher_t) -> c.int --- - - @(deprecated="Use botan.pwdhash") - pbkdf :: proc(pbkdf_algo: cstring, out: ^c.char, out_len: c.size_t, passphrase: cstring, salt: ^c.char, - salt_len, iterations: c.size_t) -> c.int --- - @(deprecated="Use botan.pwdhash_timed") - pbkdf_timed :: proc(pbkdf_algo: cstring, out: ^c.char, out_len: c.size_t, passphrase: cstring, salt: ^c.char, - salt_len, milliseconds_to_run: c.size_t, out_iterations_used: ^c.size_t) -> c.int --- - pwdhash :: proc(algo: cstring, param1, param2, param3: c.size_t, out: ^c.char, out_len: c.size_t, passphrase: cstring, - passphrase_len: c.size_t, salt: ^c.char, salt_len: c.size_t) -> c.int --- - pwdhash_timed :: proc(algo: cstring, msec: c.uint, param1, param2, param3: c.size_t, out: ^c.char, out_len: c.size_t, - passphrase: cstring, passphrase_len: c.size_t, salt: ^c.char, salt_len: c.size_t) -> c.int --- - @(deprecated="Use botan.pwdhash") - scrypt :: proc(out: ^c.char, out_len: c.size_t, passphrase: cstring, salt: ^c.char, salt_len, N, r, p: c.size_t) -> c.int --- - kdf :: proc(kdf_algo: cstring, out: ^c.char, out_len: c.size_t, secret: ^c.char, secret_lent: c.size_t, salt: ^c.char, - salt_len: c.size_t, label: ^c.char, label_len: c.size_t) -> c.int --- - - block_cipher_init :: proc(bc: ^block_cipher_t, name: cstring) -> c.int --- - block_cipher_destroy :: proc(bc: block_cipher_t) -> c.int --- - block_cipher_clear :: proc(bc: block_cipher_t) -> c.int --- - block_cipher_set_key :: proc(bc: block_cipher_t, key: ^c.char, key_len: c.size_t) -> c.int --- - block_cipher_block_size :: proc(bc: block_cipher_t) -> c.int --- - block_cipher_encrypt_blocks :: proc(bc: block_cipher_t, input, out: ^c.char, blocks: c.size_t) -> c.int --- - block_cipher_decrypt_blocks :: proc(bc: block_cipher_t, input, out: ^c.char, blocks: c.size_t) -> c.int --- - block_cipher_name :: proc(bc: block_cipher_t, name: ^c.char, name_len: ^c.size_t) -> c.int --- - block_cipher_get_keyspec :: proc(bc: block_cipher_t, out_minimum_keylength, out_maximum_keylength, out_keylength_modulo: ^c.size_t) -> c.int --- - - mp_init :: proc(mp: ^mp_t) -> c.int --- - mp_destroy :: proc(mp: mp_t) -> c.int --- - mp_to_hex :: proc(mp: mp_t, out: ^c.char) -> c.int --- - mp_to_str :: proc(mp: mp_t, base: c.char, out: ^c.char, out_len: ^c.size_t) -> c.int --- - mp_clear :: proc(mp: mp_t) -> c.int --- - mp_set_from_int :: proc(mp: mp_t, initial_value: c.int) -> c.int --- - mp_set_from_mp :: proc(dest, source: mp_t) -> c.int --- - mp_set_from_str :: proc(dest: mp_t, str: cstring) -> c.int --- - mp_set_from_radix_str :: proc(mp: mp_t, str: cstring, radix: c.size_t) -> c.int --- - mp_num_bits :: proc(n: mp_t, bits: ^c.size_t) -> c.int --- - mp_num_bytes :: proc(n: mp_t, bytes: ^c.size_t) -> c.int --- - mp_to_bin :: proc(mp: mp_t, vec: ^c.char) -> c.int --- - mp_from_bin :: proc(mp: mp_t, vec: ^c.char, vec_len: c.size_t) -> c.int --- - mp_to_uint32 :: proc(mp: mp_t, val: ^c.uint) -> c.int --- - mp_is_positive :: proc(mp: mp_t) -> c.int --- - mp_is_negative :: proc(mp: mp_t) -> c.int --- - mp_flip_sign :: proc(mp: mp_t) -> c.int --- - mp_is_zero :: proc(mp: mp_t) -> c.int --- - @(deprecated="Use botan.mp_get_bit(0)") - mp_is_odd :: proc(mp: mp_t) -> c.int --- - @(deprecated="Use botan.mp_get_bit(0)") - mp_is_even :: proc(mp: mp_t) -> c.int --- - mp_add_u32 :: proc(result, x: mp_t, y: c.uint) -> c.int --- - mp_sub_u32 :: proc(result, x: mp_t, y: c.uint) -> c.int --- - mp_add :: proc(result, x, y: mp_t) -> c.int --- - mp_sub :: proc(result, x, y: mp_t) -> c.int --- - mp_mul :: proc(result, x, y: mp_t) -> c.int --- - mp_div :: proc(quotient, remainder, x, y: mp_t) -> c.int --- - mp_mod_mul :: proc(result, x, y, mod: mp_t) -> c.int --- - mp_equal :: proc(x, y: mp_t) -> c.int --- - mp_cmp :: proc(result: ^c.int, x, y: mp_t) -> c.int --- - mp_swap :: proc(x, y: mp_t) -> c.int --- - mp_powmod :: proc(out, base, exponent, modulus: mp_t) -> c.int --- - mp_lshift :: proc(out, input: mp_t, shift: c.size_t) -> c.int --- - mp_rshift :: proc(out, input: mp_t, shift: c.size_t) -> c.int --- - mp_mod_inverse :: proc(out, input, modulus: mp_t) -> c.int --- - mp_rand_bits :: proc(rand_out: mp_t, rng: rng_t, bits: c.size_t) -> c.int --- - mp_rand_range :: proc(rand_out: mp_t, rng: rng_t, lower_bound, upper_bound: mp_t) -> c.int --- - mp_gcd :: proc(out, x, y: mp_t) -> c.int --- - mp_is_prime :: proc(n: mp_t, rng: rng_t, test_prob: c.size_t) -> c.int --- - mp_get_bit :: proc(n: mp_t, bit: c.size_t) -> c.int --- - mp_set_bit :: proc(n: mp_t, bit: c.size_t) -> c.int --- - mp_clear_bit :: proc(n: mp_t, bit: c.size_t) -> c.int --- - - bcrypt_generate :: proc(out: ^c.char, out_len: ^c.size_t, password: cstring, rng: rng_t, work_factor: c.size_t, flags: c.uint) -> c.int --- - bcrypt_is_valid :: proc(pass, hash: cstring) -> c.int --- - - privkey_create :: proc(key: ^privkey_t, algo_name, algo_params: cstring, rng: rng_t) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_check_key :: proc(key: privkey_t, rng: rng_t, flags: c.uint) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_create_rsa :: proc(key: ^privkey_t, rng: rng_t, bits: c.size_t) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_create_ecdsa :: proc(key: ^privkey_t, rng: rng_t, params: cstring) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_create_ecdh :: proc(key: ^privkey_t, rng: rng_t, params: cstring) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_create_mceliece :: proc(key: ^privkey_t, rng: rng_t, n, t: c.size_t) -> c.int --- - @(deprecated="Use botan.privkey_create") - privkey_create_dh :: proc(key: ^privkey_t, rng: rng_t, param: cstring) -> c.int --- - privkey_create_dsa :: proc(key: ^privkey_t, rng: rng_t, pbits, qbits: c.size_t) -> c.int --- - privkey_create_elgamal :: proc(key: ^privkey_t, rng: rng_t, pbits, qbits: c.size_t) -> c.int --- - privkey_load :: proc(key: ^privkey_t, rng: rng_t, bits: ^c.char, length: c.size_t, password: cstring) -> c.int --- - privkey_destroy :: proc(key: privkey_t) -> c.int --- - privkey_export :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t, flags: c.uint) -> c.int --- - privkey_algo_name :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - @(deprecated="Use botan.privkey_export_encrypted_pbkdf_{msec,iter}") - privkey_export_encrypted :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t, rng: rng_t, passphrase, encryption_algo: cstring, flags: c.uint) -> c.int --- - privkey_export_encrypted_pbkdf_msec :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t, rng: rng_t, passphrase: cstring, pbkdf_msec_runtime: c.uint, - pbkdf_iterations_out: ^c.size_t, cipher_algo, pbkdf_algo: cstring, flags: c.uint) -> c.int --- - privkey_export_encrypted_pbkdf_iter :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t, rng: rng_t, passphrase: cstring, pbkdf_iterations: c.size_t, - cipher_algo, pbkdf_algo: cstring, flags: c.uint) -> c.int --- - pubkey_load :: proc(key: ^pubkey_t, bits: ^c.char, length: c.size_t) -> c.int --- - privkey_export_pubkey :: proc(out: ^pubkey_t, input: privkey_t) -> c.int --- - pubkey_export :: proc(key: pubkey_t, out: ^c.char, out_len: ^c.size_t, flags: c.uint) -> c.int --- - pubkey_algo_name :: proc(key: pubkey_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - pubkey_check_key :: proc(key: pubkey_t, rng: rng_t, flags: c.uint) -> c.int --- - pubkey_estimated_strength :: proc(key: pubkey_t, estimate: ^c.size_t) -> c.int --- - pubkey_fingerprint :: proc(key: pubkey_t, hash: cstring, out: ^c.char, out_len: ^c.size_t) -> c.int --- - pubkey_destroy :: proc(key: pubkey_t) -> c.int --- - pubkey_get_field :: proc(output: mp_t, key: pubkey_t, field_name: cstring) -> c.int --- - privkey_get_field :: proc(output: mp_t, key: privkey_t, field_name: cstring) -> c.int --- - - privkey_load_rsa :: proc(key: ^privkey_t, p, q, e: mp_t) -> c.int --- - privkey_load_rsa_pkcs1 :: proc(key: ^privkey_t, bits: ^c.char, length: c.size_t) -> c.int --- - @(deprecated="Use botan.privkey_get_field") - privkey_rsa_get_p :: proc(p: mp_t, rsa_key: privkey_t) -> c.int --- - @(deprecated="Use botan.privkey_get_field") - privkey_rsa_get_q :: proc(q: mp_t, rsa_key: privkey_t) -> c.int --- - @(deprecated="Use botan.privkey_get_field") - privkey_rsa_get_d :: proc(d: mp_t, rsa_key: privkey_t) -> c.int --- - @(deprecated="Use botan.privkey_get_field") - privkey_rsa_get_n :: proc(n: mp_t, rsa_key: privkey_t) -> c.int --- - @(deprecated="Use botan.privkey_get_field") - privkey_rsa_get_e :: proc(e: mp_t, rsa_key: privkey_t) -> c.int --- - privkey_rsa_get_privkey :: proc(rsa_key: privkey_t, out: ^c.char, out_len: ^c.size_t, flags: c.uint) -> c.int --- - pubkey_load_rsa :: proc(key: ^pubkey_t, n, e: mp_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_rsa_get_e :: proc(e: mp_t, rsa_key: pubkey_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_rsa_get_n :: proc(n: mp_t, rsa_key: pubkey_t) -> c.int --- - - privkey_load_dsa :: proc(key: ^privkey_t, p, q, g, x: mp_t) -> c.int --- - pubkey_load_dsa :: proc(key: ^pubkey_t, p, q, g, y: mp_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - privkey_dsa_get_x :: proc(n: mp_t, key: privkey_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_dsa_get_p :: proc(p: mp_t, key: pubkey_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_dsa_get_q :: proc(q: mp_t, key: pubkey_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_dsa_get_g :: proc(d: mp_t, key: pubkey_t) -> c.int --- - @(deprecated="Use botan.pubkey_get_field") - pubkey_dsa_get_y :: proc(y: mp_t, key: pubkey_t) -> c.int --- - - privkey_load_dh :: proc(key: ^privkey_t, p, g, y: mp_t) -> c.int --- - pubkey_load_dh :: proc(key: ^pubkey_t, p, g, x: mp_t) -> c.int --- - - privkey_load_elgamal :: proc(key: ^privkey_t, p, g, y: mp_t) -> c.int --- - pubkey_load_elgamal :: proc(key: ^pubkey_t, p, g, x: mp_t) -> c.int --- - - privkey_load_ed25519 :: proc(key: ^privkey_t, privkey: [32]c.char) -> c.int --- - pubkey_load_ed25519 :: proc(key: ^pubkey_t, pubkey: [32]c.char) -> c.int --- - privkey_ed25519_get_privkey :: proc(key: ^privkey_t, output: [64]c.char) -> c.int --- - pubkey_ed25519_get_pubkey :: proc(key: ^pubkey_t, pubkey: [32]c.char) -> c.int --- - - privkey_load_x25519 :: proc(key: ^privkey_t, privkey: [32]c.char) -> c.int --- - pubkey_load_x25519 :: proc(key: ^pubkey_t, pubkey: [32]c.char) -> c.int --- - privkey_x25519_get_privkey :: proc(key: ^privkey_t, output: [32]c.char) -> c.int --- - pubkey_x25519_get_pubkey :: proc(key: ^pubkey_t, pubkey: [32]c.char) -> c.int --- - - privkey_load_ecdsa :: proc(key: ^privkey_t, scalar: mp_t, curve_name: cstring) -> c.int --- - pubkey_load_ecdsa :: proc(key: ^pubkey_t, public_x, public_y: mp_t, curve_name: cstring) -> c.int --- - pubkey_load_ecdh :: proc(key: ^pubkey_t, public_x, public_y: mp_t, curve_name: cstring) -> c.int --- - privkey_load_ecdh :: proc(key: ^privkey_t, scalar: mp_t, curve_name: cstring) -> c.int --- - pubkey_load_sm2 :: proc(key: ^pubkey_t, public_x, public_y: mp_t, curve_name: cstring) -> c.int --- - privkey_load_sm2 :: proc(key: ^privkey_t, scalar: mp_t, curve_name: cstring) -> c.int --- - @(deprecated="Use botan.pubkey_load_sm2") - pubkey_load_sm2_enc :: proc(key: ^pubkey_t, public_x, public_y: mp_t, curve_name: cstring) -> c.int --- - @(deprecated="Use botan.privkey_load_sm2") - privkey_load_sm2_enc :: proc(key: ^privkey_t, scalar: mp_t, curve_name: cstring) -> c.int --- - pubkey_sm2_compute_za :: proc(out: ^c.char, out_len: ^c.size_t, ident, hash_algo: cstring, key: pubkey_t) -> c.int --- - - pk_op_encrypt_create :: proc(op: ^pk_op_encrypt_t, key: pubkey_t, padding: cstring, flags: c.uint) -> c.int --- - pk_op_encrypt_destroy :: proc(op: pk_op_encrypt_t) -> c.int --- - pk_op_encrypt_output_length :: proc(op: pk_op_encrypt_t, ptext_len: c.size_t, ctext_len: ^c.size_t) -> c.int --- - pk_op_encrypt :: proc(op: pk_op_encrypt_t, rng: rng_t, out: ^c.char, out_len: ^c.size_t, plaintext: cstring, plaintext_len: c.size_t) -> c.int --- - - pk_op_decrypt_create :: proc(op: ^pk_op_decrypt_t, key: privkey_t, padding: cstring, flags: c.uint) -> c.int --- - pk_op_decrypt_destroy :: proc(op: pk_op_decrypt_t) -> c.int --- - pk_op_decrypt_output_length :: proc(op: pk_op_decrypt_t, ptext_len: c.size_t, ctext_len: ^c.size_t) -> c.int --- - pk_op_decrypt :: proc(op: pk_op_decrypt_t, rng: rng_t, out: ^c.char, out_len: ^c.size_t, ciphertext: cstring, ciphertext_len: c.size_t) -> c.int --- - - pk_op_sign_create :: proc(op: ^pk_op_sign_t, key: privkey_t, hash_and_padding: cstring, flags: c.uint) -> c.int --- - pk_op_sign_destroy :: proc(op: pk_op_sign_t) -> c.int --- - pk_op_sign_output_length :: proc(op: pk_op_sign_t, olen: ^c.size_t) -> c.int --- - pk_op_sign_update :: proc(op: pk_op_sign_t, input: ^c.char, input_len: c.size_t) -> c.int --- - pk_op_sign_finish :: proc(op: pk_op_sign_t, rng: rng_t, sig: ^c.char, sig_len: ^c.size_t) -> c.int --- - - pk_op_verify_create :: proc(op: ^pk_op_verify_t, hash_and_padding: cstring, flags: c.uint) -> c.int --- - pk_op_verify_destroy :: proc(op: pk_op_verify_t) -> c.int --- - pk_op_verify_update :: proc(op: pk_op_verify_t, input: ^c.char, input_len: c.size_t) -> c.int --- - pk_op_verify_finish :: proc(op: pk_op_verify_t, sig: ^c.char, sig_len: c.size_t) -> c.int --- - - pk_op_key_agreement_create :: proc(op: ^pk_op_ka_t, kdf: cstring, flags: c.uint) -> c.int --- - pk_op_key_agreement_destroy :: proc(op: pk_op_ka_t) -> c.int --- - pk_op_key_agreement_export_public :: proc(key: privkey_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - pk_op_key_agreement_size :: proc(op: pk_op_ka_t, out_len: ^c.size_t) -> c.int --- - pk_op_key_agreement :: proc(op: pk_op_ka_t, out: ^c.char, out_len: ^c.size_t, other_key: ^c.char, other_key_len: c.size_t, salt: ^c.char, - salt_len: c.size_t) -> c.int --- - - pkcs_hash_id :: proc(hash_name: cstring, pkcs_id: ^c.char, pkcs_id_len: ^c.size_t) -> c.int --- - - @(deprecated="Poorly specified, avoid in new code") - mceies_encrypt :: proc(mce_key: pubkey_t, rng: rng_t, aead: cstring, pt: ^c.char, pt_len: c.size_t, ad: ^c.char, ad_len: c.size_t, - ct: ^c.char, ct_len: ^c.size_t) -> c.int --- - @(deprecated="Poorly specified, avoid in new code") - mceies_decrypt :: proc(mce_key: privkey_t, aead: cstring, ct: ^c.char, ct_len: c.size_t, ad: ^c.char, ad_len: c.size_t, pt: ^c.char, - pt_len: ^c.size_t) -> c.int --- - - x509_cert_load :: proc(cert_obj: ^x509_cert_t, cert: ^c.char, cert_len: c.size_t) -> c.int --- - x509_cert_load_file :: proc(cert_obj: ^x509_cert_t, filename: cstring) -> c.int --- - x509_cert_destroy :: proc(cert: x509_cert_t) -> c.int --- - x509_cert_dup :: proc(new_cert: ^x509_cert_t, cert: x509_cert_t) -> c.int --- - x509_cert_get_time_starts :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_time_expires :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_not_before :: proc(cert: x509_cert_t, time_since_epoch: ^c.ulonglong) -> c.int --- - x509_cert_not_after :: proc(cert: x509_cert_t, time_since_epoch: ^c.ulonglong) -> c.int --- - x509_cert_get_fingerprint :: proc(cert: x509_cert_t, hash: cstring, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_serial_number :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_authority_key_id :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_subject_key_id :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_public_key_bits :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_public_key :: proc(cert: x509_cert_t, key: ^pubkey_t) -> c.int --- - x509_cert_get_issuer_dn :: proc(cert: x509_cert_t, key: ^c.char, index: c.size_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_get_subject_dn :: proc(cert: x509_cert_t, key: ^c.char, index: c.size_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_to_string :: proc(cert: x509_cert_t, out: ^c.char, out_len: ^c.size_t) -> c.int --- - x509_cert_allowed_usage :: proc(cert: x509_cert_t, key_usage: c.uint) -> c.int --- - x509_cert_hostname_match :: proc(cert: x509_cert_t, hostname: cstring) -> c.int --- - x509_cert_verify :: proc(validation_result: ^c.int, cert: x509_cert_t, intermediates: ^x509_cert_t, intermediates_len: c.size_t, trusted: ^x509_cert_t, - trusted_len: c.size_t, trusted_path: cstring, required_strength: c.size_t, hostname: cstring, reference_time: c.ulonglong) -> c.int --- - x509_cert_validation_status :: proc(code: c.int) -> cstring --- - x509_crl_load_file :: proc(crl_obj: ^x509_crl_t, crl_path: cstring) -> c.int --- - x509_crl_load :: proc(crl_obj: ^x509_crl_t, crl_bits: ^c.char, crl_bits_len: c.size_t) -> c.int --- - x509_crl_destroy :: proc(crl: x509_crl_t) -> c.int --- - x509_is_revoked :: proc(crl: x509_crl_t, cert: x509_cert_t) -> c.int --- - x509_cert_verify_with_crl :: proc(validation_result: ^c.int, cert: x509_cert_t, intermediates: ^x509_cert_t, intermediates_len: c.size_t, trusted: ^x509_cert_t, - trusted_len: c.size_t, crls: ^x509_crl_t, crls_len: c.size_t, trusted_path: cstring, required_strength: c.size_t, - hostname: cstring, reference_time: c.ulonglong) -> c.int --- - - key_wrap3394 :: proc(key: ^c.char, key_len: c.size_t, kek: ^c.char, kek_len: c.size_t, wrapped_key: ^c.char, wrapped_key_len: ^c.size_t) -> c.int --- - key_unwrap3394 :: proc(wrapped_key: ^c.char, wrapped_key_len: c.size_t, kek: ^c.char, kek_len: c.size_t, key: ^c.char, key_len: ^c.size_t) -> c.int --- - - hotp_init :: proc(hotp: ^hotp_t, key: ^c.char, key_len: c.size_t, hash_algo: cstring, digits: c.size_t) -> c.int --- - hotp_destroy :: proc(hotp: hotp_t) -> c.int --- - hotp_generate :: proc(hotp: hotp_t, hotp_code: ^c.uint, hotp_counter: c.ulonglong) -> c.int --- - hotp_check :: proc(hotp: hotp_t, next_hotp_counter: ^c.ulonglong, hotp_code: c.uint, hotp_counter: c.ulonglong, resync_range: c.size_t) -> c.int --- - - totp_init :: proc(totp: ^totp_t, key: ^c.char, key_len: c.size_t, hash_algo: cstring, digits, time_step: c.size_t) -> c.int --- - totp_destroy :: proc(totp: totp_t) -> c.int --- - totp_generate :: proc(totp: totp_t, totp_code: ^c.uint, timestamp: c.ulonglong) -> c.int --- - totp_check :: proc(totp: totp_t, totp_code: ^c.uint, timestamp: c.ulonglong, acceptable_clock_drift: c.size_t) -> c.int --- - - fpe_fe1_init :: proc(fpe: ^fpe_t, n: mp_t, key: ^c.char, key_len, rounds: c.size_t, flags: c.uint) -> c.int --- - fpe_destroy :: proc(fpe: fpe_t) -> c.int --- - fpe_encrypt :: proc(fpe: fpe_t, x: mp_t, tweak: ^c.char, tweak_len: c.size_t) -> c.int --- - fpe_decrypt :: proc(fpe: fpe_t, x: mp_t, tweak: ^c.char, tweak_len: c.size_t) -> c.int --- -} \ No newline at end of file diff --git a/core/crypto/botan/hash.odin b/core/crypto/botan/hash.odin deleted file mode 100644 index a06377927..000000000 --- a/core/crypto/botan/hash.odin +++ /dev/null @@ -1,498 +0,0 @@ -package botan - -/* - Copyright 2021 zhibog - Made available under the BSD-3 license. - - List of contributors: - zhibog: Initial creation and testing of the bindings. - - Implementation of the context for the Botan side. -*/ - -import "core:os" -import "core:io" -import "core:fmt" -import "core:strings" - -import "../_ctx" - -hash_bytes_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._16, 16), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._20, 20), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [24]byte { - hash: [24]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._24, 24), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._28, 28), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._32, 32), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._48, 48), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._64, 64), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_128 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [128]byte { - hash: [128]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._128, 128), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash -} - -hash_bytes_slice :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - hash := make([]byte, bit_size, allocator) - c: hash_t - hash_init(&c, _check_ctx(ctx, nil, bit_size), 0) - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - hash_final(c, &hash[0]) - hash_destroy(c) - return hash[:] -} - -hash_file_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_16(ctx, buf[:]), ok - } - } - return [16]byte{}, false -} - -hash_file_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_20(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_20(ctx, buf[:]), ok - } - } - return [20]byte{}, false -} - -hash_file_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - if !load_at_once { - return hash_stream_24(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_24(ctx, buf[:]), ok - } - } - return [24]byte{}, false -} - -hash_file_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_28(ctx, buf[:]), ok - } - } - return [28]byte{}, false -} - -hash_file_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_file_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_file_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -hash_file_128 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([128]byte, bool) { - if !load_at_once { - return hash_stream_128(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_128(ctx, buf[:]), ok - } - } - return [128]byte{}, false -} - -hash_file_slice :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - if !load_at_once { - return hash_stream_slice(ctx, os.stream_from_handle(hd), bit_size, allocator) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_slice(ctx, buf[:], bit_size, allocator), ok - } - } - return nil, false -} - -hash_stream_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._16, 16), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._20, 20), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([24]byte, bool) { - hash: [24]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._24, 24), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._28, 28), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._32, 32), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._48, 48), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._64, 64), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_128 :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream) -> ([128]byte, bool) { - hash: [128]byte - c: hash_t - hash_init(&c, _check_ctx(ctx, _ctx.Hash_Size._128, 128), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash, true -} - -hash_stream_slice :: #force_inline proc(ctx: ^_ctx.Hash_Context, s: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - hash := make([]byte, bit_size, allocator) - c: hash_t - hash_init(&c, _check_ctx(ctx, nil, bit_size), 0) - buf := make([]byte, 512) - defer delete(buf) - i := 1 - for i > 0 { - i, _ = s->impl_read(buf) - if i > 0 { - hash_update(c, len(buf) == 0 ? nil : &buf[0], uint(i)) - } - } - hash_final(c, &hash[0]) - hash_destroy(c) - return hash[:], true -} - -init :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - c: hash_t - hash_init(&c, ctx.botan_hash_algo, 0) - ctx.external_ctx = c -} - -update :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.external_ctx.(hash_t); ok { - hash_update(c, len(data) == 0 ? nil : &data[0], uint(len(data))) - } -} - -final :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.external_ctx.(hash_t); ok { - hash_final(c, &hash[0]) - hash_destroy(c) - } -} - -assign_hash_vtable :: proc(ctx: ^_ctx.Hash_Context, hash_algo: cstring) { - ctx.init = init - ctx.update = update - ctx.final = final - ctx.botan_hash_algo = hash_algo - - switch hash_algo { - case HASH_MD4, HASH_MD5: - ctx.hash_bytes_16 = hash_bytes_16 - ctx.hash_file_16 = hash_file_16 - ctx.hash_stream_16 = hash_stream_16 - - case HASH_SHA1, HASH_RIPEMD_160: - ctx.hash_bytes_20 = hash_bytes_20 - ctx.hash_file_20 = hash_file_20 - ctx.hash_stream_20 = hash_stream_20 - - case HASH_SHA2, HASH_SHA3: - ctx.hash_bytes_28 = hash_bytes_28 - ctx.hash_file_28 = hash_file_28 - ctx.hash_stream_28 = hash_stream_28 - ctx.hash_bytes_32 = hash_bytes_32 - ctx.hash_file_32 = hash_file_32 - ctx.hash_stream_32 = hash_stream_32 - ctx.hash_bytes_48 = hash_bytes_48 - ctx.hash_file_48 = hash_file_48 - ctx.hash_stream_48 = hash_stream_48 - ctx.hash_bytes_64 = hash_bytes_64 - ctx.hash_file_64 = hash_file_64 - ctx.hash_stream_64 = hash_stream_64 - - case HASH_GOST, HASH_WHIRLPOOL, HASH_SM3: - ctx.hash_bytes_32 = hash_bytes_32 - ctx.hash_file_32 = hash_file_32 - ctx.hash_stream_32 = hash_stream_32 - - case HASH_STREEBOG: - ctx.hash_bytes_32 = hash_bytes_32 - ctx.hash_file_32 = hash_file_32 - ctx.hash_stream_32 = hash_stream_32 - ctx.hash_bytes_64 = hash_bytes_64 - ctx.hash_file_64 = hash_file_64 - ctx.hash_stream_64 = hash_stream_64 - - case HASH_BLAKE2B: - ctx.hash_bytes_64 = hash_bytes_64 - ctx.hash_file_64 = hash_file_64 - ctx.hash_stream_64 = hash_stream_64 - - case HASH_TIGER: - ctx.hash_bytes_16 = hash_bytes_16 - ctx.hash_file_16 = hash_file_16 - ctx.hash_stream_16 = hash_stream_16 - ctx.hash_bytes_20 = hash_bytes_20 - ctx.hash_file_20 = hash_file_20 - ctx.hash_stream_20 = hash_stream_20 - ctx.hash_bytes_24 = hash_bytes_24 - ctx.hash_file_24 = hash_file_24 - ctx.hash_stream_24 = hash_stream_24 - - case HASH_SKEIN_512: - ctx.hash_bytes_slice = hash_bytes_slice - ctx.hash_file_slice = hash_file_slice - ctx.hash_stream_slice = hash_stream_slice - } -} - -_check_ctx :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash_size: _ctx.Hash_Size, hash_size_val: int) -> cstring { - ctx.hash_size = hash_size - ctx.hash_size_val = hash_size_val - switch ctx.botan_hash_algo { - case HASH_SHA2: - #partial switch hash_size { - case ._28: return HASH_SHA_224 - case ._32: return HASH_SHA_256 - case ._48: return HASH_SHA_384 - case ._64: return HASH_SHA_512 - } - case HASH_SHA3: - #partial switch hash_size { - case ._28: return HASH_SHA3_224 - case ._32: return HASH_SHA3_256 - case ._48: return HASH_SHA3_384 - case ._64: return HASH_SHA3_512 - } - case HASH_KECCAK: - #partial switch hash_size { - case ._28: return HASH_KECCAK_224 - case ._32: return HASH_KECCAK_256 - case ._48: return HASH_KECCAK_384 - case ._64: return HASH_KECCAK_512 - } - case HASH_STREEBOG: - #partial switch hash_size { - case ._32: return HASH_STREEBOG_256 - case ._64: return HASH_STREEBOG_512 - } - case HASH_TIGER: - #partial switch hash_size { - case ._16: return HASH_TIGER_128 - case ._20: return HASH_TIGER_160 - case ._24: return HASH_TIGER_192 - } - case HASH_SKEIN_512: - return strings.unsafe_string_to_cstring(fmt.tprintf("Skein-512(%d)", hash_size_val * 8)) - case: return ctx.botan_hash_algo - } - return nil -} \ No newline at end of file diff --git a/core/crypto/gost/gost.odin b/core/crypto/gost/gost.odin index 00a8fdc3d..c687e9080 100644 --- a/core/crypto/gost/gost.odin +++ b/core/crypto/gost/gost.odin @@ -6,7 +6,6 @@ package gost List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the GOST hashing algorithm, as defined in RFC 5831 */ @@ -15,42 +14,6 @@ import "core:mem" import "core:os" import "core:io" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - _assign_hash_vtable(ctx) - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_32 = hash_bytes_odin - ctx.hash_file_32 = hash_file_odin - ctx.hash_stream_32 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since MD2 is not available in Botan -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_GOST) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -64,22 +27,44 @@ hash_string :: proc(data: string) -> [32]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [32]byte { - _create_gost_ctx() - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Gost_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_gost_ctx() - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Gost_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_gost_ctx() - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [32]byte{}, false } hash :: proc { @@ -93,85 +78,77 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() -} - -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Gost_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) +init :: proc "contextless" (ctx: ^Gost_Context) { + sbox: [8][16]u32 = { + { 10, 4, 5, 6, 8, 1, 3, 7, 13, 12, 14, 0, 9, 2, 11, 15 }, + { 5, 15, 4, 0, 2, 13, 11, 9, 1, 7, 6, 3, 12, 14, 10, 8 }, + { 7, 15, 12, 14, 9, 4, 1, 0, 3, 11, 5, 2, 6, 10, 8, 13 }, + { 4, 10, 7, 12, 0, 15, 2, 8, 14, 1, 6, 5, 13, 11, 9, 3 }, + { 7, 6, 4, 11, 9, 12, 2, 10, 1, 8, 0, 14, 15, 13, 3, 5 }, + { 7, 6, 2, 4, 13, 9, 15, 0, 10, 1, 5, 11, 8, 14, 12, 3 }, + { 13, 14, 4, 1, 7, 0, 5, 10, 3, 12, 8, 15, 6, 2, 9, 11 }, + { 1, 3, 10, 9, 5, 11, 4, 15, 8, 6, 7, 14, 13, 0, 2, 12 }, } - return hash -} -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Gost_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok + i := 0 + for a := 0; a < 16; a += 1 { + ax := sbox[1][a] << 15 + bx := sbox[3][a] << 23 + cx := sbox[5][a] + cx = (cx >> 1) | (cx << 31) + dx := sbox[7][a] << 7 + for b := 0; b < 16; b, i = b + 1, i + 1 { + SBOX_1[i] = ax | (sbox[0][b] << 11) + SBOX_2[i] = bx | (sbox[2][b] << 19) + SBOX_3[i] = cx | (sbox[4][b] << 27) + SBOX_4[i] = dx | (sbox[6][b] << 3) } } - return [32]byte{}, false } -@(private) -_create_gost_ctx :: #force_inline proc() { - ctx: Gost_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._32 -} +update :: proc(ctx: ^Gost_Context, data: []byte) { + length := byte(len(data)) + j: byte -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_gost_ctx() - if c, ok := ctx.internal_ctx.(Gost_Context); ok { - init_odin(&c) + i := ctx.partial_bytes + for i < 32 && j < length { + ctx.partial[i] = data[j] + i, j = i + 1, j + 1 } -} -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Gost_Context); ok { - update_odin(&c, data) + if i < 32 { + ctx.partial_bytes = i + return } + bytes(ctx, ctx.partial[:], 256) + + for (j + 32) < length { + bytes(ctx, data[j:], 256) + j += 32 + } + + i = 0 + for j < length { + ctx.partial[i] = data[j] + i, j = i + 1, j + 1 + } + ctx.partial_bytes = i } -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Gost_Context); ok { - final_odin(&c, hash) +final :: proc(ctx: ^Gost_Context, hash: []byte) { + if ctx.partial_bytes > 0 { + mem.set(&ctx.partial[ctx.partial_bytes], 0, 32 - int(ctx.partial_bytes)) + bytes(ctx, ctx.partial[:], u32(ctx.partial_bytes) << 3) + } + + compress(ctx.hash[:], ctx.len[:]) + compress(ctx.hash[:], ctx.sum[:]) + + for i, j := 0, 0; i < 8; i, j = i + 1, j + 4 { + hash[j] = byte(ctx.hash[i]) + hash[j + 1] = byte(ctx.hash[i] >> 8) + hash[j + 2] = byte(ctx.hash[i] >> 16) + hash[j + 3] = byte(ctx.hash[i] >> 24) } } @@ -187,12 +164,12 @@ Gost_Context :: struct { partial_bytes: byte, } -SBOX_1 : [256]u32 -SBOX_2 : [256]u32 -SBOX_3 : [256]u32 -SBOX_4 : [256]u32 +SBOX_1: [256]u32 +SBOX_2: [256]u32 +SBOX_3: [256]u32 +SBOX_4: [256]u32 -GOST_ENCRYPT_ROUND :: #force_inline proc "contextless"(l, r, t, k1, k2: u32) -> (u32, u32, u32) { +ENCRYPT_ROUND :: #force_inline proc "contextless" (l, r, t, k1, k2: u32) -> (u32, u32, u32) { l, r, t := l, r, t t = (k1) + r l ~= SBOX_1[t & 0xff] ~ SBOX_2[(t >> 8) & 0xff] ~ SBOX_3[(t >> 16) & 0xff] ~ SBOX_4[t >> 24] @@ -201,30 +178,30 @@ GOST_ENCRYPT_ROUND :: #force_inline proc "contextless"(l, r, t, k1, k2: u32) -> return l, r, t } -GOST_ENCRYPT :: #force_inline proc "contextless"(a, b, c: u32, key: []u32) -> (l, r, t: u32) { - l, r, t = GOST_ENCRYPT_ROUND(a, b, c, key[0], key[1]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[2], key[3]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[4], key[5]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[6], key[7]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[0], key[1]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[2], key[3]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[4], key[5]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[6], key[7]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[0], key[1]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[2], key[3]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[4], key[5]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[6], key[7]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[7], key[6]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[5], key[4]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[3], key[2]) - l, r, t = GOST_ENCRYPT_ROUND(l, r, t, key[1], key[0]) +ENCRYPT :: #force_inline proc "contextless" (a, b, c: u32, key: []u32) -> (l, r, t: u32) { + l, r, t = ENCRYPT_ROUND(a, b, c, key[0], key[1]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[2], key[3]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[4], key[5]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[6], key[7]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[0], key[1]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[2], key[3]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[4], key[5]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[6], key[7]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[0], key[1]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[2], key[3]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[4], key[5]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[6], key[7]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[7], key[6]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[5], key[4]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[3], key[2]) + l, r, t = ENCRYPT_ROUND(l, r, t, key[1], key[0]) t = r r = l l = t return } -gost_bytes :: proc(ctx: ^Gost_Context, buf: []byte, bits: u32) { +bytes :: proc(ctx: ^Gost_Context, buf: []byte, bits: u32) { a, c: u32 m: [8]u32 @@ -237,14 +214,14 @@ gost_bytes :: proc(ctx: ^Gost_Context, buf: []byte, bits: u32) { c = c < a ? 1 : 0 } - gost_compress(ctx.hash[:], m[:]) + compress(ctx.hash[:], m[:]) ctx.len[0] += bits if ctx.len[0] < bits { ctx.len[1] += 1 } } -gost_compress :: proc(h, m: []u32) { +compress :: proc(h, m: []u32) { key, u, v, w, s: [8]u32 copy(u[:], h) @@ -272,7 +249,7 @@ gost_compress :: proc(h, m: []u32) { r := h[i] l := h[i + 1] t: u32 - l, r, t = GOST_ENCRYPT(l, r, 0, key[:]) + l, r, t = ENCRYPT(l, r, 0, key[:]) s[i] = r s[i + 1] = l @@ -380,78 +357,4 @@ gost_compress :: proc(h, m: []u32) { h[7] = v[0] ~ (v[0] >> 16) ~ (v[1] << 16) ~ (v[1] >> 16) ~ (v[2] << 16) ~ (v[3] >> 16) ~ v[3] ~ (v[4] << 16) ~ v[4] ~ (v[5] >> 16) ~ v[5] ~ (v[6] << 16) ~ (v[6] >> 16) ~ (v[7] << 16) ~ v[7] -} - -init_odin :: proc(ctx: ^Gost_Context) { - sbox: [8][16]u32 = { - { 10, 4, 5, 6, 8, 1, 3, 7, 13, 12, 14, 0, 9, 2, 11, 15 }, - { 5, 15, 4, 0, 2, 13, 11, 9, 1, 7, 6, 3, 12, 14, 10, 8 }, - { 7, 15, 12, 14, 9, 4, 1, 0, 3, 11, 5, 2, 6, 10, 8, 13 }, - { 4, 10, 7, 12, 0, 15, 2, 8, 14, 1, 6, 5, 13, 11, 9, 3 }, - { 7, 6, 4, 11, 9, 12, 2, 10, 1, 8, 0, 14, 15, 13, 3, 5 }, - { 7, 6, 2, 4, 13, 9, 15, 0, 10, 1, 5, 11, 8, 14, 12, 3 }, - { 13, 14, 4, 1, 7, 0, 5, 10, 3, 12, 8, 15, 6, 2, 9, 11 }, - { 1, 3, 10, 9, 5, 11, 4, 15, 8, 6, 7, 14, 13, 0, 2, 12 }, - } - - i := 0 - for a := 0; a < 16; a += 1 { - ax := sbox[1][a] << 15 - bx := sbox[3][a] << 23 - cx := sbox[5][a] - cx = (cx >> 1) | (cx << 31) - dx := sbox[7][a] << 7 - for b := 0; b < 16; b, i = b + 1, i + 1 { - SBOX_1[i] = ax | (sbox[0][b] << 11) - SBOX_2[i] = bx | (sbox[2][b] << 19) - SBOX_3[i] = cx | (sbox[4][b] << 27) - SBOX_4[i] = dx | (sbox[6][b] << 3) - } - } -} - -update_odin :: proc(ctx: ^Gost_Context, data: []byte) { - length := byte(len(data)) - j: byte - - i := ctx.partial_bytes - for i < 32 && j < length { - ctx.partial[i] = data[j] - i, j = i + 1, j + 1 - } - - if i < 32 { - ctx.partial_bytes = i - return - } - gost_bytes(ctx, ctx.partial[:], 256) - - for (j + 32) < length { - gost_bytes(ctx, data[j:], 256) - j += 32 - } - - i = 0 - for j < length { - ctx.partial[i] = data[j] - i, j = i + 1, j + 1 - } - ctx.partial_bytes = i -} - -final_odin :: proc(ctx: ^Gost_Context, hash: []byte) { - if ctx.partial_bytes > 0 { - mem.set(&ctx.partial[ctx.partial_bytes], 0, 32 - int(ctx.partial_bytes)) - gost_bytes(ctx, ctx.partial[:], u32(ctx.partial_bytes) << 3) - } - - gost_compress(ctx.hash[:], ctx.len[:]) - gost_compress(ctx.hash[:], ctx.sum[:]) - - for i, j := 0, 0; i < 8; i, j = i + 1, j + 4 { - hash[j] = byte(ctx.hash[i]) - hash[j + 1] = byte(ctx.hash[i] >> 8) - hash[j + 2] = byte(ctx.hash[i] >> 16) - hash[j + 3] = byte(ctx.hash[i] >> 24) - } } \ No newline at end of file diff --git a/core/crypto/groestl/groestl.odin b/core/crypto/groestl/groestl.odin index d3e23dc28..0d305a1d1 100644 --- a/core/crypto/groestl/groestl.odin +++ b/core/crypto/groestl/groestl.odin @@ -6,7 +6,6 @@ package groestl List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the GROESTL hashing algorithm, as defined in */ @@ -14,70 +13,6 @@ package groestl import "core:os" import "core:io" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since GROESTL is not available in Botan -@(warning="GROESTL is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_groestl_ctx :: #force_inline proc(size: _ctx.Hash_Size) { - ctx: Groestl_Context - #partial switch size { - case ._28: ctx.hashbitlen = 224 - case ._32: ctx.hashbitlen = 256 - case ._48: ctx.hashbitlen = 384 - case ._64: ctx.hashbitlen = 512 - } - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = size -} - /* High level API */ @@ -91,22 +26,46 @@ hash_string_224 :: proc(data: string) -> [28]byte { // hash_bytes_224 will hash the given input and return the // computed hash hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_groestl_ctx(._28) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Groestl_Context + ctx.hashbitlen = 224 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_groestl_ctx(._28) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Groestl_Context + ctx.hashbitlen = 224 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_groestl_ctx(._28) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -125,22 +84,46 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_groestl_ctx(._32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Groestl_Context + ctx.hashbitlen = 256 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_groestl_ctx(._32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Groestl_Context + ctx.hashbitlen = 256 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_groestl_ctx(._32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -159,22 +142,46 @@ hash_string_384 :: proc(data: string) -> [48]byte { // hash_bytes_384 will hash the given input and return the // computed hash hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_groestl_ctx(._48) - return _hash_impl->hash_bytes_48(data) + hash: [48]byte + ctx: Groestl_Context + ctx.hashbitlen = 384 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_groestl_ctx(._48) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: Groestl_Context + ctx.hashbitlen = 384 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_groestl_ctx(._48) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -193,22 +200,46 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_groestl_ctx(._64) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: Groestl_Context + ctx.hashbitlen = 512 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_groestl_ctx(._64) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Groestl_Context + ctx.hashbitlen = 512 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_groestl_ctx(._64) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -222,201 +253,101 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() -} - -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true +init :: proc(ctx: ^Groestl_Context) { + assert(ctx.hashbitlen == 224 || ctx.hashbitlen == 256 || ctx.hashbitlen == 384 || ctx.hashbitlen == 512, "hashbitlen must be set to 224, 256, 384 or 512") + if ctx.hashbitlen <= 256 { + ctx.rounds = 10 + ctx.columns = 8 + ctx.statesize = 64 } else { - return hash, false + ctx.rounds = 14 + ctx.columns = 16 + ctx.statesize = 128 + } + for i := 8 - size_of(i32); i < 8; i += 1 { + ctx.chaining[i][ctx.columns - 1] = byte(ctx.hashbitlen >> (8 * (7 - uint(i)))) } } -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok +update :: proc(ctx: ^Groestl_Context, data: []byte) { + databitlen := len(data) * 8 + msglen := databitlen / 8 + rem := databitlen % 8 + + i: int + assert(ctx.bits_in_last_byte == 0) + + if ctx.buf_ptr != 0 { + for i = 0; ctx.buf_ptr < ctx.statesize && i < msglen; i, ctx.buf_ptr = i + 1, ctx.buf_ptr + 1 { + ctx.buffer[ctx.buf_ptr] = data[i] } - } - return [28]byte{}, false -} -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } + if ctx.buf_ptr < ctx.statesize { + if rem != 0 { + ctx.bits_in_last_byte = rem + ctx.buffer[ctx.buf_ptr] = data[i] + ctx.buf_ptr += 1 + } + return } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false + + ctx.buf_ptr = 0 + transform(ctx, ctx.buffer[:], u32(ctx.statesize)) + } + + transform(ctx, data[i:], u32(msglen - i)) + i += ((msglen - i) / ctx.statesize) * ctx.statesize + for i < msglen { + ctx.buffer[ctx.buf_ptr] = data[i] + i, ctx.buf_ptr = i + 1, ctx.buf_ptr + 1 + } + + if rem != 0 { + ctx.bits_in_last_byte = rem + ctx.buffer[ctx.buf_ptr] = data[i] + ctx.buf_ptr += 1 } } -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) +final :: proc(ctx: ^Groestl_Context, hash: []byte) { + hashbytelen := ctx.hashbitlen / 8 + + if ctx.bits_in_last_byte != 0 { + ctx.buffer[ctx.buf_ptr - 1] &= ((1 << uint(ctx.bits_in_last_byte)) - 1) << (8 - uint(ctx.bits_in_last_byte)) + ctx.buffer[ctx.buf_ptr - 1] ~= 0x1 << (7 - uint(ctx.bits_in_last_byte)) } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok + ctx.buffer[ctx.buf_ptr] = 0x80 + ctx.buf_ptr += 1 + } + + if ctx.buf_ptr > ctx.statesize - 8 { + for ctx.buf_ptr < ctx.statesize { + ctx.buffer[ctx.buf_ptr] = 0 + ctx.buf_ptr += 1 } + transform(ctx, ctx.buffer[:], u32(ctx.statesize)) + ctx.buf_ptr = 0 } - return [32]byte{}, false -} -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) + for ctx.buf_ptr < ctx.statesize - 8 { + ctx.buffer[ctx.buf_ptr] = 0 + ctx.buf_ptr += 1 } - return hash -} -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false + ctx.block_counter += 1 + ctx.buf_ptr = ctx.statesize + + for ctx.buf_ptr > ctx.statesize - 8 { + ctx.buf_ptr -= 1 + ctx.buffer[ctx.buf_ptr] = byte(ctx.block_counter) + ctx.block_counter >>= 8 } -} -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} + transform(ctx, ctx.buffer[:], u32(ctx.statesize)) + output_transformation(ctx) -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_groestl_ctx(ctx.hash_size) - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Groestl_Context); ok { - final_odin(&c, hash) + for i, j := ctx.statesize - hashbytelen , 0; i < ctx.statesize; i, j = i + 1, j + 1 { + hash[j] = ctx.chaining[i % 8][i / 8] } } @@ -631,100 +562,3 @@ add_roundconstant :: proc(x: [][16]byte, columns: int, round: byte, v: Groestl_V } } } - -init_odin :: proc(ctx: ^Groestl_Context) { - if ctx.hashbitlen <= 256 { - ctx.rounds = 10 - ctx.columns = 8 - ctx.statesize = 64 - } else { - ctx.rounds = 14 - ctx.columns = 16 - ctx.statesize = 128 - } - for i := 8 - size_of(i32); i < 8; i += 1 { - ctx.chaining[i][ctx.columns - 1] = byte(ctx.hashbitlen >> (8 * (7 - uint(i)))) - } -} - -update_odin :: proc(ctx: ^Groestl_Context, data: []byte) { - databitlen := len(data) * 8 - msglen := databitlen / 8 - rem := databitlen % 8 - - i: int - assert(ctx.bits_in_last_byte == 0) - - if ctx.buf_ptr != 0 { - for i = 0; ctx.buf_ptr < ctx.statesize && i < msglen; i, ctx.buf_ptr = i + 1, ctx.buf_ptr + 1 { - ctx.buffer[ctx.buf_ptr] = data[i] - } - - if ctx.buf_ptr < ctx.statesize { - if rem != 0 { - ctx.bits_in_last_byte = rem - ctx.buffer[ctx.buf_ptr] = data[i] - ctx.buf_ptr += 1 - } - return - } - - ctx.buf_ptr = 0 - transform(ctx, ctx.buffer[:], u32(ctx.statesize)) - } - - transform(ctx, data[i:], u32(msglen - i)) - i += ((msglen - i) / ctx.statesize) * ctx.statesize - for i < msglen { - ctx.buffer[ctx.buf_ptr] = data[i] - i, ctx.buf_ptr = i + 1, ctx.buf_ptr + 1 - } - - if rem != 0 { - ctx.bits_in_last_byte = rem - ctx.buffer[ctx.buf_ptr] = data[i] - ctx.buf_ptr += 1 - } -} - -final_odin :: proc(ctx: ^Groestl_Context, hash: []byte) { - hashbytelen := ctx.hashbitlen / 8 - - if ctx.bits_in_last_byte != 0 { - ctx.buffer[ctx.buf_ptr - 1] &= ((1 << uint(ctx.bits_in_last_byte)) - 1) << (8 - uint(ctx.bits_in_last_byte)) - ctx.buffer[ctx.buf_ptr - 1] ~= 0x1 << (7 - uint(ctx.bits_in_last_byte)) - } else { - ctx.buffer[ctx.buf_ptr] = 0x80 - ctx.buf_ptr += 1 - } - - if ctx.buf_ptr > ctx.statesize - 8 { - for ctx.buf_ptr < ctx.statesize { - ctx.buffer[ctx.buf_ptr] = 0 - ctx.buf_ptr += 1 - } - transform(ctx, ctx.buffer[:], u32(ctx.statesize)) - ctx.buf_ptr = 0 - } - - for ctx.buf_ptr < ctx.statesize - 8 { - ctx.buffer[ctx.buf_ptr] = 0 - ctx.buf_ptr += 1 - } - - ctx.block_counter += 1 - ctx.buf_ptr = ctx.statesize - - for ctx.buf_ptr > ctx.statesize - 8 { - ctx.buf_ptr -= 1 - ctx.buffer[ctx.buf_ptr] = byte(ctx.block_counter) - ctx.block_counter >>= 8 - } - - transform(ctx, ctx.buffer[:], u32(ctx.statesize)) - output_transformation(ctx) - - for i, j := ctx.statesize - hashbytelen , 0; i < ctx.statesize; i, j = i + 1, j + 1 { - hash[j] = ctx.chaining[i % 8][i / 8] - } -} \ No newline at end of file diff --git a/core/crypto/haval/haval.odin b/core/crypto/haval/haval.odin index bea799c71..76532d4cd 100644 --- a/core/crypto/haval/haval.odin +++ b/core/crypto/haval/haval.odin @@ -6,7 +6,6 @@ package haval List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation for the HAVAL hashing algorithm as defined in */ @@ -16,74 +15,6 @@ import "core:os" import "core:io" import "../util" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin_16 - ctx.hash_file_16 = hash_file_odin_16 - ctx.hash_stream_16 = hash_stream_odin_16 - ctx.hash_bytes_20 = hash_bytes_odin_20 - ctx.hash_file_20 = hash_file_odin_20 - ctx.hash_stream_20 = hash_stream_odin_20 - ctx.hash_bytes_24 = hash_bytes_odin_24 - ctx.hash_file_24 = hash_file_odin_24 - ctx.hash_stream_24 = hash_stream_odin_24 - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since HAVAL is not available in Botan -@(warning="HAVAL is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_haval_ctx :: #force_inline proc(size: _ctx.Hash_Size, rounds: u32) { - ctx: Haval_Context - #partial switch size { - case ._16: ctx.hashbitlen = 128 - case ._20: ctx.hashbitlen = 160 - case ._24: ctx.hashbitlen = 192 - case ._28: ctx.hashbitlen = 224 - case ._32: ctx.hashbitlen = 256 - } - ctx.rounds = rounds - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = size -} /* High level API @@ -98,22 +29,50 @@ hash_string_128_3 :: proc(data: string) -> [16]byte { // hash_bytes_128_3 will hash the given input and return the // computed hash hash_bytes_128_3 :: proc(data: []byte) -> [16]byte { - _create_haval_ctx(._16, 3) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 3 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_128_3 will read the stream in chunks and compute a // hash from its contents hash_stream_128_3 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_haval_ctx(._16, 3) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 3 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_128_3 will read the file provided by the given handle // and compute a hash hash_file_128_3 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_haval_ctx(._16, 3) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128_3(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128_3(buf[:]), ok + } + } + return [16]byte{}, false } hash_128_3 :: proc { @@ -132,22 +91,50 @@ hash_string_128_4 :: proc(data: string) -> [16]byte { // hash_bytes_128_4 will hash the given input and return the // computed hash hash_bytes_128_4 :: proc(data: []byte) -> [16]byte { - _create_haval_ctx(._16, 4) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 4 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_128_4 will read the stream in chunks and compute a // hash from its contents hash_stream_128_4 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_haval_ctx(._16, 4) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 4 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_128_4 will read the file provided by the given handle // and compute a hash hash_file_128_4 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_haval_ctx(._16, 4) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128_4(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128_4(buf[:]), ok + } + } + return [16]byte{}, false } hash_128_4 :: proc { @@ -166,22 +153,50 @@ hash_string_128_5 :: proc(data: string) -> [16]byte { // hash_bytes_128_5 will hash the given input and return the // computed hash hash_bytes_128_5 :: proc(data: []byte) -> [16]byte { - _create_haval_ctx(._16, 5) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 5 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_128_5 will read the stream in chunks and compute a // hash from its contents hash_stream_128_5 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_haval_ctx(._16, 5) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Haval_Context + ctx.hashbitlen = 128 + ctx.rounds = 5 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_128_5 will read the file provided by the given handle // and compute a hash hash_file_128_5 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_haval_ctx(._16, 5) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128_5(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128_5(buf[:]), ok + } + } + return [16]byte{}, false } hash_128_5 :: proc { @@ -200,22 +215,50 @@ hash_string_160_3 :: proc(data: string) -> [20]byte { // hash_bytes_160_3 will hash the given input and return the // computed hash hash_bytes_160_3 :: proc(data: []byte) -> [20]byte { - _create_haval_ctx(._20, 3) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 3 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_160_3 will read the stream in chunks and compute a // hash from its contents hash_stream_160_3 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_haval_ctx(._20, 3) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 3 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_160_3 will read the file provided by the given handle // and compute a hash hash_file_160_3 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_haval_ctx(._20, 3) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160_3(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160_3(buf[:]), ok + } + } + return [20]byte{}, false } hash_160_3 :: proc { @@ -234,22 +277,50 @@ hash_string_160_4 :: proc(data: string) -> [20]byte { // hash_bytes_160_4 will hash the given input and return the // computed hash hash_bytes_160_4 :: proc(data: []byte) -> [20]byte { - _create_haval_ctx(._20, 4) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 4 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_160_4 will read the stream in chunks and compute a // hash from its contents hash_stream_160_4 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_haval_ctx(._20, 4) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 4 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_160_4 will read the file provided by the given handle // and compute a hash hash_file_160_4 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_haval_ctx(._20, 4) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160_4(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160_4(buf[:]), ok + } + } + return [20]byte{}, false } hash_160_4 :: proc { @@ -268,22 +339,50 @@ hash_string_160_5 :: proc(data: string) -> [20]byte { // hash_bytes_160_5 will hash the given input and return the // computed hash hash_bytes_160_5 :: proc(data: []byte) -> [20]byte { - _create_haval_ctx(._20, 5) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 5 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_160_5 will read the stream in chunks and compute a // hash from its contents hash_stream_160_5 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_haval_ctx(._20, 5) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: Haval_Context + ctx.hashbitlen = 160 + ctx.rounds = 5 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_160_5 will read the file provided by the given handle // and compute a hash hash_file_160_5 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_haval_ctx(._20, 5) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160_5(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160_5(buf[:]), ok + } + } + return [20]byte{}, false } hash_160_5 :: proc { @@ -302,22 +401,50 @@ hash_string_192_3 :: proc(data: string) -> [24]byte { // hash_bytes_192_3 will hash the given input and return the // computed hash hash_bytes_192_3 :: proc(data: []byte) -> [24]byte { - _create_haval_ctx(._24, 3) - return _hash_impl->hash_bytes_24(data) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 3 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_192_3 will read the stream in chunks and compute a // hash from its contents hash_stream_192_3 :: proc(s: io.Stream) -> ([24]byte, bool) { - _create_haval_ctx(._24, 3) - return _hash_impl->hash_stream_24(s) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 3 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_192_3 will read the file provided by the given handle // and compute a hash hash_file_192_3 :: proc(hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - _create_haval_ctx(._24, 3) - return _hash_impl->hash_file_24(hd, load_at_once) + if !load_at_once { + return hash_stream_192_3(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_192_3(buf[:]), ok + } + } + return [24]byte{}, false } hash_192_3 :: proc { @@ -336,22 +463,50 @@ hash_string_192_4 :: proc(data: string) -> [24]byte { // hash_bytes_192_4 will hash the given input and return the // computed hash hash_bytes_192_4 :: proc(data: []byte) -> [24]byte { - _create_haval_ctx(._24, 4) - return _hash_impl->hash_bytes_24(data) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 4 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_192_4 will read the stream in chunks and compute a // hash from its contents hash_stream_192_4 :: proc(s: io.Stream) -> ([24]byte, bool) { - _create_haval_ctx(._24, 4) - return _hash_impl->hash_stream_24(s) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 4 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_192_4 will read the file provided by the given handle // and compute a hash hash_file_192_4 :: proc(hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - _create_haval_ctx(._24, 4) - return _hash_impl->hash_file_24(hd, load_at_once) + if !load_at_once { + return hash_stream_192_4(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_192_4(buf[:]), ok + } + } + return [24]byte{}, false } hash_192_4 :: proc { @@ -370,22 +525,50 @@ hash_string_192_5 :: proc(data: string) -> [24]byte { // hash_bytes_224_5 will hash the given input and return the // computed hash hash_bytes_192_5 :: proc(data: []byte) -> [24]byte { - _create_haval_ctx(._24, 5) - return _hash_impl->hash_bytes_24(data) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 5 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_192_5 will read the stream in chunks and compute a // hash from its contents hash_stream_192_5 :: proc(s: io.Stream) -> ([24]byte, bool) { - _create_haval_ctx(._24, 5) - return _hash_impl->hash_stream_24(s) + hash: [24]byte + ctx: Haval_Context + ctx.hashbitlen = 192 + ctx.rounds = 5 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_192_5 will read the file provided by the given handle // and compute a hash hash_file_192_5 :: proc(hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - _create_haval_ctx(._24, 5) - return _hash_impl->hash_file_24(hd, load_at_once) + if !load_at_once { + return hash_stream_192_5(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_192_5(buf[:]), ok + } + } + return [24]byte{}, false } hash_192_5 :: proc { @@ -404,22 +587,50 @@ hash_string_224_3 :: proc(data: string) -> [28]byte { // hash_bytes_224_3 will hash the given input and return the // computed hash hash_bytes_224_3 :: proc(data: []byte) -> [28]byte { - _create_haval_ctx(._28, 3) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 3 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224_3 will read the stream in chunks and compute a // hash from its contents hash_stream_224_3 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_haval_ctx(._28, 3) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 3 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224_3 will read the file provided by the given handle // and compute a hash hash_file_224_3 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_haval_ctx(._28, 3) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224_3(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224_3(buf[:]), ok + } + } + return [28]byte{}, false } hash_224_3 :: proc { @@ -438,22 +649,50 @@ hash_string_224_4 :: proc(data: string) -> [28]byte { // hash_bytes_224_4 will hash the given input and return the // computed hash hash_bytes_224_4 :: proc(data: []byte) -> [28]byte { - _create_haval_ctx(._28, 4) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 4 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224_4 will read the stream in chunks and compute a // hash from its contents hash_stream_224_4 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_haval_ctx(._28, 4) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 4 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224_4 will read the file provided by the given handle // and compute a hash hash_file_224_4 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_haval_ctx(._28, 4) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224_4(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224_4(buf[:]), ok + } + } + return [28]byte{}, false } hash_224_4 :: proc { @@ -472,22 +711,50 @@ hash_string_224_5 :: proc(data: string) -> [28]byte { // hash_bytes_224_5 will hash the given input and return the // computed hash hash_bytes_224_5 :: proc(data: []byte) -> [28]byte { - _create_haval_ctx(._28, 5) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 5 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224_5 will read the stream in chunks and compute a // hash from its contents hash_stream_224_5 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_haval_ctx(._28, 5) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Haval_Context + ctx.hashbitlen = 224 + ctx.rounds = 5 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224_5 will read the file provided by the given handle // and compute a hash hash_file_224_5 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_haval_ctx(._28, 5) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224_5(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224_5(buf[:]), ok + } + } + return [28]byte{}, false } hash_224_5 :: proc { @@ -506,22 +773,50 @@ hash_string_256_3 :: proc(data: string) -> [32]byte { // hash_bytes_256_3 will hash the given input and return the // computed hash hash_bytes_256_3 :: proc(data: []byte) -> [32]byte { - _create_haval_ctx(._32, 3) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 3 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256_3 will read the stream in chunks and compute a // hash from its contents hash_stream_256_3 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_haval_ctx(._32, 3) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 3 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256_3 will read the file provided by the given handle // and compute a hash hash_file_256_3 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_haval_ctx(._32, 3) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256_3(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256_3(buf[:]), ok + } + } + return [32]byte{}, false } hash_256_3 :: proc { @@ -540,22 +835,50 @@ hash_string_256_4 :: proc(data: string) -> [32]byte { // hash_bytes_256_4 will hash the given input and return the // computed hash hash_bytes_256_4 :: proc(data: []byte) -> [32]byte { - _create_haval_ctx(._32, 4) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 4 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256_4 will read the stream in chunks and compute a // hash from its contents hash_stream_256_4 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_haval_ctx(._32, 4) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 4 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256_4 will read the file provided by the given handle // and compute a hash hash_file_256_4 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_haval_ctx(._32, 4) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256_4(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256_4(buf[:]), ok + } + } + return [32]byte{}, false } hash_256_4 :: proc { @@ -574,22 +897,50 @@ hash_string_256_5 :: proc(data: string) -> [32]byte { // hash_bytes_256_5 will hash the given input and return the // computed hash hash_bytes_256_5 :: proc(data: []byte) -> [32]byte { - _create_haval_ctx(._32, 5) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 5 + init(&ctx) + ctx.str_len = u32(len(data)) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256_5 will read the stream in chunks and compute a // hash from its contents hash_stream_256_5 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_haval_ctx(._32, 5) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Haval_Context + ctx.hashbitlen = 256 + ctx.rounds = 5 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + ctx.str_len = u32(len(buf[:read])) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256_5 will read the file provided by the given handle // and compute a hash hash_file_256_5 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_haval_ctx(._32, 5) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256_5(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256_5(buf[:]), ok + } + } + return [32]byte{}, false } hash_256_5 :: proc { @@ -603,260 +954,93 @@ hash_256_5 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Haval_Context) { + assert(ctx.hashbitlen == 128 || ctx.hashbitlen == 160 || ctx.hashbitlen == 192 || ctx.hashbitlen == 224 || ctx.hashbitlen == 256, "hashbitlen must be set to 128, 160, 192, 224 or 256") + assert(ctx.rounds == 3 || ctx.rounds == 4 || ctx.rounds == 5, "rounds must be set to 3, 4 or 5") + ctx.fingerprint[0] = 0x243f6a88 + ctx.fingerprint[1] = 0x85a308d3 + ctx.fingerprint[2] = 0x13198a2e + ctx.fingerprint[3] = 0x03707344 + ctx.fingerprint[4] = 0xa4093822 + ctx.fingerprint[5] = 0x299f31d0 + ctx.fingerprint[6] = 0x082efa98 + ctx.fingerprint[7] = 0xec4e6c89 } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} +// @note(zh): Make sure to set ctx.str_len to the remaining buffer size before calling this proc - e.g. ctx.str_len = u32(len(data)) +update :: proc(ctx: ^Haval_Context, data: []byte) { + i: u32 + rmd_len := u32((ctx.count[0] >> 3) & 0x7f) + fill_len := 128 - rmd_len + str_len := ctx.str_len -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - c.str_len = u32(len(data)) - update_odin(&c, data) - final_odin(&c, hash[:]) + ctx.count[0] += str_len << 3 + if ctx.count[0] < (str_len << 3) { + ctx.count[1] += 1 } - return hash -} + ctx.count[1] += str_len >> 29 -hash_stream_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - c.str_len = u32(len(buf[:read])) - update_odin(&c, buf[:read]) - } + when ODIN_ENDIAN == "little" { + if rmd_len + str_len >= 128 { + copy(util.slice_to_bytes(ctx.block[:])[rmd_len:], data[:fill_len]) + block(ctx, ctx.rounds) + for i = fill_len; i + 127 < str_len; i += 128 { + copy(util.slice_to_bytes(ctx.block[:]), data[i:128]) + block(ctx, ctx.rounds) + } + rmd_len = 0 + } else { + i = 0 } - final_odin(&c, hash[:]) - return hash, true + copy(util.slice_to_bytes(ctx.block[:])[rmd_len:], data[i:]) } else { - return hash, false - } -} - -hash_file_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_16(ctx, buf[:]), ok + if rmd_len + str_len >= 128 { + copy(ctx.remainder[rmd_len:], data[:fill_len]) + CH2UINT(ctx.remainder[:], ctx.block[:]) + block(ctx, ctx.rounds) + for i = fill_len; i + 127 < str_len; i += 128 { + copy(ctx.remainder[:], data[i:128]) + CH2UINT(ctx.remainder[:], ctx.block[:]) + block(ctx, ctx.rounds) + } + rmd_len = 0 + } else { + i = 0 } + copy(ctx.remainder[rmd_len:], data[i:]) } - return [16]byte{}, false } -hash_bytes_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - c.str_len = u32(len(data)) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} +final :: proc(ctx: ^Haval_Context, hash: []byte) { + pad_len: u32 + tail: [10]byte -hash_stream_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - c.str_len = u32(len(buf[:read])) - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true + tail[0] = byte(ctx.hashbitlen & 0x3) << 6 | byte(ctx.rounds & 0x7) << 3 | (VERSION & 0x7) + tail[1] = byte(ctx.hashbitlen >> 2) & 0xff + + UINT2CH(ctx.count[:], util.slice_to_bytes(tail[2:]), 2) + rmd_len := (ctx.count[0] >> 3) & 0x7f + if rmd_len < 118 { + pad_len = 118 - rmd_len } else { - return hash, false + pad_len = 246 - rmd_len } -} -hash_file_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_odin_20(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_20(ctx, buf[:]), ok - } - } - return [20]byte{}, false -} + ctx.str_len = pad_len + update(ctx, PADDING[:]) + ctx.str_len = 10 + update(ctx, tail[:]) + tailor(ctx, ctx.hashbitlen) + UINT2CH(ctx.fingerprint[:], hash, ctx.hashbitlen >> 5) -hash_bytes_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [24]byte { - hash: [24]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - c.str_len = u32(len(data)) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([24]byte, bool) { - hash: [24]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - c.str_len = u32(len(buf[:read])) - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - if !load_at_once { - return hash_stream_odin_24(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_24(ctx, buf[:]), ok - } - } - return [24]byte{}, false -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - c.str_len = u32(len(data)) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - c.str_len = u32(len(buf[:read])) - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok - } - } - return [28]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - c.str_len = u32(len(data)) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - c.str_len = u32(len(buf[:read])) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - c.str_len = u32(len(data)) - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Haval_Context); ok { - final_odin(&c, hash) - } + mem.set(ctx, 0, size_of(ctx)) } /* HAVAL implementation */ -HAVAL_VERSION :: 1 +VERSION :: 1 Haval_Context :: struct { count: [2]u32, @@ -879,23 +1063,23 @@ PADDING := [128]byte { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } -F_1 :: #force_inline proc(x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { +F_1 :: #force_inline proc "contextless" (x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { return ((x1) & ((x0) ~ (x4)) ~ (x2) & (x5) ~ (x3) & (x6) ~ (x0)) } -F_2 :: #force_inline proc(x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { +F_2 :: #force_inline proc "contextless" (x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { return ((x2) & ((x1) & ~(x3) ~ (x4) & (x5) ~ (x6) ~ (x0)) ~ (x4) & ((x1) ~ (x5)) ~ (x3) & (x5) ~ (x0)) } -F_3 :: #force_inline proc(x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { +F_3 :: #force_inline proc "contextless" (x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { return ((x3) & ((x1) & (x2) ~ (x6) ~ (x0)) ~ (x1) & (x4) ~ (x2) & (x5) ~ (x0)) } -F_4 :: #force_inline proc(x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { +F_4 :: #force_inline proc "contextless" (x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { return ((x4) & ((x5) & ~(x2) ~ (x3) & ~(x6) ~ (x1) ~ (x6) ~ (x0)) ~ (x3) & ((x1) & (x2) ~ (x5) ~ (x6)) ~ (x2) & (x6) ~ (x0)) } -F_5 :: #force_inline proc(x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { +F_5 :: #force_inline proc "contextless" (x6, x5, x4, x3, x2, x1, x0: u32) -> u32 { return ((x0) & ((x1) & (x2) & (x3) ~ ~(x5)) ~ (x1) & (x4) ~ (x2) & (x5) ~ (x3) & (x6)) } @@ -976,13 +1160,13 @@ FF_5 :: #force_inline proc(x7, x6, x5, x4, x3, x2, x1, x0, w, c, rounds: u32) -> return x8 } -HAVAL_CH2UINT :: #force_inline proc (str: []byte, word: []u32) { +CH2UINT :: #force_inline proc "contextless" (str: []byte, word: []u32) { for _, i in word[:32] { word[i] = u32(str[i*4+0]) << 0 | u32(str[i*4+1]) << 8 | u32(str[i*4+2]) << 16 | u32(str[i*4+3]) << 24 } } -HAVAL_UINT2CH :: #force_inline proc(word: []u32, str: []byte, wlen: u32) { +UINT2CH :: #force_inline proc "contextless" (word: []u32, str: []byte, wlen: u32) { for _, i in word[:wlen] { str[i*4+0] = byte(word[i] >> 0) & 0xff str[i*4+1] = byte(word[i] >> 8) & 0xff @@ -991,7 +1175,7 @@ HAVAL_UINT2CH :: #force_inline proc(word: []u32, str: []byte, wlen: u32) { } } -haval_block :: proc(ctx: ^Haval_Context, rounds: u32) { +block :: proc(ctx: ^Haval_Context, rounds: u32) { t0, t1, t2, t3 := ctx.fingerprint[0], ctx.fingerprint[1], ctx.fingerprint[2], ctx.fingerprint[3] t4, t5, t6, t7 := ctx.fingerprint[4], ctx.fingerprint[5], ctx.fingerprint[6], ctx.fingerprint[7] w := ctx.block @@ -1190,7 +1374,7 @@ haval_block :: proc(ctx: ^Haval_Context, rounds: u32) { ctx.fingerprint[7] += t7 } -haval_tailor :: proc(ctx: ^Haval_Context, size: u32) { +tailor :: proc(ctx: ^Haval_Context, size: u32) { temp: u32 switch size { case 128: @@ -1276,82 +1460,3 @@ haval_tailor :: proc(ctx: ^Haval_Context, size: u32) { ctx.fingerprint[6] += ctx.fingerprint[7] & 0x0f } } - -init_odin :: proc(ctx: ^Haval_Context) { - ctx.fingerprint[0] = 0x243f6a88 - ctx.fingerprint[1] = 0x85a308d3 - ctx.fingerprint[2] = 0x13198a2e - ctx.fingerprint[3] = 0x03707344 - ctx.fingerprint[4] = 0xa4093822 - ctx.fingerprint[5] = 0x299f31d0 - ctx.fingerprint[6] = 0x082efa98 - ctx.fingerprint[7] = 0xec4e6c89 -} - -update_odin :: proc(ctx: ^Haval_Context, data: []byte) { - i: u32 - rmd_len := u32((ctx.count[0] >> 3) & 0x7f) - fill_len := 128 - rmd_len - str_len := ctx.str_len - - ctx.count[0] += str_len << 3 - if ctx.count[0] < (str_len << 3) { - ctx.count[1] += 1 - } - ctx.count[1] += str_len >> 29 - - when ODIN_ENDIAN == "little" { - if rmd_len + str_len >= 128 { - copy(util.slice_to_bytes(ctx.block[:])[rmd_len:], data[:fill_len]) - haval_block(ctx, ctx.rounds) - for i = fill_len; i + 127 < str_len; i += 128 { - copy(util.slice_to_bytes(ctx.block[:]), data[i:128]) - haval_block(ctx, ctx.rounds) - } - rmd_len = 0 - } else { - i = 0 - } - copy(util.slice_to_bytes(ctx.block[:])[rmd_len:], data[i:]) - } else { - if rmd_len + str_len >= 128 { - copy(ctx.remainder[rmd_len:], data[:fill_len]) - HAVAL_CH2UINT(ctx.remainder[:], ctx.block[:]) - haval_block(ctx, ctx.rounds) - for i = fill_len; i + 127 < str_len; i += 128 { - copy(ctx.remainder[:], data[i:128]) - HAVAL_CH2UINT(ctx.remainder[:], ctx.block[:]) - haval_block(ctx, ctx.rounds) - } - rmd_len = 0 - } else { - i = 0 - } - copy(ctx.remainder[rmd_len:], data[i:]) - } -} - -final_odin :: proc(ctx: ^Haval_Context, hash: []byte) { - pad_len: u32 - tail: [10]byte - - tail[0] = byte(ctx.hashbitlen & 0x3) << 6 | byte(ctx.rounds & 0x7) << 3 | (HAVAL_VERSION & 0x7) - tail[1] = byte(ctx.hashbitlen >> 2) & 0xff - - HAVAL_UINT2CH(ctx.count[:], util.slice_to_bytes(tail[2:]), 2) - rmd_len := (ctx.count[0] >> 3) & 0x7f - if rmd_len < 118 { - pad_len = 118 - rmd_len - } else { - pad_len = 246 - rmd_len - } - - ctx.str_len = pad_len - update_odin(ctx, PADDING[:]) - ctx.str_len = 10 - update_odin(ctx, tail[:]) - haval_tailor(ctx, ctx.hashbitlen) - HAVAL_UINT2CH(ctx.fingerprint[:], hash, ctx.hashbitlen >> 5) - - mem.set(ctx, 0, size_of(ctx)) -} diff --git a/core/crypto/jh/jh.odin b/core/crypto/jh/jh.odin index 3c48f6666..f251424d2 100644 --- a/core/crypto/jh/jh.odin +++ b/core/crypto/jh/jh.odin @@ -6,7 +6,6 @@ package jh List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the JH hashing algorithm, as defined in */ @@ -14,70 +13,6 @@ package jh import "core:os" import "core:io" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since JH is not available in Botan -@(warning="JH is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_jh_ctx :: #force_inline proc(size: _ctx.Hash_Size) { - ctx: Jh_Context - #partial switch size { - case ._28: ctx.hashbitlen = 224 - case ._32: ctx.hashbitlen = 256 - case ._48: ctx.hashbitlen = 384 - case ._64: ctx.hashbitlen = 512 - } - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = size -} - /* High level API */ @@ -91,22 +26,46 @@ hash_string_224 :: proc(data: string) -> [28]byte { // hash_bytes_224 will hash the given input and return the // computed hash hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_jh_ctx(._28) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Jh_Context + ctx.hashbitlen = 224 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_jh_ctx(._28) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Jh_Context + ctx.hashbitlen = 224 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_jh_ctx(._28) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -125,22 +84,46 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_jh_ctx(._32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Jh_Context + ctx.hashbitlen = 256 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_jh_ctx(._32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Jh_Context + ctx.hashbitlen = 256 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_jh_ctx(._32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -159,22 +142,46 @@ hash_string_384 :: proc(data: string) -> [48]byte { // hash_bytes_384 will hash the given input and return the // computed hash hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_jh_ctx(._48) - return _hash_impl->hash_bytes_48(data) + hash: [48]byte + ctx: Jh_Context + ctx.hashbitlen = 384 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_jh_ctx(._48) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: Jh_Context + ctx.hashbitlen = 384 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_jh_ctx(._48) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -193,22 +200,46 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_jh_ctx(._64) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: Jh_Context + ctx.hashbitlen = 512 + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_jh_ctx(._64) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Jh_Context + ctx.hashbitlen = 512 + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_jh_ctx(._64) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -222,201 +253,98 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Jh_Context) { + assert(ctx.hashbitlen == 224 || ctx.hashbitlen == 256 || ctx.hashbitlen == 384 || ctx.hashbitlen == 512, "hashbitlen must be set to 224, 256, 384 or 512") + ctx.H[1] = byte(ctx.hashbitlen) & 0xff + ctx.H[0] = byte(ctx.hashbitlen >> 8) & 0xff + F8(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} +update :: proc(ctx: ^Jh_Context, data: []byte) { + databitlen := u64(len(data)) * 8 + ctx.databitlen += databitlen + i := u64(0) -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) + if (ctx.buffer_size > 0) && ((ctx.buffer_size + databitlen) < 512) { + if (databitlen & 7) == 0 { + copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3)]) + } else { + copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3) + 1]) + } + ctx.buffer_size += databitlen + databitlen = 0 } - return hash -} -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } + if (ctx.buffer_size > 0 ) && ((ctx.buffer_size + databitlen) >= 512) { + copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3)]) + i = 64 - (ctx.buffer_size >> 3) + databitlen = databitlen - (512 - ctx.buffer_size) + F8(ctx) + ctx.buffer_size = 0 + } + + for databitlen >= 512 { + copy(ctx.buffer[:], data[i:i + 64]) + F8(ctx) + i += 64 + databitlen -= 512 + } + + if databitlen > 0 { + if (databitlen & 7) == 0 { + copy(ctx.buffer[:], data[i:i + ((databitlen & 0x1ff) >> 3)]) + } else { + copy(ctx.buffer[:], data[i:i + ((databitlen & 0x1ff) >> 3) + 1]) } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false + ctx.buffer_size = databitlen } } -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok +final :: proc(ctx: ^Jh_Context, hash: []byte) { + if ctx.databitlen & 0x1ff == 0 { + for i := 0; i < 64; i += 1 { + ctx.buffer[i] = 0 } - } - return [28]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true + ctx.buffer[0] = 0x80 + ctx.buffer[63] = byte(ctx.databitlen) & 0xff + ctx.buffer[62] = byte(ctx.databitlen >> 8) & 0xff + ctx.buffer[61] = byte(ctx.databitlen >> 16) & 0xff + ctx.buffer[60] = byte(ctx.databitlen >> 24) & 0xff + ctx.buffer[59] = byte(ctx.databitlen >> 32) & 0xff + ctx.buffer[58] = byte(ctx.databitlen >> 40) & 0xff + ctx.buffer[57] = byte(ctx.databitlen >> 48) & 0xff + ctx.buffer[56] = byte(ctx.databitlen >> 56) & 0xff + F8(ctx) } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok + if ctx.buffer_size & 7 == 0 { + for i := (ctx.databitlen & 0x1ff) >> 3; i < 64; i += 1 { + ctx.buffer[i] = 0 + } + } else { + for i := ((ctx.databitlen & 0x1ff) >> 3) + 1; i < 64; i += 1 { + ctx.buffer[i] = 0 + } } - } - return [32]byte{}, false -} - -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } + ctx.buffer[(ctx.databitlen & 0x1ff) >> 3] |= 1 << (7 - (ctx.databitlen & 7)) + F8(ctx) + for i := 0; i < 64; i += 1 { + ctx.buffer[i] = 0 } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false + ctx.buffer[63] = byte(ctx.databitlen) & 0xff + ctx.buffer[62] = byte(ctx.databitlen >> 8) & 0xff + ctx.buffer[61] = byte(ctx.databitlen >> 16) & 0xff + ctx.buffer[60] = byte(ctx.databitlen >> 24) & 0xff + ctx.buffer[59] = byte(ctx.databitlen >> 32) & 0xff + ctx.buffer[58] = byte(ctx.databitlen >> 40) & 0xff + ctx.buffer[57] = byte(ctx.databitlen >> 48) & 0xff + ctx.buffer[56] = byte(ctx.databitlen >> 56) & 0xff + F8(ctx) } -} - -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_jh_ctx(ctx.hash_size) - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Jh_Context); ok { - final_odin(&c, hash) + switch ctx.hashbitlen { + case 224: copy(hash[:], ctx.H[100:128]) + case 256: copy(hash[:], ctx.H[96:128]) + case 384: copy(hash[:], ctx.H[80:128]) + case 512: copy(hash[:], ctx.H[64:128]) } } @@ -424,7 +352,7 @@ _final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { JH implementation */ -JH_ROUNDCONSTANT_ZERO := [64]byte { +ROUNDCONSTANT_ZERO := [64]byte { 0x6, 0xa, 0x0, 0x9, 0xe, 0x6, 0x6, 0x7, 0xf, 0x3, 0xb, 0xc, 0xc, 0x9, 0x0, 0x8, 0xb, 0x2, 0xf, 0xb, 0x1, 0x3, 0x6, 0x6, @@ -435,7 +363,7 @@ JH_ROUNDCONSTANT_ZERO := [64]byte { 0x0, 0x6, 0x6, 0x7, 0x3, 0x2, 0x2, 0xa, } -JH_S := [2][16]byte { +SBOX := [2][16]byte { {9, 0, 4, 11, 13, 12, 3, 15, 1, 10, 2, 6, 7, 5, 8, 14}, {3, 12, 6, 13, 5, 7, 1, 9, 15, 2, 0, 4, 11, 10, 14, 8}, } @@ -450,7 +378,7 @@ Jh_Context :: struct { buffer: [64]byte, } -JH_E8_finaldegroup :: proc(ctx: ^Jh_Context) { +E8_finaldegroup :: proc(ctx: ^Jh_Context) { t0,t1,t2,t3: byte tem: [256]byte for i := 0; i < 128; i += 1 { @@ -473,11 +401,11 @@ JH_E8_finaldegroup :: proc(ctx: ^Jh_Context) { } } -jh_update_roundconstant :: proc(ctx: ^Jh_Context) { +update_roundconstant :: proc(ctx: ^Jh_Context) { tem: [64]byte t: byte for i := 0; i < 64; i += 1 { - tem[i] = JH_S[0][ctx.roundconstant[i]] + tem[i] = SBOX[0][ctx.roundconstant[i]] } for i := 0; i < 64; i += 2 { tem[i + 1] ~= ((tem[i] << 1) ~ (tem[i] >> 3) ~ ((tem[i] >> 2) & 2)) & 0xf @@ -499,14 +427,14 @@ jh_update_roundconstant :: proc(ctx: ^Jh_Context) { } } -JH_R8 :: proc(ctx: ^Jh_Context) { +R8 :: proc(ctx: ^Jh_Context) { t: byte tem, roundconstant_expanded: [256]byte for i := u32(0); i < 256; i += 1 { roundconstant_expanded[i] = (ctx.roundconstant[i >> 2] >> (3 - (i & 3)) ) & 1 } for i := 0; i < 256; i += 1 { - tem[i] = JH_S[roundconstant_expanded[i]][ctx.A[i]] + tem[i] = SBOX[roundconstant_expanded[i]][ctx.A[i]] } for i := 0; i < 256; i += 2 { tem[i+1] ~= ((tem[i] << 1) ~ (tem[i] >> 3) ~ ((tem[i] >> 2) & 2)) & 0xf @@ -528,7 +456,7 @@ JH_R8 :: proc(ctx: ^Jh_Context) { } } -JH_E8_initialgroup :: proc(ctx: ^Jh_Context) { +E8_initialgroup :: proc(ctx: ^Jh_Context) { t0, t1, t2, t3: byte tem: [256]byte for i := u32(0); i < 256; i += 1 { @@ -544,118 +472,24 @@ JH_E8_initialgroup :: proc(ctx: ^Jh_Context) { } } -JH_E8 :: proc(ctx: ^Jh_Context) { +E8 :: proc(ctx: ^Jh_Context) { for i := 0; i < 64; i += 1 { - ctx.roundconstant[i] = JH_ROUNDCONSTANT_ZERO[i] + ctx.roundconstant[i] = ROUNDCONSTANT_ZERO[i] } - JH_E8_initialgroup(ctx) + E8_initialgroup(ctx) for i := 0; i < 42; i += 1 { - JH_R8(ctx) - jh_update_roundconstant(ctx) + R8(ctx) + update_roundconstant(ctx) } - JH_E8_finaldegroup(ctx) + E8_finaldegroup(ctx) } -JH_F8 :: proc(ctx: ^Jh_Context) { +F8 :: proc(ctx: ^Jh_Context) { for i := 0; i < 64; i += 1 { ctx.H[i] ~= ctx.buffer[i] } - JH_E8(ctx) + E8(ctx) for i := 0; i < 64; i += 1 { ctx.H[i + 64] ~= ctx.buffer[i] } } - -init_odin :: proc(ctx: ^Jh_Context) { - ctx.H[1] = byte(ctx.hashbitlen) & 0xff - ctx.H[0] = byte(ctx.hashbitlen >> 8) & 0xff - JH_F8(ctx) -} - -update_odin :: proc(ctx: ^Jh_Context, data: []byte) { - databitlen := u64(len(data)) * 8 - ctx.databitlen += databitlen - i := u64(0) - - if (ctx.buffer_size > 0) && ((ctx.buffer_size + databitlen) < 512) { - if (databitlen & 7) == 0 { - copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3)]) - } else { - copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3) + 1]) - } - ctx.buffer_size += databitlen - databitlen = 0 - } - - if (ctx.buffer_size > 0 ) && ((ctx.buffer_size + databitlen) >= 512) { - copy(ctx.buffer[ctx.buffer_size >> 3:], data[:64 - (ctx.buffer_size >> 3)]) - i = 64 - (ctx.buffer_size >> 3) - databitlen = databitlen - (512 - ctx.buffer_size) - JH_F8(ctx) - ctx.buffer_size = 0 - } - - for databitlen >= 512 { - copy(ctx.buffer[:], data[i:i + 64]) - JH_F8(ctx) - i += 64 - databitlen -= 512 - } - - if databitlen > 0 { - if (databitlen & 7) == 0 { - copy(ctx.buffer[:], data[i:i + ((databitlen & 0x1ff) >> 3)]) - } else { - copy(ctx.buffer[:], data[i:i + ((databitlen & 0x1ff) >> 3) + 1]) - } - ctx.buffer_size = databitlen - } -} - -final_odin :: proc(ctx: ^Jh_Context, hash: []byte) { - if ctx.databitlen & 0x1ff == 0 { - for i := 0; i < 64; i += 1 { - ctx.buffer[i] = 0 - } - ctx.buffer[0] = 0x80 - ctx.buffer[63] = byte(ctx.databitlen) & 0xff - ctx.buffer[62] = byte(ctx.databitlen >> 8) & 0xff - ctx.buffer[61] = byte(ctx.databitlen >> 16) & 0xff - ctx.buffer[60] = byte(ctx.databitlen >> 24) & 0xff - ctx.buffer[59] = byte(ctx.databitlen >> 32) & 0xff - ctx.buffer[58] = byte(ctx.databitlen >> 40) & 0xff - ctx.buffer[57] = byte(ctx.databitlen >> 48) & 0xff - ctx.buffer[56] = byte(ctx.databitlen >> 56) & 0xff - JH_F8(ctx) - } else { - if ctx.buffer_size & 7 == 0 { - for i := (ctx.databitlen & 0x1ff) >> 3; i < 64; i += 1 { - ctx.buffer[i] = 0 - } - } else { - for i := ((ctx.databitlen & 0x1ff) >> 3) + 1; i < 64; i += 1 { - ctx.buffer[i] = 0 - } - } - ctx.buffer[(ctx.databitlen & 0x1ff) >> 3] |= 1 << (7 - (ctx.databitlen & 7)) - JH_F8(ctx) - for i := 0; i < 64; i += 1 { - ctx.buffer[i] = 0 - } - ctx.buffer[63] = byte(ctx.databitlen) & 0xff - ctx.buffer[62] = byte(ctx.databitlen >> 8) & 0xff - ctx.buffer[61] = byte(ctx.databitlen >> 16) & 0xff - ctx.buffer[60] = byte(ctx.databitlen >> 24) & 0xff - ctx.buffer[59] = byte(ctx.databitlen >> 32) & 0xff - ctx.buffer[58] = byte(ctx.databitlen >> 40) & 0xff - ctx.buffer[57] = byte(ctx.databitlen >> 48) & 0xff - ctx.buffer[56] = byte(ctx.databitlen >> 56) & 0xff - JH_F8(ctx) - } - switch ctx.hashbitlen { - case 224: copy(hash[:], ctx.H[100:128]) - case 256: copy(hash[:], ctx.H[96:128]) - case 384: copy(hash[:], ctx.H[80:128]) - case 512: copy(hash[:], ctx.H[64:128]) - } -} diff --git a/core/crypto/keccak/keccak.odin b/core/crypto/keccak/keccak.odin index 4b3f9a5a2..19c4c7dda 100644 --- a/core/crypto/keccak/keccak.odin +++ b/core/crypto/keccak/keccak.odin @@ -6,7 +6,6 @@ package keccak List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the Keccak hashing algorithm. This is done because the padding in the SHA3 standard was changed by the NIST, resulting in a different output. @@ -15,57 +14,8 @@ package keccak import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../_sha3" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_KECCAK) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} /* High level API @@ -80,22 +30,48 @@ hash_string_224 :: proc(data: string) -> [28]byte { // hash_bytes_224 will hash the given input and return the // computed hash hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_keccak_ctx(28) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 28 + ctx.is_keccak = true + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_keccak_ctx(28) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 28 + ctx.is_keccak = true + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_keccak_ctx(28) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -114,22 +90,48 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_keccak_ctx(32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + ctx.is_keccak = true + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_keccak_ctx(32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + ctx.is_keccak = true + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_keccak_ctx(32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -148,22 +150,48 @@ hash_string_384 :: proc(data: string) -> [48]byte { // hash_bytes_384 will hash the given input and return the // computed hash hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_keccak_ctx(48) - return _hash_impl->hash_bytes_48(data) + hash: [48]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 48 + ctx.is_keccak = true + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_keccak_ctx(48) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 48 + ctx.is_keccak = true + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_keccak_ctx(48) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -182,22 +210,48 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_keccak_ctx(64) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 64 + ctx.is_keccak = true + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_keccak_ctx(64) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 64 + ctx.is_keccak = true + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_keccak_ctx(64) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -211,219 +265,17 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +Sha3_Context :: _sha3.Sha3_Context + +init :: proc(ctx: ^_sha3.Sha3_Context) { + ctx.is_keccak = true + _sha3.init(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc "contextless" (ctx: ^_sha3.Sha3_Context, data: []byte) { + _sha3.update(ctx, data) } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok - } - } - return [28]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_create_keccak_ctx :: #force_inline proc(mdlen: int) { - ctx: _sha3.Sha3_Context - ctx.mdlen = mdlen - ctx.is_keccak = true - _hash_impl.internal_ctx = ctx - switch mdlen { - case 28: _hash_impl.hash_size = ._28 - case 32: _hash_impl.hash_size = ._32 - case 48: _hash_impl.hash_size = ._48 - case 64: _hash_impl.hash_size = ._64 - } -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._28: _create_keccak_ctx(28) - case ._32: _create_keccak_ctx(32) - case ._48: _create_keccak_ctx(48) - case ._64: _create_keccak_ctx(64) - } - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.final_odin(&c, hash) - } +final :: proc "contextless" (ctx: ^_sha3.Sha3_Context, hash: []byte) { + _sha3.final(ctx, hash) } diff --git a/core/crypto/md2/md2.odin b/core/crypto/md2/md2.odin index ceca0f58b..5e027c13c 100644 --- a/core/crypto/md2/md2.odin +++ b/core/crypto/md2/md2.odin @@ -6,7 +6,6 @@ package md2 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the MD2 hashing algorithm, as defined in RFC 1319 */ @@ -14,48 +13,6 @@ package md2 import "core:os" import "core:io" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin - ctx.hash_file_16 = hash_file_odin - ctx.hash_stream_16 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since MD2 is not available in Botan -@(warning="MD2 is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -69,22 +26,44 @@ hash_string :: proc(data: string) -> [16]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [16]byte { - _create_md2_ctx() - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Md2_Context + // init(&ctx) No-op + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_md2_ctx() - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Md2_Context + // init(&ctx) No-op + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_md2_ctx() - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [16]byte{}, false } hash :: proc { @@ -98,85 +77,32 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +@(warning="Init is a no-op for MD2") +init :: proc(ctx: ^Md2_Context) { + // No action needed here } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc(ctx: ^Md2_Context, data: []byte) { + for i := 0; i < len(data); i += 1 { + ctx.data[ctx.datalen] = data[i] + ctx.datalen += 1 + if (ctx.datalen == 16) { + transform(ctx, ctx.data[:]) + ctx.datalen = 0 + } + } } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md2_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) +final :: proc(ctx: ^Md2_Context, hash: []byte) { + to_pad := byte(16 - ctx.datalen) + for ctx.datalen < 16 { + ctx.data[ctx.datalen] = to_pad + ctx.datalen += 1 } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md2_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok - } - } - return [16]byte{}, false -} - -@(private) -_create_md2_ctx :: #force_inline proc() { - ctx: Md2_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._16 -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_md2_ctx() - if c, ok := ctx.internal_ctx.(Md2_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Md2_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Md2_Context); ok { - final_odin(&c, hash) + transform(ctx, ctx.data[:]) + transform(ctx, ctx.checksum[:]) + for i := 0; i < 16; i += 1 { + hash[i] = ctx.state[i] } } @@ -232,31 +158,3 @@ transform :: proc(ctx: ^Md2_Context, data: []byte) { t = ctx.checksum[j] } } - -init_odin :: proc(ctx: ^Md2_Context) { - // No action needed here -} - -update_odin :: proc(ctx: ^Md2_Context, data: []byte) { - for i := 0; i < len(data); i += 1 { - ctx.data[ctx.datalen] = data[i] - ctx.datalen += 1 - if (ctx.datalen == 16) { - transform(ctx, ctx.data[:]) - ctx.datalen = 0 - } - } -} - -final_odin :: proc(ctx: ^Md2_Context, hash: []byte) { - to_pad := byte(16 - ctx.datalen) - for ctx.datalen < 16 { - ctx.data[ctx.datalen] = to_pad - ctx.datalen += 1 - } - transform(ctx, ctx.data[:]) - transform(ctx, ctx.checksum[:]) - for i := 0; i < 16; i += 1 { - hash[i] = ctx.state[i] - } -} \ No newline at end of file diff --git a/core/crypto/md4/md4.odin b/core/crypto/md4/md4.odin index bc012caea..813db578a 100644 --- a/core/crypto/md4/md4.odin +++ b/core/crypto/md4/md4.odin @@ -16,47 +16,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin - ctx.hash_file_16 = hash_file_odin - ctx.hash_stream_16 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_MD4) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} /* High level API @@ -71,22 +30,44 @@ hash_string :: proc(data: string) -> [16]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [16]byte { - _create_md4_ctx() - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Md4_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_md4_ctx() - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Md4_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_md4_ctx() - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [16]byte{}, false } hash :: proc { @@ -100,85 +81,61 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Md4_Context) { + ctx.state[0] = 0x67452301 + ctx.state[1] = 0xefcdab89 + ctx.state[2] = 0x98badcfe + ctx.state[3] = 0x10325476 } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md4_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md4_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok +update :: proc(ctx: ^Md4_Context, data: []byte) { + for i := 0; i < len(data); i += 1 { + ctx.data[ctx.datalen] = data[i] + ctx.datalen += 1 + if(ctx.datalen == BLOCK_SIZE) { + transform(ctx, ctx.data[:]) + ctx.bitlen += 512 + ctx.datalen = 0 } } - return [16]byte{}, false } -@(private) -_create_md4_ctx :: #force_inline proc() { - ctx: Md4_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._16 -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_md4_ctx() - if c, ok := ctx.internal_ctx.(Md4_Context); ok { - init_odin(&c) +final :: proc(ctx: ^Md4_Context, hash: []byte) { + i := ctx.datalen + if ctx.datalen < 56 { + ctx.data[i] = 0x80 + i += 1 + for i < 56 { + ctx.data[i] = 0x00 + i += 1 + } + } else if ctx.datalen >= 56 { + ctx.data[i] = 0x80 + i += 1 + for i < BLOCK_SIZE { + ctx.data[i] = 0x00 + i += 1 + } + transform(ctx, ctx.data[:]) + mem.set(&ctx.data, 0, 56) } -} -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Md4_Context); ok { - update_odin(&c, data) - } -} + ctx.bitlen += u64(ctx.datalen * 8) + ctx.data[56] = byte(ctx.bitlen) + ctx.data[57] = byte(ctx.bitlen >> 8) + ctx.data[58] = byte(ctx.bitlen >> 16) + ctx.data[59] = byte(ctx.bitlen >> 24) + ctx.data[60] = byte(ctx.bitlen >> 32) + ctx.data[61] = byte(ctx.bitlen >> 40) + ctx.data[62] = byte(ctx.bitlen >> 48) + ctx.data[63] = byte(ctx.bitlen >> 56) + transform(ctx, ctx.data[:]) -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Md4_Context); ok { - final_odin(&c, hash) + for i = 0; i < 4; i += 1 { + hash[i] = byte(ctx.state[0] >> (i * 8)) & 0x000000ff + hash[i + 4] = byte(ctx.state[1] >> (i * 8)) & 0x000000ff + hash[i + 8] = byte(ctx.state[2] >> (i * 8)) & 0x000000ff + hash[i + 12] = byte(ctx.state[3] >> (i * 8)) & 0x000000ff } } @@ -282,61 +239,3 @@ transform :: proc(ctx: ^Md4_Context, data: []byte) { ctx.state[2] += c ctx.state[3] += d } - -init_odin :: proc(ctx: ^Md4_Context) { - ctx.state[0] = 0x67452301 - ctx.state[1] = 0xefcdab89 - ctx.state[2] = 0x98badcfe - ctx.state[3] = 0x10325476 -} - -update_odin :: proc(ctx: ^Md4_Context, data: []byte) { - for i := 0; i < len(data); i += 1 { - ctx.data[ctx.datalen] = data[i] - ctx.datalen += 1 - if(ctx.datalen == BLOCK_SIZE) { - transform(ctx, ctx.data[:]) - ctx.bitlen += 512 - ctx.datalen = 0 - } - } -} - -final_odin :: proc(ctx: ^Md4_Context, hash: []byte) { - i := ctx.datalen - if ctx.datalen < 56 { - ctx.data[i] = 0x80 - i += 1 - for i < 56 { - ctx.data[i] = 0x00 - i += 1 - } - } else if ctx.datalen >= 56 { - ctx.data[i] = 0x80 - i += 1 - for i < BLOCK_SIZE { - ctx.data[i] = 0x00 - i += 1 - } - transform(ctx, ctx.data[:]) - mem.set(&ctx.data, 0, 56) - } - - ctx.bitlen += u64(ctx.datalen * 8) - ctx.data[56] = byte(ctx.bitlen) - ctx.data[57] = byte(ctx.bitlen >> 8) - ctx.data[58] = byte(ctx.bitlen >> 16) - ctx.data[59] = byte(ctx.bitlen >> 24) - ctx.data[60] = byte(ctx.bitlen >> 32) - ctx.data[61] = byte(ctx.bitlen >> 40) - ctx.data[62] = byte(ctx.bitlen >> 48) - ctx.data[63] = byte(ctx.bitlen >> 56) - transform(ctx, ctx.data[:]) - - for i = 0; i < 4; i += 1 { - hash[i] = byte(ctx.state[0] >> (i * 8)) & 0x000000ff - hash[i + 4] = byte(ctx.state[1] >> (i * 8)) & 0x000000ff - hash[i + 8] = byte(ctx.state[2] >> (i * 8)) & 0x000000ff - hash[i + 12] = byte(ctx.state[3] >> (i * 8)) & 0x000000ff - } -} diff --git a/core/crypto/md5/md5.odin b/core/crypto/md5/md5.odin index 78da3fe33..a41ed16f8 100644 --- a/core/crypto/md5/md5.odin +++ b/core/crypto/md5/md5.odin @@ -6,7 +6,6 @@ package md5 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the MD5 hashing algorithm, as defined in RFC 1321 */ @@ -16,47 +15,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin - ctx.hash_file_16 = hash_file_odin - ctx.hash_stream_16 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_MD5) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} /* High level API @@ -71,22 +29,44 @@ hash_string :: proc(data: string) -> [16]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [16]byte { - _create_md5_ctx() - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Md5_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_md5_ctx() - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Md5_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_md5_ctx() - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [16]byte{}, false } hash :: proc { @@ -100,85 +80,63 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Md5_Context) { + ctx.state[0] = 0x67452301 + ctx.state[1] = 0xefcdab89 + ctx.state[2] = 0x98badcfe + ctx.state[3] = 0x10325476 } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md5_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Md5_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok +update :: proc(ctx: ^Md5_Context, data: []byte) { + for i := 0; i < len(data); i += 1 { + ctx.data[ctx.datalen] = data[i] + ctx.datalen += 1 + if(ctx.datalen == BLOCK_SIZE) { + transform(ctx, ctx.data[:]) + ctx.bitlen += 512 + ctx.datalen = 0 } } - return [16]byte{}, false } -@(private) -_create_md5_ctx :: #force_inline proc() { - ctx: Md5_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._16 -} +final :: proc(ctx: ^Md5_Context, hash: []byte){ + i : u32 + i = ctx.datalen -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_md5_ctx() - if c, ok := ctx.internal_ctx.(Md5_Context); ok { - init_odin(&c) + if ctx.datalen < 56 { + ctx.data[i] = 0x80 + i += 1 + for i < 56 { + ctx.data[i] = 0x00 + i += 1 + } + } else if ctx.datalen >= 56 { + ctx.data[i] = 0x80 + i += 1 + for i < BLOCK_SIZE { + ctx.data[i] = 0x00 + i += 1 + } + transform(ctx, ctx.data[:]) + mem.set(&ctx.data, 0, 56) } -} -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Md5_Context); ok { - update_odin(&c, data) - } -} + ctx.bitlen += u64(ctx.datalen * 8) + ctx.data[56] = byte(ctx.bitlen) + ctx.data[57] = byte(ctx.bitlen >> 8) + ctx.data[58] = byte(ctx.bitlen >> 16) + ctx.data[59] = byte(ctx.bitlen >> 24) + ctx.data[60] = byte(ctx.bitlen >> 32) + ctx.data[61] = byte(ctx.bitlen >> 40) + ctx.data[62] = byte(ctx.bitlen >> 48) + ctx.data[63] = byte(ctx.bitlen >> 56) + transform(ctx, ctx.data[:]) -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Md5_Context); ok { - final_odin(&c, hash) + for i = 0; i < 4; i += 1 { + hash[i] = byte(ctx.state[0] >> (i * 8)) & 0x000000ff + hash[i + 4] = byte(ctx.state[1] >> (i * 8)) & 0x000000ff + hash[i + 8] = byte(ctx.state[2] >> (i * 8)) & 0x000000ff + hash[i + 12] = byte(ctx.state[3] >> (i * 8)) & 0x000000ff } } @@ -303,63 +261,3 @@ transform :: proc(ctx: ^Md5_Context, data: []byte) { ctx.state[2] += c ctx.state[3] += d } - -init_odin :: proc(ctx: ^Md5_Context) { - ctx.state[0] = 0x67452301 - ctx.state[1] = 0xefcdab89 - ctx.state[2] = 0x98badcfe - ctx.state[3] = 0x10325476 -} - -update_odin :: proc(ctx: ^Md5_Context, data: []byte) { - for i := 0; i < len(data); i += 1 { - ctx.data[ctx.datalen] = data[i] - ctx.datalen += 1 - if(ctx.datalen == BLOCK_SIZE) { - transform(ctx, ctx.data[:]) - ctx.bitlen += 512 - ctx.datalen = 0 - } - } -} - -final_odin :: proc(ctx: ^Md5_Context, hash: []byte){ - i : u32 - i = ctx.datalen - - if ctx.datalen < 56 { - ctx.data[i] = 0x80 - i += 1 - for i < 56 { - ctx.data[i] = 0x00 - i += 1 - } - } else if ctx.datalen >= 56 { - ctx.data[i] = 0x80 - i += 1 - for i < BLOCK_SIZE { - ctx.data[i] = 0x00 - i += 1 - } - transform(ctx, ctx.data[:]) - mem.set(&ctx.data, 0, 56) - } - - ctx.bitlen += u64(ctx.datalen * 8) - ctx.data[56] = byte(ctx.bitlen) - ctx.data[57] = byte(ctx.bitlen >> 8) - ctx.data[58] = byte(ctx.bitlen >> 16) - ctx.data[59] = byte(ctx.bitlen >> 24) - ctx.data[60] = byte(ctx.bitlen >> 32) - ctx.data[61] = byte(ctx.bitlen >> 40) - ctx.data[62] = byte(ctx.bitlen >> 48) - ctx.data[63] = byte(ctx.bitlen >> 56) - transform(ctx, ctx.data[:]) - - for i = 0; i < 4; i += 1 { - hash[i] = byte(ctx.state[0] >> (i * 8)) & 0x000000ff - hash[i + 4] = byte(ctx.state[1] >> (i * 8)) & 0x000000ff - hash[i + 8] = byte(ctx.state[2] >> (i * 8)) & 0x000000ff - hash[i + 12] = byte(ctx.state[3] >> (i * 8)) & 0x000000ff - } -} \ No newline at end of file diff --git a/core/crypto/ripemd/ripemd.odin b/core/crypto/ripemd/ripemd.odin index fe480e5a9..a9a5d1126 100644 --- a/core/crypto/ripemd/ripemd.odin +++ b/core/crypto/ripemd/ripemd.odin @@ -6,7 +6,6 @@ package ripemd List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation for the RIPEMD hashing algorithm as defined in */ @@ -15,56 +14,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin_16 - ctx.hash_file_16 = hash_file_odin_16 - ctx.hash_stream_16 = hash_stream_odin_16 - ctx.hash_bytes_20 = hash_bytes_odin_20 - ctx.hash_file_20 = hash_file_odin_20 - ctx.hash_stream_20 = hash_stream_odin_20 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_40 = hash_bytes_odin_40 - ctx.hash_file_40 = hash_file_odin_40 - ctx.hash_stream_40 = hash_stream_odin_40 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_RIPEMD_160) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} /* High level API @@ -79,22 +28,44 @@ hash_string_128 :: proc(data: string) -> [16]byte { // hash_bytes_128 will hash the given input and return the // computed hash hash_bytes_128 :: proc(data: []byte) -> [16]byte { - _create_ripemd_ctx(16) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: Ripemd128_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_128 will read the stream in chunks and compute a // hash from its contents hash_stream_128 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_ripemd_ctx(16) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: Ripemd128_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_128 will read the file provided by the given handle // and compute a hash hash_file_128 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_ripemd_ctx(16) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128(buf[:]), ok + } + } + return [16]byte{}, false } hash_128 :: proc { @@ -113,22 +84,44 @@ hash_string_160 :: proc(data: string) -> [20]byte { // hash_bytes_160 will hash the given input and return the // computed hash hash_bytes_160 :: proc(data: []byte) -> [20]byte { - _create_ripemd_ctx(20) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: Ripemd160_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_160 will read the stream in chunks and compute a // hash from its contents hash_stream_160 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_ripemd_ctx(20) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: Ripemd160_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_160 will read the file provided by the given handle // and compute a hash hash_file_160 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_ripemd_ctx(20) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160(buf[:]), ok + } + } + return [20]byte{}, false } hash_160 :: proc { @@ -147,22 +140,44 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_ripemd_ctx(32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Ripemd256_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_ripemd_ctx(32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Ripemd256_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_ripemd_ctx(32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -181,22 +196,44 @@ hash_string_320 :: proc(data: string) -> [40]byte { // hash_bytes_320 will hash the given input and return the // computed hash hash_bytes_320 :: proc(data: []byte) -> [40]byte { - _create_ripemd_ctx(40) - return _hash_impl->hash_bytes_40(data) + hash: [40]byte + ctx: Ripemd320_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_320 will read the stream in chunks and compute a // hash from its contents hash_stream_320 :: proc(s: io.Stream) -> ([40]byte, bool) { - _create_ripemd_ctx(40) - return _hash_impl->hash_stream_40(s) + hash: [40]byte + ctx: Ripemd320_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_320 will read the file provided by the given handle // and compute a hash hash_file_320 :: proc(hd: os.Handle, load_at_once := false) -> ([40]byte, bool) { - _create_ripemd_ctx(40) - return _hash_impl->hash_file_40(hd, load_at_once) + if !load_at_once { + return hash_stream_320(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_320(buf[:]), ok + } + } + return [40]byte{}, false } hash_320 :: proc { @@ -206,261 +243,122 @@ hash_320 :: proc { hash_string_320, } -hash_bytes_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Ripemd128_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) +/* + Low level API +*/ + +init :: proc(ctx: ^$T) { + when T == Ripemd128_Context { + ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3] = S0, S1, S2, S3 + } else when T == Ripemd160_Context { + ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3], ctx.s[4] = S0, S1, S2, S3, S4 + } else when T == Ripemd256_Context { + ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3] = S0, S1, S2, S3 + ctx.s[4], ctx.s[5], ctx.s[6], ctx.s[7] = S5, S6, S7, S8 + } else when T == Ripemd320_Context { + ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3], ctx.s[4] = S0, S1, S2, S3, S4 + ctx.s[5], ctx.s[6], ctx.s[7], ctx.s[8], ctx.s[9] = S5, S6, S7, S8, S9 } - return hash } -hash_stream_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(Ripemd128_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } +update :: proc(ctx: ^$T, data: []byte) { + ctx.tc += u64(len(data)) + data := data + if ctx.nx > 0 { + n := len(data) + + when T == Ripemd128_Context { + if n > RIPEMD_128_BLOCK_SIZE - ctx.nx { + n = RIPEMD_128_BLOCK_SIZE - ctx.nx + } + } else when T == Ripemd160_Context { + if n > RIPEMD_160_BLOCK_SIZE - ctx.nx { + n = RIPEMD_160_BLOCK_SIZE - ctx.nx + } + } else when T == Ripemd256_Context{ + if n > RIPEMD_256_BLOCK_SIZE - ctx.nx { + n = RIPEMD_256_BLOCK_SIZE - ctx.nx + } + } else when T == Ripemd320_Context{ + if n > RIPEMD_320_BLOCK_SIZE - ctx.nx { + n = RIPEMD_320_BLOCK_SIZE - ctx.nx + } } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} -hash_file_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_16(ctx, buf[:]), ok + for i := 0; i < n; i += 1 { + ctx.x[ctx.nx + i] = data[i] } - } - return [16]byte{}, false -} -hash_bytes_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Ripemd160_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Ripemd160_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } + ctx.nx += n + when T == Ripemd128_Context { + if ctx.nx == RIPEMD_128_BLOCK_SIZE { + block(ctx, ctx.x[0:]) + ctx.nx = 0 + } + } else when T == Ripemd160_Context { + if ctx.nx == RIPEMD_160_BLOCK_SIZE { + block(ctx, ctx.x[0:]) + ctx.nx = 0 + } + } else when T == Ripemd256_Context{ + if ctx.nx == RIPEMD_256_BLOCK_SIZE { + block(ctx, ctx.x[0:]) + ctx.nx = 0 + } + } else when T == Ripemd320_Context{ + if ctx.nx == RIPEMD_320_BLOCK_SIZE { + block(ctx, ctx.x[0:]) + ctx.nx = 0 + } } - final_odin(&c, hash[:]) - return hash, true + data = data[n:] + } + n := block(ctx, data) + data = data[n:] + if len(data) > 0 { + ctx.nx = copy(ctx.x[:], data) + } +} + +final :: proc(ctx: ^$T, hash: []byte) { + d := ctx + tc := d.tc + tmp: [64]byte + tmp[0] = 0x80 + + if tc % 64 < 56 { + update(d, tmp[0:56 - tc % 64]) } else { - return hash, false + update(d, tmp[0:64 + 56 - tc % 64]) } + + tc <<= 3 + for i : u32 = 0; i < 8; i += 1 { + tmp[i] = byte(tc >> (8 * i)) + } + + update(d, tmp[0:8]) + + when T == Ripemd128_Context { + size :: RIPEMD_128_SIZE + } else when T == Ripemd160_Context { + size :: RIPEMD_160_SIZE + } else when T == Ripemd256_Context{ + size :: RIPEMD_256_SIZE + } else when T == Ripemd320_Context{ + size :: RIPEMD_320_SIZE + } + + digest: [size]byte + for s, i in d.s { + digest[i * 4] = byte(s) + digest[i * 4 + 1] = byte(s >> 8) + digest[i * 4 + 2] = byte(s >> 16) + digest[i * 4 + 3] = byte(s >> 24) + } + copy(hash[:], digest[:]) } -hash_file_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_odin_20(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_20(ctx, buf[:]), ok - } - } - return [20]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Ripemd256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Ripemd256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_bytes_odin_40 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [40]byte { - hash: [40]byte - if c, ok := ctx.internal_ctx.(Ripemd320_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_40 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([40]byte, bool) { - hash: [40]byte - if c, ok := ctx.internal_ctx.(Ripemd320_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_40 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([40]byte, bool) { - if !load_at_once { - return hash_stream_odin_40(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_40(ctx, buf[:]), ok - } - } - return [40]byte{}, false -} - -@(private) -_create_ripemd_ctx :: #force_inline proc(hash_size: int) { - switch hash_size { - case 16: - ctx: Ripemd128_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._16 - case 20: - ctx: Ripemd160_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._20 - case 32: - ctx: Ripemd256_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._32 - case 40: - ctx: Ripemd320_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._40 - } -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._16: - _create_ripemd_ctx(16) - if c, ok := ctx.internal_ctx.(Ripemd128_Context); ok { - init_odin(&c) - } - case ._20: - _create_ripemd_ctx(20) - if c, ok := ctx.internal_ctx.(Ripemd160_Context); ok { - init_odin(&c) - } - case ._32: - _create_ripemd_ctx(32) - if c, ok := ctx.internal_ctx.(Ripemd256_Context); ok { - init_odin(&c) - } - case ._40: - _create_ripemd_ctx(40) - if c, ok := ctx.internal_ctx.(Ripemd320_Context); ok { - init_odin(&c) - } - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - #partial switch ctx.hash_size { - case ._16: - if c, ok := ctx.internal_ctx.(Ripemd128_Context); ok { - update_odin(&c, data) - } - case ._20: - if c, ok := ctx.internal_ctx.(Ripemd160_Context); ok { - update_odin(&c, data) - } - case ._32: - if c, ok := ctx.internal_ctx.(Ripemd256_Context); ok { - update_odin(&c, data) - } - case ._40: - if c, ok := ctx.internal_ctx.(Ripemd320_Context); ok { - update_odin(&c, data) - } - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - #partial switch ctx.hash_size { - case ._16: - if c, ok := ctx.internal_ctx.(Ripemd128_Context); ok { - final_odin(&c, hash) - } - case ._20: - if c, ok := ctx.internal_ctx.(Ripemd160_Context); ok { - final_odin(&c, hash) - } - case ._32: - if c, ok := ctx.internal_ctx.(Ripemd256_Context); ok { - final_odin(&c, hash) - } - case ._40: - if c, ok := ctx.internal_ctx.(Ripemd320_Context); ok { - final_odin(&c, hash) - } - } -} /* RIPEMD implementation @@ -574,20 +472,6 @@ RIPEMD_160_R1 := [80]uint { 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11, } -init_odin :: proc(ctx: ^$T) { - when T == Ripemd128_Context { - ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3] = S0, S1, S2, S3 - } else when T == Ripemd160_Context { - ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3], ctx.s[4] = S0, S1, S2, S3, S4 - } else when T == Ripemd256_Context { - ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3] = S0, S1, S2, S3 - ctx.s[4], ctx.s[5], ctx.s[6], ctx.s[7] = S5, S6, S7, S8 - } else when T == Ripemd320_Context { - ctx.s[0], ctx.s[1], ctx.s[2], ctx.s[3], ctx.s[4] = S0, S1, S2, S3, S4 - ctx.s[5], ctx.s[6], ctx.s[7], ctx.s[8], ctx.s[9] = S5, S6, S7, S8, S9 - } -} - block :: #force_inline proc (ctx: ^$T, p: []byte) -> int { when T == Ripemd128_Context { return ripemd_128_block(ctx, p) @@ -948,101 +832,3 @@ ripemd_320_block :: proc(ctx: ^$T, p: []byte) -> int { } return n } - -update_odin :: proc(ctx: ^$T, p: []byte) { - ctx.tc += u64(len(p)) - p := p - if ctx.nx > 0 { - n := len(p) - - when T == Ripemd128_Context { - if n > RIPEMD_128_BLOCK_SIZE - ctx.nx { - n = RIPEMD_128_BLOCK_SIZE - ctx.nx - } - } else when T == Ripemd160_Context { - if n > RIPEMD_160_BLOCK_SIZE - ctx.nx { - n = RIPEMD_160_BLOCK_SIZE - ctx.nx - } - } else when T == Ripemd256_Context{ - if n > RIPEMD_256_BLOCK_SIZE - ctx.nx { - n = RIPEMD_256_BLOCK_SIZE - ctx.nx - } - } else when T == Ripemd320_Context{ - if n > RIPEMD_320_BLOCK_SIZE - ctx.nx { - n = RIPEMD_320_BLOCK_SIZE - ctx.nx - } - } - - for i := 0; i < n; i += 1 { - ctx.x[ctx.nx + i] = p[i] - } - - ctx.nx += n - when T == Ripemd128_Context { - if ctx.nx == RIPEMD_128_BLOCK_SIZE { - block(ctx, ctx.x[0:]) - ctx.nx = 0 - } - } else when T == Ripemd160_Context { - if ctx.nx == RIPEMD_160_BLOCK_SIZE { - block(ctx, ctx.x[0:]) - ctx.nx = 0 - } - } else when T == Ripemd256_Context{ - if ctx.nx == RIPEMD_256_BLOCK_SIZE { - block(ctx, ctx.x[0:]) - ctx.nx = 0 - } - } else when T == Ripemd320_Context{ - if ctx.nx == RIPEMD_320_BLOCK_SIZE { - block(ctx, ctx.x[0:]) - ctx.nx = 0 - } - } - p = p[n:] - } - n := block(ctx, p) - p = p[n:] - if len(p) > 0 { - ctx.nx = copy(ctx.x[:], p) - } -} - -final_odin :: proc(ctx: ^$T, hash: []byte) { - d := ctx - tc := d.tc - tmp: [64]byte - tmp[0] = 0x80 - - if tc % 64 < 56 { - update_odin(d, tmp[0:56 - tc % 64]) - } else { - update_odin(d, tmp[0:64 + 56 - tc % 64]) - } - - tc <<= 3 - for i : u32 = 0; i < 8; i += 1 { - tmp[i] = byte(tc >> (8 * i)) - } - - update_odin(d, tmp[0:8]) - - when T == Ripemd128_Context { - size :: RIPEMD_128_SIZE - } else when T == Ripemd160_Context { - size :: RIPEMD_160_SIZE - } else when T == Ripemd256_Context{ - size :: RIPEMD_256_SIZE - } else when T == Ripemd320_Context{ - size :: RIPEMD_320_SIZE - } - - digest: [size]byte - for s, i in d.s { - digest[i * 4] = byte(s) - digest[i * 4 + 1] = byte(s >> 8) - digest[i * 4 + 2] = byte(s >> 16) - digest[i * 4 + 3] = byte(s >> 24) - } - copy(hash[:], digest[:]) -} diff --git a/core/crypto/sha1/sha1.odin b/core/crypto/sha1/sha1.odin index 022859309..736b207a3 100644 --- a/core/crypto/sha1/sha1.odin +++ b/core/crypto/sha1/sha1.odin @@ -6,7 +6,6 @@ package sha1 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the SHA1 hashing algorithm, as defined in RFC 3174 */ @@ -16,52 +15,10 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_20 = hash_bytes_odin - ctx.hash_file_20 = hash_file_odin - ctx.hash_stream_20 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_SHA1) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} /* High level API */ - // hash_string will hash the given input and return the // computed hash hash_string :: proc(data: string) -> [20]byte { @@ -71,22 +28,44 @@ hash_string :: proc(data: string) -> [20]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [20]byte { - _create_sha1_ctx() - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: Sha1_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_sha1_ctx() - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: Sha1_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_sha1_ctx() - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [20]byte{}, false } hash :: proc { @@ -100,86 +79,70 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Sha1_Context) { + ctx.state[0] = 0x67452301 + ctx.state[1] = 0xefcdab89 + ctx.state[2] = 0x98badcfe + ctx.state[3] = 0x10325476 + ctx.state[4] = 0xc3d2e1f0 + ctx.k[0] = 0x5a827999 + ctx.k[1] = 0x6ed9eba1 + ctx.k[2] = 0x8f1bbcdc + ctx.k[3] = 0xca62c1d6 } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc(ctx: ^Sha1_Context, data: []byte) { + for i := 0; i < len(data); i += 1 { + ctx.data[ctx.datalen] = data[i] + ctx.datalen += 1 + if (ctx.datalen == BLOCK_SIZE) { + transform(ctx, ctx.data[:]) + ctx.bitlen += 512 + ctx.datalen = 0 + } + } } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} +final :: proc(ctx: ^Sha1_Context, hash: []byte) { + i := ctx.datalen -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Sha1_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - if c, ok := ctx.internal_ctx.(Sha1_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok + if ctx.datalen < 56 { + ctx.data[i] = 0x80 + i += 1 + for i < 56 { + ctx.data[i] = 0x00 + i += 1 } - } - return [20]byte{}, false -} + } + else { + ctx.data[i] = 0x80 + i += 1 + for i < BLOCK_SIZE { + ctx.data[i] = 0x00 + i += 1 + } + transform(ctx, ctx.data[:]) + mem.set(&ctx.data, 0, 56) + } -@(private) -_create_sha1_ctx :: #force_inline proc() { - ctx: Sha1_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._20 -} + ctx.bitlen += u64(ctx.datalen * 8) + ctx.data[63] = u8(ctx.bitlen) + ctx.data[62] = u8(ctx.bitlen >> 8) + ctx.data[61] = u8(ctx.bitlen >> 16) + ctx.data[60] = u8(ctx.bitlen >> 24) + ctx.data[59] = u8(ctx.bitlen >> 32) + ctx.data[58] = u8(ctx.bitlen >> 40) + ctx.data[57] = u8(ctx.bitlen >> 48) + ctx.data[56] = u8(ctx.bitlen >> 56) + transform(ctx, ctx.data[:]) -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_sha1_ctx() - if c, ok := ctx.internal_ctx.(Sha1_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Sha1_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Sha1_Context); ok { - final_odin(&c, hash) - } + for j: u32 = 0; j < 4; j += 1 { + hash[j] = u8(ctx.state[0] >> (24 - j * 8)) & 0x000000ff + hash[j + 4] = u8(ctx.state[1] >> (24 - j * 8)) & 0x000000ff + hash[j + 8] = u8(ctx.state[2] >> (24 - j * 8)) & 0x000000ff + hash[j + 12] = u8(ctx.state[3] >> (24 - j * 8)) & 0x000000ff + hash[j + 16] = u8(ctx.state[4] >> (24 - j * 8)) & 0x000000ff + } } /* @@ -258,69 +221,3 @@ transform :: proc(ctx: ^Sha1_Context, data: []byte) { ctx.state[3] += d ctx.state[4] += e } - -init_odin :: proc(ctx: ^Sha1_Context) { - ctx.state[0] = 0x67452301 - ctx.state[1] = 0xefcdab89 - ctx.state[2] = 0x98badcfe - ctx.state[3] = 0x10325476 - ctx.state[4] = 0xc3d2e1f0 - ctx.k[0] = 0x5a827999 - ctx.k[1] = 0x6ed9eba1 - ctx.k[2] = 0x8f1bbcdc - ctx.k[3] = 0xca62c1d6 -} - -update_odin :: proc(ctx: ^Sha1_Context, data: []byte) { - for i := 0; i < len(data); i += 1 { - ctx.data[ctx.datalen] = data[i] - ctx.datalen += 1 - if (ctx.datalen == BLOCK_SIZE) { - transform(ctx, ctx.data[:]) - ctx.bitlen += 512 - ctx.datalen = 0 - } - } -} - -final_odin :: proc(ctx: ^Sha1_Context, hash: []byte) { - i := ctx.datalen - - if ctx.datalen < 56 { - ctx.data[i] = 0x80 - i += 1 - for i < 56 { - ctx.data[i] = 0x00 - i += 1 - } - } - else { - ctx.data[i] = 0x80 - i += 1 - for i < BLOCK_SIZE { - ctx.data[i] = 0x00 - i += 1 - } - transform(ctx, ctx.data[:]) - mem.set(&ctx.data, 0, 56) - } - - ctx.bitlen += u64(ctx.datalen * 8) - ctx.data[63] = u8(ctx.bitlen) - ctx.data[62] = u8(ctx.bitlen >> 8) - ctx.data[61] = u8(ctx.bitlen >> 16) - ctx.data[60] = u8(ctx.bitlen >> 24) - ctx.data[59] = u8(ctx.bitlen >> 32) - ctx.data[58] = u8(ctx.bitlen >> 40) - ctx.data[57] = u8(ctx.bitlen >> 48) - ctx.data[56] = u8(ctx.bitlen >> 56) - transform(ctx, ctx.data[:]) - - for j: u32 = 0; j < 4; j += 1 { - hash[j] = u8(ctx.state[0] >> (24 - j * 8)) & 0x000000ff - hash[j + 4] = u8(ctx.state[1] >> (24 - j * 8)) & 0x000000ff - hash[j + 8] = u8(ctx.state[2] >> (24 - j * 8)) & 0x000000ff - hash[j + 12] = u8(ctx.state[3] >> (24 - j * 8)) & 0x000000ff - hash[j + 16] = u8(ctx.state[4] >> (24 - j * 8)) & 0x000000ff - } -} \ No newline at end of file diff --git a/core/crypto/sha2/sha2.odin b/core/crypto/sha2/sha2.odin index 2ddbcf27a..8b7ccf38a 100644 --- a/core/crypto/sha2/sha2.odin +++ b/core/crypto/sha2/sha2.odin @@ -6,7 +6,6 @@ package sha2 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the SHA2 hashing algorithm, as defined in and in RFC 3874 @@ -17,72 +16,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_SHA2) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_sha256_ctx :: #force_inline proc(is224: bool) { - ctx: Sha256_Context - ctx.is224 = is224 - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = is224 ? ._28 : ._32 -} - -@(private) -_create_sha512_ctx :: #force_inline proc(is384: bool) { - ctx: Sha512_Context - ctx.is384 = is384 - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = is384 ? ._48 : ._64 -} /* High level API @@ -97,22 +30,46 @@ hash_string_224 :: proc(data: string) -> [28]byte { // hash_bytes_224 will hash the given input and return the // computed hash hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_sha256_ctx(true) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: Sha256_Context + ctx.is224 = true + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_sha256_ctx(true) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: Sha512_Context + ctx.is384 = false + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_sha256_ctx(true) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -131,22 +88,46 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_sha256_ctx(false) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Sha256_Context + ctx.is224 = false + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_sha256_ctx(false) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Sha512_Context + ctx.is384 = false + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_sha256_ctx(false) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -165,22 +146,46 @@ hash_string_384 :: proc(data: string) -> [48]byte { // hash_bytes_384 will hash the given input and return the // computed hash hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_sha512_ctx(true) - return _hash_impl->hash_bytes_48(data) + hash: [48]byte + ctx: Sha512_Context + ctx.is384 = true + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_sha512_ctx(true) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: Sha512_Context + ctx.is384 = true + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_sha512_ctx(true) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -199,22 +204,46 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_sha512_ctx(false) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: Sha512_Context + ctx.is384 = false + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_sha512_ctx(false) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Sha512_Context + ctx.is384 = false + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_sha512_ctx(false) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -228,225 +257,121 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() -} - -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } +init :: proc(ctx: ^$T) { + when T == Sha256_Context { + if ctx.is224 { + ctx.h[0] = 0xc1059ed8 + ctx.h[1] = 0x367cd507 + ctx.h[2] = 0x3070dd17 + ctx.h[3] = 0xf70e5939 + ctx.h[4] = 0xffc00b31 + ctx.h[5] = 0x68581511 + ctx.h[6] = 0x64f98fa7 + ctx.h[7] = 0xbefa4fa4 + } else { + ctx.h[0] = 0x6a09e667 + ctx.h[1] = 0xbb67ae85 + ctx.h[2] = 0x3c6ef372 + ctx.h[3] = 0xa54ff53a + ctx.h[4] = 0x510e527f + ctx.h[5] = 0x9b05688c + ctx.h[6] = 0x1f83d9ab + ctx.h[7] = 0x5be0cd19 } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok + } else when T == Sha512_Context { + if ctx.is384 { + ctx.h[0] = 0xcbbb9d5dc1059ed8 + ctx.h[1] = 0x629a292a367cd507 + ctx.h[2] = 0x9159015a3070dd17 + ctx.h[3] = 0x152fecd8f70e5939 + ctx.h[4] = 0x67332667ffc00b31 + ctx.h[5] = 0x8eb44a8768581511 + ctx.h[6] = 0xdb0c2e0d64f98fa7 + ctx.h[7] = 0x47b5481dbefa4fa4 + } else { + ctx.h[0] = 0x6a09e667f3bcc908 + ctx.h[1] = 0xbb67ae8584caa73b + ctx.h[2] = 0x3c6ef372fe94f82b + ctx.h[3] = 0xa54ff53a5f1d36f1 + ctx.h[4] = 0x510e527fade682d1 + ctx.h[5] = 0x9b05688c2b3e6c1f + ctx.h[6] = 0x1f83d9abfb41bd6b + ctx.h[7] = 0x5be0cd19137e2179 } } - return [28]byte{}, false } -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) +update :: proc(ctx: ^$T, data: []byte) { + length := uint(len(data)) + block_nb: uint + new_len, rem_len, tmp_len: uint + shifted_message := make([]byte, length) + + when T == Sha256_Context { + CURR_BLOCK_SIZE :: SHA256_BLOCK_SIZE + } else when T == Sha512_Context { + CURR_BLOCK_SIZE :: SHA512_BLOCK_SIZE } - return hash -} -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} + tmp_len = CURR_BLOCK_SIZE - ctx.length + rem_len = length < tmp_len ? length : tmp_len + copy(ctx.block[ctx.length:], data[:rem_len]) -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - if ctx.hash_size == ._28 || ctx.hash_size == ._32 { - _create_sha256_ctx(ctx.hash_size == ._28) - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - init_odin(&c) - } + if ctx.length + length < CURR_BLOCK_SIZE { + ctx.length += length return } - if ctx.hash_size == ._48 || ctx.hash_size == ._64 { - _create_sha512_ctx(ctx.hash_size == ._48) - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - init_odin(&c) - } - } + + new_len = length - rem_len + block_nb = new_len / CURR_BLOCK_SIZE + shifted_message = data[rem_len:] + + sha2_transf(ctx, ctx.block[:], 1) + sha2_transf(ctx, shifted_message, block_nb) + + rem_len = new_len % CURR_BLOCK_SIZE + when T == Sha256_Context {copy(ctx.block[:], shifted_message[block_nb << 6:rem_len])} + else when T == Sha512_Context {copy(ctx.block[:], shifted_message[block_nb << 7:rem_len])} + + ctx.length = rem_len + when T == Sha256_Context {ctx.tot_len += (block_nb + 1) << 6} + else when T == Sha512_Context {ctx.tot_len += (block_nb + 1) << 7} } -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - #partial switch ctx.hash_size { - case ._28, ._32: - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - update_odin(&c, data) - } - case ._48, ._64: - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - update_odin(&c, data) - } - } -} +final :: proc(ctx: ^$T, hash: []byte) { + block_nb, pm_len, len_b: u32 + i: i32 -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - #partial switch ctx.hash_size { - case ._28, ._32: - if c, ok := ctx.internal_ctx.(Sha256_Context); ok { - final_odin(&c, hash) - } - case ._48, ._64: - if c, ok := ctx.internal_ctx.(Sha512_Context); ok { - final_odin(&c, hash) - } - } + when T == Sha256_Context {CURR_BLOCK_SIZE :: SHA256_BLOCK_SIZE} + else when T == Sha512_Context {CURR_BLOCK_SIZE :: SHA512_BLOCK_SIZE} + + when T == Sha256_Context {block_nb = 1 + ((CURR_BLOCK_SIZE - 9) < (ctx.length % CURR_BLOCK_SIZE) ? 1 : 0)} + else when T == Sha512_Context {block_nb = 1 + ((CURR_BLOCK_SIZE - 17) < (ctx.length % CURR_BLOCK_SIZE) ? 1 : 0)} + + len_b = u32(ctx.tot_len + ctx.length) << 3 + when T == Sha256_Context {pm_len = block_nb << 6} + else when T == Sha512_Context {pm_len = block_nb << 7} + + mem.set(rawptr(&(ctx.block[ctx.length:])[0]), 0, int(uint(pm_len) - ctx.length)) + ctx.block[ctx.length] = 0x80 + + util.PUT_U32_BE(ctx.block[pm_len - 4:], len_b) + + sha2_transf(ctx, ctx.block[:], uint(block_nb)) + + when T == Sha256_Context { + if ctx.is224 { + for i = 0; i < 7; i += 1 {util.PUT_U32_BE(hash[i << 2:], ctx.h[i])} + } else { + for i = 0; i < 8; i += 1 {util.PUT_U32_BE(hash[i << 2:], ctx.h[i])} + } + } else when T == Sha512_Context { + if ctx.is384 { + for i = 0; i < 6; i += 1 {util.PUT_U64_BE(hash[i << 3:], ctx.h[i])} + } else { + for i = 0; i < 8; i += 1 {util.PUT_U64_BE(hash[i << 3:], ctx.h[i])} + } + } } /* @@ -590,50 +515,6 @@ PACK64 :: #force_inline proc "contextless"(b: []byte, x: ^u64) { x^ = u64(b[7]) | u64(b[6]) << 8 | u64(b[5]) << 16 | u64(b[4]) << 24 | u64(b[3]) << 32 | u64(b[2]) << 40 | u64(b[1]) << 48 | u64(b[0]) << 56 } -init_odin :: proc(ctx: ^$T) { - when T == Sha256_Context { - if ctx.is224 { - ctx.h[0] = 0xc1059ed8 - ctx.h[1] = 0x367cd507 - ctx.h[2] = 0x3070dd17 - ctx.h[3] = 0xf70e5939 - ctx.h[4] = 0xffc00b31 - ctx.h[5] = 0x68581511 - ctx.h[6] = 0x64f98fa7 - ctx.h[7] = 0xbefa4fa4 - } else { - ctx.h[0] = 0x6a09e667 - ctx.h[1] = 0xbb67ae85 - ctx.h[2] = 0x3c6ef372 - ctx.h[3] = 0xa54ff53a - ctx.h[4] = 0x510e527f - ctx.h[5] = 0x9b05688c - ctx.h[6] = 0x1f83d9ab - ctx.h[7] = 0x5be0cd19 - } - } else when T == Sha512_Context { - if ctx.is384 { - ctx.h[0] = 0xcbbb9d5dc1059ed8 - ctx.h[1] = 0x629a292a367cd507 - ctx.h[2] = 0x9159015a3070dd17 - ctx.h[3] = 0x152fecd8f70e5939 - ctx.h[4] = 0x67332667ffc00b31 - ctx.h[5] = 0x8eb44a8768581511 - ctx.h[6] = 0xdb0c2e0d64f98fa7 - ctx.h[7] = 0x47b5481dbefa4fa4 - } else { - ctx.h[0] = 0x6a09e667f3bcc908 - ctx.h[1] = 0xbb67ae8584caa73b - ctx.h[2] = 0x3c6ef372fe94f82b - ctx.h[3] = 0xa54ff53a5f1d36f1 - ctx.h[4] = 0x510e527fade682d1 - ctx.h[5] = 0x9b05688c2b3e6c1f - ctx.h[6] = 0x1f83d9abfb41bd6b - ctx.h[7] = 0x5be0cd19137e2179 - } - } -} - sha2_transf :: proc(ctx: ^$T, data: []byte, block_nb: uint) { when T == Sha256_Context { w: [64]u32 @@ -710,76 +591,3 @@ sha2_transf :: proc(ctx: ^$T, data: []byte, block_nb: uint) { } } } - -update_odin :: proc(ctx: ^$T, data: []byte) { - length := uint(len(data)) - block_nb: uint - new_len, rem_len, tmp_len: uint - shifted_message := make([]byte, length) - - when T == Sha256_Context { - CURR_BLOCK_SIZE :: SHA256_BLOCK_SIZE - } else when T == Sha512_Context { - CURR_BLOCK_SIZE :: SHA512_BLOCK_SIZE - } - - tmp_len = CURR_BLOCK_SIZE - ctx.length - rem_len = length < tmp_len ? length : tmp_len - copy(ctx.block[ctx.length:], data[:rem_len]) - - if ctx.length + length < CURR_BLOCK_SIZE { - ctx.length += length - return - } - - new_len = length - rem_len - block_nb = new_len / CURR_BLOCK_SIZE - shifted_message = data[rem_len:] - - sha2_transf(ctx, ctx.block[:], 1) - sha2_transf(ctx, shifted_message, block_nb) - - rem_len = new_len % CURR_BLOCK_SIZE - when T == Sha256_Context {copy(ctx.block[:], shifted_message[block_nb << 6:rem_len])} - else when T == Sha512_Context {copy(ctx.block[:], shifted_message[block_nb << 7:rem_len])} - - ctx.length = rem_len - when T == Sha256_Context {ctx.tot_len += (block_nb + 1) << 6} - else when T == Sha512_Context {ctx.tot_len += (block_nb + 1) << 7} -} - -final_odin :: proc(ctx: ^$T, hash: []byte) { - block_nb, pm_len, len_b: u32 - i: i32 - - when T == Sha256_Context {CURR_BLOCK_SIZE :: SHA256_BLOCK_SIZE} - else when T == Sha512_Context {CURR_BLOCK_SIZE :: SHA512_BLOCK_SIZE} - - when T == Sha256_Context {block_nb = 1 + ((CURR_BLOCK_SIZE - 9) < (ctx.length % CURR_BLOCK_SIZE) ? 1 : 0)} - else when T == Sha512_Context {block_nb = 1 + ((CURR_BLOCK_SIZE - 17) < (ctx.length % CURR_BLOCK_SIZE) ? 1 : 0)} - - len_b = u32(ctx.tot_len + ctx.length) << 3 - when T == Sha256_Context {pm_len = block_nb << 6} - else when T == Sha512_Context {pm_len = block_nb << 7} - - mem.set(rawptr(&(ctx.block[ctx.length:])[0]), 0, int(uint(pm_len) - ctx.length)) - ctx.block[ctx.length] = 0x80 - - util.PUT_U32_BE(ctx.block[pm_len - 4:], len_b) - - sha2_transf(ctx, ctx.block[:], uint(block_nb)) - - when T == Sha256_Context { - if ctx.is224 { - for i = 0; i < 7; i += 1 {util.PUT_U32_BE(hash[i << 2:], ctx.h[i])} - } else { - for i = 0; i < 8; i += 1 {util.PUT_U32_BE(hash[i << 2:], ctx.h[i])} - } - } else when T == Sha512_Context { - if ctx.is384 { - for i = 0; i < 6; i += 1 {util.PUT_U64_BE(hash[i << 3:], ctx.h[i])} - } else { - for i = 0; i < 8; i += 1 {util.PUT_U64_BE(hash[i << 3:], ctx.h[i])} - } - } -} \ No newline at end of file diff --git a/core/crypto/sha3/sha3.odin b/core/crypto/sha3/sha3.odin index c37e369c9..1becf7640 100644 --- a/core/crypto/sha3/sha3.odin +++ b/core/crypto/sha3/sha3.odin @@ -6,7 +6,6 @@ package sha3 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the SHA3 hashing algorithm. The SHAKE functionality can be found in package shake. If you wish to compute a Keccak hash, you can use the keccak package, it will use the original padding. @@ -15,58 +14,8 @@ package sha3 import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../_sha3" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_28 = hash_bytes_odin_28 - ctx.hash_file_28 = hash_file_odin_28 - ctx.hash_stream_28 = hash_stream_odin_28 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_48 = hash_bytes_odin_48 - ctx.hash_file_48 = hash_file_odin_48 - ctx.hash_stream_48 = hash_stream_odin_48 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_SHA3) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -80,22 +29,46 @@ hash_string_224 :: proc(data: string) -> [28]byte { // hash_bytes_224 will hash the given input and return the // computed hash hash_bytes_224 :: proc(data: []byte) -> [28]byte { - _create_sha3_ctx(28) - return _hash_impl->hash_bytes_28(data) + hash: [28]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 28 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_224 will read the stream in chunks and compute a // hash from its contents hash_stream_224 :: proc(s: io.Stream) -> ([28]byte, bool) { - _create_sha3_ctx(28) - return _hash_impl->hash_stream_28(s) + hash: [28]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 28 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_224 will read the file provided by the given handle // and compute a hash hash_file_224 :: proc(hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - _create_sha3_ctx(28) - return _hash_impl->hash_file_28(hd, load_at_once) + if !load_at_once { + return hash_stream_224(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_224(buf[:]), ok + } + } + return [28]byte{}, false } hash_224 :: proc { @@ -114,22 +87,46 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_sha3_ctx(32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_sha3_ctx(32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_sha3_ctx(32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -148,22 +145,46 @@ hash_string_384 :: proc(data: string) -> [48]byte { // hash_bytes_384 will hash the given input and return the // computed hash hash_bytes_384 :: proc(data: []byte) -> [48]byte { - _create_sha3_ctx(48) - return _hash_impl->hash_bytes_48(data) + hash: [48]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 48 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_384 will read the stream in chunks and compute a // hash from its contents hash_stream_384 :: proc(s: io.Stream) -> ([48]byte, bool) { - _create_sha3_ctx(48) - return _hash_impl->hash_stream_48(s) + hash: [48]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 48 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_384 will read the file provided by the given handle // and compute a hash hash_file_384 :: proc(hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - _create_sha3_ctx(48) - return _hash_impl->hash_file_48(hd, load_at_once) + if !load_at_once { + return hash_stream_384(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_384(buf[:]), ok + } + } + return [48]byte{}, false } hash_384 :: proc { @@ -182,22 +203,46 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_sha3_ctx(64) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 64 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_sha3_ctx(64) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 64 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_sha3_ctx(64) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -211,218 +256,16 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +Sha3_Context :: _sha3.Sha3_Context + +init :: proc(ctx: ^_sha3.Sha3_Context) { + _sha3.init(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc "contextless" (ctx: ^_sha3.Sha3_Context, data: []byte) { + _sha3.update(ctx, data) } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [28]byte { - hash: [28]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([28]byte, bool) { - hash: [28]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_28 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([28]byte, bool) { - if !load_at_once { - return hash_stream_odin_28(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_28(ctx, buf[:]), ok - } - } - return [28]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -hash_bytes_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [48]byte { - hash: [48]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([48]byte, bool) { - hash: [48]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_48 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([48]byte, bool) { - if !load_at_once { - return hash_stream_odin_48(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_48(ctx, buf[:]), ok - } - } - return [48]byte{}, false -} - -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_create_sha3_ctx :: #force_inline proc(mdlen: int) { - ctx: _sha3.Sha3_Context - ctx.mdlen = mdlen - _hash_impl.internal_ctx = ctx - switch mdlen { - case 28: _hash_impl.hash_size = ._28 - case 32: _hash_impl.hash_size = ._32 - case 48: _hash_impl.hash_size = ._48 - case 64: _hash_impl.hash_size = ._64 - } -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._28: _create_sha3_ctx(28) - case ._32: _create_sha3_ctx(32) - case ._48: _create_sha3_ctx(48) - case ._64: _create_sha3_ctx(64) - } - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.final_odin(&c, hash) - } +final :: proc "contextless" (ctx: ^_sha3.Sha3_Context, hash: []byte) { + _sha3.final(ctx, hash) } diff --git a/core/crypto/shake/shake.odin b/core/crypto/shake/shake.odin index 2822dace2..ff477b1a9 100644 --- a/core/crypto/shake/shake.odin +++ b/core/crypto/shake/shake.odin @@ -6,7 +6,6 @@ package shake List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the SHAKE hashing algorithm. The SHA3 functionality can be found in package sha3. @@ -15,52 +14,8 @@ package shake import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../_sha3" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin_16 - ctx.hash_file_16 = hash_file_odin_16 - ctx.hash_stream_16 = hash_stream_odin_16 - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_SHAKE) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -74,22 +29,48 @@ hash_string_128 :: proc(data: string) -> [16]byte { // hash_bytes_128 will hash the given input and return the // computed hash hash_bytes_128 :: proc(data: []byte) -> [16]byte { - _create_shake_ctx(16) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 16 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.shake_xof(&ctx) + _sha3.shake_out(&ctx, hash[:]) + return hash } // hash_stream_128 will read the stream in chunks and compute a // hash from its contents hash_stream_128 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_shake_ctx(16) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 16 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.shake_xof(&ctx) + _sha3.shake_out(&ctx, hash[:]) + return hash, true } // hash_file_128 will read the file provided by the given handle // and compute a hash hash_file_128 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_shake_ctx(16) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128(buf[:]), ok + } + } + return [16]byte{}, false } hash_128 :: proc { @@ -108,22 +89,48 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_shake_ctx(32) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + _sha3.init(&ctx) + _sha3.update(&ctx, data) + _sha3.shake_xof(&ctx) + _sha3.shake_out(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_shake_ctx(32) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: _sha3.Sha3_Context + ctx.mdlen = 32 + _sha3.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _sha3.update(&ctx, buf[:read]) + } + } + _sha3.shake_xof(&ctx) + _sha3.shake_out(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_shake_ctx(32) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -137,137 +144,17 @@ hash_256 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +Sha3_Context :: _sha3.Sha3_Context + +init :: proc(ctx: ^_sha3.Sha3_Context) { + _sha3.init(ctx) } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc "contextless" (ctx: ^_sha3.Sha3_Context, data: []byte) { + _sha3.update(ctx, data) } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.shake_xof_odin(&c) - _sha3.shake_out_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.shake_xof_odin(&c) - _sha3.shake_out_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_16(ctx, buf[:]), ok - } - } - return [16]byte{}, false -} - -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - _sha3.update_odin(&c, data) - _sha3.shake_xof_odin(&c) - _sha3.shake_out_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _sha3.update_odin(&c, buf[:read]) - } - } - _sha3.shake_xof_odin(&c) - _sha3.shake_out_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} - -@(private) -_create_shake_ctx :: #force_inline proc(mdlen: int) { - ctx: _sha3.Sha3_Context - ctx.mdlen = mdlen - _hash_impl.internal_ctx = ctx - switch mdlen { - case 16: _hash_impl.hash_size = ._16 - case 32: _hash_impl.hash_size = ._32 - } -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._16: _create_shake_ctx(16) - case ._32: _create_shake_ctx(32) - } - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_sha3.Sha3_Context); ok { - _sha3.shake_xof_odin(&c) - _sha3.shake_out_odin(&c, hash[:]) - } +final :: proc "contextless" (ctx: ^_sha3.Sha3_Context, hash: []byte) { + _sha3.shake_xof(ctx) + _sha3.shake_out(ctx, hash[:]) } diff --git a/core/crypto/skein/skein.odin b/core/crypto/skein/skein.odin deleted file mode 100644 index 45623d480..000000000 --- a/core/crypto/skein/skein.odin +++ /dev/null @@ -1,487 +0,0 @@ -package skein - -/* - Copyright 2021 zhibog - Made available under the BSD-3 license. - - List of contributors: - zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. - - Implementation of the SKEIN hashing algorithm, as defined in - - This package offers the internal state sizes of 256, 512 and 1024 bits and arbitrary output size. -*/ - -import "core:os" -import "core:io" - -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - ctx.is_using_odin = false - } else { - _assign_hash_vtable(ctx) - ctx.is_using_odin = true - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - // @note(zh): Default to SKEIN-512 - ctx.hash_bytes_slice = hash_bytes_skein512_odin - ctx.hash_file_slice = hash_file_skein512_odin - ctx.hash_stream_slice = hash_stream_skein512_odin - ctx.init = _init_skein512_odin - ctx.update = _update_skein512_odin - ctx.final = _final_skein512_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - _hash_impl.is_using_odin = false - // @note(zh): Botan only supports SKEIN-512. - botan.assign_hash_vtable(_hash_impl, botan.HASH_SKEIN_512) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -@(warning="SKEIN is not yet implemented in Odin. Botan bindings will be used") -use_odin :: #force_inline proc() { - // _hash_impl.is_using_odin = true - // _assign_hash_vtable(_hash_impl) - use_botan() -} - -@(private) -_create_skein256_ctx :: #force_inline proc(size: int) { - _hash_impl.hash_size_val = size - if _hash_impl.is_using_odin { - ctx: Skein256_Context - ctx.h.bit_length = u64(size) - _hash_impl.internal_ctx = ctx - _hash_impl.hash_bytes_slice = hash_bytes_skein256_odin - _hash_impl.hash_file_slice = hash_file_skein256_odin - _hash_impl.hash_stream_slice = hash_stream_skein256_odin - _hash_impl.init = _init_skein256_odin - _hash_impl.update = _update_skein256_odin - _hash_impl.final = _final_skein256_odin - } -} - -@(private) -_create_skein512_ctx :: #force_inline proc(size: int) { - _hash_impl.hash_size_val = size - if _hash_impl.is_using_odin { - ctx: Skein512_Context - ctx.h.bit_length = u64(size) - _hash_impl.internal_ctx = ctx - _hash_impl.hash_bytes_slice = hash_bytes_skein512_odin - _hash_impl.hash_file_slice = hash_file_skein512_odin - _hash_impl.hash_stream_slice = hash_stream_skein512_odin - _hash_impl.init = _init_skein512_odin - _hash_impl.update = _update_skein512_odin - _hash_impl.final = _final_skein512_odin - } -} - -@(private) -_create_skein1024_ctx :: #force_inline proc(size: int) { - _hash_impl.hash_size_val = size - if _hash_impl.is_using_odin { - ctx: Skein1024_Context - ctx.h.bit_length = u64(size) - _hash_impl.internal_ctx = ctx - _hash_impl.hash_bytes_slice = hash_bytes_skein1024_odin - _hash_impl.hash_file_slice = hash_file_skein1024_odin - _hash_impl.hash_stream_slice = hash_stream_skein1024_odin - _hash_impl.init = _init_skein1024_odin - _hash_impl.update = _update_skein1024_odin - _hash_impl.final = _final_skein1024_odin - } -} - -/* - High level API -*/ - -// hash_skein256_string will hash the given input and return the -// computed hash -hash_skein256_string :: proc(data: string, bit_size: int, allocator := context.allocator) -> []byte { - return hash_skein256_bytes(transmute([]byte)(data), bit_size, allocator) -} - -// hash_skein256_bytes will hash the given input and return the -// computed hash -hash_skein256_bytes :: proc(data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - _create_skein256_ctx(bit_size) - return _hash_impl->hash_bytes_slice(data, bit_size, allocator) -} - -// hash_skein256_stream will read the stream in chunks and compute a -// hash from its contents -hash_skein256_stream :: proc(s: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - _create_skein256_ctx(bit_size) - return _hash_impl->hash_stream_slice(s, bit_size, allocator) -} - -// hash_skein256_file will read the file provided by the given handle -// and compute a hash -hash_skein256_file :: proc(hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - _create_skein256_ctx(bit_size) - return _hash_impl->hash_file_slice(hd, bit_size, load_at_once, allocator) -} - -hash_skein256 :: proc { - hash_skein256_stream, - hash_skein256_file, - hash_skein256_bytes, - hash_skein256_string, -} - -// hash_skein512_string will hash the given input and return the -// computed hash -hash_skein512_string :: proc(data: string, bit_size: int, allocator := context.allocator) -> []byte { - return hash_skein512_bytes(transmute([]byte)(data), bit_size, allocator) -} - -// hash_skein512_bytes will hash the given input and return the -// computed hash -hash_skein512_bytes :: proc(data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - _create_skein512_ctx(bit_size) - return _hash_impl->hash_bytes_slice(data, bit_size, allocator) -} - -// hash_skein512_stream will read the stream in chunks and compute a -// hash from its contents -hash_skein512_stream :: proc(s: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - _create_skein512_ctx(bit_size) - return _hash_impl->hash_stream_slice(s, bit_size, allocator) -} - -// hash_skein512_file will read the file provided by the given handle -// and compute a hash -hash_skein512_file :: proc(hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - _create_skein512_ctx(bit_size) - return _hash_impl->hash_file_slice(hd, bit_size, load_at_once, allocator) -} - -hash_skein512 :: proc { - hash_skein512_stream, - hash_skein512_file, - hash_skein512_bytes, - hash_skein512_string, -} - -// hash_skein1024_string will hash the given input and return the -// computed hash -hash_skein1024_string :: proc(data: string, bit_size: int, allocator := context.allocator) -> []byte { - return hash_skein1024_bytes(transmute([]byte)(data), bit_size, allocator) -} - -// hash_skein1024_bytes will hash the given input and return the -// computed hash -hash_skein1024_bytes :: proc(data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - _create_skein1024_ctx(bit_size) - return _hash_impl->hash_bytes_slice(data, bit_size, allocator) -} - -// hash_skein1024_stream will read the stream in chunks and compute a -// hash from its contents -hash_skein1024_stream :: proc(s: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - _create_skein1024_ctx(bit_size) - return _hash_impl->hash_stream_slice(s, bit_size, allocator) -} - -// hash_skein1024_file will read the file provided by the given handle -// and compute a hash -hash_skein1024_file :: proc(hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - _create_skein1024_ctx(bit_size) - return _hash_impl->hash_file_slice(hd, bit_size, load_at_once, allocator) -} - -hash_skein1024 :: proc { - hash_skein1024_stream, - hash_skein1024_file, - hash_skein1024_bytes, - hash_skein1024_string, -} - -/* - Low level API -*/ - -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() -} - -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} - -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein256_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - return hash - } else { - delete(hash) - return nil - } -} - -hash_stream_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein256_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - delete(hash) - return nil, false - } -} - -hash_file_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - if !load_at_once { - return hash_stream_skein256_odin(ctx, os.stream_from_handle(hd), bit_size, allocator) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_skein256_odin(ctx, buf[:], bit_size, allocator), ok - } - } - return nil, false -} - -hash_bytes_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein512_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - return hash - } else { - delete(hash) - return nil - } -} - -hash_stream_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein512_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - delete(hash) - return nil, false - } -} - -hash_file_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - if !load_at_once { - return hash_stream_skein512_odin(ctx, os.stream_from_handle(hd), bit_size, allocator) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_skein512_odin(ctx, buf[:], bit_size, allocator), ok - } - } - return nil, false -} - -hash_bytes_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte, bit_size: int, allocator := context.allocator) -> []byte { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein1024_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - return hash - } else { - delete(hash) - return nil - } -} - -hash_stream_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream, bit_size: int, allocator := context.allocator) -> ([]byte, bool) { - hash := make([]byte, bit_size, allocator) - if c, ok := ctx.internal_ctx.(Skein1024_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - delete(hash) - return nil, false - } -} - -hash_file_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, bit_size: int, load_at_once := false, allocator := context.allocator) -> ([]byte, bool) { - if !load_at_once { - return hash_stream_skein512_odin(ctx, os.stream_from_handle(hd), bit_size, allocator) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_skein512_odin(ctx, buf[:], bit_size, allocator), ok - } - } - return nil, false -} - -@(private) -_init_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_skein256_ctx(ctx.hash_size_val) - if c, ok := ctx.internal_ctx.(Skein256_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Skein256_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_skein256_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Skein256_Context); ok { - final_odin(&c, hash) - } -} - -@(private) -_init_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_skein512_ctx(ctx.hash_size_val) - if c, ok := ctx.internal_ctx.(Skein512_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Skein512_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_skein512_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Skein512_Context); ok { - final_odin(&c, hash) - } -} - -@(private) -_init_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_skein1024_ctx(ctx.hash_size_val) - if c, ok := ctx.internal_ctx.(Skein1024_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Skein1024_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_skein1024_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Skein1024_Context); ok { - final_odin(&c, hash) - } -} - -/* - SKEIN implementation -*/ - -STATE_WORDS_256 :: 4 -STATE_WORDS_512 :: 8 -STATE_WORDS_1024 :: 16 - -STATE_BYTES_256 :: 32 -STATE_BYTES_512 :: 64 -STATE_BYTES_1024 :: 128 - -Skein_Header :: struct { - bit_length: u64, - bcnt: u64, - t: [2]u64, -} - -Skein256_Context :: struct { - h: Skein_Header, - x: [STATE_WORDS_256]u64, - b: [STATE_BYTES_256]byte, -} - -Skein512_Context :: struct { - h: Skein_Header, - x: [STATE_WORDS_512]u64, - b: [STATE_BYTES_512]byte, -} - -Skein1024_Context :: struct { - h: Skein_Header, - x: [STATE_WORDS_1024]u64, - b: [STATE_BYTES_1024]byte, -} - - -init_odin :: proc(ctx: ^$T) { - -} - -update_odin :: proc(ctx: ^$T, data: []byte) { - -} - -final_odin :: proc(ctx: ^$T, hash: []byte) { - -} \ No newline at end of file diff --git a/core/crypto/sm3/sm3.odin b/core/crypto/sm3/sm3.odin index bd1f6f98a..c72bd4f15 100644 --- a/core/crypto/sm3/sm3.odin +++ b/core/crypto/sm3/sm3.odin @@ -6,7 +6,6 @@ package sm3 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the SM3 hashing algorithm, as defined in */ @@ -15,51 +14,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_32 = hash_bytes_odin - ctx.hash_file_32 = hash_file_odin - ctx.hash_stream_32 = hash_stream_odin - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_SM3) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -/* - High level API -*/ // hash_string will hash the given input and return the // computed hash @@ -70,22 +24,44 @@ hash_string :: proc(data: string) -> [32]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [32]byte { - _create_sm3_ctx() - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Sm3_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_sm3_ctx() - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Sm3_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_sm3_ctx() - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [32]byte{}, false } hash :: proc { @@ -99,86 +75,64 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Sm3_Context) { + ctx.state[0] = IV[0] + ctx.state[1] = IV[1] + ctx.state[2] = IV[2] + ctx.state[3] = IV[3] + ctx.state[4] = IV[4] + ctx.state[5] = IV[5] + ctx.state[6] = IV[6] + ctx.state[7] = IV[7] } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) -} +update :: proc(ctx: ^Sm3_Context, data: []byte) { + data := data + ctx.length += u64(len(data)) -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} - -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Sm3_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Sm3_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } + if ctx.bitlength > 0 { + n := copy(ctx.x[ctx.bitlength:], data[:]) + ctx.bitlength += u64(n) + if ctx.bitlength == 64 { + block(ctx, ctx.x[:]) + ctx.bitlength = 0 } - final_odin(&c, hash[:]) - return hash, true + data = data[n:] + } + if len(data) >= 64 { + n := len(data) &~ (64 - 1) + block(ctx, data[:n]) + data = data[n:] + } + if len(data) > 0 { + ctx.bitlength = u64(copy(ctx.x[:], data[:])) + } +} + +final :: proc(ctx: ^Sm3_Context, hash: []byte) { + length := ctx.length + + pad: [64]byte + pad[0] = 0x80 + if length % 64 < 56 { + update(ctx, pad[0: 56 - length % 64]) } else { - return hash, false + update(ctx, pad[0: 64 + 56 - length % 64]) } -} -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} + length <<= 3 + util.PUT_U64_BE(pad[:], length) + update(ctx, pad[0: 8]) + assert(ctx.bitlength == 0) -@(private) -_create_sm3_ctx :: #force_inline proc() { - ctx: Sm3_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._32 -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_sm3_ctx() - if c, ok := ctx.internal_ctx.(Sm3_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Sm3_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Sm3_Context); ok { - final_odin(&c, hash) - } + util.PUT_U32_BE(hash[0:], ctx.state[0]) + util.PUT_U32_BE(hash[4:], ctx.state[1]) + util.PUT_U32_BE(hash[8:], ctx.state[2]) + util.PUT_U32_BE(hash[12:], ctx.state[3]) + util.PUT_U32_BE(hash[16:], ctx.state[4]) + util.PUT_U32_BE(hash[20:], ctx.state[5]) + util.PUT_U32_BE(hash[24:], ctx.state[6]) + util.PUT_U32_BE(hash[28:], ctx.state[7]) } /* @@ -200,17 +154,6 @@ IV := [8]u32 { 0xa96f30bc, 0x163138aa, 0xe38dee4d, 0xb0fb0e4e, } -init_odin :: proc(ctx: ^Sm3_Context) { - ctx.state[0] = IV[0] - ctx.state[1] = IV[1] - ctx.state[2] = IV[2] - ctx.state[3] = IV[3] - ctx.state[4] = IV[4] - ctx.state[5] = IV[5] - ctx.state[6] = IV[6] - ctx.state[7] = IV[7] -} - block :: proc "contextless" (ctx: ^Sm3_Context, buf: []byte) { buf := buf @@ -282,52 +225,3 @@ block :: proc "contextless" (ctx: ^Sm3_Context, buf: []byte) { ctx.state[0], ctx.state[1], ctx.state[2], ctx.state[3] = state0, state1, state2, state3 ctx.state[4], ctx.state[5], ctx.state[6], ctx.state[7] = state4, state5, state6, state7 } - -update_odin :: proc(ctx: ^Sm3_Context, data: []byte) { - data := data - ctx.length += u64(len(data)) - - if ctx.bitlength > 0 { - n := copy(ctx.x[ctx.bitlength:], data[:]) - ctx.bitlength += u64(n) - if ctx.bitlength == 64 { - block(ctx, ctx.x[:]) - ctx.bitlength = 0 - } - data = data[n:] - } - if len(data) >= 64 { - n := len(data) &~ (64 - 1) - block(ctx, data[:n]) - data = data[n:] - } - if len(data) > 0 { - ctx.bitlength = u64(copy(ctx.x[:], data[:])) - } -} - -final_odin :: proc(ctx: ^Sm3_Context, hash: []byte) { - length := ctx.length - - pad: [64]byte - pad[0] = 0x80 - if length % 64 < 56 { - update_odin(ctx, pad[0: 56 - length % 64]) - } else { - update_odin(ctx, pad[0: 64 + 56 - length % 64]) - } - - length <<= 3 - util.PUT_U64_BE(pad[:], length) - update_odin(ctx, pad[0: 8]) - assert(ctx.bitlength == 0) - - util.PUT_U32_BE(hash[0:], ctx.state[0]) - util.PUT_U32_BE(hash[4:], ctx.state[1]) - util.PUT_U32_BE(hash[8:], ctx.state[2]) - util.PUT_U32_BE(hash[12:], ctx.state[3]) - util.PUT_U32_BE(hash[16:], ctx.state[4]) - util.PUT_U32_BE(hash[20:], ctx.state[5]) - util.PUT_U32_BE(hash[24:], ctx.state[6]) - util.PUT_U32_BE(hash[28:], ctx.state[7]) -} diff --git a/core/crypto/streebog/streebog.odin b/core/crypto/streebog/streebog.odin index 385fbdc44..b90ef8e86 100644 --- a/core/crypto/streebog/streebog.odin +++ b/core/crypto/streebog/streebog.odin @@ -6,7 +6,6 @@ package streebog List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the Streebog hashing algorithm, standardized as GOST R 34.11-2012 in RFC 6986 */ @@ -15,58 +14,6 @@ import "core:os" import "core:io" import "../util" -import "../botan" -import "../_ctx" - -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_32 = hash_bytes_odin_32 - ctx.hash_file_32 = hash_file_odin_32 - ctx.hash_stream_32 = hash_stream_odin_32 - ctx.hash_bytes_64 = hash_bytes_odin_64 - ctx.hash_file_64 = hash_file_odin_64 - ctx.hash_stream_64 = hash_stream_odin_64 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_STREEBOG) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - -@(private) -_create_streebog_ctx :: #force_inline proc(is256: bool) { - ctx: Streebog_Context - ctx.is256 = is256 - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = is256 ? ._32 : ._64 -} /* High level API @@ -81,22 +28,46 @@ hash_string_256 :: proc(data: string) -> [32]byte { // hash_bytes_256 will hash the given input and return the // computed hash hash_bytes_256 :: proc(data: []byte) -> [32]byte { - _create_streebog_ctx(true) - return _hash_impl->hash_bytes_32(data) + hash: [32]byte + ctx: Streebog_Context + ctx.is256 = true + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_256 will read the stream in chunks and compute a // hash from its contents hash_stream_256 :: proc(s: io.Stream) -> ([32]byte, bool) { - _create_streebog_ctx(true) - return _hash_impl->hash_stream_32(s) + hash: [32]byte + ctx: Streebog_Context + ctx.is256 = true + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_256 will read the file provided by the given handle // and compute a hash hash_file_256 :: proc(hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - _create_streebog_ctx(true) - return _hash_impl->hash_file_32(hd, load_at_once) + if !load_at_once { + return hash_stream_256(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_256(buf[:]), ok + } + } + return [32]byte{}, false } hash_256 :: proc { @@ -115,22 +86,44 @@ hash_string_512 :: proc(data: string) -> [64]byte { // hash_bytes_512 will hash the given input and return the // computed hash hash_bytes_512 :: proc(data: []byte) -> [64]byte { - _create_streebog_ctx(false) - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: Streebog_Context + init(&ctx) + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream_512 will read the stream in chunks and compute a // hash from its contents hash_stream_512 :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_streebog_ctx(false) - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Streebog_Context + init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file_512 will read the file provided by the given handle // and compute a hash hash_file_512 :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_streebog_ctx(false) - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream_512(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_512(buf[:]), ok + } + } + return [64]byte{}, false } hash_512 :: proc { @@ -144,120 +137,64 @@ hash_512 :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +init :: proc(ctx: ^Streebog_Context) { + if ctx.is256 { + ctx.hash_size = 256 + for _, i in ctx.h { + ctx.h[i] = 0x01 + } + } else { + ctx.hash_size = 512 + } + ctx.v_512[1] = 0x02 } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc(ctx: ^Streebog_Context, data: []byte) { + length := u64(len(data)) + chk_size: u64 + data := data + for (length > 63) && (ctx.buf_size == 0) { + stage2(ctx, data) + data = data[64:] + length -= 64 + } + + for length != 0 { + chk_size = 64 - ctx.buf_size + if chk_size > length { + chk_size = length + } + copy(ctx.buffer[ctx.buf_size:], data[:chk_size]) + ctx.buf_size += chk_size + length -= chk_size + data = data[chk_size:] + if ctx.buf_size == 64 { + stage2(ctx, ctx.buffer[:]) + ctx.buf_size = 0 + } + } } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} +final :: proc(ctx: ^Streebog_Context, hash: []byte) { + t: [64]byte + t[1] = byte((ctx.buf_size * 8) >> 8) & 0xff + t[0] = byte((ctx.buf_size) * 8) & 0xff -hash_bytes_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [32]byte { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} + padding(ctx) -hash_stream_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([32]byte, bool) { - hash: [32]byte - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} + G(ctx.h[:], ctx.n[:], ctx.buffer[:]) -hash_file_odin_32 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([32]byte, bool) { - if !load_at_once { - return hash_stream_odin_32(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_32(ctx, buf[:]), ok - } - } - return [32]byte{}, false -} + add_mod_512(ctx.n[:], t[:], ctx.n[:]) + add_mod_512(ctx.sigma[:], ctx.buffer[:], ctx.sigma[:]) -hash_bytes_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - init_odin(&c) - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} + G(ctx.h[:], ctx.v_0[:], ctx.n[:]) + G(ctx.h[:], ctx.v_0[:], ctx.sigma[:]) -hash_stream_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_64 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin_64(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_64(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} - -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - _create_streebog_ctx(ctx.hash_size == ._32) - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - init_odin(&c) - } -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Streebog_Context); ok { - final_odin(&c, hash) - } + if ctx.is256 { + copy(hash[:], ctx.h[32:]) + } else { + copy(hash[:], ctx.h[:]) + } } /* @@ -534,63 +471,3 @@ padding :: proc(ctx: ^Streebog_Context) { copy(ctx.buffer[:], t[:]) } } - -init_odin :: proc(ctx: ^Streebog_Context) { - if ctx.is256 { - ctx.hash_size = 256 - for _, i in ctx.h { - ctx.h[i] = 0x01 - } - } else { - ctx.hash_size = 512 - } - ctx.v_512[1] = 0x02 -} - -update_odin :: proc(ctx: ^Streebog_Context, data: []byte) { - length := u64(len(data)) - chk_size: u64 - data := data - for (length > 63) && (ctx.buf_size == 0) { - stage2(ctx, data) - data = data[64:] - length -= 64 - } - - for length != 0 { - chk_size = 64 - ctx.buf_size - if chk_size > length { - chk_size = length - } - copy(ctx.buffer[ctx.buf_size:], data[:chk_size]) - ctx.buf_size += chk_size - length -= chk_size - data = data[chk_size:] - if ctx.buf_size == 64 { - stage2(ctx, ctx.buffer[:]) - ctx.buf_size = 0 - } - } -} - -final_odin :: proc(ctx: ^Streebog_Context, hash: []byte) { - t: [64]byte - t[1] = byte((ctx.buf_size * 8) >> 8) & 0xff - t[0] = byte((ctx.buf_size) * 8) & 0xff - - padding(ctx) - - G(ctx.h[:], ctx.n[:], ctx.buffer[:]) - - add_mod_512(ctx.n[:], t[:], ctx.n[:]) - add_mod_512(ctx.sigma[:], ctx.buffer[:], ctx.sigma[:]) - - G(ctx.h[:], ctx.v_0[:], ctx.n[:]) - G(ctx.h[:], ctx.v_0[:], ctx.sigma[:]) - - if ctx.is256 { - copy(hash[:], ctx.h[32:]) - } else { - copy(hash[:], ctx.h[:]) - } -} \ No newline at end of file diff --git a/core/crypto/tiger/tiger.odin b/core/crypto/tiger/tiger.odin index 240375b90..ecd7f5583 100644 --- a/core/crypto/tiger/tiger.odin +++ b/core/crypto/tiger/tiger.odin @@ -6,7 +6,6 @@ package tiger List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the Tiger1 variant of the Tiger hashing algorithm as defined in */ @@ -14,55 +13,8 @@ package tiger import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../_tiger" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin_16 - ctx.hash_file_16 = hash_file_odin_16 - ctx.hash_stream_16 = hash_stream_odin_16 - ctx.hash_bytes_20 = hash_bytes_odin_20 - ctx.hash_file_20 = hash_file_odin_20 - ctx.hash_stream_20 = hash_stream_odin_20 - ctx.hash_bytes_24 = hash_bytes_odin_24 - ctx.hash_file_24 = hash_file_odin_24 - ctx.hash_stream_24 = hash_stream_odin_24 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_TIGER) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -76,22 +28,46 @@ hash_string_128 :: proc(data: string) -> [16]byte { // hash_bytes_128 will hash the given input and return the // computed hash hash_bytes_128 :: proc(data: []byte) -> [16]byte { - _create_tiger_ctx(16) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_128 will read the stream in chunks and compute a // hash from its contents hash_stream_128 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_tiger_ctx(16) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_128 will read the file provided by the given handle // and compute a hash hash_file_128 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_tiger_ctx(16) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128(buf[:]), ok + } + } + return [16]byte{}, false } hash_128 :: proc { @@ -110,22 +86,46 @@ hash_string_160 :: proc(data: string) -> [20]byte { // hash_bytes_160 will hash the given input and return the // computed hash hash_bytes_160 :: proc(data: []byte) -> [20]byte { - _create_tiger_ctx(20) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_160 will read the stream in chunks and compute a // hash from its contents hash_stream_160 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_tiger_ctx(20) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_160 will read the file provided by the given handle // and compute a hash hash_file_160 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_tiger_ctx(20) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160(buf[:]), ok + } + } + return [20]byte{}, false } hash_160 :: proc { @@ -144,22 +144,46 @@ hash_string_192 :: proc(data: string) -> [24]byte { // hash_bytes_192 will hash the given input and return the // computed hash hash_bytes_192 :: proc(data: []byte) -> [24]byte { - _create_tiger_ctx(24) - return _hash_impl->hash_bytes_24(data) + hash: [24]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_192 will read the stream in chunks and compute a // hash from its contents hash_stream_192 :: proc(s: io.Stream) -> ([24]byte, bool) { - _create_tiger_ctx(24) - return _hash_impl->hash_stream_24(s) + hash: [24]byte + ctx: _tiger.Tiger_Context + ctx.ver = 1 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_192 will read the file provided by the given handle // and compute a hash hash_file_192 :: proc(hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - _create_tiger_ctx(24) - return _hash_impl->hash_file_24(hd, load_at_once) + if !load_at_once { + return hash_stream_192(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_192(buf[:]), ok + } + } + return [24]byte{}, false } hash_192 :: proc { @@ -169,163 +193,21 @@ hash_192 :: proc { hash_string_192, } -hash_bytes_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} +/* + Low level API +*/ -hash_stream_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} +Tiger_Context :: _tiger.Tiger_Context -hash_file_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_16(ctx, buf[:]), ok - } - } - return [16]byte{}, false -} - -hash_bytes_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_odin_20(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_20(ctx, buf[:]), ok - } - } - return [20]byte{}, false -} - -hash_bytes_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [24]byte { - hash: [24]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([24]byte, bool) { - hash: [24]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - if !load_at_once { - return hash_stream_odin_24(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_24(ctx, buf[:]), ok - } - } - return [24]byte{}, false -} - -@(private) -_create_tiger_ctx :: #force_inline proc(hash_size: int) { - ctx: _tiger.Tiger_Context +init :: proc(ctx: ^_tiger.Tiger_Context) { ctx.ver = 1 - _hash_impl.internal_ctx = ctx - switch hash_size { - case 16: _hash_impl.hash_size = ._16 - case 20: _hash_impl.hash_size = ._20 - case 24: _hash_impl.hash_size = ._24 - } + _tiger.init(ctx) } -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._16: _create_tiger_ctx(16) - case ._20: _create_tiger_ctx(20) - case ._24: _create_tiger_ctx(24) - } - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - } +update :: proc(ctx: ^_tiger.Tiger_Context, data: []byte) { + _tiger.update(ctx, data) } -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.final_odin(&c, hash) - } -} +final :: proc(ctx: ^_tiger.Tiger_Context, hash: []byte) { + _tiger.final(ctx, hash) +} \ No newline at end of file diff --git a/core/crypto/tiger2/tiger2.odin b/core/crypto/tiger2/tiger2.odin index a61d271ad..a93e19319 100644 --- a/core/crypto/tiger2/tiger2.odin +++ b/core/crypto/tiger2/tiger2.odin @@ -6,7 +6,6 @@ package tiger2 List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Interface for the Tiger2 variant of the Tiger hashing algorithm as defined in */ @@ -14,55 +13,8 @@ package tiger2 import "core:os" import "core:io" -import "../_ctx" import "../_tiger" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_16 = hash_bytes_odin_16 - ctx.hash_file_16 = hash_file_odin_16 - ctx.hash_stream_16 = hash_stream_odin_16 - ctx.hash_bytes_20 = hash_bytes_odin_20 - ctx.hash_file_20 = hash_file_odin_20 - ctx.hash_stream_20 = hash_stream_odin_20 - ctx.hash_bytes_24 = hash_bytes_odin_24 - ctx.hash_file_24 = hash_file_odin_24 - ctx.hash_stream_24 = hash_stream_odin_24 - ctx.init = _init_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan does nothing, since Tiger2 is not available in Botan -@(warning="Tiger2 is not provided by the Botan API. Odin implementation will be used") -use_botan :: #force_inline proc() { - use_odin() -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -76,22 +28,46 @@ hash_string_128 :: proc(data: string) -> [16]byte { // hash_bytes_128 will hash the given input and return the // computed hash hash_bytes_128 :: proc(data: []byte) -> [16]byte { - _create_tiger2_ctx(16) - return _hash_impl->hash_bytes_16(data) + hash: [16]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_128 will read the stream in chunks and compute a // hash from its contents hash_stream_128 :: proc(s: io.Stream) -> ([16]byte, bool) { - _create_tiger2_ctx(16) - return _hash_impl->hash_stream_16(s) + hash: [16]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_128 will read the file provided by the given handle // and compute a hash hash_file_128 :: proc(hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - _create_tiger2_ctx(16) - return _hash_impl->hash_file_16(hd, load_at_once) + if !load_at_once { + return hash_stream_128(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_128(buf[:]), ok + } + } + return [16]byte{}, false } hash_128 :: proc { @@ -110,22 +86,46 @@ hash_string_160 :: proc(data: string) -> [20]byte { // hash_bytes_160 will hash the given input and return the // computed hash hash_bytes_160 :: proc(data: []byte) -> [20]byte { - _create_tiger2_ctx(20) - return _hash_impl->hash_bytes_20(data) + hash: [20]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_160 will read the stream in chunks and compute a // hash from its contents hash_stream_160 :: proc(s: io.Stream) -> ([20]byte, bool) { - _create_tiger2_ctx(20) - return _hash_impl->hash_stream_20(s) + hash: [20]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_160 will read the file provided by the given handle // and compute a hash hash_file_160 :: proc(hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - _create_tiger2_ctx(20) - return _hash_impl->hash_file_20(hd, load_at_once) + if !load_at_once { + return hash_stream_160(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_160(buf[:]), ok + } + } + return [20]byte{}, false } hash_160 :: proc { @@ -144,22 +144,46 @@ hash_string_192 :: proc(data: string) -> [24]byte { // hash_bytes_192 will hash the given input and return the // computed hash hash_bytes_192 :: proc(data: []byte) -> [24]byte { - _create_tiger2_ctx(24) - return _hash_impl->hash_bytes_24(data) + hash: [24]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + _tiger.update(&ctx, data) + _tiger.final(&ctx, hash[:]) + return hash } // hash_stream_192 will read the stream in chunks and compute a // hash from its contents hash_stream_192 :: proc(s: io.Stream) -> ([24]byte, bool) { - _create_tiger2_ctx(24) - return _hash_impl->hash_stream_24(s) + hash: [24]byte + ctx: _tiger.Tiger_Context + ctx.ver = 2 + _tiger.init(&ctx) + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + _tiger.update(&ctx, buf[:read]) + } + } + _tiger.final(&ctx, hash[:]) + return hash, true } // hash_file_192 will read the file provided by the given handle // and compute a hash hash_file_192 :: proc(hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - _create_tiger2_ctx(24) - return _hash_impl->hash_file_24(hd, load_at_once) + if !load_at_once { + return hash_stream_192(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes_192(buf[:]), ok + } + } + return [24]byte{}, false } hash_192 :: proc { @@ -169,163 +193,21 @@ hash_192 :: proc { hash_string_192, } -hash_bytes_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [16]byte { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} +/* + Low level API +*/ -hash_stream_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([16]byte, bool) { - hash: [16]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} +Tiger_Context :: _tiger.Tiger_Context -hash_file_odin_16 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([16]byte, bool) { - if !load_at_once { - return hash_stream_odin_16(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_16(ctx, buf[:]), ok - } - } - return [16]byte{}, false -} - -hash_bytes_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [20]byte { - hash: [20]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([20]byte, bool) { - hash: [20]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_20 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([20]byte, bool) { - if !load_at_once { - return hash_stream_odin_20(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_20(ctx, buf[:]), ok - } - } - return [20]byte{}, false -} - -hash_bytes_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [24]byte { - hash: [24]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - _tiger.update_odin(&c, data) - _tiger.final_odin(&c, hash[:]) - } - return hash -} - -hash_stream_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([24]byte, bool) { - hash: [24]byte - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - _tiger.update_odin(&c, buf[:read]) - } - } - _tiger.final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} - -hash_file_odin_24 :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([24]byte, bool) { - if !load_at_once { - return hash_stream_odin_24(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin_24(ctx, buf[:]), ok - } - } - return [24]byte{}, false -} - -@(private) -_create_tiger2_ctx :: #force_inline proc(hash_size: int) { - ctx: _tiger.Tiger_Context +init :: proc(ctx: ^_tiger.Tiger_Context) { ctx.ver = 2 - _hash_impl.internal_ctx = ctx - switch hash_size { - case 16: _hash_impl.hash_size = ._16 - case 20: _hash_impl.hash_size = ._20 - case 24: _hash_impl.hash_size = ._24 - } + _tiger.init(ctx) } -@(private) -_init_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - #partial switch ctx.hash_size { - case ._16: _create_tiger2_ctx(16) - case ._20: _create_tiger2_ctx(20) - case ._24: _create_tiger2_ctx(24) - } - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.init_odin(&c) - } +update :: proc(ctx: ^_tiger.Tiger_Context, data: []byte) { + _tiger.update(ctx, data) } -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(_tiger.Tiger_Context); ok { - _tiger.final_odin(&c, hash) - } +final :: proc(ctx: ^_tiger.Tiger_Context, hash: []byte) { + _tiger.final(ctx, hash) } \ No newline at end of file diff --git a/core/crypto/whirlpool/whirlpool.odin b/core/crypto/whirlpool/whirlpool.odin index ce0123318..43ad2a0a5 100644 --- a/core/crypto/whirlpool/whirlpool.odin +++ b/core/crypto/whirlpool/whirlpool.odin @@ -6,7 +6,6 @@ package whirlpool List of contributors: zhibog, dotbmp: Initial implementation. - Jeroen van Rijn: Context design to be able to change from Odin implementation to bindings. Implementation of the Whirlpool hashing algorithm, as defined in */ @@ -14,48 +13,8 @@ package whirlpool import "core:os" import "core:io" -import "../botan" -import "../_ctx" import "../util" -/* - Context initialization and switching between the Odin implementation and the bindings -*/ - -USE_BOTAN_LIB :: bool(#config(USE_BOTAN_LIB, false)) - -@(private) -_init_vtable :: #force_inline proc() -> ^_ctx.Hash_Context { - ctx := _ctx._init_vtable() - when USE_BOTAN_LIB { - use_botan() - } else { - _assign_hash_vtable(ctx) - } - return ctx -} - -@(private) -_assign_hash_vtable :: #force_inline proc(ctx: ^_ctx.Hash_Context) { - ctx.hash_bytes_64 = hash_bytes_odin - ctx.hash_file_64 = hash_file_odin - ctx.hash_stream_64 = hash_stream_odin - ctx.update = _update_odin - ctx.final = _final_odin -} - -_hash_impl := _init_vtable() - -// use_botan assigns the internal vtable of the hash context to use the Botan bindings -use_botan :: #force_inline proc() { - botan.assign_hash_vtable(_hash_impl, botan.HASH_WHIRLPOOL) -} - -// use_odin assigns the internal vtable of the hash context to use the Odin implementation -use_odin :: #force_inline proc() { - _assign_hash_vtable(_hash_impl) -} - /* High level API */ @@ -69,22 +28,44 @@ hash_string :: proc(data: string) -> [64]byte { // hash_bytes will hash the given input and return the // computed hash hash_bytes :: proc(data: []byte) -> [64]byte { - _create_whirlpool_ctx() - return _hash_impl->hash_bytes_64(data) + hash: [64]byte + ctx: Whirlpool_Context + // init(&ctx) No-op + update(&ctx, data) + final(&ctx, hash[:]) + return hash } // hash_stream will read the stream in chunks and compute a // hash from its contents hash_stream :: proc(s: io.Stream) -> ([64]byte, bool) { - _create_whirlpool_ctx() - return _hash_impl->hash_stream_64(s) + hash: [64]byte + ctx: Whirlpool_Context + // init(&ctx) No-op + buf := make([]byte, 512) + defer delete(buf) + read := 1 + for read > 0 { + read, _ = s->impl_read(buf) + if read > 0 { + update(&ctx, buf[:read]) + } + } + final(&ctx, hash[:]) + return hash, true } // hash_file will read the file provided by the given handle // and compute a hash hash_file :: proc(hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - _create_whirlpool_ctx() - return _hash_impl->hash_file_64(hd, load_at_once) + if !load_at_once { + return hash_stream(os.stream_from_handle(hd)) + } else { + if buf, ok := os.read_entire_file(hd); ok { + return hash_bytes(buf[:]), ok + } + } + return [64]byte{}, false } hash :: proc { @@ -98,76 +79,103 @@ hash :: proc { Low level API */ -init :: proc(ctx: ^_ctx.Hash_Context) { - _hash_impl->init() +@(warning="Init is a no-op for Whirlpool") +init :: proc(ctx: ^Whirlpool_Context) { + // No action needed here } -update :: proc(ctx: ^_ctx.Hash_Context, data: []byte) { - _hash_impl->update(data) +update :: proc(ctx: ^Whirlpool_Context, source: []byte) { + source_pos: int + nn := len(source) + source_bits := u64(nn * 8) + source_gap := u32((8 - (int(source_bits & 7))) & 7) + buffer_rem := uint(ctx.buffer_bits & 7) + b: u32 + + for i, carry, value := 31, u32(0), u32(source_bits); i >= 0 && (carry != 0 || value != 0); i -= 1 { + carry += u32(ctx.bitlength[i]) + (u32(value & 0xff)) + ctx.bitlength[i] = byte(carry) + carry >>= 8 + value >>= 8 + } + + for source_bits > 8 { + b = u32(u32((source[source_pos] << source_gap) & 0xff) | u32((source[source_pos+1] & 0xff) >> (8 - source_gap))) + + ctx.buffer[ctx.buffer_pos] |= u8(b >> buffer_rem) + ctx.buffer_pos += 1 + ctx.buffer_bits += int(8 - buffer_rem) + + if ctx.buffer_bits == 512 { + transform(ctx) + ctx.buffer_bits = 0 + ctx.buffer_pos = 0 + } + ctx.buffer[ctx.buffer_pos] = byte(b << (8 - buffer_rem)) + ctx.buffer_bits += int(buffer_rem) + source_bits -= 8 + source_pos += 1 + } + + if source_bits > 0 { + b = u32((source[source_pos] << source_gap) & 0xff) + ctx.buffer[ctx.buffer_pos] |= byte(b) >> buffer_rem + } else {b = 0} + + if u64(buffer_rem) + source_bits < 8 { + ctx.buffer_bits += int(source_bits) + } else { + ctx.buffer_pos += 1 + ctx.buffer_bits += 8 - int(buffer_rem) + source_bits -= u64(8 - buffer_rem) + + if ctx.buffer_bits == 512 { + transform(ctx) + ctx.buffer_bits = 0 + ctx.buffer_pos = 0 + } + ctx.buffer[ctx.buffer_pos] = byte(b << (8 - buffer_rem)) + ctx.buffer_bits += int(source_bits) + } } -final :: proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - _hash_impl->final(hash) -} +final :: proc(ctx: ^Whirlpool_Context, hash: []byte) { + n := ctx + n.buffer[n.buffer_pos] |= 0x80 >> (uint(n.buffer_bits) & 7) + n.buffer_pos += 1 -hash_bytes_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) -> [64]byte { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Whirlpool_Context); ok { - update_odin(&c, data) - final_odin(&c, hash[:]) - } - return hash -} + if n.buffer_pos > 64 - 32 { + if n.buffer_pos < 64 { + for i := 0; i < 64 - n.buffer_pos; i += 1 { + n.buffer[n.buffer_pos + i] = 0 + } + } + transform(ctx) + n.buffer_pos = 0 + } -hash_stream_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, fs: io.Stream) -> ([64]byte, bool) { - hash: [64]byte - if c, ok := ctx.internal_ctx.(Whirlpool_Context); ok { - buf := make([]byte, 512) - defer delete(buf) - read := 1 - for read > 0 { - read, _ = fs->impl_read(buf) - if read > 0 { - update_odin(&c, buf[:read]) - } - } - final_odin(&c, hash[:]) - return hash, true - } else { - return hash, false - } -} + if n.buffer_pos < 64 - 32 { + for i := 0; i < (64 - 32) - n.buffer_pos; i += 1 { + n.buffer[n.buffer_pos + i] = 0 + } + } + n.buffer_pos = 64 - 32 -hash_file_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hd: os.Handle, load_at_once := false) -> ([64]byte, bool) { - if !load_at_once { - return hash_stream_odin(ctx, os.stream_from_handle(hd)) - } else { - if buf, ok := os.read_entire_file(hd); ok { - return hash_bytes_odin(ctx, buf[:]), ok - } - } - return [64]byte{}, false -} + for i := 0; i < 32; i += 1 { + n.buffer[n.buffer_pos + i] = n.bitlength[i] + } + transform(ctx) -@(private) -_create_whirlpool_ctx :: #force_inline proc() { - ctx: Whirlpool_Context - _hash_impl.internal_ctx = ctx - _hash_impl.hash_size = ._64 -} - -@(private) -_update_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, data: []byte) { - if c, ok := ctx.internal_ctx.(Whirlpool_Context); ok { - update_odin(&c, data) - } -} - -@(private) -_final_odin :: #force_inline proc(ctx: ^_ctx.Hash_Context, hash: []byte) { - if c, ok := ctx.internal_ctx.(Whirlpool_Context); ok { - final_odin(&c, hash) - } + for i := 0; i < 8; i += 1 { + hash[i * 8] = byte(n.hash[i] >> 56) + hash[i * 8 + 1] = byte(n.hash[i] >> 48) + hash[i * 8 + 2] = byte(n.hash[i] >> 40) + hash[i * 8 + 3] = byte(n.hash[i] >> 32) + hash[i * 8 + 4] = byte(n.hash[i] >> 24) + hash[i * 8 + 5] = byte(n.hash[i] >> 16) + hash[i * 8 + 6] = byte(n.hash[i] >> 8) + hash[i * 8 + 7] = byte(n.hash[i]) + } } /* @@ -774,97 +782,3 @@ transform :: proc (ctx: ^Whirlpool_Context) { } for i := 0; i < 8; i += 1 {ctx.hash[i] ~= state[i] ~ block[i]} } - -update_odin :: proc(ctx: ^Whirlpool_Context, source: []byte) { - source_pos: int - nn := len(source) - source_bits := u64(nn * 8) - source_gap := u32((8 - (int(source_bits & 7))) & 7) - buffer_rem := uint(ctx.buffer_bits & 7) - b: u32 - - for i, carry, value := 31, u32(0), u32(source_bits); i >= 0 && (carry != 0 || value != 0); i -= 1 { - carry += u32(ctx.bitlength[i]) + (u32(value & 0xff)) - ctx.bitlength[i] = byte(carry) - carry >>= 8 - value >>= 8 - } - - for source_bits > 8 { - b = u32(u32((source[source_pos] << source_gap) & 0xff) | u32((source[source_pos+1] & 0xff) >> (8 - source_gap))) - - ctx.buffer[ctx.buffer_pos] |= u8(b >> buffer_rem) - ctx.buffer_pos += 1 - ctx.buffer_bits += int(8 - buffer_rem) - - if ctx.buffer_bits == 512 { - transform(ctx) - ctx.buffer_bits = 0 - ctx.buffer_pos = 0 - } - ctx.buffer[ctx.buffer_pos] = byte(b << (8 - buffer_rem)) - ctx.buffer_bits += int(buffer_rem) - source_bits -= 8 - source_pos += 1 - } - - if source_bits > 0 { - b = u32((source[source_pos] << source_gap) & 0xff) - ctx.buffer[ctx.buffer_pos] |= byte(b) >> buffer_rem - } else {b = 0} - - if u64(buffer_rem) + source_bits < 8 { - ctx.buffer_bits += int(source_bits) - } else { - ctx.buffer_pos += 1 - ctx.buffer_bits += 8 - int(buffer_rem) - source_bits -= u64(8 - buffer_rem) - - if ctx.buffer_bits == 512 { - transform(ctx) - ctx.buffer_bits = 0 - ctx.buffer_pos = 0 - } - ctx.buffer[ctx.buffer_pos] = byte(b << (8 - buffer_rem)) - ctx.buffer_bits += int(source_bits) - } -} - -final_odin :: proc(ctx: ^Whirlpool_Context, hash: []byte) { - n := ctx - n.buffer[n.buffer_pos] |= 0x80 >> (uint(n.buffer_bits) & 7) - n.buffer_pos += 1 - - if n.buffer_pos > 64 - 32 { - if n.buffer_pos < 64 { - for i := 0; i < 64 - n.buffer_pos; i += 1 { - n.buffer[n.buffer_pos + i] = 0 - } - } - transform(ctx) - n.buffer_pos = 0 - } - - if n.buffer_pos < 64 - 32 { - for i := 0; i < (64 - 32) - n.buffer_pos; i += 1 { - n.buffer[n.buffer_pos + i] = 0 - } - } - n.buffer_pos = 64 - 32 - - for i := 0; i < 32; i += 1 { - n.buffer[n.buffer_pos + i] = n.bitlength[i] - } - transform(ctx) - - for i := 0; i < 8; i += 1 { - hash[i * 8] = byte(n.hash[i] >> 56) - hash[i * 8 + 1] = byte(n.hash[i] >> 48) - hash[i * 8 + 2] = byte(n.hash[i] >> 40) - hash[i * 8 + 3] = byte(n.hash[i] >> 32) - hash[i * 8 + 4] = byte(n.hash[i] >> 24) - hash[i * 8 + 5] = byte(n.hash[i] >> 16) - hash[i * 8 + 6] = byte(n.hash[i] >> 8) - hash[i * 8 + 7] = byte(n.hash[i]) - } -} \ No newline at end of file diff --git a/tests/core/botan.dll b/tests/core/botan.dll deleted file mode 100644 index 423231d8600ef98e3f22739e9129edc070cf0cec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4555776 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

j}biQas7p+z6OKyF%~rjm+su-j?HIT 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�guLCpk6+I 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�vwhwK$RU%U2m?7B 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

}K=rJ_Fvl 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