54 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a,
55 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
56 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340,
57 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
58 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8,
59 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
60 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa,
61 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
62 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92,
63 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
64 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
82 return ( v->
d ^ ( v->
b & ( v->
c ^ v->
d ) ) );
92 return ( v->
c ^ ( v->
d & ( v->
b ^ v->
c ) ) );
102 return ( v->
b ^ v->
c ^ v->
d );
112 return ( v->
c ^ ( v->
b | (~v->
d) ) );
133 { .
f =
md5_f_0_15, .coefficient = 1, .constant = 0 },
135 { .f =
md5_f_16_31, .coefficient = 5, .constant = 1 },
137 { .f =
md5_f_32_47, .coefficient = 3, .constant = 5 },
139 { .f =
md5_f_48_63, .coefficient = 7, .constant = 0 },
187 DBGC ( context,
"MD5 digesting:\n" );
196 for ( i = 0 ; i < (
sizeof (
u.ddd.dword ) /
197 sizeof (
u.ddd.dword[0] ) ) ; i++ ) {
203 for ( i = 0 ; i < 64 ; i++ ) {
207 g = ( ( (
step->coefficient * i ) +
step->constant ) % 16 );
212 r[round][ i % 4 ] ) );
214 DBGC2 ( context,
"%2d : %08x %08x %08x %08x\n",
219 for ( i = 0 ; i < 4 ; i++ ) {
222 u.ddd.dd.digest.h[i] );
225 DBGC ( context,
"MD5 digested:\n" );
249 if ( ( context->
len % sizeof ( context->
ddd.
dd.
data ) ) == 0 )
273 }
while ( ( context->
len % sizeof ( context->
ddd.
dd.
data ) ) !=
static void md5_init(void *ctx)
Initialise MD5 algorithm.
static uint32_t md5_f_16_31(struct md5_variables *v)
f(b,c,d) for steps 16 to 31
static const uint8_t r[4][4]
MD5 shift amounts.
static u32 rol32(u32 v, int bits)
Rotate 32-bit value left.
unsigned long long uint64_t
#define cpu_to_le64(value)
#define offsetof(type, field)
Get offset of a field within a structure.
struct golan_eq_context ctx
MD5 digest and data block.
static uint32_t md5_f_0_15(struct md5_variables *v)
f(b,c,d) for steps 0 to 15
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static void md5_final(void *ctx, void *out)
Generate MD5 digest.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
struct md5_digest_data dd
Digest and data block.
static void md5_update(void *ctx, const void *data, size_t len)
Accumulate data with MD5 algorithm.
static userptr_t size_t offset
Offset of the first segment within the content.
struct md5_digest digest
Digest of data already processed.
struct md5_step __attribute__
size_t len
Amount of accumulated data.
#define cpu_to_le32(value)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static void md5_digest(struct md5_context *context)
Calculate MD5 digest of accumulated data.
uint32_t dword[sizeof(struct md5_digest_data)/sizeof(uint32_t)]
Raw dwords.
static const uint32_t k[64]
MD5 constants.
static uint32_t md5_f_32_47(struct md5_variables *v)
f(b,c,d) for steps 32 to 47
uint8_t byte[64]
Raw bytes.
const char * name
Algorithm name.
void step(void)
Single-step a single process.
uint32_t h[4]
Hash output.
static struct md5_step md5_steps[4]
MD5 steps.
A message digest algorithm.
uint8_t data[48]
Additional event data.
union md5_digest_data_dwords ddd
Digest and accumulated data.
typeof(acpi_finder=acpi_find)
ACPI table finder.
uint32_t digestsize
Digest size (i.e.
union md5_block data
Accumulated data.
static uint32_t md5_f_48_63(struct md5_variables *v)
f(b,c,d) for steps 48 to 63
uint8_t constant
Constant term in g=ni+m.
uint32_t(* f)(struct md5_variables *v)
Calculate f(b,c,d)
#define linker_assert(condition, error_symbol)
Assert a condition at link-time.
uint8_t coefficient
Coefficient of i in g=ni+m.
struct digest_algorithm md5_algorithm
MD5 algorithm.
#define le32_to_cpus(ptr)