MD5¶
Implementation of the MD5 hashing function.
None of this will make any sense unless you’re studying RFC 1321 as you read the code.
There are three primary motivations for this particular implementation. 1) Programmer’s pride. I wanted to be able to say I’d done it, and I wanted to learn from the experience. 2) Portability. I wanted an implementation that I knew to be portable to a reasonable number of platforms. In particular, the algorithm is designed with little-endian platforms in mind, but I wanted an endian-agnostic implementation. 3) Compactness. While not an overriding goal, I thought it worth-while to see if I could reduce the overall size of the result. This is in keeping with my hopes that this library will be suitable for use in some embedded environments. Beyond that, cleanliness and clarity are always worth pursuing.
As mentioned above, the code really only makes sense if you are familiar with the MD5 algorithm or are using RFC 1321 as a guide. This code is quirky, however, so you’ll want to be reading carefully.
-
void
md5_init
(md5_ctx_t * ctx)¶ Initialize the MD5 calculation context.
Parameters
ctx: Pointer to the context to be initialized Once the context is initialized, the blocks of message data are passed to the <
md5.h::md5_update()
> function. Once the final bit of data has been handed to <md5.h::md5_update()
> the context can be closed out by calling <md5.h::md5_final()
>, which also calculates the final MD5 result. Don’t forget to free an allocated context structure when you’ve finished using it.
-
void
md5_update
(md5_ctx_t * ctx, const void * data,msp430_types.h::size_t
len)¶ Build an MD5 Message Digest within the given context.
Parameters
ctx: Context of the current calculation data: Input data len: Length of data
-
void
md5_final
(md5_ctx_t * ctx, void * digest)¶ Finish up the current MD5 hash calculation generate the final hash.
Parameters
ctx: Context of the current calculation digest: Result location, must be 16 byte
-
void
md5
(void * digest, const void * data,msp430_types.h::size_t
len)¶ Calculate a MD5 hash from the given data.
Parameters
digest: Result location, must be 16 byte data: Input data len: Length of src
-
MD5_DIGEST_LENGTH
¶ Length of MD5 digests in byte.
1
(16U)