Coverage Report

Created: 2025-12-31 06:58

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl35/crypto/pkcs12/p12_attr.c
Line
Count
Source
1
/*
2
 * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * 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_local.h"
14
15
/* Add a local keyid to a safebag */
16
17
int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,
18
    int namelen)
19
0
{
20
0
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_localKeyID,
21
0
            V_ASN1_OCTET_STRING, name, namelen)
22
0
        != NULL)
23
0
        return 1;
24
0
    else
25
0
        return 0;
26
0
}
27
28
/* Add key usage to PKCS#8 structure */
29
30
int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage)
31
0
{
32
0
    unsigned char us_val = (unsigned char)usage;
33
0
    return PKCS8_pkey_add1_attr_by_NID(p8, NID_key_usage,
34
0
        V_ASN1_BIT_STRING, &us_val, 1);
35
0
}
36
37
/* Add a friendlyname to a safebag */
38
39
int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
40
    int namelen)
41
0
{
42
0
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
43
0
            MBSTRING_ASC, (unsigned char *)name, namelen)
44
0
        != NULL)
45
0
        return 1;
46
0
    else
47
0
        return 0;
48
0
}
49
50
int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name,
51
    int namelen)
52
0
{
53
0
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
54
0
            MBSTRING_UTF8, (unsigned char *)name, namelen)
55
0
        != NULL)
56
0
        return 1;
57
0
    else
58
0
        return 0;
59
0
}
60
61
int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,
62
    const unsigned char *name, int namelen)
63
0
{
64
0
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_friendlyName,
65
0
            MBSTRING_BMP, name, namelen)
66
0
        != NULL)
67
0
        return 1;
68
0
    else
69
0
        return 0;
70
0
}
71
72
int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen)
73
0
{
74
0
    if (X509at_add1_attr_by_NID(&bag->attrib, NID_ms_csp_name,
75
0
            MBSTRING_ASC, (unsigned char *)name, namelen)
76
0
        != NULL)
77
0
        return 1;
78
0
    else
79
0
        return 0;
80
0
}
81
82
int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type,
83
    const unsigned char *bytes, int len)
84
0
{
85
0
    if (X509at_add1_attr_by_NID(&bag->attrib, nid, type, bytes, len) != NULL)
86
0
        return 1;
87
0
    else
88
0
        return 0;
89
0
}
90
91
int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type,
92
    const unsigned char *bytes, int len)
93
0
{
94
0
    if (X509at_add1_attr_by_txt(&bag->attrib, attrname, type, bytes, len) != NULL)
95
0
        return 1;
96
0
    else
97
0
        return 0;
98
0
}
99
100
ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs,
101
    int attr_nid)
102
0
{
103
0
    int i = X509at_get_attr_by_NID(attrs, attr_nid, -1);
104
105
0
    if (i < 0)
106
0
        return NULL;
107
0
    return X509_ATTRIBUTE_get0_type(X509at_get_attr(attrs, i), 0);
108
0
}
109
110
char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag)
111
0
{
112
0
    const ASN1_TYPE *atype;
113
114
0
    if ((atype = PKCS12_SAFEBAG_get0_attr(bag, NID_friendlyName)) == NULL)
115
0
        return NULL;
116
0
    if (atype->type != V_ASN1_BMPSTRING)
117
0
        return NULL;
118
0
    return OPENSSL_uni2utf8(atype->value.bmpstring->data,
119
0
        atype->value.bmpstring->length);
120
0
}
121
122
const STACK_OF(X509_ATTRIBUTE) *
123
PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag)
124
0
{
125
0
    return bag->attrib;
126
0
}
127
128
void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs)
129
0
{
130
0
    if (bag->attrib != attrs)
131
0
        sk_X509_ATTRIBUTE_free(bag->attrib);
132
133
0
    bag->attrib = attrs;
134
0
}