test_suite_pkwrite.function 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/pk.h"
  3. #include "mbedtls/pem.h"
  4. #include "mbedtls/oid.h"
  5. /* END_HEADER */
  6. /* BEGIN_DEPENDENCIES
  7. * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_PK_WRITE_C:MBEDTLS_BIGNUM_C:MBEDTLS_FS_IO
  8. * END_DEPENDENCIES
  9. */
  10. /* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
  11. void pk_write_pubkey_check( char * key_file )
  12. {
  13. mbedtls_pk_context key;
  14. unsigned char buf[5000];
  15. unsigned char check_buf[5000];
  16. int ret;
  17. FILE *f;
  18. size_t ilen, pem_len, buf_index;
  19. memset( buf, 0, sizeof( buf ) );
  20. memset( check_buf, 0, sizeof( check_buf ) );
  21. mbedtls_pk_init( &key );
  22. TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &key, key_file ) == 0 );
  23. ret = mbedtls_pk_write_pubkey_pem( &key, buf, sizeof( buf ));
  24. TEST_ASSERT( ret == 0 );
  25. pem_len = strlen( (char *) buf );
  26. // check that the rest of the buffer remains clear
  27. for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index )
  28. {
  29. TEST_ASSERT( buf[buf_index] == 0 );
  30. }
  31. f = fopen( key_file, "r" );
  32. TEST_ASSERT( f != NULL );
  33. ilen = fread( check_buf, 1, sizeof( check_buf ), f );
  34. fclose( f );
  35. TEST_ASSERT( ilen == pem_len );
  36. TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
  37. exit:
  38. mbedtls_pk_free( &key );
  39. }
  40. /* END_CASE */
  41. /* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
  42. void pk_write_key_check( char * key_file )
  43. {
  44. mbedtls_pk_context key;
  45. unsigned char buf[5000];
  46. unsigned char check_buf[5000];
  47. int ret;
  48. FILE *f;
  49. size_t ilen, pem_len, buf_index;
  50. memset( buf, 0, sizeof( buf ) );
  51. memset( check_buf, 0, sizeof( check_buf ) );
  52. mbedtls_pk_init( &key );
  53. TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 );
  54. ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf ));
  55. TEST_ASSERT( ret == 0 );
  56. pem_len = strlen( (char *) buf );
  57. // check that the rest of the buffer remains clear
  58. for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index )
  59. {
  60. TEST_ASSERT( buf[buf_index] == 0 );
  61. }
  62. f = fopen( key_file, "r" );
  63. TEST_ASSERT( f != NULL );
  64. ilen = fread( check_buf, 1, sizeof( check_buf ), f );
  65. fclose( f );
  66. TEST_ASSERT( ilen == strlen( (char *) buf ) );
  67. TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
  68. exit:
  69. mbedtls_pk_free( &key );
  70. }
  71. /* END_CASE */