Modify mbedtls_x509_crt_info() to use getter API
diff --git a/library/x509_crt.c b/library/x509_crt.c
index fd7979f..03222d5 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -2040,24 +2040,26 @@
 #define BEFORE_COLON    18
 #define BC              "18"
 int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix,
-                           const mbedtls_x509_crt *crt_raw )
+                           const mbedtls_x509_crt *crt )
 {
     int ret;
     size_t n;
     char *p;
     char key_size_str[BEFORE_COLON];
-    mbedtls_x509_crt_frame *crt;
-    mbedtls_pk_context *pk;
+    mbedtls_x509_crt_frame frame;
+    mbedtls_pk_context pk;
 
-    mbedtls_x509_name issuer, subject;
-    mbedtls_x509_sequence ext_key_usage, subject_alt_names;
+    mbedtls_x509_name *issuer = NULL, *subject = NULL;
+    mbedtls_x509_sequence *ext_key_usage = NULL, *subject_alt_names = NULL;
     mbedtls_x509_crt_sig_info sig_info;
 
     p = buf;
     n = size;
 
     memset( &sig_info, 0, sizeof( mbedtls_x509_crt_sig_info ) );
-    if( NULL == crt_raw )
+    mbedtls_pk_init( &pk );
+
+    if( NULL == crt )
     {
         ret = mbedtls_snprintf( p, n, "\nCertificate is uninitialised!\n" );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
@@ -2065,46 +2067,49 @@
         return( (int) ( size - n ) );
     }
 
-    ret = mbedtls_x509_crt_frame_acquire( crt_raw, &crt );
-    if( ret != 0 )
-        return( MBEDTLS_ERR_X509_FATAL_ERROR );
-
-    ret = mbedtls_x509_crt_pk_acquire( (mbedtls_x509_crt*) crt_raw, &pk );
+    ret = mbedtls_x509_crt_get_frame( crt, &frame );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
         goto cleanup;
     }
 
-    ret = x509_crt_get_sig_info( crt, &sig_info );
+    ret = mbedtls_x509_crt_get_subject( crt, &subject );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
         goto cleanup;
     }
 
-    ret = x509_crt_subject_from_frame( crt, &subject );
+    ret = mbedtls_x509_crt_get_issuer( crt, &issuer );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
         goto cleanup;
     }
 
-    ret = x509_crt_issuer_from_frame( crt, &issuer );
+    ret = mbedtls_x509_crt_get_subject_alt_names( crt, &subject_alt_names );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
         goto cleanup;
     }
 
-    ret = x509_crt_subject_alt_from_frame( crt, &subject_alt_names );
+    ret = mbedtls_x509_crt_get_ext_key_usage( crt, &ext_key_usage );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
         goto cleanup;
     }
 
-    ret = x509_crt_ext_key_usage_from_frame( crt, &ext_key_usage );
+    ret = mbedtls_x509_crt_get_pk( crt, &pk );
+    if( ret != 0 )
+    {
+        ret = MBEDTLS_ERR_X509_FATAL_ERROR;
+        goto cleanup;
+    }
+
+    ret = x509_crt_get_sig_info( &frame, &sig_info );
     if( ret != 0 )
     {
         ret = MBEDTLS_ERR_X509_FATAL_ERROR;
@@ -2112,13 +2117,13 @@
     }
 
     ret = mbedtls_snprintf( p, n, "%scert. version     : %d\n",
-                               prefix, crt->version );
+                               prefix, frame.version );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     {
         mbedtls_x509_buf serial;
-        serial.p   = crt->serial.p;
-        serial.len = crt->serial.len;
+        serial.p   = frame.serial.p;
+        serial.len = frame.serial.len;
         ret = mbedtls_snprintf( p, n, "%sserial number     : ",
                                 prefix );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
@@ -2128,26 +2133,26 @@
 
     ret = mbedtls_snprintf( p, n, "\n%sissuer name       : ", prefix );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
-    ret = mbedtls_x509_dn_gets( p, n, &issuer  );
+    ret = mbedtls_x509_dn_gets( p, n, issuer  );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     ret = mbedtls_snprintf( p, n, "\n%ssubject name      : ", prefix );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
-    ret = mbedtls_x509_dn_gets( p, n, &subject );
+    ret = mbedtls_x509_dn_gets( p, n, subject );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     ret = mbedtls_snprintf( p, n, "\n%sissued  on        : " \
                    "%04d-%02d-%02d %02d:%02d:%02d", prefix,
-                   crt->valid_from.year, crt->valid_from.mon,
-                   crt->valid_from.day,  crt->valid_from.hour,
-                   crt->valid_from.min,  crt->valid_from.sec );
+                   frame.valid_from.year, frame.valid_from.mon,
+                   frame.valid_from.day,  frame.valid_from.hour,
+                   frame.valid_from.min,  frame.valid_from.sec );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     ret = mbedtls_snprintf( p, n, "\n%sexpires on        : " \
                    "%04d-%02d-%02d %02d:%02d:%02d", prefix,
-                   crt->valid_to.year, crt->valid_to.mon,
-                   crt->valid_to.day,  crt->valid_to.hour,
-                   crt->valid_to.min,  crt->valid_to.sec );
+                   frame.valid_to.year, frame.valid_to.mon,
+                   frame.valid_to.day,  frame.valid_to.hour,
+                   frame.valid_to.min,  frame.valid_to.sec );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     ret = mbedtls_snprintf( p, n, "\n%ssigned using      : ", prefix );
@@ -2159,67 +2164,67 @@
 
     /* Key size */
     if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON,
