mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 05:21:49 +03:00
[crypto] Replace MD5 implementation
Replace MD5 implementation with one which is around 20% smaller. This implementation has been verified using the existing MD5 self-tests. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -1,23 +1,72 @@
|
||||
#ifndef _IPXE_MD5_H
|
||||
#define _IPXE_MD5_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* MD5 algorithm
|
||||
*
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
struct digest_algorithm;
|
||||
|
||||
#include <stdint.h>
|
||||
#include <ipxe/crypto.h>
|
||||
|
||||
#define MD5_DIGEST_SIZE 16
|
||||
#define MD5_BLOCK_WORDS 16
|
||||
#define MD5_HASH_WORDS 4
|
||||
|
||||
struct md5_ctx {
|
||||
u32 hash[MD5_HASH_WORDS];
|
||||
u32 block[MD5_BLOCK_WORDS];
|
||||
u64 byte_count;
|
||||
/** An MD5 digest */
|
||||
struct md5_digest {
|
||||
/** Hash output */
|
||||
uint32_t h[4];
|
||||
};
|
||||
|
||||
#define MD5_CTX_SIZE sizeof ( struct md5_ctx )
|
||||
/** An MD5 data block */
|
||||
union md5_block {
|
||||
/** Raw bytes */
|
||||
uint8_t byte[64];
|
||||
/** Raw dwords */
|
||||
uint32_t dword[16];
|
||||
/** Final block structure */
|
||||
struct {
|
||||
/** Padding */
|
||||
uint8_t pad[56];
|
||||
/** Length in bits */
|
||||
uint64_t len;
|
||||
} final;
|
||||
};
|
||||
|
||||
/** MD5 digest and data block
|
||||
*
|
||||
* The order of fields within this structure is designed to minimise
|
||||
* code size.
|
||||
*/
|
||||
struct md5_digest_data {
|
||||
/** Digest of data already processed */
|
||||
struct md5_digest digest;
|
||||
/** Accumulated data */
|
||||
union md5_block data;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** MD5 digest and data block */
|
||||
union md5_digest_data_dwords {
|
||||
/** Digest and data block */
|
||||
struct md5_digest_data dd;
|
||||
/** Raw dwords */
|
||||
uint32_t dword[ sizeof ( struct md5_digest_data ) /
|
||||
sizeof ( uint32_t ) ];
|
||||
};
|
||||
|
||||
/** An MD5 context */
|
||||
struct md5_context {
|
||||
/** Amount of accumulated data */
|
||||
size_t len;
|
||||
/** Digest and accumulated data */
|
||||
union md5_digest_data_dwords ddd;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** MD5 context size */
|
||||
#define MD5_CTX_SIZE sizeof ( struct md5_context )
|
||||
|
||||
/** MD5 digest size */
|
||||
#define MD5_DIGEST_SIZE sizeof ( struct md5_digest )
|
||||
|
||||
extern struct digest_algorithm md5_algorithm;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user