Blame crypto/pkcs12/p12_attr.c

Packit c4476c
/*
Packit c4476c
 * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
 *
Packit c4476c
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
 * this file except in compliance with the License.  You can obtain a copy
Packit c4476c
 * in the file LICENSE in the source distribution or at
Packit c4476c
 * https://www.openssl.org/source/license.html
Packit c4476c
 */
Packit c4476c
Packit c4476c
#include <stdio.h>
Packit c4476c
#include "internal/cryptlib.h"
Packit c4476c
#include <openssl/pkcs12.h>
Packit c4476c
#include "p12_local.h"
Packit c4476c
Packit c4476c
/* Add a local keyid to a safebag */
Packit c4476c
Packit c4476c
int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,
Packit c4476c
                          int namelen)
Packit c4476c
{
Packit c4476c
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_localKeyID,
Packit c4476c
                                V_ASN1_OCTET_STRING, name, namelen))
Packit c4476c
        return 1;
Packit c4476c
    else
Packit c4476c
        return 0;
Packit c4476c
}
Packit c4476c
Packit c4476c
/* Add key usage to PKCS#8 structure */
Packit c4476c
Packit c4476c
int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage)
Packit c4476c
{
Packit c4476c
    unsigned char us_val = (unsigned char)usage;
Packit c4476c
    return PKCS8_pkey_add1_attr_by_NID(p8, NID_key_usage,
Packit c4476c
                                       V_ASN1_BIT_STRING, &us_val, 1);
Packit c4476c
}
Packit c4476c
Packit c4476c
/* Add a friendlyname to a safebag */
Packit c4476c
Packit c4476c
int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
Packit c4476c
                                int namelen)
Packit c4476c
{
Packit c4476c
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
Packit c4476c
                                MBSTRING_ASC, (unsigned char *)name, namelen))
Packit c4476c
        return 1;
Packit c4476c
    else
Packit c4476c
        return 0;
Packit c4476c
}
Packit c4476c
Packit c4476c
int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name,
Packit c4476c
                                int namelen)
Packit c4476c
{
Packit c4476c
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
Packit c4476c
                                MBSTRING_UTF8, (unsigned char *)name, namelen))
Packit c4476c
        return 1;
Packit c4476c
    else
Packit c4476c
        return 0;
Packit c4476c
}
Packit c4476c
Packit c4476c
int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,
Packit c4476c
                                const unsigned char *name, int namelen)
Packit c4476c
{
Packit c4476c
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
Packit c4476c
                                MBSTRING_BMP, name, namelen))
Packit c4476c
        return 1;
Packit c4476c
    else
Packit c4476c
        return 0;
Packit c4476c
}
Packit c4476c
Packit c4476c
int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen)
Packit c4476c
{
Packit c4476c
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_ms_csp_name,
Packit c4476c
                                MBSTRING_ASC, (unsigned char *)name, namelen))
Packit c4476c
        return 1;
Packit c4476c
    else
Packit c4476c
        return 0;
Packit c4476c
}
Packit c4476c
Packit c4476c
ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs,
Packit c4476c
                               int attr_nid)
Packit c4476c
{
Packit c4476c
    X509_ATTRIBUTE *attrib;
Packit c4476c
    int i;
Packit c4476c
    i = X509at_get_attr_by_NID(attrs, attr_nid, -1);
Packit c4476c
    attrib = X509at_get_attr(attrs, i);
Packit c4476c
    return X509_ATTRIBUTE_get0_type(attrib, 0);
Packit c4476c
}
Packit c4476c
Packit c4476c
char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag)
Packit c4476c
{
Packit c4476c
    const ASN1_TYPE *atype;
Packit c4476c
Packit c4476c
    if ((atype = PKCS12_SAFEBAG_get0_attr(bag, NID_friendlyName)) == NULL)
Packit c4476c
        return NULL;
Packit c4476c
    if (atype->type != V_ASN1_BMPSTRING)
Packit c4476c
        return NULL;
Packit c4476c
    return OPENSSL_uni2utf8(atype->value.bmpstring->data,
Packit c4476c
                            atype->value.bmpstring->length);
Packit c4476c
}
Packit c4476c
Packit c4476c
const STACK_OF(X509_ATTRIBUTE) *
Packit c4476c
PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag)
Packit c4476c
{
Packit c4476c
    return bag->attrib;
Packit c4476c
}