test_suite_asn1write.function 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/asn1write.h"
  3. #define GUARD_LEN 4
  4. #define GUARD_VAL 0x2a
  5. /* END_HEADER */
  6. /* BEGIN_DEPENDENCIES
  7. * depends_on:MBEDTLS_ASN1_WRITE_C
  8. * END_DEPENDENCIES
  9. */
  10. /* BEGIN_CASE */
  11. void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1,
  12. int buf_len, int result )
  13. {
  14. int ret;
  15. unsigned char buf[150];
  16. size_t i;
  17. unsigned char *p;
  18. memset( buf, GUARD_VAL, sizeof( buf ) );
  19. p = buf + GUARD_LEN + buf_len;
  20. ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str->x, str->len );
  21. /* Check for buffer overwrite on both sides */
  22. for( i = 0; i < GUARD_LEN; i++ )
  23. {
  24. TEST_ASSERT( buf[i] == GUARD_VAL );
  25. TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
  26. }
  27. if( result >= 0 )
  28. {
  29. TEST_ASSERT( (size_t) ret == asn1->len );
  30. TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len );
  31. TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 );
  32. }
  33. }
  34. /* END_CASE */
  35. /* BEGIN_CASE */
  36. void mbedtls_asn1_write_ia5_string( char * str, data_t * asn1,
  37. int buf_len, int result )
  38. {
  39. int ret;
  40. unsigned char buf[150];
  41. size_t str_len;
  42. size_t i;
  43. unsigned char *p;
  44. memset( buf, GUARD_VAL, sizeof( buf ) );
  45. str_len = strlen( str );
  46. p = buf + GUARD_LEN + buf_len;
  47. ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len );
  48. /* Check for buffer overwrite on both sides */
  49. for( i = 0; i < GUARD_LEN; i++ )
  50. {
  51. TEST_ASSERT( buf[i] == GUARD_VAL );
  52. TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
  53. }
  54. if( result >= 0 )
  55. {
  56. TEST_ASSERT( (size_t) ret == asn1->len );
  57. TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len );
  58. TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 );
  59. }
  60. }
  61. /* END_CASE */
  62. /* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
  63. void mbedtls_asn1_write_len( int len, data_t * asn1, int buf_len,
  64. int result )
  65. {
  66. int ret;
  67. unsigned char buf[150];
  68. unsigned char *p;
  69. size_t i;
  70. size_t read_len;
  71. memset( buf, GUARD_VAL, sizeof( buf ) );
  72. p = buf + GUARD_LEN + buf_len;
  73. ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len );
  74. TEST_ASSERT( ret == result );
  75. /* Check for buffer overwrite on both sides */
  76. for( i = 0; i < GUARD_LEN; i++ )
  77. {
  78. TEST_ASSERT( buf[i] == GUARD_VAL );
  79. TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL );
  80. }
  81. if( result >= 0 )
  82. {
  83. TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len );
  84. TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 );
  85. /* Read back with mbedtls_asn1_get_len() to check */
  86. ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len );
  87. if( len == 0 )
  88. {
  89. TEST_ASSERT( ret == 0 );
  90. }
  91. else
  92. {
  93. /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of
  94. * the buffer is missing
  95. */
  96. TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA );
  97. }
  98. TEST_ASSERT( read_len == (size_t) len );
  99. TEST_ASSERT( p == buf + GUARD_LEN + buf_len );
  100. }
  101. }
  102. /* END_CASE */