X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fpkcs12%2Fp12_attr.c;h=e4d9c256470334e5515a5256c33b010470d3c0f4;hp=49b9a88db46c581e0fccfb9a0ea7424f6c214d3d;hb=0bcb17a7776b7f740e855932890edfb7acfd7124;hpb=ee0508d4114e2b2291953a7d4c81a09b624b8821 diff --git a/crypto/pkcs12/p12_attr.c b/crypto/pkcs12/p12_attr.c index 49b9a88db4..e4d9c25647 100644 --- a/crypto/pkcs12/p12_attr.c +++ b/crypto/pkcs12/p12_attr.c @@ -1,5 +1,5 @@ /* p12_attr.c */ -/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL +/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 1999. */ /* ==================================================================== @@ -58,185 +58,88 @@ #include #include "cryptlib.h" -#include "pkcs12.h" +#include /* Add a local keyid to a safebag */ -int PKCS12_add_localkeyid (bag, name, namelen) -PKCS12_SAFEBAG *bag; -unsigned char *name; -int namelen; +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen) { - X509_ATTRIBUTE *attrib; - ASN1_BMPSTRING *oct; - ASN1_TYPE *keyid; - if (!(keyid = ASN1_TYPE_new ())) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); - return 0; - } - keyid->type = V_ASN1_OCTET_STRING; - if (!(oct = ASN1_OCTET_STRING_new())) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); - return 0; - } - if (!ASN1_OCTET_STRING_set(oct, name, namelen)) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); - return 0; - } - keyid->value.octet_string = oct; - if (!(attrib = X509_ATTRIBUTE_new ())) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); - return 0; - } - M_ASN1_OBJECT_set(attrib->object, NID_localKeyID); - if (!(attrib->value.set = sk_new(NULL))) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); - return 0; - } - sk_push (attrib->value.set, (char *)keyid); - attrib->set = 1; - if (!bag->attrib && !(bag->attrib = sk_new (NULL))) { - PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE); + if (X509at_add1_attr_by_NID(&bag->attrib, NID_localKeyID, + V_ASN1_OCTET_STRING, name, namelen)) + return 1; + else return 0; - } - sk_push (bag->attrib, (char *)attrib); - return 1; } /* Add key usage to PKCS#8 structure */ -int PKCS8_add_keyusage (p8, usage) -PKCS8_PRIV_KEY_INFO *p8; -int usage; +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage) { - X509_ATTRIBUTE *attrib; - ASN1_BIT_STRING *bstr; - ASN1_TYPE *keyid; unsigned char us_val; us_val = (unsigned char) usage; - if (!(keyid = ASN1_TYPE_new ())) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); - return 0; - } - keyid->type = V_ASN1_BIT_STRING; - if (!(bstr = ASN1_BIT_STRING_new())) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); - return 0; - } - if (!ASN1_BIT_STRING_set(bstr, &us_val, 1)) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); - return 0; - } - keyid->value.bit_string = bstr; - if (!(attrib = X509_ATTRIBUTE_new ())) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); - return 0; - } - M_ASN1_OBJECT_set(attrib->object, NID_key_usage); - if (!(attrib->value.set = sk_new(NULL))) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); - return 0; - } - sk_push (attrib->value.set, (char *)keyid); - attrib->set = 1; - if (!p8->attributes && !(p8->attributes = sk_new (NULL))) { - PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE); + if (X509at_add1_attr_by_NID(&p8->attributes, NID_key_usage, + V_ASN1_BIT_STRING, &us_val, 1)) + return 1; + else return 0; - } - sk_push (p8->attributes, (char *)attrib); - return 1; } /* Add a friendlyname to a safebag */ -int PKCS12_add_friendlyname_asc (bag, name, namelen) -PKCS12_SAFEBAG *bag; -unsigned char *name; -int namelen; +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen) { - unsigned char *uniname; - int ret, unilen; - if (!asc2uni(name, &uniname, &unilen)) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_ASC,ERR_R_MALLOC_FAILURE); + if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName, + MBSTRING_ASC, (unsigned char *)name, namelen)) + return 1; + else return 0; - } - ret = PKCS12_add_friendlyname_uni (bag, uniname, unilen); - Free(uniname); - return ret; } - -int PKCS12_add_friendlyname_uni (bag, name, namelen) -PKCS12_SAFEBAG *bag; -unsigned char *name; -int namelen; + +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen) { - X509_ATTRIBUTE *attrib; - ASN1_BMPSTRING *bmp; - ASN1_TYPE *fname; - /* Zap ending double null if included */ - if(!name[namelen - 1] && !name[namelen - 2]) namelen -= 2; - if (!(fname = ASN1_TYPE_new ())) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE); - return 0; - } - fname->type = V_ASN1_BMPSTRING; - if (!(bmp = ASN1_BMPSTRING_new())) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE); - return 0; - } - if (!(bmp->data = Malloc (namelen))) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE); - return 0; - } - memcpy (bmp->data, name, namelen); - bmp->length = namelen; - fname->value.bmpstring = bmp; - if (!(attrib = X509_ATTRIBUTE_new ())) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE); - return 0; - } - M_ASN1_OBJECT_set(attrib->object, NID_friendlyName); - if (!(attrib->value.set = sk_new(NULL))) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME,ERR_R_MALLOC_FAILURE); + if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName, + MBSTRING_BMP, name, namelen)) + return 1; + else return 0; - } - sk_push (attrib->value.set, (char *)fname); - attrib->set = 1; - if (!bag->attrib && !(bag->attrib = sk_new (NULL))) { - PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI, ERR_R_MALLOC_FAILURE); +} + +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen) +{ + if (X509at_add1_attr_by_NID(&bag->attrib, NID_ms_csp_name, + MBSTRING_ASC, (unsigned char *)name, namelen)) + return 1; + else return 0; - } - sk_push (bag->attrib, (char *)attrib); - return PKCS12_OK; } -ASN1_TYPE *PKCS12_get_attr_gen (attrs, attr_nid) -STACK *attrs; -int attr_nid; +ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid) { X509_ATTRIBUTE *attrib; int i; if (!attrs) return NULL; - for (i = 0; i < sk_num (attrs); i++) { - attrib = (X509_ATTRIBUTE *) sk_value (attrs, i); + for (i = 0; i < sk_X509_ATTRIBUTE_num (attrs); i++) { + attrib = sk_X509_ATTRIBUTE_value (attrs, i); if (OBJ_obj2nid (attrib->object) == attr_nid) { - if (sk_num (attrib->value.set)) - return (ASN1_TYPE *) - sk_value (attrib->value.set, 0); + if (sk_ASN1_TYPE_num (attrib->value.set)) + return sk_ASN1_TYPE_value(attrib->value.set, 0); else return NULL; } } return NULL; } -char *PKCS12_get_friendlyname(bag) -PKCS12_SAFEBAG *bag; +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag) { ASN1_TYPE *atype; if (!(atype = PKCS12_get_attr(bag, NID_friendlyName))) return NULL; if (atype->type != V_ASN1_BMPSTRING) return NULL; - return uni2asc(atype->value.bmpstring->data, + return OPENSSL_uni2asc(atype->value.bmpstring->data, atype->value.bmpstring->length); }