Vault 7: Projects
This publication series is about specific projects related to the Vault 7 main publication.
uint8_t plain_text[sizeof(cipher_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)
{
// error
}
// Driver open call for the AES module
handle = DRV_AES_Open (DRV_AES_INDEX, 0);
if (handle != DRV_AES_HANDLE)
{
// error
}
//Create the AES round keys. This only needs to be done once for each AES key.
AES_RoundKeysCreate (&round_keys, (uint8_t*)AESKey128, AES_KEY_SIZE_128_BIT);
// Initialize the Block Cipher context with the AES module encryption/decryption functions
and the AES block size
BLOCK_CIPHER_OFB_Initialize (&context, AES_Encrypt, AES_Decrypt, AES_BLOCK_SIZE,
initialization_vector, (void *)&keyStream, sizeof (keyStream));
//Generate 4 blocks of key stream
BLOCK_CIPHER_OFB_KeyStreamGenerate(handle, 4, &round_keys, &context,
BLOCK_CIPHER_OPTION_STREAM_START);
// Decrypt the data
BLOCK_CIPHER_OFB_Decrypt (handle, plain_text,(void *) cipher_text, sizeof(cipher_text),
&round_keys, &context, BLOCK_CIPHER_OPTION_STREAM_CONTINUE);
Parameters
Parameters Description
handle A handle that is passed to the block cipher's encrypt/decrypt
functions to specify which instance of the block cipher
module to use. This parameter can be specified as NULL if
the block cipher does not have multiple instances.
plainText The plain text produced by the decryption. This buffer must
be at least numBytes long.
cipherText The cipher test to decrypt. Must be at least numBytes long.
numBytes The number of cipher text bytes that must be decrypted.
key The key to use when encrypting/decrypting the data. The
format of this key will depend on the block cipher you are
using.
context Pointer to a context structure for this decryption. The first call
of this function should have the context->initializationVector
set to the initialization vector. The same context structure
instance should be used for every call used for the same
data stream. The contents of this structure should not be
changed by the user once the encryption/decryption has
started.
options Block cipher decryption options that the user can specify,
or'd together. If
BLOCK_CIPHER_OPTION_STREAM_START is not
specified then
BLOCK_CIPHER_OPTION_STREAM_CONTINUE is
assumed. Valid options for this function are
• BLOCK_CIPHER_OPTION_STREAM_START
• BLOCK_CIPHER_OPTION_STREAM_CONTINUE
1.7 Library Interface MLA - Crypto Library Help Block Cipher Modes
63
Protego_Release_01_05-Related-OEM-Documentation-MLA_v2013_12_20-help_mla_crypto.pdf