diff options
| author | Michael Brown | 2009-02-19 02:20:09 +0100 |
|---|---|---|
| committer | Michael Brown | 2009-02-19 02:23:50 +0100 |
| commit | e950dc04bafed590c02ee2ac8a51e54ed7d8dbd0 (patch) | |
| tree | ff8a5afa34442e583e0b76c0749c350f35b6739b /src/include/gpxe | |
| parent | [crypto] Change cipher_{en,de}crypt() to void functions (diff) | |
| download | ipxe-e950dc04bafed590c02ee2ac8a51e54ed7d8dbd0.tar.gz ipxe-e950dc04bafed590c02ee2ac8a51e54ed7d8dbd0.tar.xz ipxe-e950dc04bafed590c02ee2ac8a51e54ed7d8dbd0.zip | |
[crypto] Add our own general-purpose cipher-block chaining routines
Diffstat (limited to 'src/include/gpxe')
| -rw-r--r-- | src/include/gpxe/cbc.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/include/gpxe/cbc.h b/src/include/gpxe/cbc.h new file mode 100644 index 000000000..e2d57764e --- /dev/null +++ b/src/include/gpxe/cbc.h @@ -0,0 +1,50 @@ +#ifndef _GPXE_CBC_H +#define _GPXE_CBC_H + +/** @file + * + * Cipher-block chaining + * + */ + +#include <gpxe/crypto.h> + +/** + * Set key + * + * @v ctx Context + * @v key Key + * @v keylen Key length + * @v cipher Underlying cipher algorithm + * @v cbc_ctx CBC context + * @ret rc Return status code + */ +static inline int cbc_setkey ( void *ctx, const void *key, size_t keylen, + struct cipher_algorithm *cipher, + void *cbc_ctx __unused ) { + + return cipher_setkey ( cipher, ctx, key, keylen ); +} + +/** + * Set initialisation vector + * + * @v ctx Context + * @v iv Initialisation vector + * @v cipher Underlying cipher algorithm + * @v cbc_ctx CBC context + */ +static inline void cbc_setiv ( void *ctx __unused, const void *iv, + struct cipher_algorithm *cipher, + void *cbc_ctx ) { + memcpy ( cbc_ctx, iv, cipher->blocksize ); +} + +extern void cbc_encrypt ( void *ctx, const void *src, void *dst, + size_t len, struct cipher_algorithm *cipher, + void *cbc_ctx ); +extern void cbc_decrypt ( void *ctx, const void *src, void *dst, + size_t len, struct cipher_algorithm *cipher, + void *cbc_ctx ); + +#endif /* _GPXE_CBC_H */ |
