- Keep the DER encoding of each PKCS #15 object in memory
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@761 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
3bced8aeae
commit
79b5672edc
|
@ -770,6 +770,8 @@ void sc_pkcs15_remove_object(struct sc_pkcs15_card *p15card,
|
||||||
obj->next->prev = obj->prev;
|
obj->next->prev = obj->prev;
|
||||||
if (obj->data)
|
if (obj->data)
|
||||||
free(obj->data);
|
free(obj->data);
|
||||||
|
if (obj->der.value)
|
||||||
|
free(obj->der.value);
|
||||||
free(obj);
|
free(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -908,12 +910,16 @@ int sc_pkcs15_parse_df(struct sc_pkcs15_card *p15card,
|
||||||
&buf, &bufsize, &df->file);
|
&buf, &bufsize, &df->file);
|
||||||
p = buf;
|
p = buf;
|
||||||
do {
|
do {
|
||||||
|
const u8 *oldp;
|
||||||
|
size_t obj_len;
|
||||||
|
|
||||||
obj = (struct sc_pkcs15_object *) malloc(sizeof(struct sc_pkcs15_object));
|
obj = (struct sc_pkcs15_object *) malloc(sizeof(struct sc_pkcs15_object));
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
r = SC_ERROR_OUT_OF_MEMORY;
|
r = SC_ERROR_OUT_OF_MEMORY;
|
||||||
goto ret;
|
goto ret;
|
||||||
}
|
}
|
||||||
memset(obj, 0, sizeof(struct sc_pkcs15_object));
|
memset(obj, 0, sizeof(struct sc_pkcs15_object));
|
||||||
|
oldp = p;
|
||||||
r = func(p15card, obj, &p, &bufsize);
|
r = func(p15card, obj, &p, &bufsize);
|
||||||
if (r) {
|
if (r) {
|
||||||
free(obj);
|
free(obj);
|
||||||
|
@ -922,6 +928,16 @@ int sc_pkcs15_parse_df(struct sc_pkcs15_card *p15card,
|
||||||
sc_perror(ctx, r, "Error decoding DF entry");
|
sc_perror(ctx, r, "Error decoding DF entry");
|
||||||
goto ret;
|
goto ret;
|
||||||
}
|
}
|
||||||
|
obj_len = p - oldp;
|
||||||
|
|
||||||
|
obj->der.value = malloc(obj_len);
|
||||||
|
if (obj->der.value == NULL) {
|
||||||
|
r = SC_ERROR_OUT_OF_MEMORY;
|
||||||
|
goto ret;
|
||||||
|
}
|
||||||
|
memcpy(obj->der.value, oldp, obj_len);
|
||||||
|
obj->der.len = obj_len;
|
||||||
|
|
||||||
obj->df = df;
|
obj->df = df;
|
||||||
r = sc_pkcs15_add_object(p15card, obj);
|
r = sc_pkcs15_add_object(p15card, obj);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -274,6 +274,8 @@ struct sc_pkcs15_object {
|
||||||
|
|
||||||
struct sc_pkcs15_df *df; /* can be NULL, if object is 'floating' */
|
struct sc_pkcs15_df *df; /* can be NULL, if object is 'floating' */
|
||||||
struct sc_pkcs15_object *next, *prev; /* used only internally */
|
struct sc_pkcs15_object *next, *prev; /* used only internally */
|
||||||
|
|
||||||
|
struct sc_pkcs15_der der;
|
||||||
};
|
};
|
||||||
typedef struct sc_pkcs15_object sc_pkcs15_object_t;
|
typedef struct sc_pkcs15_object sc_pkcs15_object_t;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue