mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-16 08:42:50 +00:00
Add test cases for ASN.1 ENUMERATED tag
Add test cases for writing and parsing ASN.1 ENUMERATED tag values. Signed-off-by: Mykhailo Sopiha <mykhailo.sopiha@linaro.org>
This commit is contained in:
parent
20180ca919
commit
6af7bf91f2
@ -286,6 +286,90 @@ get_integer:"010101":"":MBEDTLS_ERR_ASN1_UNEXPECTED_TAG
|
|||||||
INTEGER too large for mpi
|
INTEGER too large for mpi
|
||||||
get_mpi_too_large:
|
get_mpi_too_large:
|
||||||
|
|
||||||
|
ENUMERATED 0
|
||||||
|
get_enum:"0A0100":"0":0
|
||||||
|
|
||||||
|
ENUMERATED 0, extra leading 0
|
||||||
|
get_enum:"0A020000":"0":0
|
||||||
|
|
||||||
|
ENUMERATED 1
|
||||||
|
get_enum:"0A0101":"1":0
|
||||||
|
|
||||||
|
ENUMERATED 1, extra leading 0
|
||||||
|
get_enum:"0A020001":"1":0
|
||||||
|
|
||||||
|
ENUMERATED 0x7f
|
||||||
|
get_enum:"0A017f":"7f":0
|
||||||
|
|
||||||
|
ENUMERATED 0x80
|
||||||
|
get_enum:"0A020080":"80":0
|
||||||
|
|
||||||
|
ENUMERATED 0x80, extra leading 0
|
||||||
|
get_enum:"0A03000080":"80":0
|
||||||
|
|
||||||
|
ENUMERATED 0xff
|
||||||
|
get_enum:"0A0200ff":"ff":0
|
||||||
|
|
||||||
|
ENUMERATED 0x7fff
|
||||||
|
get_enum:"0A027fff":"7fff":0
|
||||||
|
|
||||||
|
ENUMERATED 0x12345678
|
||||||
|
get_enum:"0A0412345678":"12345678":0
|
||||||
|
|
||||||
|
ENUMERATED 0x12345678, extra leading 0
|
||||||
|
get_enum:"0A050012345678":"12345678":0
|
||||||
|
|
||||||
|
ENUMERATED 0x7fffffff
|
||||||
|
get_enum:"0A047fffffff":"7fffffff":0
|
||||||
|
|
||||||
|
ENUMERATED 0x7fffffff, extra leading 0
|
||||||
|
get_enum:"0A05007fffffff":"7fffffff":0
|
||||||
|
|
||||||
|
ENUMERATED 0x80000000
|
||||||
|
get_enum:"0A050080000000":"80000000":0
|
||||||
|
|
||||||
|
ENUMERATED 0xffffffff
|
||||||
|
get_enum:"0A0500ffffffff":"ffffffff":0
|
||||||
|
|
||||||
|
ENUMERATED 0x100000000
|
||||||
|
get_enum:"0A050100000000":"0100000000":0
|
||||||
|
|
||||||
|
ENUMERATED -1
|
||||||
|
get_enum:"0A01ff":"-1":0
|
||||||
|
|
||||||
|
ENUMERATED -1, extra leading ff
|
||||||
|
get_enum:"0A02ffff":"-1":0
|
||||||
|
|
||||||
|
ENUMERATED -0x7f
|
||||||
|
get_enum:"0A0181":"-7f":0
|
||||||
|
|
||||||
|
ENUMERATED -0x80
|
||||||
|
get_enum:"0A0180":"-80":0
|
||||||
|
|
||||||
|
ENUMERATED -0x81
|
||||||
|
get_enum:"0A02ff7f":"-81":0
|
||||||
|
|
||||||
|
ENUMERATED -0xff
|
||||||
|
get_enum:"0A02ff01":"-ff":0
|
||||||
|
|
||||||
|
ENUMERATED -0x100
|
||||||
|
get_enum:"0A02ff00":"-100":0
|
||||||
|
|
||||||
|
ENUMERATED -0x7fffffff
|
||||||
|
get_enum:"0A0480000001":"-7fffffff":0
|
||||||
|
|
||||||
|
ENUMERATED -0x80000000
|
||||||
|
get_enum:"0A0480000000":"-80000000":0
|
||||||
|
|
||||||
|
ENUMERATED -0x80000001
|
||||||
|
get_enum:"0A05ff7fffffff":"-80000001":0
|
||||||
|
|
||||||
|
ENUMERATED -0xffffffff
|
||||||
|
get_enum:"0A05ff00000001":"-ffffffff":0
|
||||||
|
|
||||||
|
ENUMERATED -0x100000000
|
||||||
|
get_enum:"0A05ff00000000":"-100000000":0
|
||||||
|
|
||||||
BIT STRING: empty
|
BIT STRING: empty
|
||||||
get_bitstring:"0300":0:0:MBEDTLS_ERR_ASN1_OUT_OF_DATA:MBEDTLS_ERR_ASN1_INVALID_DATA
|
get_bitstring:"0300":0:0:MBEDTLS_ERR_ASN1_OUT_OF_DATA:MBEDTLS_ERR_ASN1_INVALID_DATA
|
||||||
|
|
||||||
|
@ -393,6 +393,49 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
/* BEGIN_CASE */
|
||||||
|
void get_enum( const data_t *input,
|
||||||
|
const char *expected_hex, int expected_result )
|
||||||
|
{
|
||||||
|
unsigned char *p;
|
||||||
|
long expected_value;
|
||||||
|
int expected_result_for_enum = expected_result;
|
||||||
|
int val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
expected_value = strtol( expected_hex, NULL, 16 );
|
||||||
|
if( expected_result == 0 &&
|
||||||
|
( errno == ERANGE
|
||||||
|
#if LONG_MAX > INT_MAX
|
||||||
|
|| expected_value > INT_MAX || expected_value < INT_MIN
|
||||||
|
#endif
|
||||||
|
) )
|
||||||
|
{
|
||||||
|
/* The library returns the dubious error code INVALID_LENGTH
|
||||||
|
* for integers that are out of range. */
|
||||||
|
expected_result_for_enum = MBEDTLS_ERR_ASN1_INVALID_LENGTH;
|
||||||
|
}
|
||||||
|
if( expected_result == 0 && expected_value < 0 )
|
||||||
|
{
|
||||||
|
/* The library does not support negative INTEGERs and
|
||||||
|
* returns the dubious error code INVALID_LENGTH.
|
||||||
|
* Test that we preserve the historical behavior. If we
|
||||||
|
* decide to change the behavior, we'll also change this test. */
|
||||||
|
expected_result_for_enum = MBEDTLS_ERR_ASN1_INVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = input->x;
|
||||||
|
ret = mbedtls_asn1_get_enum( &p, input->x + input->len, &val );
|
||||||
|
TEST_EQUAL( ret, expected_result_for_enum );
|
||||||
|
if( ret == 0 )
|
||||||
|
{
|
||||||
|
TEST_EQUAL( val, expected_value );
|
||||||
|
TEST_ASSERT( p == input->x + input->len );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
|
/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
|
||||||
void get_mpi_too_large( )
|
void get_mpi_too_large( )
|
||||||
{
|
{
|
||||||
|
@ -49,6 +49,48 @@ mbedtls_asn1_write_int:0x12345678:"020412345678"
|
|||||||
ASN.1 Write int 2147483647
|
ASN.1 Write int 2147483647
|
||||||
mbedtls_asn1_write_int:0x7fffffff:"02047fffffff"
|
mbedtls_asn1_write_int:0x7fffffff:"02047fffffff"
|
||||||
|
|
||||||
|
ASN.1 Write enum 0
|
||||||
|
mbedtls_asn1_write_enum:0:"0A0100"
|
||||||
|
|
||||||
|
ASN.1 Write enum 1
|
||||||
|
mbedtls_asn1_write_enum:1:"0A0101"
|
||||||
|
|
||||||
|
ASN.1 Write enum 127
|
||||||
|
mbedtls_asn1_write_enum:0x7f:"0A017f"
|
||||||
|
|
||||||
|
ASN.1 Write enum 128
|
||||||
|
mbedtls_asn1_write_enum:0x80:"0A020080"
|
||||||
|
|
||||||
|
ASN.1 Write enum 255
|
||||||
|
mbedtls_asn1_write_enum:0xff:"0A0200ff"
|
||||||
|
|
||||||
|
ASN.1 Write enum 256
|
||||||
|
mbedtls_asn1_write_enum:0x100:"0A020100"
|
||||||
|
|
||||||
|
ASN.1 Write enum 32767
|
||||||
|
mbedtls_asn1_write_enum:0x7fff:"0A027fff"
|
||||||
|
|
||||||
|
ASN.1 Write enum 32768
|
||||||
|
mbedtls_asn1_write_enum:0x8000:"0A03008000"
|
||||||
|
|
||||||
|
ASN.1 Write enum 65535
|
||||||
|
mbedtls_asn1_write_enum:0xffff:"0A0300ffff"
|
||||||
|
|
||||||
|
ASN.1 Write enum 65536
|
||||||
|
mbedtls_asn1_write_enum:0x10000:"0A03010000"
|
||||||
|
|
||||||
|
ASN.1 Write enum 8388607
|
||||||
|
mbedtls_asn1_write_enum:0x7fffff:"0A037fffff"
|
||||||
|
|
||||||
|
ASN.1 Write enum 8388608
|
||||||
|
mbedtls_asn1_write_enum:0x800000:"0A0400800000"
|
||||||
|
|
||||||
|
ASN.1 Write enum 0x12345678
|
||||||
|
mbedtls_asn1_write_enum:0x12345678:"0A0412345678"
|
||||||
|
|
||||||
|
ASN.1 Write enum 2147483647
|
||||||
|
mbedtls_asn1_write_enum:0x7fffffff:"0A047fffffff"
|
||||||
|
|
||||||
#ASN.1 Write mpi 0
|
#ASN.1 Write mpi 0
|
||||||
#mbedtls_asn1_write_mpi:"00":"020100"
|
#mbedtls_asn1_write_mpi:"00":"020100"
|
||||||
|
|
||||||
|
@ -117,6 +117,27 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
|
||||||
|
/* BEGIN_CASE */
|
||||||
|
void mbedtls_asn1_write_enum( int val, data_t *expected )
|
||||||
|
{
|
||||||
|
generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 };
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
for( data.size = 0; data.size < expected->len + 1; data.size++ )
|
||||||
|
{
|
||||||
|
if( ! generic_write_start_step( &data ) )
|
||||||
|
goto exit;
|
||||||
|
ret = mbedtls_asn1_write_enum( &data.p, data.start, val );
|
||||||
|
if( ! generic_write_finish_step( &data, expected, ret ) )
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_free( data.output );
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
|
/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
|
||||||
void mbedtls_asn1_write_mpi( data_t *val, data_t *expected )
|
void mbedtls_asn1_write_mpi( data_t *val, data_t *expected )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user