diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function')
-rw-r--r-- | roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function b/roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function new file mode 100644 index 000000000..57a974125 --- /dev/null +++ b/roms/skiboot/libstb/crypto/mbedtls/tests/suites/test_suite_asn1write.function @@ -0,0 +1,130 @@ +/* BEGIN_HEADER */ +#include "mbedtls/asn1write.h" + +#define GUARD_LEN 4 +#define GUARD_VAL 0x2a +/* END_HEADER */ + +/* BEGIN_DEPENDENCIES + * depends_on:MBEDTLS_ASN1_WRITE_C + * END_DEPENDENCIES + */ + +/* BEGIN_CASE */ +void mbedtls_asn1_write_octet_string( data_t * str, data_t * asn1, + int buf_len, int result ) +{ + int ret; + unsigned char buf[150]; + size_t i; + unsigned char *p; + + memset( buf, GUARD_VAL, sizeof( buf ) ); + + + p = buf + GUARD_LEN + buf_len; + + ret = mbedtls_asn1_write_octet_string( &p, buf + GUARD_LEN, str->x, str->len ); + + /* Check for buffer overwrite on both sides */ + for( i = 0; i < GUARD_LEN; i++ ) + { + TEST_ASSERT( buf[i] == GUARD_VAL ); + TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); + } + + if( result >= 0 ) + { + TEST_ASSERT( (size_t) ret == asn1->len ); + TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); + + TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); + } +} +/* END_CASE */ + +/* BEGIN_CASE */ +void mbedtls_asn1_write_ia5_string( char * str, data_t * asn1, + int buf_len, int result ) +{ + int ret; + unsigned char buf[150]; + size_t str_len; + size_t i; + unsigned char *p; + + memset( buf, GUARD_VAL, sizeof( buf ) ); + + str_len = strlen( str ); + + p = buf + GUARD_LEN + buf_len; + + ret = mbedtls_asn1_write_ia5_string( &p, buf + GUARD_LEN, str, str_len ); + + /* Check for buffer overwrite on both sides */ + for( i = 0; i < GUARD_LEN; i++ ) + { + TEST_ASSERT( buf[i] == GUARD_VAL ); + TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); + } + + if( result >= 0 ) + { + TEST_ASSERT( (size_t) ret == asn1->len ); + TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); + + TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); + } +} +/* END_CASE */ + +/* BEGIN_CASE depends_on:MBEDTLS_ASN1PARSE_C */ +void mbedtls_asn1_write_len( int len, data_t * asn1, int buf_len, + int result ) +{ + int ret; + unsigned char buf[150]; + unsigned char *p; + size_t i; + size_t read_len; + + memset( buf, GUARD_VAL, sizeof( buf ) ); + + p = buf + GUARD_LEN + buf_len; + + ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len ); + + TEST_ASSERT( ret == result ); + + /* Check for buffer overwrite on both sides */ + for( i = 0; i < GUARD_LEN; i++ ) + { + TEST_ASSERT( buf[i] == GUARD_VAL ); + TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); + } + + if( result >= 0 ) + { + TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); + + TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); + + /* Read back with mbedtls_asn1_get_len() to check */ + ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len ); + + if( len == 0 ) + { + TEST_ASSERT( ret == 0 ); + } + else + { + /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of + * the buffer is missing + */ + TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + } + TEST_ASSERT( read_len == (size_t) len ); + TEST_ASSERT( p == buf + GUARD_LEN + buf_len ); + } +} +/* END_CASE */ |