mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 03:55:46 +03:00
Added generic CHAP layer, independent of iSCSI
This commit is contained in:
51
src/include/gpxe/chap.h
Normal file
51
src/include/gpxe/chap.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#ifndef _GPXE_CHAP_H
|
||||
#define _GPXE_CHAP_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* CHAP protocol
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <gpxe/md5.h>
|
||||
|
||||
struct digest_algorithm;
|
||||
|
||||
/** A CHAP challenge/response */
|
||||
struct chap_challenge {
|
||||
/** Digest algorithm used for the response */
|
||||
struct digest_algorithm *digest;
|
||||
/** Context used by the digest algorithm */
|
||||
uint8_t *digest_context;
|
||||
/** CHAP response */
|
||||
uint8_t *response;
|
||||
/** Length of CHAP response */
|
||||
size_t response_len;
|
||||
};
|
||||
|
||||
extern int chap_init ( struct chap_challenge *chap,
|
||||
struct digest_algorithm *digest );
|
||||
extern void chap_update ( struct chap_challenge *chap, const void *data,
|
||||
size_t len );
|
||||
extern void chap_respond ( struct chap_challenge *chap );
|
||||
extern void chap_finish ( struct chap_challenge *chap );
|
||||
|
||||
/**
|
||||
* Add identifier data to the CHAP challenge
|
||||
*
|
||||
* @v chap CHAP challenge/response
|
||||
* @v identifier CHAP identifier
|
||||
*
|
||||
* The CHAP identifier is the first byte of the CHAP challenge. This
|
||||
* function is a notational convenience for calling chap_update() for
|
||||
* the identifier byte.
|
||||
*/
|
||||
static inline void chap_set_identifier ( struct chap_challenge *chap,
|
||||
unsigned int identifier ) {
|
||||
uint8_t ident_byte = identifier;
|
||||
|
||||
chap_update ( chap, &ident_byte, sizeof ( ident_byte ) );
|
||||
}
|
||||
|
||||
#endif /* _GPXE_CHAP_H */
|
||||
@@ -1,25 +1,8 @@
|
||||
#ifndef _GPXE_MD5_H
|
||||
#define _GPXE_MD5_H
|
||||
|
||||
#include <stdint.h>
|
||||
struct digest_algorithm;
|
||||
|
||||
#define MD5_DIGEST_SIZE 16
|
||||
#define MD5_BLOCK_WORDS 16
|
||||
#define MD5_HASH_WORDS 4
|
||||
|
||||
struct md5_context {
|
||||
u32 hash[MD5_HASH_WORDS];
|
||||
u32 block[MD5_BLOCK_WORDS];
|
||||
u64 byte_count;
|
||||
};
|
||||
|
||||
struct md5_hash {
|
||||
u8 hash[MD5_DIGEST_SIZE];
|
||||
};
|
||||
|
||||
extern void md5_init ( struct md5_context *context );
|
||||
extern void md5_update ( struct md5_context *context, const void *data,
|
||||
size_t len );
|
||||
extern void md5_finish ( struct md5_context *context, struct md5_hash *hash );
|
||||
extern struct digest_algorithm md5_algorithm;
|
||||
|
||||
#endif /* _GPXE_MD5_H */
|
||||
|
||||
Reference in New Issue
Block a user