Add ChaCha20 test vectors from RFC 7539
diff --git a/tests/suites/test_suite_chacha20.function b/tests/suites/test_suite_chacha20.function
index 2825a61..75d2d0f 100644
--- a/tests/suites/test_suite_chacha20.function
+++ b/tests/suites/test_suite_chacha20.function
@@ -6,6 +6,47 @@
* depends_on:MBEDTLS_CHACHA20_C
* END_DEPENDENCIES
*/
+
+/* BEGIN_CASE */
+void chacha20_crypt( char *hex_key_string,
+ char *hex_nonce_string,
+ int counter,
+ char *hex_src_string,
+ char *hex_dst_string )
+{
+ unsigned char key_str[100];
+ unsigned char nonce_str[100];
+ unsigned char src_str[10000];
+ unsigned char dst_str[10000];
+ unsigned char output[10000];
+ size_t key_len;
+ size_t nonce_len;
+ size_t src_len;
+ size_t dst_len;
+
+ memset(key_str, 0x00, 100);
+ memset(nonce_str, 0x00, 100);
+ memset(src_str, 0x00, 10000);
+ memset(dst_str, 0x00, 10000);
+ memset(output, 0x00, 10000);
+
+ key_len = unhexify( key_str, hex_key_string );
+ nonce_len = unhexify( nonce_str, hex_nonce_string );
+ src_len = unhexify( src_str, hex_src_string );
+ dst_len = unhexify( dst_str, hex_dst_string );
+
+ TEST_ASSERT( src_len == dst_len );
+ TEST_ASSERT( key_len == 32U );
+ TEST_ASSERT( nonce_len == 12U );
+
+ TEST_ASSERT( mbedtls_chacha20_crypt( key_str, nonce_str, counter, src_len, src_str, output ) == 0 );
+
+ hexify( dst_str, output, src_len );
+
+ TEST_ASSERT( strcmp( (char*) dst_str, hex_dst_string ) == 0);
+}
+/* END_CASE */
+
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
void chacha20_self_test()
{