fix cid 395628 - make local copy. Odd that it frees it

This commit is contained in:
iceman1001 2022-07-06 12:34:18 +02:00
parent 742194896d
commit 88b583417e

View file

@ -20,19 +20,29 @@
#include <ctype.h> #include <ctype.h>
#include <stdlib.h> #include <stdlib.h>
#include <mbedtls/asn1.h> #include <mbedtls/asn1.h>
#include "ui.h" // Print... #include <string.h> // memcpy
#include "ui.h" // Print...
#include "emv/tlv.h" #include "emv/tlv.h"
#include "asn1dump.h" #include "asn1dump.h"
#include "util.h" #include "util.h"
int ecdsa_asn1_get_signature(uint8_t *signature, size_t signaturelen, uint8_t *rval, uint8_t *sval) { int ecdsa_asn1_get_signature(uint8_t *signature, size_t signaturelen, uint8_t *rval, uint8_t *sval) {
if (!signature || !signaturelen || !rval || !sval)
if (!signature || !signaturelen || !rval || !sval) {
return PM3_EINVARG; return PM3_EINVARG;
}
uint8_t *p = calloc(sizeof(uint8_t), signaturelen);
if (p == NULL) {
return PM3_EMALLOC;
}
memcpy(p, signature, signaturelen);
const unsigned char *end = p + signaturelen;
int res = PM3_SUCCESS; int res = PM3_SUCCESS;
unsigned char *p = signature; size_t len = 0;
const unsigned char *end = p + signaturelen;
size_t len;
mbedtls_mpi xmpi; mbedtls_mpi xmpi;
if ((res = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) == 0) { if ((res = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) == 0) {
@ -61,11 +71,14 @@ int ecdsa_asn1_get_signature(uint8_t *signature, size_t signaturelen, uint8_t *r
goto exit; goto exit;
// check size // check size
if (end != p) if (end != p) {
free(p);
return PM3_ESOFT; return PM3_ESOFT;
}
} }
exit: exit:
// free(p);
return res; return res;
} }