# Vault 7: Projects

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

### Protego

# MLA -- Crypto Library

1 January, 2012

- 1
- 2
…
- 46
- 47
- 48
- 49
- 50
…
- 119
- 120

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_CBC_Initialize (&context, AES_Encrypt, AES_Decrypt, AES_BLOCK_SIZE,
initialization_vector);
// Decrypt the data
BLOCK_CIPHER_CBC_Decrypt (handle, plain_text, &num_bytes_decrypted, (void *) cipher_text,
sizeof(cipher_text), &round_keys, &context, BLOCK_CIPHER_OPTION_STREAM_START);
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 test produced by the decryption. This buffer must
be a multiple of the block cipher's block size, even if the
cipher text passed in is not.
numPlainBytes Pointer to a uint32_t; the number of bytes decrypted will be
returned in this parameter.
cipherText The cipher text that will be decrypted. This buffer must be a
multiple of the block size, unless this is the end of the stream
(the BLOCK_CIPHER_OPTION_STREAM_COMPLETE
option must be set in this case).
numCipherBytes The number of cipher text bytes to decrypt.
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 initializationVector. 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 encryption options that the user can specify,
or'd together. Valid options for this function are
• BLOCK_CIPHER_OPTION_STREAM_START
• BLOCK_CIPHER_OPTION_STREAM_COMPLETE
•
BLOCK_CIPHER_OPTION_CIPHER_TEXT_POINTER_
ALIGNED
•
BLOCK_CIPHER_OPTION_PLAIN_TEXT_POINTER_A
LIGNED
Function
void BLOCK_CIPHER_CBC_Decrypt (DRV_HANDLE handle, uint8_t * plainText,
uint32_t * numPlainBytes, uint8_t * cipherText, uint32_t numCipherBytes,
void * key, BLOCK_CIPHER_CBC_CONTEXT * context, uint32_t options)
1.7 Library Interface MLA - Crypto Library Help Block Cipher Modes
48

- 1
- 2
…
- 46
- 47
- 48
- 49
- 50
…
- 119
- 120