Hashing routines ================ Libucw contains two cryptographic hash algorithms: MD5 (RFC 1321) and SHA1 (RFC 3174). A SHA1-HMAC (RFC 2104) message authentication is available. There are non-cryptographic hashes as well. <>: - <> - <> - <> - <> <>: - <> - <> [[crypto]] Cryptographic hashes -------------------- [[md5]] MD5 ~~~ !!ucw/md5.h [[sha1]] SHA1 ~~~~ !!ucw/sha1.h [[usage]] Common usage ~~~~~~~~~~~~ There are two ways you can use the hashing routines. - Single-shot interface. If you have an in-memory buffer of the whole message you want to hash, you can use this. char *message = "Hello world"; byte output[MD5_SIZE]; md5_hash_buffer(output, message, strlen(message)); - Multi-shot interface. If you have the message scattered in many buffers or you get it by parts, you do not need to concatenate the parts together. byte buffer[MAX_BUFFER]; uns buffer_len; md5_context c; md5_init(&c); while(buffer_len = get_chunk(buffer, MAX_BUFFER)) { md5_update(&c, buffer, buffer_len); } byte output[MD5_SIZE]; memcpy(output, md5_final(&c), MD5_SIZE); SHA1 has the same interface, so the same two ways apply. See also <>. [[nocrypto]] Non-cryptographic hashes ------------------------ All these functions expect to be moduled by the size of a hash table. The size should be a prime number (it gives better distribution). !!ucw/hashfunc.h