- changed \\e back to \e in sc_log.c
- changed function prototypes in sc-asn1.c (int --> size_t) git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@126 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
5cdd262385
commit
68928ae520
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
|
|
||||||
static int asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
static int asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *len_left,
|
const u8 *in, size_t len, const u8 **newp, size_t *len_left,
|
||||||
int choice, int depth);
|
int choice, int depth);
|
||||||
|
|
||||||
const char *tag2str(int tag)
|
const char *tag2str(int tag)
|
||||||
|
@ -50,12 +50,12 @@ const char *tag2str(int tag)
|
||||||
return tags[tag];
|
return tags[tag];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_tag(const u8 ** buf,
|
static int read_tag(const u8 ** buf, size_t buflen, unsigned int *cla_out,
|
||||||
int buflen, int *cla_out, int *tag_out, int *taglen)
|
unsigned int *tag_out, size_t *taglen)
|
||||||
{
|
{
|
||||||
const u8 *p = *buf;
|
const u8 *p = *buf;
|
||||||
int left = buflen;
|
size_t left = buflen, len;
|
||||||
int cla, tag, len, i;
|
unsigned int cla, tag, i;
|
||||||
|
|
||||||
if (left < 2)
|
if (left < 2)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -73,7 +73,7 @@ static int read_tag(const u8 ** buf,
|
||||||
goto error;
|
goto error;
|
||||||
len = *p & 0x7f;
|
len = *p & 0x7f;
|
||||||
if (*p++ & 0x80) {
|
if (*p++ & 0x80) {
|
||||||
int a = 0;
|
unsigned int a = 0;
|
||||||
if (len > 4) {
|
if (len > 4) {
|
||||||
fprintf(stderr, "ASN.1 tag too long!\n");
|
fprintf(stderr, "ASN.1 tag too long!\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -94,7 +94,7 @@ static int read_tag(const u8 ** buf,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sc_asn1_print_octet_string(const u8 * buf, int buflen)
|
static void sc_asn1_print_octet_string(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ static void sc_asn1_print_octet_string(const u8 * buf, int buflen)
|
||||||
printf("%02X", buf[i]);
|
printf("%02X", buf[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sc_asn1_print_utf8string(const u8 * buf, int buflen)
|
static void sc_asn1_print_utf8string(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ static void sc_asn1_print_utf8string(const u8 * buf, int buflen)
|
||||||
printf("%c", buf[i]);
|
printf("%c", buf[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sc_asn1_print_integer(const u8 * buf, int buflen)
|
static void sc_asn1_print_integer(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
long long a = 0;
|
long long a = 0;
|
||||||
int i;
|
int i;
|
||||||
|
@ -126,7 +126,7 @@ static void sc_asn1_print_integer(const u8 * buf, int buflen)
|
||||||
printf("%lld", a);
|
printf("%lld", a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sc_asn1_print_bit_string(const u8 * buf, int buflen)
|
static void sc_asn1_print_bit_string(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
unsigned long long a = 0;
|
unsigned long long a = 0;
|
||||||
int i, r;
|
int i, r;
|
||||||
|
@ -145,7 +145,7 @@ static void sc_asn1_print_bit_string(const u8 * buf, int buflen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sc_asn1_print_object_id(const u8 * buf, int buflen)
|
static void sc_asn1_print_object_id(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct sc_object_id oid;
|
struct sc_object_id oid;
|
||||||
|
@ -168,10 +168,11 @@ static void sc_asn1_print_object_id(const u8 * buf, int buflen)
|
||||||
printf("%s", sbuf);
|
printf("%s", sbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_tags_recursive(const u8 * buf0,
|
static void print_tags_recursive(const u8 * buf0, const u8 * buf,
|
||||||
const u8 * buf, int buflen, int depth)
|
size_t buflen, int depth)
|
||||||
{
|
{
|
||||||
int i, r, bytesleft = buflen;
|
int i, r;
|
||||||
|
size_t bytesleft = buflen;
|
||||||
const char *classes[4] = {
|
const char *classes[4] = {
|
||||||
"Univ", "Appl", "Cntx", "Priv"
|
"Univ", "Appl", "Cntx", "Priv"
|
||||||
};
|
};
|
||||||
|
@ -242,7 +243,7 @@ static void print_tags_recursive(const u8 * buf0,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sc_asn1_print_tags(const u8 * buf, int buflen)
|
void sc_asn1_print_tags(const u8 * buf, size_t buflen)
|
||||||
{
|
{
|
||||||
printf("Printing tags for buffer of length %d\n", buflen);
|
printf("Printing tags for buffer of length %d\n", buflen);
|
||||||
print_tags_recursive(buf, buf, buflen, 0);
|
print_tags_recursive(buf, buf, buflen, 0);
|
||||||
|
@ -251,7 +252,8 @@ void sc_asn1_print_tags(const u8 * buf, int buflen)
|
||||||
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
||||||
size_t buflen, unsigned int tag_in, size_t *taglen_in)
|
size_t buflen, unsigned int tag_in, size_t *taglen_in)
|
||||||
{
|
{
|
||||||
int left = buflen, taglen, cla, tag;
|
size_t left = buflen, taglen;
|
||||||
|
unsigned int cla, tag;
|
||||||
const u8 *p = buf;
|
const u8 *p = buf;
|
||||||
|
|
||||||
*taglen_in = 0;
|
*taglen_in = 0;
|
||||||
|
@ -276,7 +278,8 @@ const u8 *sc_asn1_skip_tag(struct sc_context *ctx, const u8 ** buf, size_t *bufl
|
||||||
unsigned int tag_in, size_t *taglen_out)
|
unsigned int tag_in, size_t *taglen_out)
|
||||||
{
|
{
|
||||||
const u8 *p = *buf;
|
const u8 *p = *buf;
|
||||||
int len = *buflen, taglen, cla, tag;
|
size_t len = *buflen, taglen;
|
||||||
|
unsigned int cla, tag;
|
||||||
|
|
||||||
if (read_tag((const u8 **) &p, len, &cla, &tag, &taglen) != 1)
|
if (read_tag((const u8 **) &p, len, &cla, &tag, &taglen) != 1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -324,19 +327,21 @@ const u8 *sc_asn1_verify_tag(struct sc_context *ctx, const u8 * buf, size_t bufl
|
||||||
return sc_asn1_skip_tag(ctx, &buf, &buflen, tag_in, taglen_out);
|
return sc_asn1_skip_tag(ctx, &buf, &buflen, tag_in, taglen_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int decode_bit_string(const u8 * inbuf, int inlen, void *outbuf,
|
static int decode_bit_string(const u8 * inbuf, size_t inlen, void *outbuf,
|
||||||
int outlen, int invert)
|
size_t outlen, int invert)
|
||||||
{
|
{
|
||||||
const u8 *in = inbuf;
|
const u8 *in = inbuf;
|
||||||
u8 *out = (u8 *) outbuf;
|
u8 *out = (u8 *) outbuf;
|
||||||
int zero_bits = *in & 0x07;
|
int zero_bits = *in & 0x07;
|
||||||
int octets_left = inlen - 1;
|
size_t octets_left = inlen - 1;
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
|
|
||||||
memset(outbuf, 0, outlen);
|
memset(outbuf, 0, outlen);
|
||||||
in++;
|
in++;
|
||||||
if (outlen < octets_left)
|
if (outlen < octets_left)
|
||||||
return SC_ERROR_BUFFER_TOO_SMALL;
|
return SC_ERROR_BUFFER_TOO_SMALL;
|
||||||
|
if (inlen < 1)
|
||||||
|
return SC_ERROR_INVALID_ASN1_OBJECT;
|
||||||
while (octets_left) {
|
while (octets_left) {
|
||||||
/* 1st octet of input: ABCDEFGH, where A is the MSB */
|
/* 1st octet of input: ABCDEFGH, where A is the MSB */
|
||||||
/* 1st octet of output: HGFEDCBA, where A is the LSB */
|
/* 1st octet of output: HGFEDCBA, where A is the LSB */
|
||||||
|
@ -363,19 +368,19 @@ static int decode_bit_string(const u8 * inbuf, int inlen, void *outbuf,
|
||||||
return (count * 8) - zero_bits;
|
return (count * 8) - zero_bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_decode_bit_string(const u8 * inbuf,
|
int sc_asn1_decode_bit_string(const u8 * inbuf, size_t inlen,
|
||||||
int inlen, void *outbuf, int outlen)
|
void *outbuf, size_t outlen)
|
||||||
{
|
{
|
||||||
return decode_bit_string(inbuf, inlen, outbuf, outlen, 1);
|
return decode_bit_string(inbuf, inlen, outbuf, outlen, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_decode_bit_string_ni(const u8 * inbuf,
|
int sc_asn1_decode_bit_string_ni(const u8 * inbuf, size_t inlen,
|
||||||
int inlen, void *outbuf, int outlen)
|
void *outbuf, size_t outlen)
|
||||||
{
|
{
|
||||||
return decode_bit_string(inbuf, inlen, outbuf, outlen, 0);
|
return decode_bit_string(inbuf, inlen, outbuf, outlen, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_decode_integer(const u8 * inbuf, int inlen, int *out)
|
int sc_asn1_decode_integer(const u8 * inbuf, size_t inlen, int *out)
|
||||||
{
|
{
|
||||||
int i, a = 0;
|
int i, a = 0;
|
||||||
|
|
||||||
|
@ -389,7 +394,7 @@ int sc_asn1_decode_integer(const u8 * inbuf, int inlen, int *out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_decode_object_id(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_object_id(const u8 * inbuf, size_t inlen,
|
||||||
struct sc_object_id *id)
|
struct sc_object_id *id)
|
||||||
{
|
{
|
||||||
int i, a;
|
int i, a;
|
||||||
|
@ -424,8 +429,8 @@ int sc_asn1_decode_object_id(const u8 * inbuf, int inlen,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_decode_utf8string(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_utf8string(const u8 * inbuf, size_t inlen,
|
||||||
u8 *out, int *outlen)
|
u8 *out, size_t *outlen)
|
||||||
{
|
{
|
||||||
if (inlen+1 > *outlen)
|
if (inlen+1 > *outlen)
|
||||||
return SC_ERROR_BUFFER_TOO_SMALL;
|
return SC_ERROR_BUFFER_TOO_SMALL;
|
||||||
|
@ -457,12 +462,12 @@ int sc_asn1_put_tag(int tag, const u8 * data, int datalen, u8 * out, int outlen,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int asn1_parse_path(struct sc_context *ctx, const u8 *in, int len,
|
static int asn1_parse_path(struct sc_context *ctx, const u8 *in, size_t len,
|
||||||
struct sc_path *path, int depth)
|
struct sc_path *path, int depth)
|
||||||
{
|
{
|
||||||
int idx, r;
|
int idx, r;
|
||||||
struct sc_asn1_struct asn1_path[] = {
|
struct sc_asn1_struct asn1_path[] = {
|
||||||
{ "path", SC_ASN1_OCTET_STRING, ASN1_OCTET_STRING, 0, &path->value, (int *) &path->len },
|
{ "path", SC_ASN1_OCTET_STRING, ASN1_OCTET_STRING, 0, &path->value, &path->len },
|
||||||
{ "index", SC_ASN1_INTEGER, ASN1_INTEGER, SC_ASN1_OPTIONAL, &idx },
|
{ "index", SC_ASN1_INTEGER, ASN1_INTEGER, SC_ASN1_OPTIONAL, &idx },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
@ -475,13 +480,14 @@ static int asn1_parse_path(struct sc_context *ctx, const u8 *in, int len,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int asn1_parse_p15_object(struct sc_context *ctx, const u8 *in, int len,
|
static int asn1_parse_p15_object(struct sc_context *ctx, const u8 *in,
|
||||||
struct sc_pkcs15_object *obj, int depth)
|
size_t len, struct sc_pkcs15_object *obj,
|
||||||
|
int depth)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
struct sc_pkcs15_common_obj_attr *com_attr = obj->com_attr;
|
struct sc_pkcs15_common_obj_attr *com_attr = obj->com_attr;
|
||||||
int flags_len = sizeof(com_attr->flags);
|
size_t flags_len = sizeof(com_attr->flags);
|
||||||
int label_len = sizeof(com_attr->label);
|
size_t label_len = sizeof(com_attr->label);
|
||||||
struct sc_asn1_struct asn1_com_obj_attr[] = {
|
struct sc_asn1_struct asn1_com_obj_attr[] = {
|
||||||
{ "label", SC_ASN1_UTF8STRING, ASN1_UTF8STRING, SC_ASN1_OPTIONAL, com_attr->label, &label_len },
|
{ "label", SC_ASN1_UTF8STRING, ASN1_UTF8STRING, SC_ASN1_OPTIONAL, com_attr->label, &label_len },
|
||||||
{ "flags", SC_ASN1_BIT_STRING, ASN1_BIT_STRING, SC_ASN1_OPTIONAL, &com_attr->flags, &flags_len },
|
{ "flags", SC_ASN1_BIT_STRING, ASN1_BIT_STRING, SC_ASN1_OPTIONAL, &com_attr->flags, &flags_len },
|
||||||
|
@ -502,13 +508,13 @@ static int asn1_parse_p15_object(struct sc_context *ctx, const u8 *in, int len,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int asn1_decode_entry(struct sc_context *ctx, struct sc_asn1_struct *entry,
|
static int asn1_decode_entry(struct sc_context *ctx, struct sc_asn1_struct *entry,
|
||||||
const u8 *obj, int objlen, int depth)
|
const u8 *obj, size_t objlen, int depth)
|
||||||
{
|
{
|
||||||
void *parm = entry->parm;
|
void *parm = entry->parm;
|
||||||
int (*callback_func)(struct sc_context *ctx, void *arg, const u8 *obj,
|
int (*callback_func)(struct sc_context *ctx, void *arg, const u8 *obj,
|
||||||
int objlen, int depth) =
|
int objlen, int depth) =
|
||||||
(int (*)(struct sc_context *, void *, const u8 *, int, int)) parm;
|
(int (*)(struct sc_context *, void *, const u8 *, int, int)) parm;
|
||||||
int *len = (int *) entry->arg;
|
size_t *len = (size_t *) entry->arg;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
if (ctx->debug >= 3) {
|
if (ctx->debug >= 3) {
|
||||||
|
@ -549,6 +555,10 @@ static int asn1_decode_entry(struct sc_context *ctx, struct sc_asn1_struct *entr
|
||||||
if (parm != NULL) {
|
if (parm != NULL) {
|
||||||
int invert = entry->type == SC_ASN1_BIT_STRING ? 1 : 0;
|
int invert = entry->type == SC_ASN1_BIT_STRING ? 1 : 0;
|
||||||
assert(len != NULL);
|
assert(len != NULL);
|
||||||
|
if (objlen < 1) {
|
||||||
|
r = SC_ERROR_INVALID_ASN1_OBJECT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (entry->flags & SC_ASN1_ALLOC) {
|
if (entry->flags & SC_ASN1_ALLOC) {
|
||||||
u8 **buf = (u8 **) parm;
|
u8 **buf = (u8 **) parm;
|
||||||
*buf = malloc(objlen-1);
|
*buf = malloc(objlen-1);
|
||||||
|
@ -641,7 +651,7 @@ static int asn1_decode_entry(struct sc_context *ctx, struct sc_asn1_struct *entr
|
||||||
}
|
}
|
||||||
|
|
||||||
static int asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
static int asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *len_left,
|
const u8 *in, size_t len, const u8 **newp, size_t *len_left,
|
||||||
int choice, int depth)
|
int choice, int depth)
|
||||||
{
|
{
|
||||||
int r, idx = 0;
|
int r, idx = 0;
|
||||||
|
@ -700,13 +710,13 @@ static int asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *len_left)
|
const u8 *in, size_t len, const u8 **newp, size_t *len_left)
|
||||||
{
|
{
|
||||||
return asn1_parse(ctx, asn1, in, len, newp, len_left, 0, 0);
|
return asn1_parse(ctx, asn1, in, len, newp, len_left, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *len_left)
|
const u8 *in, size_t len, const u8 **newp, size_t *len_left)
|
||||||
{
|
{
|
||||||
return asn1_parse(ctx, asn1, in, len, newp, len_left, 1, 0);
|
return asn1_parse(ctx, asn1, in, len, newp, len_left, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,9 @@ struct sc_pkcs15_object {
|
||||||
/* DER tag and length parsing */
|
/* DER tag and length parsing */
|
||||||
|
|
||||||
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *left);
|
const u8 *in, size_t len, const u8 **newp, size_t *left);
|
||||||
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *left);
|
const u8 *in, size_t len, const u8 **newp, size_t *left);
|
||||||
|
|
||||||
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
||||||
size_t buflen, unsigned int tag, size_t *taglen);
|
size_t buflen, unsigned int tag, size_t *taglen);
|
||||||
|
@ -61,19 +61,20 @@ const u8 *sc_asn1_skip_tag(struct sc_context *ctx, const u8 ** buf,
|
||||||
int sc_asn1_put_tag(int tag, const u8 * data, int datalen, u8 * out, int outlen, u8 ** ptr);
|
int sc_asn1_put_tag(int tag, const u8 * data, int datalen, u8 * out, int outlen, u8 ** ptr);
|
||||||
|
|
||||||
/* ASN.1 printing functions */
|
/* ASN.1 printing functions */
|
||||||
void sc_asn1_print_tags(const u8 * buf, int buflen);
|
void sc_asn1_print_tags(const u8 * buf, size_t buflen);
|
||||||
|
|
||||||
/* ASN.1 object decoding functions */
|
/* ASN.1 object decoding functions */
|
||||||
int sc_asn1_utf8string_to_ascii(const u8 * buf, int buflen,
|
int sc_asn1_utf8string_to_ascii(const u8 * buf, size_t buflen,
|
||||||
u8 * outbuf, int outlen);
|
u8 * outbuf, size_t outlen);
|
||||||
int sc_asn1_decode_bit_string(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_bit_string(const u8 * inbuf, size_t inlen,
|
||||||
void *outbuf, int outlen);
|
void *outbuf, size_t outlen);
|
||||||
/* non-inverting version */
|
/* non-inverting version */
|
||||||
int sc_asn1_decode_bit_string_ni(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_bit_string_ni(const u8 * inbuf, size_t inlen,
|
||||||
void *outbuf, int outlen);
|
void *outbuf, size_t outlen);
|
||||||
int sc_asn1_decode_integer(const u8 * inbuf, int inlen, int *out);
|
int sc_asn1_decode_integer(const u8 * inbuf, size_t inlen, int *out);
|
||||||
int sc_asn1_decode_object_id(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_object_id(const u8 * inbuf, size_t inlen,
|
||||||
struct sc_object_id *id);
|
struct sc_object_id *id);
|
||||||
|
|
||||||
#define SC_ASN1_CLASS_MASK 0x30000000
|
#define SC_ASN1_CLASS_MASK 0x30000000
|
||||||
#define SC_ASN1_UNI 0x00000000 /* Universal */
|
#define SC_ASN1_UNI 0x00000000 /* Universal */
|
||||||
#define SC_ASN1_APP 0x10000000 /* Application */
|
#define SC_ASN1_APP 0x10000000 /* Application */
|
||||||
|
|
|
@ -82,7 +82,7 @@ static int parse_flex_sf_reply(struct sc_context *ctx, const u8 *buf, int buflen
|
||||||
file->size = (b1 << 8) + b2;
|
file->size = (b1 << 8) + b2;
|
||||||
b1 = *p++;
|
b1 = *p++;
|
||||||
b2 = *p++;
|
b2 = *p++;
|
||||||
file->id = (b1) + b2;
|
file->id = (b1 << 8) + b2;
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case 0x01:
|
case 0x01:
|
||||||
file->type = SC_FILE_TYPE_WORKING_EF;
|
file->type = SC_FILE_TYPE_WORKING_EF;
|
||||||
|
|
|
@ -110,18 +110,18 @@ void do_log2(struct sc_context *ctx, int type, const char *file,
|
||||||
if (do_color && !isatty(fileno(outf)))
|
if (do_color && !isatty(fileno(outf)))
|
||||||
do_color = 0;
|
do_color = 0;
|
||||||
if (do_color) {
|
if (do_color) {
|
||||||
color_sfx = "\\e[0m";
|
color_sfx = "\e[0m";
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SC_LOG_TYPE_ERROR:
|
case SC_LOG_TYPE_ERROR:
|
||||||
color_pfx = "\\e[01;31m";
|
color_pfx = "\e[01;31m";
|
||||||
break;
|
break;
|
||||||
#if 0
|
#if 0
|
||||||
case SC_LOG_TYPE_NORMAL:
|
case SC_LOG_TYPE_NORMAL:
|
||||||
color_pfx = "\\e[01;33m";
|
color_pfx = "\e[01;33m";
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case SC_LOG_TYPE_DEBUG:
|
case SC_LOG_TYPE_DEBUG:
|
||||||
color_pfx = "\\e[00;32m";
|
color_pfx = "\e[00;32m";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,9 @@ struct sc_pkcs15_object {
|
||||||
/* DER tag and length parsing */
|
/* DER tag and length parsing */
|
||||||
|
|
||||||
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *left);
|
const u8 *in, size_t len, const u8 **newp, size_t *left);
|
||||||
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
int sc_asn1_parse_choice(struct sc_context *ctx, struct sc_asn1_struct *asn1,
|
||||||
const u8 *in, int len, const u8 **newp, int *left);
|
const u8 *in, size_t len, const u8 **newp, size_t *left);
|
||||||
|
|
||||||
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
const u8 *sc_asn1_find_tag(struct sc_context *ctx, const u8 * buf,
|
||||||
size_t buflen, unsigned int tag, size_t *taglen);
|
size_t buflen, unsigned int tag, size_t *taglen);
|
||||||
|
@ -61,19 +61,20 @@ const u8 *sc_asn1_skip_tag(struct sc_context *ctx, const u8 ** buf,
|
||||||
int sc_asn1_put_tag(int tag, const u8 * data, int datalen, u8 * out, int outlen, u8 ** ptr);
|
int sc_asn1_put_tag(int tag, const u8 * data, int datalen, u8 * out, int outlen, u8 ** ptr);
|
||||||
|
|
||||||
/* ASN.1 printing functions */
|
/* ASN.1 printing functions */
|
||||||
void sc_asn1_print_tags(const u8 * buf, int buflen);
|
void sc_asn1_print_tags(const u8 * buf, size_t buflen);
|
||||||
|
|
||||||
/* ASN.1 object decoding functions */
|
/* ASN.1 object decoding functions */
|
||||||
int sc_asn1_utf8string_to_ascii(const u8 * buf, int buflen,
|
int sc_asn1_utf8string_to_ascii(const u8 * buf, size_t buflen,
|
||||||
u8 * outbuf, int outlen);
|
u8 * outbuf, size_t outlen);
|
||||||
int sc_asn1_decode_bit_string(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_bit_string(const u8 * inbuf, size_t inlen,
|
||||||
void *outbuf, int outlen);
|
void *outbuf, size_t outlen);
|
||||||
/* non-inverting version */
|
/* non-inverting version */
|
||||||
int sc_asn1_decode_bit_string_ni(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_bit_string_ni(const u8 * inbuf, size_t inlen,
|
||||||
void *outbuf, int outlen);
|
void *outbuf, size_t outlen);
|
||||||
int sc_asn1_decode_integer(const u8 * inbuf, int inlen, int *out);
|
int sc_asn1_decode_integer(const u8 * inbuf, size_t inlen, int *out);
|
||||||
int sc_asn1_decode_object_id(const u8 * inbuf, int inlen,
|
int sc_asn1_decode_object_id(const u8 * inbuf, size_t inlen,
|
||||||
struct sc_object_id *id);
|
struct sc_object_id *id);
|
||||||
|
|
||||||
#define SC_ASN1_CLASS_MASK 0x30000000
|
#define SC_ASN1_CLASS_MASK 0x30000000
|
||||||
#define SC_ASN1_UNI 0x00000000 /* Universal */
|
#define SC_ASN1_UNI 0x00000000 /* Universal */
|
||||||
#define SC_ASN1_APP 0x10000000 /* Application */
|
#define SC_ASN1_APP 0x10000000 /* Application */
|
||||||
|
|
Loading…
Reference in New Issue