import re
def _map_ikev2_vendor_capabilities(message_type, input_string):
valid_message_types = ['IKE_SA_INIT', 'IKE_AUTH']
if message_type not in valid_message_types:
raise ValueError(f"Invalid message type: {message_type}. Must be one of {valid_message_types}")
value_map = {
'FRAG_SUP': 'IKE Fragmentation',
'REDIR_SUP': 'IKE Redirection',
'HASH_ALG': 'Hash Algorithms',
'NATD_S_IP': 'NAT Detection (Source IP)',
'NATD_D_IP': 'NAT Detection (Destination IP)',
'SIGN_HASH_ALGS': 'Signature Hash Algorithms',
'NON_FIRST_FRAGMENTS': 'Non-First IKE Fragments',
'CHILDLESS_IKEV2_SUP': 'Childless IKEv2',
'INTERMEDIATE': 'Intermediate Exchange',
'COOKIE': 'Cookie-Based DoS Protection',
'ESP_TFC_PAD_N': 'ESPv3 TFC Padding Disabled',
'MOBIKE_SUP': 'MOBIKE',
'MULT_AUTH': 'Multiple Auth',
'EAP_ONLY': 'EAP-Only Auth',
'MSG_ID_SYN_SUP': 'Message ID Synchronization',
'IPCOMP_SUPPORTED': 'IP Payload Compression Support',
'ADD_4_ADDR': 'Additional IPv4 Addresses',
'ADD_6_ADDR': 'Additional IPv6 Addresses',
'INIT_CONTACT': 'Initial Contact',
'HTTP_CERT_LOOKUP_SUP': 'HTTP Certificate Lookup',
}
pattern = r'N\([^)]+\)'
matches = re.findall(pattern, input_string)
result = []
for match in matches:
key = match[2:-1]
if key in value_map:
result.append(value_map[key])
return ', '.join(result)
ike_sa_init_string = '2025-07-18 20:16:22.839 15[ENC] <4> parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(MULT_AUTH) ]'
ike_auth_string = '2025-07-18 20:16:22.898 07[ENC] <4> parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH N(ESP_TFC_PAD_N) SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR)N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]'
print("IKE_SA_INIT Results:")
print(_map_ikev2_vendor_capabilities("IKE_SA_INIT", ike_sa_init_string))
print("\nIKE_AUTH Results:")
print(_map_ikev2_vendor_capabilities("IKE_AUTH", ike_auth_string))