iPXE
Macros | Functions
ecb.h File Reference

Electronic codebook (ECB) More...

#include <ipxe/crypto.h>

Go to the source code of this file.

Macros

#define ECB_CIPHER(_ecb_name, _ecb_cipher, _raw_cipher, _raw_context, _blocksize)
 Create a cipher-block chaining mode of behaviour of an existing cipher. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
void ecb_encrypt (void *ctx, const void *src, void *dst, size_t len, struct cipher_algorithm *raw_cipher)
 Encrypt data. More...
 
void ecb_decrypt (void *ctx, const void *src, void *dst, size_t len, struct cipher_algorithm *raw_cipher)
 Decrypt data. More...
 

Detailed Description

Electronic codebook (ECB)

Definition in file ecb.h.

Macro Definition Documentation

◆ ECB_CIPHER

#define ECB_CIPHER (   _ecb_name,
  _ecb_cipher,
  _raw_cipher,
  _raw_context,
  _blocksize 
)
Value:
static int _ecb_name ## _setkey ( void *ctx, const void *key, \
size_t keylen ) { \
return cipher_setkey ( &_raw_cipher, ctx, key, keylen ); \
} \
static void _ecb_name ## _setiv ( void *ctx, const void *iv ) { \
cipher_setiv ( &_raw_cipher, ctx, iv ); \
} \
static void _ecb_name ## _encrypt ( void *ctx, const void *src, \
void *dst, size_t len ) { \
ecb_encrypt ( ctx, src, dst, len, &_raw_cipher ); \
} \
static void _ecb_name ## _decrypt ( void *ctx, const void *src, \
void *dst, size_t len ) { \
ecb_decrypt ( ctx, src, dst, len, &_raw_cipher ); \
} \
struct cipher_algorithm _ecb_cipher = { \
.name = #_ecb_name, \
.ctxsize = sizeof ( _raw_context ), \
.blocksize = _blocksize, \
.setkey = _ecb_name ## _setkey, \
.setiv = _ecb_name ## _setiv, \
.encrypt = _ecb_name ## _encrypt, \
.decrypt = _ecb_name ## _decrypt, \
};
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
u8 iv[16]
Initialization vector.
Definition: wpa.h:60
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14
A cipher algorithm.
Definition: crypto.h:48
const char * name
Algorithm name.
Definition: crypto.h:50
union @376 key
Sense key.
Definition: scsi.h:18
static int cipher_setkey(struct cipher_algorithm *cipher, void *ctx, const void *key, size_t keylen)
Definition: crypto.h:187

Create a cipher-block chaining mode of behaviour of an existing cipher.

Parameters
_ecb_nameName for the new ECB cipher
_ecb_cipherNew cipher algorithm
_raw_cipherUnderlying cipher algorithm
_raw_contextContext structure for the underlying cipher
_blocksizeCipher block size

Definition at line 28 of file ecb.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ ecb_encrypt()

void ecb_encrypt ( void *  ctx,
const void *  src,
void *  dst,
size_t  len,
struct cipher_algorithm raw_cipher 
)

Encrypt data.

Parameters
ctxContext
srcData to encrypt
dstBuffer for encrypted data
lenLength of data
raw_cipherUnderlying cipher algorithm

Definition at line 45 of file ecb.c.

46  {
47  size_t blocksize = raw_cipher->blocksize;
48 
49  assert ( ( len % blocksize ) == 0 );
50 
51  while ( len ) {
52  cipher_encrypt ( raw_cipher, ctx, src, dst, blocksize );
53  dst += blocksize;
54  src += blocksize;
55  len -= blocksize;
56  }
57 }
size_t blocksize
Block size.
Definition: crypto.h:54
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
#define cipher_encrypt(cipher, ctx, src, dst, len)
Definition: crypto.h:202
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14

References assert(), cipher_algorithm::blocksize, cipher_encrypt, ctx, len, and src.

◆ ecb_decrypt()

void ecb_decrypt ( void *  ctx,
const void *  src,
void *  dst,
size_t  len,
struct cipher_algorithm raw_cipher 
)

Decrypt data.

Parameters
ctxContext
srcData to decrypt
dstBuffer for decrypted data
lenLength of data
raw_cipherUnderlying cipher algorithm

Definition at line 68 of file ecb.c.

69  {
70  size_t blocksize = raw_cipher->blocksize;
71 
72  assert ( ( len % blocksize ) == 0 );
73 
74  while ( len ) {
75  cipher_decrypt ( raw_cipher, ctx, src, dst, blocksize );
76  dst += blocksize;
77  src += blocksize;
78  len -= blocksize;
79  }
80 }
size_t blocksize
Block size.
Definition: crypto.h:54
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
#define cipher_decrypt(cipher, ctx, src, dst, len)
Definition: crypto.h:212
uint32_t len
Length.
Definition: ena.h:14

References assert(), cipher_algorithm::blocksize, cipher_decrypt, ctx, len, and src.