Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / sha1.h
1 #ifndef _IPXE_SHA1_H
2 #define _IPXE_SHA1_H
3
4 /** @file
5  *
6  * SHA-1 algorithm
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <stdint.h>
13 #include <ipxe/crypto.h>
14
15 /** An SHA-1 digest */
16 struct sha1_digest {
17         /** Hash output */
18         uint32_t h[5];
19 };
20
21 /** An SHA-1 data block */
22 union sha1_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 /** SHA-1 digest and data block
37  *
38  * The order of fields within this structure is designed to minimise
39  * code size.
40  */
41 struct sha1_digest_data {
42         /** Digest of data already processed */
43         struct sha1_digest digest;
44         /** Accumulated data */
45         union sha1_block data;
46 } __attribute__ (( packed ));
47
48 /** SHA-1 digest and data block */
49 union sha1_digest_data_dwords {
50         /** Digest and data block */
51         struct sha1_digest_data dd;
52         /** Raw dwords */
53         uint32_t dword[ sizeof ( struct sha1_digest_data ) /
54                         sizeof ( uint32_t ) ];
55 };
56
57 /** An SHA-1 context */
58 struct sha1_context {
59         /** Amount of accumulated data */
60         size_t len;
61         /** Digest and accumulated data */
62         union sha1_digest_data_dwords ddd;
63 } __attribute__ (( packed ));
64
65 /** SHA-1 context size */
66 #define SHA1_CTX_SIZE sizeof ( struct sha1_context )
67
68 /** SHA-1 digest size */
69 #define SHA1_DIGEST_SIZE sizeof ( struct sha1_digest )
70
71 extern struct digest_algorithm sha1_algorithm;
72
73 extern void prf_sha1 ( const void *key, size_t key_len, const char *label,
74                        const void *data, size_t data_len, void *prf,
75                        size_t prf_len );
76 extern void pbkdf2_sha1 ( const void *passphrase, size_t pass_len,
77                           const void *salt, size_t salt_len,
78                           int iterations, void *key, size_t key_len );
79
80 #endif /* _IPXE_SHA1_H */