diff --git a/include/polarssl/aes.h b/include/polarssl/aes.h index 7404e4eef..efc13daf5 100644 --- a/include/polarssl/aes.h +++ b/include/polarssl/aes.h @@ -124,7 +124,7 @@ int aes_crypt_cbc( aes_context *ctx, int aes_crypt_cfb128( aes_context *ctx, int mode, size_t length, - int *iv_off, + size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output ); @@ -147,8 +147,8 @@ int aes_crypt_cfb128( aes_context *ctx, * \return 0 if successful */ int aes_crypt_ctr( aes_context *ctx, - int length, - int *nc_off, + size_t length, + size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, diff --git a/include/polarssl/camellia.h b/include/polarssl/camellia.h index 0dcb83074..c81066c89 100644 --- a/include/polarssl/camellia.h +++ b/include/polarssl/camellia.h @@ -130,11 +130,36 @@ int camellia_crypt_cbc( camellia_context *ctx, int camellia_crypt_cfb128( camellia_context *ctx, int mode, size_t length, - int *iv_off, + size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output ); +/* + * \brief CAMELLIA-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 128-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int camellia_crypt_ctr( camellia_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ); + /** * \brief Checkup routine * diff --git a/library/camellia.c b/library/camellia.c index d725c1930..e4c3259e9 100644 --- a/library/camellia.c +++ b/library/camellia.c @@ -580,12 +580,13 @@ int camellia_crypt_cbc( camellia_context *ctx, int camellia_crypt_cfb128( camellia_context *ctx, int mode, size_t length, - int *iv_off, + size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output ) { - int c, n = *iv_off; + int c; + size_t n = *iv_off; if( mode == CAMELLIA_DECRYPT ) { @@ -625,14 +626,15 @@ int camellia_crypt_cfb128( camellia_context *ctx, * Camellia-CTR buffer encryption/decryption */ int camellia_crypt_ctr( camellia_context *ctx, - int length, - int *nc_off, + size_t length, + size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, unsigned char *output ) { - int c, n = *nc_off, i, cb; + int c, i, cb; + size_t n = *nc_off; while( length-- ) { @@ -867,7 +869,7 @@ int camellia_self_test( int verbose ) unsigned char dst[16]; unsigned char iv[16]; #if defined(POLARSSL_CIPHER_MODE_CTR) - int offset, len; + size_t offset, len; unsigned char nonce_counter[16]; unsigned char stream_block[16]; #endif diff --git a/tests/suites/test_suite_camellia.function b/tests/suites/test_suite_camellia.function index 172f84918..15bedceb7 100644 --- a/tests/suites/test_suite_camellia.function +++ b/tests/suites/test_suite_camellia.function @@ -137,7 +137,7 @@ camellia_encrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_stri unsigned char dst_str[100]; unsigned char output[100]; camellia_context ctx; - int iv_offset = 0; + size_t iv_offset = 0; int key_len; memset(key_str, 0x00, 100); @@ -167,7 +167,7 @@ camellia_decrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_stri unsigned char dst_str[100]; unsigned char output[100]; camellia_context ctx; - int iv_offset = 0; + size_t iv_offset = 0; int key_len; memset(key_str, 0x00, 100);