mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-17 11:22:22 -07:00
79 lines
3.8 KiB
Odin
79 lines
3.8 KiB
Odin
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
|
|
} |