|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
/**
|
|
|
|
|
* @file PEPMessage_codec.c
|
|
|
|
|
* @brief Implementation for PEPMessage encode and decode functions which transform message payloads to
|
|
|
|
|
* @file ASN1Message_codec.c
|
|
|
|
|
* @brief Implementation for ASN1Message encode and decode functions which transform message payloads to
|
|
|
|
|
* and from PER-encoded data, and XER text to and from PER
|
|
|
|
|
*
|
|
|
|
|
* @see https://www.itu.int/en/ITU-T/asn1/Pages/introduction.aspx
|
|
|
|
@ -11,14 +11,14 @@
|
|
|
|
|
#include "platform.h"
|
|
|
|
|
|
|
|
|
|
#include "distribution_codec.h"
|
|
|
|
|
#include "../asn.1/PEPMessage.h"
|
|
|
|
|
#include "../asn.1/ASN1Message.h"
|
|
|
|
|
#include "pEp_internal.h"
|
|
|
|
|
#include "growing_buf.h"
|
|
|
|
|
|
|
|
|
|
DYNAMIC_API PEP_STATUS decode_PEPMessage_message(
|
|
|
|
|
DYNAMIC_API PEP_STATUS decode_ASN1Message_message(
|
|
|
|
|
const char *data,
|
|
|
|
|
size_t size,
|
|
|
|
|
PEPMessage_t **msg
|
|
|
|
|
ASN1Message_t **msg
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
assert(data && msg);
|
|
|
|
@ -26,8 +26,8 @@ DYNAMIC_API PEP_STATUS decode_PEPMessage_message(
|
|
|
|
|
return PEP_ILLEGAL_VALUE;
|
|
|
|
|
|
|
|
|
|
*msg = NULL;
|
|
|
|
|
PEPMessage_t *_msg = NULL;
|
|
|
|
|
uper_decode_complete(NULL, &asn_DEF_PEPMessage, (void **) &_msg, data, size);
|
|
|
|
|
ASN1Message_t *_msg = NULL;
|
|
|
|
|
uper_decode_complete(NULL, &asn_DEF_ASN1Message, (void **) &_msg, data, size);
|
|
|
|
|
if (!_msg)
|
|
|
|
|
return PEP_PEPMESSAGE_ILLEGAL_MESSAGE;
|
|
|
|
|
|
|
|
|
@ -35,8 +35,8 @@ DYNAMIC_API PEP_STATUS decode_PEPMessage_message(
|
|
|
|
|
return PEP_STATUS_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PEP_STATUS encode_PEPMessage_message(
|
|
|
|
|
PEPMessage_t *msg,
|
|
|
|
|
PEP_STATUS encode_ASN1Message_message(
|
|
|
|
|
ASN1Message_t *msg,
|
|
|
|
|
char **data,
|
|
|
|
|
size_t *size
|
|
|
|
|
)
|
|
|
|
@ -49,7 +49,7 @@ PEP_STATUS encode_PEPMessage_message(
|
|
|
|
|
*size = 0;
|
|
|
|
|
|
|
|
|
|
char *_data = NULL;
|
|
|
|
|
ssize_t _size = uper_encode_to_new_buffer(&asn_DEF_PEPMessage, NULL, msg,
|
|
|
|
|
ssize_t _size = uper_encode_to_new_buffer(&asn_DEF_ASN1Message, NULL, msg,
|
|
|
|
|
(void **) &_data);
|
|
|
|
|
if (_size == -1)
|
|
|
|
|
return PEP_CANNOT_ENCODE;
|
|
|
|
@ -60,7 +60,7 @@ PEP_STATUS encode_PEPMessage_message(
|
|
|
|
|
return PEP_STATUS_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PEP_STATUS PER_to_XER_PEPMessage_msg(
|
|
|
|
|
PEP_STATUS PER_to_XER_ASN1Message_msg(
|
|
|
|
|
const char *data,
|
|
|
|
|
size_t size,
|
|
|
|
|
char **text
|
|
|
|
@ -75,8 +75,8 @@ PEP_STATUS PER_to_XER_PEPMessage_msg(
|
|
|
|
|
|
|
|
|
|
*text = NULL;
|
|
|
|
|
|
|
|
|
|
PEPMessage_t *msg = NULL;
|
|
|
|
|
status = decode_PEPMessage_message(data, size, &msg);
|
|
|
|
|
ASN1Message_t *msg = NULL;
|
|
|
|
|
status = decode_ASN1Message_message(data, size, &msg);
|
|
|
|
|
if (status)
|
|
|
|
|
goto the_end;
|
|
|
|
|
|
|
|
|
@ -86,7 +86,7 @@ PEP_STATUS PER_to_XER_PEPMessage_msg(
|
|
|
|
|
goto the_end;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
asn_enc_rval_t er = xer_encode(&asn_DEF_PEPMessage, msg, XER_F_BASIC,
|
|
|
|
|
asn_enc_rval_t er = xer_encode(&asn_DEF_ASN1Message, msg, XER_F_BASIC,
|
|
|
|
|
(asn_app_consume_bytes_f *) growing_buf_consume, (void *) dst);
|
|
|
|
|
if (er.encoded == -1) {
|
|
|
|
|
status = PEP_CANNOT_ENCODE;
|
|
|
|
@ -98,11 +98,11 @@ PEP_STATUS PER_to_XER_PEPMessage_msg(
|
|
|
|
|
|
|
|
|
|
the_end:
|
|
|
|
|
free_growing_buf(dst);
|
|
|
|
|
ASN_STRUCT_FREE(asn_DEF_PEPMessage, msg);
|
|
|
|
|
ASN_STRUCT_FREE(asn_DEF_ASN1Message, msg);
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PEP_STATUS XER_to_PER_PEPMessage_msg(
|
|
|
|
|
PEP_STATUS XER_to_PER_ASN1Message_msg(
|
|
|
|
|
const char *text,
|
|
|
|
|
char **data,
|
|
|
|
|
size_t *size
|
|
|
|
@ -117,8 +117,8 @@ PEP_STATUS XER_to_PER_PEPMessage_msg(
|
|
|
|
|
*data = NULL;
|
|
|
|
|
*size = 0;
|
|
|
|
|
|
|
|
|
|
PEPMessage_t *msg = NULL;
|
|
|
|
|
asn_dec_rval_t dr = xer_decode(NULL, &asn_DEF_PEPMessage, (void **) &msg,
|
|
|
|
|
ASN1Message_t *msg = NULL;
|
|
|
|
|
asn_dec_rval_t dr = xer_decode(NULL, &asn_DEF_ASN1Message, (void **) &msg,
|
|
|
|
|
(const void *) text, strlen(text));
|
|
|
|
|
if (dr.code != RC_OK) {
|
|
|
|
|
status = PEP_PEPMESSAGE_ILLEGAL_MESSAGE;
|
|
|
|
@ -127,7 +127,7 @@ PEP_STATUS XER_to_PER_PEPMessage_msg(
|
|
|
|
|
|
|
|
|
|
char *_data = NULL;
|
|
|
|
|
size_t _size = 0;
|
|
|
|
|
status = encode_PEPMessage_message(msg, &_data, &_size);
|
|
|
|
|
status = encode_ASN1Message_message(msg, &_data, &_size);
|
|
|
|
|
if (status)
|
|
|
|
|
goto the_end;
|
|
|
|
|
|
|
|
|
@ -135,7 +135,7 @@ PEP_STATUS XER_to_PER_PEPMessage_msg(
|
|
|
|
|
*size = (size_t) _size;
|
|
|
|
|
|
|
|
|
|
the_end:
|
|
|
|
|
ASN_STRUCT_FREE(asn_DEF_PEPMessage, msg);
|
|
|
|
|
ASN_STRUCT_FREE(asn_DEF_ASN1Message, msg);
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|