X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fsha1.h;h=91f84d9168baca324b879127a1b1be722c314a49;hb=HEAD;hp=05650e06d4a5bca0f541bf2b6b11485cf7bed293;hpb=f18b7fc3361c4daac0ddd104af65a8eff8466fec;p=wimlib diff --git a/include/wimlib/sha1.h b/include/wimlib/sha1.h index 05650e06..91f84d91 100644 --- a/include/wimlib/sha1.h +++ b/include/wimlib/sha1.h @@ -1,8 +1,28 @@ /* * sha1.h * - * The author dedicates this file to the public domain. - * You can do whatever you want with this file. + * Copyright 2022-2023 Eric Biggers + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef _WIMLIB_SHA1_H @@ -13,12 +33,32 @@ #include "wimlib/types.h" #include "wimlib/util.h" -#define SHA1_HASH_SIZE 20 +#define SHA1_HASH_SIZE 20 +#define SHA1_BLOCK_SIZE 64 + +struct sha1_ctx { + u64 bytecount; + u32 h[5]; + u8 buffer[SHA1_BLOCK_SIZE]; +}; + +void +sha1_init(struct sha1_ctx *ctx); + +void +sha1_update(struct sha1_ctx *ctx, const void *data, size_t len); + +void +sha1_final(struct sha1_ctx *ctx, u8 hash[SHA1_HASH_SIZE]); + +void +sha1(const void *data, size_t len, u8 hash[SHA1_HASH_SIZE]); extern const u8 zero_hash[SHA1_HASH_SIZE]; -extern void -sprint_hash(const u8 hash[SHA1_HASH_SIZE], tchar strbuf[SHA1_HASH_SIZE * 2 + 1]); +#define SHA1_HASH_STRING_LEN (2 * SHA1_HASH_SIZE + 1) +void +sprint_hash(const u8 hash[SHA1_HASH_SIZE], tchar strbuf[SHA1_HASH_STRING_LEN]); static inline void copy_hash(u8 dest[SHA1_HASH_SIZE], const u8 src[SHA1_HASH_SIZE]) @@ -26,12 +66,6 @@ copy_hash(u8 dest[SHA1_HASH_SIZE], const u8 src[SHA1_HASH_SIZE]) memcpy(dest, src, SHA1_HASH_SIZE); } -static inline void -random_hash(u8 hash[SHA1_HASH_SIZE]) -{ - randomize_byte_array(hash, SHA1_HASH_SIZE); -} - static inline int hashes_cmp(const u8 h1[SHA1_HASH_SIZE], const u8 h2[SHA1_HASH_SIZE]) { @@ -47,49 +81,7 @@ hashes_equal(const u8 h1[SHA1_HASH_SIZE], const u8 h2[SHA1_HASH_SIZE]) static inline bool is_zero_hash(const u8 *hash) { - return (hash == zero_hash || hashes_equal(hash, zero_hash)); -} - -static inline void -zero_out_hash(u8 hash[SHA1_HASH_SIZE]) -{ - copy_hash(hash, zero_hash); -} - -#ifdef WITH_LIBCRYPTO - -#include - -#define sha1_init SHA1_Init -#define sha1_update SHA1_Update -#define sha1_final SHA1_Final - -static inline void -sha1_buffer(const void *buffer, size_t len, u8 hash[SHA1_HASH_SIZE]) -{ - SHA1(buffer, len, hash); + return hash == zero_hash || hashes_equal(hash, zero_hash); } -#else /* WITH_LIBCRYPTO */ - -typedef struct { - u64 bytecount; - u32 state[5]; - u8 buffer[64]; -} SHA_CTX; - -extern void -sha1_init(SHA_CTX *ctx); - -extern void -sha1_update(SHA_CTX *ctx, const void *data, size_t len); - -extern void -sha1_final(u8 hash[SHA1_HASH_SIZE], SHA_CTX *ctx); - -extern void -sha1_buffer(const void *buffer, size_t len, u8 hash[SHA1_HASH_SIZE]); - -#endif /* !WITH_LIBCRYPTO */ - #endif /* _WIMLIB_SHA1_H */