- Added generic cipher wrapper for integration with OpenVPN (donated by Fox-IT)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 81611ca..1bfce18 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -23,6 +23,7 @@
add_test_suite(aes)
add_test_suite(camellia)
add_test_suite(des)
+add_test_suite(cipher)
add_test_suite(rsa)
add_test_suite(xtea)
add_test_suite(dhm)
diff --git a/tests/Makefile b/tests/Makefile
index 2e4f88a..063245b 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -15,7 +15,8 @@
test_suite_mpi test_suite_rsa \
test_suite_shax test_suite_x509parse\
test_suite_xtea test_suite_debug \
- test_suite_version test_suite_md
+ test_suite_version test_suite_md \
+ test_suite_cipher
.SILENT:
@@ -41,6 +42,10 @@
echo " CC $@.c"
$(CC) $(CFLAGS) $(OFLAGS) $@.c $(LDFLAGS) -o $@
+test_suite_cipher: test_suite_cipher.c ../library/libpolarssl.a
+ echo " CC $@.c"
+ $(CC) $(CFLAGS) $(OFLAGS) $@.c $(LDFLAGS) -o $@
+
test_suite_des: test_suite_des.c ../library/libpolarssl.a
echo " CC $@.c"
$(CC) $(CFLAGS) $(OFLAGS) $@.c $(LDFLAGS) -o $@
diff --git a/tests/suites/test_suite_cipher.data b/tests/suites/test_suite_cipher.data
new file mode 100644
index 0000000..758aa84
--- /dev/null
+++ b/tests/suites/test_suite_cipher.data
@@ -0,0 +1,707 @@
+Cipher Selftest
+cipher_selftest:
+
+Decrypt empty buffer
+dec_empty_buf:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_128_CBC:AES-128-CBC:128:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_128_CBC:128:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_192_CBC:AES-192-CBC:192:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_192_CBC:192:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_AES_256_CBC:AES-256-CBC:256:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_AES_256_CBC:256:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_128_CBC:CAMELLIA-128-CBC:128:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_128_CBC:128:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_192_CBC:CAMELLIA-192-CBC:192:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_192_CBC:192:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_CAMELLIA_256_CBC:CAMELLIA-256-CBC:256:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_CAMELLIA_256_CBC:256:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_CBC:DES-CBC:56:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_CBC:56:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE_CBC:DES-EDE-CBC:112:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE_CBC:112:16:16:
+
+Encrypt and decrypt 0 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:0
+
+Encrypt and decrypt 1 byte
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:1
+
+Encrypt and decrypt 2 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:2
+
+Encrypt and decrypt 7 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:7
+
+Encrypt and decrypt 8 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:8
+
+Encrypt and decrypt 9 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:9
+
+Encrypt and decrypt 15 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:15
+
+Encrypt and decrypt 16 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:16
+
+Encrypt and decrypt 17 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:17
+
+Encrypt and decrypt 31 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:31
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:32
+
+Encrypt and decrypt 32 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:33
+
+Encrypt and decrypt 47 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:47
+
+Encrypt and decrypt 48 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:48
+
+Encrypt and decrypt 49 bytes
+enc_dec_buf:POLARSSL_CIPHER_DES_EDE3_CBC:DES-EDE3-CBC:168:49
+
+Encrypt and decrypt 0 bytes in multiple parts
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:0:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:1:0:
+
+Encrypt and decrypt 1 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:0:1:
+
+Encrypt and decrypt 16 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:16:0:
+
+Encrypt and decrypt 16 bytes in multiple parts 2
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:0:16:
+
+Encrypt and decrypt 16 bytes in multiple parts 3
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:1:15:
+
+Encrypt and decrypt 16 bytes in multiple parts 4
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:15:1:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:15:7:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:16:6:
+
+Encrypt and decrypt 22 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:17:6:
+
+Encrypt and decrypt 32 bytes in multiple parts 1
+enc_dec_buf_multipart:POLARSSL_CIPHER_DES_EDE3_CBC:168:16:16:
diff --git a/tests/suites/test_suite_cipher.function b/tests/suites/test_suite_cipher.function
new file mode 100644
index 0000000..17b8dc2
--- /dev/null
+++ b/tests/suites/test_suite_cipher.function
@@ -0,0 +1,184 @@
+BEGIN_HEADER
+#include <polarssl/config.h>
+#include <polarssl/cipher.h>
+END_HEADER
+
+BEGIN_CASE
+enc_dec_buf:cipher_id:cipher_string:key_len:length:
+ int length = {length};
+ unsigned char key[32];
+ unsigned char iv[16];
+
+ const cipher_info_t *cipher_info;
+ cipher_context_t ctx_dec;
+ cipher_context_t ctx_enc;
+
+ unsigned char inbuf[64];
+ unsigned char encbuf[64];
+ unsigned char decbuf[64];
+
+ int outlen = 0;
+ int enclen = 0;
+
+ memset( key, 0, 32 );
+ memset( iv , 0, 16 );
+
+ memset( &ctx_dec, 0, sizeof( ctx_dec ) );
+ memset( &ctx_enc, 0, sizeof( ctx_enc ) );
+
+ memset( inbuf, 5, 64 );
+ memset( encbuf, 0, 64 );
+ memset( decbuf, 0, 64 );
+
+ /* Check and get info structures */
+ cipher_info = cipher_info_from_type( {cipher_id} );
+ TEST_ASSERT( NULL != cipher_info );
+ TEST_ASSERT( cipher_info_from_string( "{cipher_string}" ) == cipher_info );
+
+ /* Initialise enc and dec contexts */
+ TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
+ TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
+
+ TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
+ TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
+
+ TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
+ TEST_ASSERT( 0 == cipher_reset( &ctx_enc, iv ) );
+
+ enclen = cipher_get_block_size( &ctx_enc )
+ * ( 1 + length / cipher_get_block_size( &ctx_enc ) );
+
+ /* encode length number of bytes from inbuf */
+ TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) );
+ TEST_ASSERT( outlen == enclen - cipher_get_block_size ( &ctx_enc ) );
+ TEST_ASSERT( 0 == cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) );
+ TEST_ASSERT( outlen == cipher_get_block_size ( &ctx_enc ) );
+
+ /* decode the previously encoded string */
+ TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, enclen, decbuf, &outlen ) );
+ TEST_ASSERT( enclen - cipher_get_block_size ( &ctx_enc ) == outlen );
+ TEST_ASSERT( 0 == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
+ TEST_ASSERT( length - enclen + cipher_get_block_size ( &ctx_enc ) == outlen );
+
+ TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) );
+
+ TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
+ TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
+END_CASE
+
+BEGIN_CASE
+dec_empty_buf:
+ unsigned char key[32];
+ unsigned char iv[16];
+
+ cipher_context_t ctx_dec;
+ const cipher_info_t *cipher_info;
+
+ unsigned char encbuf[64];
+ unsigned char decbuf[64];
+
+ int outlen = 0;
+
+ memset( key, 0, 32 );
+ memset( iv , 0, 16 );
+
+ memset( &ctx_dec, 0, sizeof( ctx_dec ) );
+
+ memset( encbuf, 0, 64 );
+ memset( decbuf, 0, 64 );
+
+ /* Initialise enc and dec contexts */
+ cipher_info = cipher_info_from_type( POLARSSL_CIPHER_AES_128_CBC );
+ TEST_ASSERT( NULL != cipher_info);
+
+ TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
+
+ TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, 128, POLARSSL_DECRYPT ) );
+
+ TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
+
+ /* decode 0-byte string */
+ TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) );
+ TEST_ASSERT( 0 == outlen );
+ TEST_ASSERT( 1 == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
+ TEST_ASSERT( 0 == outlen );
+
+ TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
+END_CASE
+
+BEGIN_CASE
+enc_dec_buf_multipart:cipher_id:key_len:first_length:second_length:
+ int first_length = {first_length};
+ int second_length = {second_length};
+ int length = first_length + second_length;
+ unsigned char key[32];
+ unsigned char iv[16];
+
+ cipher_context_t ctx_dec;
+ cipher_context_t ctx_enc;
+ const cipher_info_t *cipher_info;
+
+ unsigned char inbuf[64];
+ unsigned char encbuf[64];
+ unsigned char decbuf[64];
+
+ int outlen = 0;
+ int totaloutlen = 0;
+ int enclen = 0;
+
+ memset( key, 0, 32 );
+ memset( iv , 0, 16 );
+
+ memset( &ctx_dec, 0, sizeof( ctx_dec ) );
+ memset( &ctx_enc, 0, sizeof( ctx_enc ) );
+
+ memset( inbuf, 5, 64 );
+ memset( encbuf, 0, 64 );
+ memset( decbuf, 0, 64 );
+
+ /* Initialise enc and dec contexts */
+ cipher_info = cipher_info_from_type( {cipher_id} );
+ TEST_ASSERT( NULL != cipher_info);
+
+ TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
+ TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
+
+ TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
+ TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
+
+ TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
+ TEST_ASSERT( 0 == cipher_reset( &ctx_enc, iv ) );
+
+ enclen = cipher_get_block_size(&ctx_enc )
+ * ( 1 + length / cipher_get_block_size( &ctx_enc ) );
+
+ /* encode length number of bytes from inbuf */
+ TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) );
+ totaloutlen = outlen;
+ TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) );
+ totaloutlen += outlen;
+ TEST_ASSERT( totaloutlen == enclen - cipher_get_block_size ( &ctx_enc ) );
+ TEST_ASSERT( 0 == cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) );
+ totaloutlen += outlen;
+ TEST_ASSERT( outlen == cipher_get_block_size ( &ctx_enc ) );
+
+ /* decode the previously encoded string */
+ TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, enclen, decbuf, &outlen ) );
+ TEST_ASSERT( enclen - cipher_get_block_size ( &ctx_enc ) == outlen );
+ TEST_ASSERT( 0 == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
+ TEST_ASSERT( length - enclen + cipher_get_block_size ( &ctx_enc ) == outlen );
+
+
+ TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) );
+
+ TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
+ TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
+END_CASE
+
+
+BEGIN_CASE
+cipher_selftest:
+{
+ TEST_ASSERT( cipher_self_test( 0 ) == 0 );
+}
+END_CASE