p12_attr.c 2.7 KB
Newer Older
1
/*
R
Rich Salz 已提交
2
 * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
3
 *
R
Rich Salz 已提交
4 5 6 7
 * Licensed under the OpenSSL license (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
8 9 10
 */

#include <stdio.h>
11
#include "internal/cryptlib.h"
12
#include <openssl/pkcs12.h>
13
#include "p12_lcl.h"
14 15 16

/* Add a local keyid to a safebag */

17
int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,
18
                          int namelen)
19
{
20 21 22 23 24
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_localKeyID,
                                V_ASN1_OCTET_STRING, name, namelen))
        return 1;
    else
        return 0;
25 26 27 28
}

/* Add key usage to PKCS#8 structure */

29
int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage)
30
{
31 32 33
    unsigned char us_val = (unsigned char)usage;
    return PKCS8_pkey_add1_attr_by_NID(p8, NID_key_usage,
                                       V_ASN1_BIT_STRING, &us_val, 1);
34 35 36 37
}

/* Add a friendlyname to a safebag */

38
int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
39
                                int namelen)
40
{
41 42 43 44 45
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
                                MBSTRING_ASC, (unsigned char *)name, namelen))
        return 1;
    else
        return 0;
46 47
}

48
int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,
49
                                const unsigned char *name, int namelen)
50
{
51 52 53 54 55
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
                                MBSTRING_BMP, name, namelen))
        return 1;
    else
        return 0;
56 57
}

58
int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen)
59
{
60 61 62 63 64
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_ms_csp_name,
                                MBSTRING_ASC, (unsigned char *)name, namelen))
        return 1;
    else
        return 0;
65 66
}

67 68
ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs,
                               int attr_nid)
69
{
70 71
    X509_ATTRIBUTE *attrib;
    int i;
D
Dr. Stephen Henson 已提交
72 73 74
    i = X509at_get_attr_by_NID(attrs, attr_nid, -1);
    attrib = X509at_get_attr(attrs, i);
    return X509_ATTRIBUTE_get0_type(attrib, 0);
75 76
}

U
Ulf Möller 已提交
77
char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag)
78
{
79
    const ASN1_TYPE *atype;
80

D
Dr. Stephen Henson 已提交
81
    if ((atype = PKCS12_SAFEBAG_get0_attr(bag, NID_friendlyName)) == NULL)
82 83 84 85 86
        return NULL;
    if (atype->type != V_ASN1_BMPSTRING)
        return NULL;
    return OPENSSL_uni2asc(atype->value.bmpstring->data,
                           atype->value.bmpstring->length);
87
}
D
Dr. Stephen Henson 已提交
88

89 90
const STACK_OF(X509_ATTRIBUTE) *
PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag)
D
Dr. Stephen Henson 已提交
91 92 93
{
    return bag->attrib;
}