mirror of
https://github.com/estkme-group/lpac
synced 2024-07-04 15:56:42 +02:00
[Not-Tested] Fix for 18-digit iccid
This commit is contained in:
parent
f521c455dc
commit
57e5e31ce9
|
@ -651,7 +651,7 @@ int es10b_authenticate_server_r(struct euicc_ctx *ctx, uint8_t **transaction_id,
|
|||
{
|
||||
int imei_len;
|
||||
|
||||
imei_len = euicc_hexutil_gsmbcd2bin(imei, sizeof(imei), param_user->imei);
|
||||
imei_len = euicc_hexutil_gsmbcd2bin(imei, sizeof(imei), param_user->imei, 0);
|
||||
if (imei_len < 0)
|
||||
{
|
||||
goto err;
|
||||
|
|
|
@ -222,7 +222,7 @@ static int es10c_enable_disable_delete_profile(struct euicc_ctx *ctx, uint16_t o
|
|||
}
|
||||
else
|
||||
{
|
||||
if ((id_len = euicc_hexutil_gsmbcd2bin(id, sizeof(id), str_id)) < 0)
|
||||
if ((id_len = euicc_hexutil_gsmbcd2bin(id, sizeof(id), str_id, 10)) < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
@ -447,7 +447,7 @@ int es10c_set_nickname(struct euicc_ctx *ctx, const char *iccid, const char *pro
|
|||
memset(&n_iccid, 0, sizeof(n_iccid));
|
||||
memset(&n_profileNickname, 0, sizeof(n_profileNickname));
|
||||
|
||||
if (euicc_hexutil_gsmbcd2bin(asn1iccid, sizeof(asn1iccid), iccid) < 0)
|
||||
if (euicc_hexutil_gsmbcd2bin(asn1iccid, sizeof(asn1iccid), iccid, 10) < 0)
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ int euicc_hexutil_hex2bin_r(uint8_t *output, uint32_t output_len, const char *st
|
|||
return length;
|
||||
}
|
||||
|
||||
int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *str)
|
||||
int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *str, uint32_t padding_to)
|
||||
{
|
||||
uint32_t str_length;
|
||||
uint32_t idx = 0;
|
||||
|
@ -106,6 +106,11 @@ int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *s
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (output_len < padding_to)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < str_length; i += 2)
|
||||
{
|
||||
char high_nibble = (i + 1 < str_length) ? str[i + 1] : 'F';
|
||||
|
@ -132,31 +137,37 @@ int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *s
|
|||
idx++;
|
||||
}
|
||||
|
||||
for (; idx < padding_to; idx++)
|
||||
{
|
||||
output[idx] = 0xFF;
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
int euicc_hexutil_bin2gsmbcd(char *output, uint32_t output_len, const uint8_t *binData, uint32_t length)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
if (euicc_hexutil_bin2hex(output, output_len, binData, length))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
length = strlen(output);
|
||||
for (uint32_t i = 0; i < length - 1; i += 2)
|
||||
for (int i = 0; i < length - 1; i += 2)
|
||||
{
|
||||
char temp = output[i];
|
||||
output[j++] = output[i + 1];
|
||||
output[j++] = temp;
|
||||
output[i] = output[i + 1];
|
||||
output[i + 1] = temp;
|
||||
}
|
||||
|
||||
if (j > 0 && output[j - 1] == 'f')
|
||||
for (int i = length - 1; i >= 0; i--)
|
||||
{
|
||||
j--;
|
||||
if (output[i] != 'f')
|
||||
{
|
||||
break;
|
||||
}
|
||||
output[i] = '\0';
|
||||
}
|
||||
output[j] = '\0';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
int euicc_hexutil_hex2bin_r(uint8_t *output, uint32_t output_len, const char *str, uint32_t str_len);
|
||||
int euicc_hexutil_hex2bin(uint8_t *output, uint32_t output_len, const char *str);
|
||||
int euicc_hexutil_bin2hex(char *output, uint32_t output_len, const uint8_t *bin, uint32_t bin_len);
|
||||
int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *str);
|
||||
int euicc_hexutil_gsmbcd2bin(uint8_t *output, uint32_t output_len, const char *str, uint32_t padding_to);
|
||||
int euicc_hexutil_bin2gsmbcd(char *output, uint32_t output_len, const uint8_t *binData, uint32_t length);
|
||||
|
|
Loading…
Reference in a new issue