Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / md5.h
1 #ifndef _IPXE_MD5_H
2 #define _IPXE_MD5_H
3
4 /** @file
5  *
6  * MD5 algorithm
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <stdint.h>
13 #include <ipxe/crypto.h>
14
15 /** An MD5 digest */
16 struct md5_digest {
17         /** Hash output */
18         uint32_t h[4];
19 };
20
21 /** An MD5 data block */
22 union md5_block {
23         /** Raw bytes */
24         uint8_t byte[64];
25         /** Raw dwords */
26         uint32_t dword[16];
27         /** Final block structure */
28         struct {
29                 /** Padding */
30                 uint8_t pad[56];
31                 /** Length in bits */
32                 uint64_t len;
33         } final;
34 };
35
36 /** MD5 digest and data block
37  *
38  * The order of fields within this structure is designed to minimise
39  * code size.
40  */
41 struct md5_digest_data {
42         /** Digest of data already processed */
43         struct md5_digest digest;
44         /** Accumulated data */
45         union md5_block data;
46 } __attribute__ (( packed ));
47
48 /** MD5 digest and data block */
49 union md5_digest_data_dwords {
50         /** Digest and data block */
51         struct md5_digest_data dd;
52         /** Raw dwords */
53         uint32_t dword[ sizeof ( struct md5_digest_data ) /
54                         sizeof ( uint32_t ) ];
55 };
56
57 /** An MD5 context */
58 struct md5_context {
59         /** Amount of accumulated data */
60         size_t len;
61         /** Digest and accumulated data */
62         union md5_digest_data_dwords ddd;
63 } __attribute__ (( packed ));
64
65 /** MD5 context size */
66 #define MD5_CTX_SIZE sizeof ( struct md5_context )
67
68 /** MD5 digest size */
69 #define MD5_DIGEST_SIZE sizeof ( struct md5_digest )
70
71 extern struct digest_algorithm md5_algorithm;
72
73 #endif /* _IPXE_MD5_H */