[crypto] Split crypto_algorithm into {digest,cipher,pubkey}_algorithm
[people/lynusvaz/gpxe.git] / src / include / gpxe / chap.h
1 #ifndef _GPXE_CHAP_H
2 #define _GPXE_CHAP_H
3
4 /** @file
5  *
6  * CHAP protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/md5.h>
12
13 struct digest_algorithm;
14
15 /** A CHAP response */
16 struct chap_response {
17         /** Digest algorithm used for the response */
18         struct digest_algorithm *digest;
19         /** Context used by the digest algorithm */
20         uint8_t *digest_context;
21         /** CHAP response */
22         uint8_t *response;
23         /** Length of CHAP response */
24         size_t response_len;
25 };
26
27 extern int chap_init ( struct chap_response *chap,
28                        struct digest_algorithm *digest );
29 extern void chap_update ( struct chap_response *chap, const void *data,
30                           size_t len );
31 extern void chap_respond ( struct chap_response *chap );
32 extern void chap_finish ( struct chap_response *chap );
33
34 /**
35  * Add identifier data to the CHAP challenge
36  *
37  * @v chap              CHAP response
38  * @v identifier        CHAP identifier
39  *
40  * The CHAP identifier is the first byte of the CHAP challenge.  This
41  * function is a notational convenience for calling chap_update() for
42  * the identifier byte.
43  */
44 static inline void chap_set_identifier ( struct chap_response *chap,
45                                          unsigned int identifier ) {
46         uint8_t ident_byte = identifier;
47
48         chap_update ( chap, &ident_byte, sizeof ( ident_byte ) );
49 }
50
51 #endif /* _GPXE_CHAP_H */