diff options
Diffstat (limited to 'lib/libc/include/crypto')
-rw-r--r-- | lib/libc/include/crypto/sha256.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/libc/include/crypto/sha256.h b/lib/libc/include/crypto/sha256.h new file mode 100644 index 0000000..6bd1077 --- /dev/null +++ b/lib/libc/include/crypto/sha256.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023-2025 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Hyra nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _CRYPTO_SHA256_H +#define _CRYPTO_SHA256_H 1 + +#include <stddef.h> +#include <stdint.h> + +#define SHA256_HEX_SIZE (64 + 1) +#define SHA256_BYTES_SIZE 32 + +/* + * Compute the SHA-256 checksum of a memory region given a pointer and + * the size of that memory region. + * The output is a hexadecimal string of 65 characters. + * The last character will be the null-character. + */ +void sha256_hex(const void *src, size_t n_bytes, char *dst_hex65); + +void sha256_bytes(const void *src, size_t n_bytes, void *dst_bytes32); + +typedef struct sha256 { + uint32_t state[8]; + uint8_t buffer[64]; + uint64_t n_bits; + uint8_t buffer_counter; +} sha256; + +/* Functions to compute streaming SHA-256 checksums. */ +void sha256_init(struct sha256 *sha); +void sha256_append(struct sha256 *sha, const void *data, size_t n_bytes); +void sha256_finalize_hex(struct sha256 *sha, char *dst_hex65); +void sha256_finalize_bytes(struct sha256 *sha, void *dst_bytes32); + +#endif /* !_CRYPTO_SHA256_H */ |