hackedteam/soldier-win

View on GitHub
Soldier/aes.h

Summary

Maintainability
Test Coverage
#ifndef _AES_H
#define _AES_H

#ifdef __cplusplus
extern "C" {
#endif

    /**
    * \brief          AES context structure
    */
    typedef struct
    {
        unsigned long erk[64];     /*!< encryption round keys */
        unsigned long drk[64];     /*!< decryption round keys */
        int nr;                    /*!< number of rounds      */
    }
    aes_context;

    /**
    * \brief          AES key schedule
    *
    * \param ctx      AES context to be initialized
    * \param key      the secret key
    * \param keysize  must be 128, 192 or 256
    */
    void aes_set_key( aes_context *ctx, unsigned char *key, int keysize );

    /**
    * \brief          AES block encryption (ECB mode)
    *
    * \param ctx      AES context
    * \param input    plaintext  block
    * \param output   ciphertext block
    */
    void aes_encrypt( aes_context *ctx,
        unsigned char input[16],
        unsigned char output[16] );

    /**
    * \brief          AES block decryption (ECB mode)
    *
    * \param ctx      AES context
    * \param input    ciphertext block
    * \param output   plaintext  block
    */
    void aes_decrypt( aes_context *ctx,
        unsigned char input[16],
        unsigned char output[16] );

    /**
    * \brief          AES-CBC buffer encryption
    *
    * \param ctx      AES context
    * \param iv       initialization vector (modified after use)
    * \param input    buffer holding the plaintext
    * \param output   buffer holding the ciphertext
    * \param len      length of the data to be encrypted
    */
    void aes_cbc_encrypt( aes_context *ctx,
        unsigned char iv[16],
        unsigned char *input,
        unsigned char *output,
        int len );
    unsigned long aes_cbc_encrypt_pkcs5( aes_context *ctx,
        unsigned char iv[16],
        unsigned char *input,
        unsigned char *output,
        int len );
    
    /**
    * \brief          AES-CBC buffer decryption
    *
    * \param ctx      AES context
    * \param iv       initialization vector (modified after use)
    * \param input    buffer holding the ciphertext
    * \param output   buffer holding the plaintext
    * \param len      length of the data to be decrypted
    */
    void aes_cbc_decrypt( aes_context *ctx,
        unsigned char iv[16],
        unsigned char *input,
        unsigned char *output,
        int len );


#ifdef __cplusplus
}
#endif

#endif