Vault 7: Projects

This publication series is about specific projects related to the Vault 7 main publication.

Syntax
BLOCK_CIPHER_ERRORS BLOCK_CIPHER_OFB_Encrypt(DRV_HANDLE handle, uint8_t * cipherText,
uint8_t * plainText, uint32_t numBytes, void * key, BLOCK_CIPHER_OFB_CONTEXT * context,
uint32_t options);
Module
OFB
Returns
Returns a member of the BLOCK_CIPHER_ERRORS enumeration:
BLOCK_CIPHER_ERROR_NONE - no error.
BLOCK_CIPHER_ERROR_KEY_STREAM_GEN_OUT_OF_SPACE - There was not enough room remaining in the
context->keyStream buffer to fit the key data requested by the numBlocks parameter.
Description
Encrypts plain text using output feedback mode.
Preconditions
The OFB context must be initialized with the block cipher encrypt/decrypt functions and the block cipher algorithm's block
size. The block cipher module must be initialized, if necessary.
The initializationVector parameter in the BLOCK_CIPHER_OFB_CONTEXT structure should be initialized. The size of this
vector is the same as the block size of the cipher you are using.
Example
// ***************************************************************
// Encrypt data in OFB mode with the AES algorithm.
// ***************************************************************
// System module object variable (for initializing AES)
SYS_MODULE_OBJ sysObject;
// Drive handle variable, to describe which AES module to use
DRV_HANDLE handle;
// OFB mode context
BLOCK_CIPHER_OFB_CONTEXT context;
// Initialization vector for OFB mode
static uint8_t initialization_vector[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
// Plain text to encrypt
static uint8_t plain_text[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d,
0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7,
0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb,
0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b,
0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10};
// The encryption key
static uint8_t AESKey128[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7,
0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
// Structure to contain the created AES round keys
AES_ROUND_KEYS_128_BIT round_keys;
// Buffer to contain encrypted plaintext
uint8_t cipher_text[sizeof(plain_text)];
//keyStream could also be allocated memory instead of fixed memory
uint8_t keyStream[AES_BLOCK_SIZE*4];
// Initialization call for the AES module
sysObject = DRV_AES_Initialize (DRV_AES_INDEX, NULL);
if (sysObject != SYS_MODULE_OBJ_STATIC)
{
1.7 Library Interface MLA - Crypto Library Help Block Cipher Modes
60

e-Highlighter

Click to send permalink to address bar, or right-click to copy permalink.

Un-highlight all Un-highlight selectionu Highlight selectionh