-                                      mbedtls_pk_get_name( pk ) ) ) != 0 )
+                                      mbedtls_pk_get_name( &pk ) ) ) != 0 )
     {
         return( ret );
     }
 
     ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits", prefix, key_size_str,
-                          (int) mbedtls_pk_get_bitlen( pk ) );
+                          (int) mbedtls_pk_get_bitlen( &pk ) );
     MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
     /*
      * Optional extensions
      */
 
-    if( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS )
+    if( frame.ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS )
     {
         ret = mbedtls_snprintf( p, n, "\n%sbasic constraints : CA=%s", prefix,
-                        crt->ca_istrue ? "true" : "false" );
+                        frame.ca_istrue ? "true" : "false" );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
-        if( crt->max_pathlen > 0 )
+        if( frame.max_pathlen > 0 )
         {
-            ret = mbedtls_snprintf( p, n, ", max_pathlen=%d", crt->max_pathlen - 1 );
+            ret = mbedtls_snprintf( p, n, ", max_pathlen=%d", frame.max_pathlen - 1 );
             MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
         }
     }
 
-    if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME )
+    if( frame.ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME )
     {
         ret = mbedtls_snprintf( p, n, "\n%ssubject alt name  : ", prefix );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
         if( ( ret = x509_info_subject_alt_name( &p, &n,
-                                            &subject_alt_names ) ) != 0 )
+                                            subject_alt_names ) ) != 0 )
             return( ret );
     }
 
-    if( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE )
+    if( frame.ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE )
     {
         ret = mbedtls_snprintf( p, n, "\n%scert. type        : ", prefix );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
-        if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 )
+        if( ( ret = x509_info_cert_type( &p, &n, frame.ns_cert_type ) ) != 0 )
             return( ret );
     }
 
-    if( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE )
+    if( frame.ext_types & MBEDTLS_X509_EXT_KEY_USAGE )
     {
         ret = mbedtls_snprintf( p, n, "\n%skey usage         : ", prefix );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
-        if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 )
+        if( ( ret = x509_info_key_usage( &p, &n, frame.key_usage ) ) != 0 )
             return( ret );
     }
 
-    if( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE )
+    if( frame.ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE )
     {
         ret = mbedtls_snprintf( p, n, "\n%sext key usage     : ", prefix );
         MBEDTLS_X509_SAFE_SNPRINTF_WITH_ERROR;
 
         if( ( ret = x509_info_ext_key_usage( &p, &n,
-                                             &ext_key_usage ) ) != 0 )
+                                             ext_key_usage ) ) != 0 )
             return( ret );
     }
 
@@ -2230,14 +2235,12 @@
 
 cleanup:
 
-    mbedtls_x509_crt_frame_release( crt_raw, crt );
-    mbedtls_x509_crt_pk_release( (mbedtls_x509_crt*) crt_raw, pk );
-
     x509_crt_free_sig_info( &sig_info );
-    mbedtls_x509_name_free( issuer.next );
-    mbedtls_x509_name_free( subject.next );
-    mbedtls_x509_sequence_free( ext_key_usage.next );
-    mbedtls_x509_sequence_free( subject_alt_names.next );
+    mbedtls_pk_free( &pk );
+    mbedtls_x509_name_free( issuer );
+    mbedtls_x509_name_free( subject );
+    mbedtls_x509_sequence_free( ext_key_usage );
+    mbedtls_x509_sequence_free( subject_alt_names );
 
     return( ret );
 }