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 2025-11-04 at 01:14:41 +0000