Skip to content

Algorithms - ChaCha

Functions

Name
int wc_Chacha_SetIV(ChaCha * ctx, const byte * inIv, word32 counter)
This function sets the initialization vector (nonce) for a ChaCha object, initializing it for use as a cipher. It should be called after the key has been set, using wc_Chacha_SetKey. A difference nonce should be used for each round of encryption.
int wc_Chacha_Process(ChaCha * ctx, byte * cipher, const byte * plain, word32 msglen)
This function processes the text from the buffer input, encrypts or decrypts it, and stores the result in the buffer output.
int wc_Chacha_SetKey(ChaCha * ctx, const byte * key, word32 keySz)
This function sets the key for a ChaCha object, initializing it for use as a cipher. It should be called before setting the nonce with wc_Chacha_SetIV, and before using it for encryption with wc_Chacha_Process.

Functions Documentation

function wc_Chacha_SetIV

int wc_Chacha_SetIV(
    ChaCha * ctx,
    const byte * inIv,
    word32 counter
)

This function sets the initialization vector (nonce) for a ChaCha object, initializing it for use as a cipher. It should be called after the key has been set, using wc_Chacha_SetKey. A difference nonce should be used for each round of encryption.

Parameters:

  • ctx pointer to the ChaCha structure on which to set the iv
  • inIv pointer to a buffer containing the 12 byte initialization vector with which to initialize the ChaCha structure
  • counter the value at which the block counter should start–usually zero.

See:

Return:

  • 0 Returned upon successfully setting the initialization vector
  • BAD_FUNC_ARG returned if there is an error processing the ctx input argument

Example

ChaCha enc;
// initialize enc with wc_Chacha_SetKey
byte iv[12];
// initialize iv
if( wc_Chacha_SetIV(&enc, iv, 0) != 0) {
    // error initializing ChaCha structure
}

function wc_Chacha_Process

int wc_Chacha_Process(
    ChaCha * ctx,
    byte * cipher,
    const byte * plain,
    word32 msglen
)

This function processes the text from the buffer input, encrypts or decrypts it, and stores the result in the buffer output.

Parameters:

  • ctx pointer to the ChaCha structure on which to set the iv
  • output pointer to a buffer in which to store the output ciphertext or decrypted plaintext
  • input pointer to the buffer containing the input plaintext to encrypt or the input ciphertext to decrypt
  • msglen length of the message to encrypt or the ciphertext to decrypt

See:

Return:

  • 0 Returned upon successfully encrypting or decrypting the input
  • BAD_FUNC_ARG returned if there is an error processing the ctx input argument

Example

ChaCha enc;
// initialize enc with wc_Chacha_SetKey and wc_Chacha_SetIV

byte plain[] = { // initialize plaintext };
byte cipher[sizeof(plain)];
if( wc_Chacha_Process(&enc, cipher, plain, sizeof(plain)) != 0) {
    // error processing ChaCha cipher
}

function wc_Chacha_SetKey

int wc_Chacha_SetKey(
    ChaCha * ctx,
    const byte * key,
    word32 keySz
)

This function sets the key for a ChaCha object, initializing it for use as a cipher. It should be called before setting the nonce with wc_Chacha_SetIV, and before using it for encryption with wc_Chacha_Process.

Parameters:

  • ctx pointer to the ChaCha structure in which to set the key
  • key pointer to a buffer containing the 16 or 32 byte key with which to initialize the ChaCha structure
  • keySz the length of the key passed in

See:

Return:

  • 0 Returned upon successfully setting the key
  • BAD_FUNC_ARG returned if there is an error processing the ctx input argument or if the key is not 16 or 32 bytes long

Example

ChaCha enc;
byte key[] = { // initialize key };

if( wc_Chacha_SetKey(&enc, key, sizeof(key)) != 0) {
    // error initializing ChaCha structure
}

Updated on 2022-05-18 at 08:30:58 +0000