Improve pkcs12 pbe tests

* Simplify pkcs12 tests to use algo parameters instead of asn1 buffers.
* Fix output buffers allocation size.

Signed-off-by: Waleed Elmelegy <waleed.elmelegy@arm.com>
diff --git a/tests/suites/test_suite_pkcs12.function b/tests/suites/test_suite_pkcs12.function
index 5f758df..288188e 100644
--- a/tests/suites/test_suite_pkcs12.function
+++ b/tests/suites/test_suite_pkcs12.function
@@ -1,7 +1,6 @@
 /* BEGIN_HEADER */
 #include "mbedtls/pkcs12.h"
 #include "mbedtls/error.h"
-#include "mbedtls/oid.h"
 #include "common.h"
 
 typedef enum {
@@ -16,7 +15,7 @@
  * END_DEPENDENCIES
  */
 
-/* BEGIN_CASE MBEDTLS_ASN1_PARSE_C*/
+/* BEGIN_CASE */
 void pkcs12_derive_key(int md_type, int key_size_arg,
                        data_t *password_arg, int password_usage,
                        data_t *salt_arg, int salt_usage,
@@ -70,29 +69,24 @@
 /* END_CASE */
 
 /* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
-void pkcs12_pbe_encrypt(data_t *params_hex, data_t *pw,
+void pkcs12_pbe_encrypt(int cipher, int md, data_t *params_hex, data_t *pw,
                         data_t *data, int ref_ret, data_t *ref_out)
 {
     int my_ret;
-    mbedtls_asn1_buf pbe_alg_oid, pbe_params;
+    mbedtls_asn1_buf pbe_params;
     unsigned char *my_out = NULL;
-    unsigned char *p, *end;
-    mbedtls_cipher_type_t cipher_alg;
-    mbedtls_md_type_t md_alg;
+    mbedtls_cipher_type_t cipher_alg = (mbedtls_cipher_type_t) cipher;
+    mbedtls_md_type_t md_alg = (mbedtls_md_type_t) md;
+    unsigned int block_size;
+    const mbedtls_cipher_info_t *cipher_info;
 
-    p = params_hex->x;
-    end = p + params_hex->len;
+    cipher_info = mbedtls_cipher_info_from_type(cipher_alg);
+    block_size = cipher_info->block_size;
+    ASSERT_ALLOC(my_out, ((data->len/block_size) + 1) * block_size);
 
-    my_ret = mbedtls_asn1_get_alg(&p, end, &pbe_alg_oid, &pbe_params);
-    if (my_ret) {
-        TEST_HELPER_ASSERT(0);
-    }
-    my_ret = mbedtls_oid_get_pkcs12_pbe_alg(&pbe_alg_oid, &md_alg, &cipher_alg);
-    if (my_ret) {
-        TEST_HELPER_ASSERT(0);
-    }
-
-    ASSERT_ALLOC(my_out, ref_out->len);
+    pbe_params.tag = params_hex->x[0];
+    pbe_params.len = params_hex->x[1];
+    pbe_params.p = params_hex->x + 2;
 
     my_ret = mbedtls_pkcs12_pbe(&pbe_params, MBEDTLS_PKCS12_PBE_ENCRYPT, cipher_alg,
                                 md_alg, pw->x, pw->len, data->x, data->len, my_out);
@@ -108,29 +102,20 @@
 /* END_CASE */
 
 /* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
-void pkcs12_pbe_decrypt(data_t *params_hex, data_t *pw,
+void pkcs12_pbe_decrypt(int cipher, int md, data_t *params_hex, data_t *pw,
                         data_t *data, int ref_ret, data_t *ref_out)
 {
     int my_ret;
-    mbedtls_asn1_buf pbe_alg_oid, pbe_params;
+    mbedtls_asn1_buf pbe_params;
     unsigned char *my_out = NULL;
-    unsigned char *p, *end;
-    mbedtls_cipher_type_t cipher_alg;
-    mbedtls_md_type_t md_alg;
+    mbedtls_cipher_type_t cipher_alg = (mbedtls_cipher_type_t) cipher;
+    mbedtls_md_type_t md_alg = (mbedtls_md_type_t) md;
 
-    p = params_hex->x;
-    end = p + params_hex->len;
+    ASSERT_ALLOC(my_out, data->len);
 
-    my_ret = mbedtls_asn1_get_alg(&p, end, &pbe_alg_oid, &pbe_params);
-    if (my_ret) {
-        TEST_HELPER_ASSERT(0);
-    }
-    my_ret = mbedtls_oid_get_pkcs12_pbe_alg(&pbe_alg_oid, &md_alg, &cipher_alg);
-    if (my_ret) {
-        TEST_HELPER_ASSERT(0);
-    }
-
-    ASSERT_ALLOC(my_out, ref_out->len);
+    pbe_params.tag = params_hex->x[0];
+    pbe_params.len = params_hex->x[1];
+    pbe_params.p = params_hex->x + 2;
 
     my_ret = mbedtls_pkcs12_pbe(&pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, cipher_alg,
                                 md_alg, pw->x, pw->len, data->x, data->len, my_out);