avoid multiple copies for asn1 formatting
This commit is contained in:
146
npa/src/boxing.c
146
npa/src/boxing.c
@@ -74,25 +74,21 @@ int boxing_pace_input_to_buf(sc_context_t *ctx,
|
|||||||
const struct establish_pace_channel_input *input,
|
const struct establish_pace_channel_input *input,
|
||||||
unsigned char **asn1, size_t *asn1_len)
|
unsigned char **asn1, size_t *asn1_len)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
size_t pin_id_len = sizeof input->pin_id;
|
||||||
|
struct sc_asn1_entry EstablishPACEChannelInput_data[
|
||||||
sizeof g_EstablishPACEChannelInput_data/
|
sizeof g_EstablishPACEChannelInput_data/
|
||||||
sizeof *g_EstablishPACEChannelInput_data;
|
sizeof *g_EstablishPACEChannelInput_data];
|
||||||
const size_t count_sequence =
|
struct sc_asn1_entry EstablishPACEChannel[
|
||||||
sizeof g_EstablishPACEChannel/
|
sizeof g_EstablishPACEChannel/
|
||||||
sizeof *g_EstablishPACEChannel;
|
sizeof *g_EstablishPACEChannel];
|
||||||
size_t pin_id_len = sizeof input->pin_id, i;
|
|
||||||
struct sc_asn1_entry EstablishPACEChannelInput_data[count_data];
|
|
||||||
struct sc_asn1_entry EstablishPACEChannel[count_sequence];
|
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannel,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannel+i,
|
EstablishPACEChannel);
|
||||||
EstablishPACEChannel+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannel,
|
sc_format_asn1_entry(EstablishPACEChannel,
|
||||||
EstablishPACEChannelInput_data, 0, 1);
|
EstablishPACEChannelInput_data, 0, 1);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannelInput_data,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannelInput_data+i,
|
EstablishPACEChannelInput_data);
|
||||||
EstablishPACEChannelInput_data+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannelInput_data,
|
sc_format_asn1_entry(EstablishPACEChannelInput_data,
|
||||||
(unsigned char *) &input->pin_id, &pin_id_len, 1);
|
(unsigned char *) &input->pin_id, &pin_id_len, 1);
|
||||||
if (input->pin)
|
if (input->pin)
|
||||||
@@ -115,25 +111,21 @@ int boxing_buf_to_pace_input(sc_context_t *ctx,
|
|||||||
const unsigned char *asn1, size_t asn1_len,
|
const unsigned char *asn1, size_t asn1_len,
|
||||||
struct establish_pace_channel_input *input)
|
struct establish_pace_channel_input *input)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
size_t pin_id_len = sizeof input->pin_id;
|
||||||
|
struct sc_asn1_entry EstablishPACEChannelInput_data[
|
||||||
sizeof g_EstablishPACEChannelInput_data/
|
sizeof g_EstablishPACEChannelInput_data/
|
||||||
sizeof *g_EstablishPACEChannelInput_data;
|
sizeof *g_EstablishPACEChannelInput_data];
|
||||||
const size_t count_sequence =
|
struct sc_asn1_entry EstablishPACEChannel[
|
||||||
sizeof g_EstablishPACEChannel/
|
sizeof g_EstablishPACEChannel/
|
||||||
sizeof *g_EstablishPACEChannel;
|
sizeof *g_EstablishPACEChannel];
|
||||||
size_t pin_id_len = sizeof input->pin_id, i;
|
|
||||||
struct sc_asn1_entry EstablishPACEChannelInput_data[count_data];
|
|
||||||
struct sc_asn1_entry EstablishPACEChannel[count_sequence];
|
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannel,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannel+i,
|
EstablishPACEChannel);
|
||||||
EstablishPACEChannel+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannel,
|
sc_format_asn1_entry(EstablishPACEChannel,
|
||||||
EstablishPACEChannelInput_data, 0, 0);
|
EstablishPACEChannelInput_data, 0, 0);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannelInput_data,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannelInput_data+i,
|
EstablishPACEChannelInput_data);
|
||||||
EstablishPACEChannelInput_data+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannelInput_data+0,
|
sc_format_asn1_entry(EstablishPACEChannelInput_data+0,
|
||||||
&input->pin_id, &pin_id_len, 0);
|
&input->pin_id, &pin_id_len, 0);
|
||||||
sc_format_asn1_entry(EstablishPACEChannelInput_data+1,
|
sc_format_asn1_entry(EstablishPACEChannelInput_data+1,
|
||||||
@@ -158,27 +150,23 @@ int boxing_pace_output_to_buf(sc_context_t *ctx,
|
|||||||
const struct establish_pace_channel_output *output,
|
const struct establish_pace_channel_output *output,
|
||||||
unsigned char **asn1, size_t *asn1_len)
|
unsigned char **asn1, size_t *asn1_len)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
|
||||||
sizeof g_EstablishPACEChannelOutput_data/
|
|
||||||
sizeof *g_EstablishPACEChannelOutput_data;
|
|
||||||
const size_t count_sequence =
|
|
||||||
sizeof g_EstablishPACEChannel/
|
|
||||||
sizeof *g_EstablishPACEChannel;
|
|
||||||
uint16_t status_mse_set_at = ((output->mse_set_at_sw1 & 0xff) << 8) | output->mse_set_at_sw2;
|
uint16_t status_mse_set_at = ((output->mse_set_at_sw1 & 0xff) << 8) | output->mse_set_at_sw2;
|
||||||
size_t i, result_len = sizeof output->result,
|
size_t result_len = sizeof output->result,
|
||||||
status_mse_set_at_len = sizeof status_mse_set_at;
|
status_mse_set_at_len = sizeof status_mse_set_at;
|
||||||
struct sc_asn1_entry EstablishPACEChannelOutput_data[count_data];
|
struct sc_asn1_entry EstablishPACEChannelOutput_data[
|
||||||
struct sc_asn1_entry EstablishPACEChannel[count_sequence];
|
sizeof g_EstablishPACEChannelOutput_data/
|
||||||
|
sizeof *g_EstablishPACEChannelOutput_data];
|
||||||
|
struct sc_asn1_entry EstablishPACEChannel[
|
||||||
|
sizeof g_EstablishPACEChannel/
|
||||||
|
sizeof *g_EstablishPACEChannel];
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannel,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannel+i,
|
EstablishPACEChannel);
|
||||||
EstablishPACEChannel+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannel,
|
sc_format_asn1_entry(EstablishPACEChannel,
|
||||||
EstablishPACEChannelOutput_data, 0, 1);
|
EstablishPACEChannelOutput_data, 0, 1);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannelOutput_data,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannelOutput_data+i,
|
EstablishPACEChannelOutput_data);
|
||||||
EstablishPACEChannelOutput_data+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannelOutput_data+0,
|
sc_format_asn1_entry(EstablishPACEChannelOutput_data+0,
|
||||||
(unsigned char *) &output->result, &result_len, 1);
|
(unsigned char *) &output->result, &result_len, 1);
|
||||||
sc_format_asn1_entry(EstablishPACEChannelOutput_data+1,
|
sc_format_asn1_entry(EstablishPACEChannelOutput_data+1,
|
||||||
@@ -203,27 +191,23 @@ int boxing_buf_to_pace_output(sc_context_t *ctx,
|
|||||||
const unsigned char *asn1, size_t asn1_len,
|
const unsigned char *asn1, size_t asn1_len,
|
||||||
struct establish_pace_channel_output *output)
|
struct establish_pace_channel_output *output)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
|
||||||
sizeof g_EstablishPACEChannelOutput_data/
|
|
||||||
sizeof *g_EstablishPACEChannelOutput_data;
|
|
||||||
const size_t count_sequence =
|
|
||||||
sizeof g_EstablishPACEChannel/
|
|
||||||
sizeof *g_EstablishPACEChannel;
|
|
||||||
uint16_t status_mse_set_at;
|
uint16_t status_mse_set_at;
|
||||||
size_t i, result_len = sizeof output->result,
|
size_t result_len = sizeof output->result,
|
||||||
status_mse_set_at_len = sizeof status_mse_set_at;
|
status_mse_set_at_len = sizeof status_mse_set_at;
|
||||||
struct sc_asn1_entry EstablishPACEChannelOutput_data[count_data];
|
struct sc_asn1_entry EstablishPACEChannelOutput_data[
|
||||||
struct sc_asn1_entry EstablishPACEChannel[count_sequence];
|
sizeof g_EstablishPACEChannelOutput_data/
|
||||||
|
sizeof *g_EstablishPACEChannelOutput_data];
|
||||||
|
struct sc_asn1_entry EstablishPACEChannel[
|
||||||
|
sizeof g_EstablishPACEChannel/
|
||||||
|
sizeof *g_EstablishPACEChannel];
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannel,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannel+i,
|
EstablishPACEChannel);
|
||||||
EstablishPACEChannel+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannel,
|
sc_format_asn1_entry(EstablishPACEChannel,
|
||||||
EstablishPACEChannelOutput_data, 0, 0);
|
EstablishPACEChannelOutput_data, 0, 0);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannelOutput_data,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannelOutput_data+i,
|
EstablishPACEChannelOutput_data);
|
||||||
EstablishPACEChannelOutput_data+i);
|
|
||||||
sc_format_asn1_entry(EstablishPACEChannelOutput_data+0,
|
sc_format_asn1_entry(EstablishPACEChannelOutput_data+0,
|
||||||
&output->result, &result_len, 0);
|
&output->result, &result_len, 0);
|
||||||
sc_format_asn1_entry(EstablishPACEChannelOutput_data+1,
|
sc_format_asn1_entry(EstablishPACEChannelOutput_data+1,
|
||||||
@@ -337,27 +321,22 @@ int boxing_buf_to_pace_capabilities(sc_context_t *ctx,
|
|||||||
const unsigned char *asn1, size_t asn1_len,
|
const unsigned char *asn1, size_t asn1_len,
|
||||||
unsigned long *sc_reader_t_capabilities)
|
unsigned long *sc_reader_t_capabilities)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
|
||||||
sizeof g_PACECapabilities_data/
|
|
||||||
sizeof *g_PACECapabilities_data;
|
|
||||||
const size_t count_sequence =
|
|
||||||
sizeof g_PACECapabilities/
|
|
||||||
sizeof *g_PACECapabilities;
|
|
||||||
int capabilityPACE = 0, capabilityEID = 0, capabilityESign = 0,
|
int capabilityPACE = 0, capabilityEID = 0, capabilityESign = 0,
|
||||||
capabilityDestroy = 0;
|
capabilityDestroy = 0;
|
||||||
size_t i;
|
struct sc_asn1_entry PACECapabilities_data[
|
||||||
struct sc_asn1_entry PACECapabilities_data[count_data];
|
sizeof g_PACECapabilities_data/
|
||||||
struct sc_asn1_entry PACECapabilities[count_sequence];
|
sizeof *g_PACECapabilities_data];
|
||||||
|
struct sc_asn1_entry PACECapabilities[
|
||||||
|
sizeof g_PACECapabilities/
|
||||||
|
sizeof *g_PACECapabilities];
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_PACECapabilities,
|
||||||
sc_copy_asn1_entry(g_PACECapabilities+i,
|
PACECapabilities);
|
||||||
PACECapabilities+i);
|
|
||||||
sc_format_asn1_entry(PACECapabilities,
|
sc_format_asn1_entry(PACECapabilities,
|
||||||
PACECapabilities_data, 0, 1);
|
PACECapabilities_data, 0, 1);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_PACECapabilities_data,
|
||||||
sc_copy_asn1_entry(g_PACECapabilities_data+i,
|
PACECapabilities_data);
|
||||||
PACECapabilities_data+i);
|
|
||||||
sc_format_asn1_entry(PACECapabilities_data+0,
|
sc_format_asn1_entry(PACECapabilities_data+0,
|
||||||
&capabilityPACE, NULL, 0);
|
&capabilityPACE, NULL, 0);
|
||||||
sc_format_asn1_entry(PACECapabilities_data+1,
|
sc_format_asn1_entry(PACECapabilities_data+1,
|
||||||
@@ -394,26 +373,21 @@ int boxing_pace_capabilities_to_buf(sc_context_t *ctx,
|
|||||||
const unsigned long sc_reader_t_capabilities,
|
const unsigned long sc_reader_t_capabilities,
|
||||||
unsigned char **asn1, size_t *asn1_len)
|
unsigned char **asn1, size_t *asn1_len)
|
||||||
{
|
{
|
||||||
const size_t count_data =
|
|
||||||
sizeof g_PACECapabilities_data/
|
|
||||||
sizeof *g_PACECapabilities_data;
|
|
||||||
const size_t count_sequence =
|
|
||||||
sizeof g_PACECapabilities/
|
|
||||||
sizeof *g_PACECapabilities;
|
|
||||||
int yes = 1, no = 0;
|
int yes = 1, no = 0;
|
||||||
size_t i;
|
struct sc_asn1_entry PACECapabilities_data[
|
||||||
struct sc_asn1_entry PACECapabilities_data[count_data];
|
sizeof g_PACECapabilities_data/
|
||||||
struct sc_asn1_entry PACECapabilities[count_sequence];
|
sizeof *g_PACECapabilities_data];
|
||||||
|
struct sc_asn1_entry PACECapabilities[
|
||||||
|
sizeof g_PACECapabilities/
|
||||||
|
sizeof *g_PACECapabilities];
|
||||||
|
|
||||||
for (i = 0; i < count_sequence; i++)
|
sc_copy_asn1_entry(g_EstablishPACEChannel,
|
||||||
sc_copy_asn1_entry(g_EstablishPACEChannel+i,
|
PACECapabilities);
|
||||||
PACECapabilities+i);
|
|
||||||
sc_format_asn1_entry(PACECapabilities,
|
sc_format_asn1_entry(PACECapabilities,
|
||||||
PACECapabilities_data, 0, 1);
|
PACECapabilities_data, 0, 1);
|
||||||
|
|
||||||
for (i = 0; i < count_data; i++)
|
sc_copy_asn1_entry(g_PACECapabilities_data,
|
||||||
sc_copy_asn1_entry(g_PACECapabilities_data+i,
|
PACECapabilities_data);
|
||||||
PACECapabilities_data+i);
|
|
||||||
if (sc_reader_t_capabilities & SC_READER_CAP_PACE_GENERIC)
|
if (sc_reader_t_capabilities & SC_READER_CAP_PACE_GENERIC)
|
||||||
sc_format_asn1_entry(PACECapabilities_data+0,
|
sc_format_asn1_entry(PACECapabilities_data+0,
|
||||||
&yes, NULL, 1);
|
&yes, NULL, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user