mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-18 03:00:58 +08:00
fix cid 395628 - make local copy. Odd that it frees it
This commit is contained in:
parent
742194896d
commit
88b583417e
1 changed files with 19 additions and 6 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue