add named group debug helper
Signed-off-by: Jerry Yu <jerry.h.yu@arm.com>
This commit is contained in:
parent
cb03677f85
commit
fe24d1c9f5
2 changed files with 68 additions and 3 deletions
|
@ -41,6 +41,8 @@ const char *mbedtls_ssl_key_export_type_str( mbedtls_ssl_key_export_type in );
|
||||||
|
|
||||||
const char *mbedtls_ssl_sig_alg_to_str( uint16_t in );
|
const char *mbedtls_ssl_sig_alg_to_str( uint16_t in );
|
||||||
|
|
||||||
|
const char *mbedtls_ssl_named_group_to_str( uint16_t in );
|
||||||
|
|
||||||
#endif /* MBEDTLS_DEBUG_C */
|
#endif /* MBEDTLS_DEBUG_C */
|
||||||
|
|
||||||
#endif /* SSL_DEBUG_HELPERS_H */
|
#endif /* SSL_DEBUG_HELPERS_H */
|
||||||
|
|
|
@ -234,6 +234,7 @@ class EnumDefinition:
|
||||||
prototype=self._prototype)
|
prototype=self._prototype)
|
||||||
return body
|
return body
|
||||||
|
|
||||||
|
|
||||||
class SignatureAlgorithmDefinition:
|
class SignatureAlgorithmDefinition:
|
||||||
"""
|
"""
|
||||||
Generate helper functions for signature algorithms.
|
Generate helper functions for signature algorithms.
|
||||||
|
@ -267,6 +268,7 @@ class SignatureAlgorithmDefinition:
|
||||||
|
|
||||||
def span(self):
|
def span(self):
|
||||||
return self._definitions[0].span()
|
return self._definitions[0].span()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""
|
"""
|
||||||
Generate function for translating value to string
|
Generate function for translating value to string
|
||||||
|
@ -292,6 +294,65 @@ class SignatureAlgorithmDefinition:
|
||||||
body = body.format(translation_table='\n'.join(translation_table))
|
body = body.format(translation_table='\n'.join(translation_table))
|
||||||
return body
|
return body
|
||||||
|
|
||||||
|
|
||||||
|
class NamedGroupDefinition:
|
||||||
|
"""
|
||||||
|
Generate helper functions for named group
|
||||||
|
|
||||||
|
It generates translation function from named group define to string.
|
||||||
|
Signature algorithm definition looks like:
|
||||||
|
#define MBEDTLS_SSL_IANA_TLS_GROUP_[ upper case named group ] [ value(hex) ]
|
||||||
|
|
||||||
|
Known limitation:
|
||||||
|
- the definitions SHOULD exist in same macro blocks.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def extract(cls, source_code, start=0, end=-1):
|
||||||
|
sig_alg_pattern = re.compile(r'#define\s+(?P<name>MBEDTLS_SSL_IANA_TLS_GROUP_\w+)\s+' +
|
||||||
|
r'(?P<value>0[xX][0-9a-fA-F]+)$',
|
||||||
|
re.MULTILINE | re.DOTALL)
|
||||||
|
matches = list(sig_alg_pattern.finditer(source_code, start, end))
|
||||||
|
if matches:
|
||||||
|
yield NamedGroupDefinition(source_code, definitions=matches)
|
||||||
|
|
||||||
|
def __init__(self, source_code, definitions=None):
|
||||||
|
if definitions is None:
|
||||||
|
definitions = []
|
||||||
|
assert isinstance(definitions, list) and definitions
|
||||||
|
self._definitions = definitions
|
||||||
|
self._source = source_code
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return 'NamedGroup({})'.format(self._definitions[0].span())
|
||||||
|
|
||||||
|
def span(self):
|
||||||
|
return self._definitions[0].span()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
"""
|
||||||
|
Generate function for translating value to string
|
||||||
|
"""
|
||||||
|
translation_table = []
|
||||||
|
for m in self._definitions:
|
||||||
|
name = m.groupdict()['name']
|
||||||
|
iana_name = name[len('MBEDTLS_SSL_IANA_TLS_GROUP_'):].lower()
|
||||||
|
translation_table.append('\tcase {}:\n\t return "{}";'.format(name, iana_name))
|
||||||
|
|
||||||
|
body = textwrap.dedent('''\
|
||||||
|
const char *mbedtls_ssl_named_group_to_str( uint16_t in )
|
||||||
|
{{
|
||||||
|
switch( in )
|
||||||
|
{{
|
||||||
|
{translation_table}
|
||||||
|
}};
|
||||||
|
|
||||||
|
return "UNKOWN";
|
||||||
|
}}''')
|
||||||
|
body = body.format(translation_table='\n'.join(translation_table))
|
||||||
|
return body
|
||||||
|
|
||||||
|
|
||||||
OUTPUT_C_TEMPLATE = '''\
|
OUTPUT_C_TEMPLATE = '''\
|
||||||
/* Automatically generated by generate_ssl_debug_helpers.py. DO NOT EDIT. */
|
/* Automatically generated by generate_ssl_debug_helpers.py. DO NOT EDIT. */
|
||||||
|
|
||||||
|
@ -335,14 +396,16 @@ def generate_ssl_debug_helpers(output_directory, mbedtls_root):
|
||||||
"""
|
"""
|
||||||
Generate functions of debug helps
|
Generate functions of debug helps
|
||||||
"""
|
"""
|
||||||
mbedtls_root = os.path.abspath(mbedtls_root or build_tree.guess_mbedtls_root())
|
mbedtls_root = os.path.abspath(
|
||||||
|
mbedtls_root or build_tree.guess_mbedtls_root())
|
||||||
with open(os.path.join(mbedtls_root, 'include/mbedtls/ssl.h')) as f:
|
with open(os.path.join(mbedtls_root, 'include/mbedtls/ssl.h')) as f:
|
||||||
source_code = remove_c_comments(f.read())
|
source_code = remove_c_comments(f.read())
|
||||||
|
|
||||||
definitions = dict()
|
definitions = dict()
|
||||||
for start, instance in preprocess_c_source_code(source_code,
|
for start, instance in preprocess_c_source_code(source_code,
|
||||||
EnumDefinition,
|
EnumDefinition,
|
||||||
SignatureAlgorithmDefinition):
|
SignatureAlgorithmDefinition,
|
||||||
|
NamedGroupDefinition):
|
||||||
if start in definitions:
|
if start in definitions:
|
||||||
continue
|
continue
|
||||||
if isinstance(instance, EnumDefinition):
|
if isinstance(instance, EnumDefinition):
|
||||||
|
|
Loading…
Reference in a new issue