OpenCoverage

v3_akey.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/x509v3/v3_akey.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (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/conf.h>-
13#include <openssl/asn1.h>-
14#include <openssl/asn1t.h>-
15#include <openssl/x509v3.h>-
16#include "ext_dat.h"-
17-
18static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,-
19 AUTHORITY_KEYID *akeyid,-
20 STACK_OF(CONF_VALUE)-
21 *extlist);-
22static AUTHORITY_KEYID *v2i_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,-
23 X509V3_CTX *ctx,-
24 STACK_OF(CONF_VALUE) *values);-
25-
26const X509V3_EXT_METHOD v3_akey_id = {-
27 NID_authority_key_identifier,-
28 X509V3_EXT_MULTILINE, ASN1_ITEM_ref(AUTHORITY_KEYID),-
29 0, 0, 0, 0,-
30 0, 0,-
31 (X509V3_EXT_I2V) i2v_AUTHORITY_KEYID,-
32 (X509V3_EXT_V2I)v2i_AUTHORITY_KEYID,-
33 0, 0,-
34 NULL-
35};-
36-
37static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,-
38 AUTHORITY_KEYID *akeyid,-
39 STACK_OF(CONF_VALUE)-
40 *extlist)-
41{-
42 char *tmp;-
43 if (akeyid->keyid) {
akeyid->keyidDescription
TRUEevaluated 728 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1787 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
728-1787
44 tmp = OPENSSL_buf2hexstr(akeyid->keyid->data, akeyid->keyid->length);-
45 X509V3_add_value("keyid", tmp, &extlist);-
46 OPENSSL_free(tmp);-
47 }
executed 728 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
728
48 if (akeyid->issuer)
akeyid->issuerDescription
TRUEevaluated 1356 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1159 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1159-1356
49 extlist = i2v_GENERAL_NAMES(NULL, akeyid->issuer, extlist);
executed 1356 times by 1 test: extlist = i2v_GENERAL_NAMES( ((void *)0) , akeyid->issuer, extlist);
Executed by:
  • libcrypto.so.1.1
1356
50 if (akeyid->serial) {
akeyid->serialDescription
TRUEevaluated 501 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2014 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
501-2014
51 tmp = OPENSSL_buf2hexstr(akeyid->serial->data, akeyid->serial->length);-
52 X509V3_add_value("serial", tmp, &extlist);-
53 OPENSSL_free(tmp);-
54 }
executed 501 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
501
55 return extlist;
executed 2515 times by 1 test: return extlist;
Executed by:
  • libcrypto.so.1.1
2515
56}-
57-
58/*--
59 * Currently two options:-
60 * keyid: use the issuers subject keyid, the value 'always' means its is-
61 * an error if the issuer certificate doesn't have a key id.-
62 * issuer: use the issuers cert issuer and serial number. The default is-
63 * to only use this if keyid is not present. With the option 'always'-
64 * this is always included.-
65 */-
66-
67static AUTHORITY_KEYID *v2i_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,-
68 X509V3_CTX *ctx,-
69 STACK_OF(CONF_VALUE) *values)-
70{-
71 char keyid = 0, issuer = 0;-
72 int i;-
73 CONF_VALUE *cnf;-
74 ASN1_OCTET_STRING *ikeyid = NULL;-
75 X509_NAME *isname = NULL;-
76 GENERAL_NAMES *gens = NULL;-
77 GENERAL_NAME *gen = NULL;-
78 ASN1_INTEGER *serial = NULL;-
79 X509_EXTENSION *ext;-
80 X509 *cert;-
81 AUTHORITY_KEYID *akeyid;-
82-
83 for (i = 0; i < sk_CONF_VALUE_num(values); i++) {
i < sk_CONF_VALUE_num(values)Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 32 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
32-60
84 cnf = sk_CONF_VALUE_value(values, i);-
85 if (strcmp(cnf->name, "keyid") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( cnf->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "keyid" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 28 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-32
86 keyid = 1;-
87 if (cnf->value && strcmp(cnf->value, "always") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( cnf->value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "always" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
cnf->valueDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__extension__ ... )))); }) == 0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-24
88 keyid = 2;
executed 24 times by 1 test: keyid = 2;
Executed by:
  • libcrypto.so.1.1
24
89 } else if (strcmp(cnf->name, "issuer") == 0) {
executed 32 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
never executed: __result = (((const unsigned char *) (const char *) ( cnf->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "issuer" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-32
90 issuer = 1;-
91 if (cnf->value && strcmp(cnf->value, "always") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( cnf->value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "always" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
cnf->valueDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__extension__ ... )))); }) == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-18
92 issuer = 2;
executed 10 times by 1 test: issuer = 2;
Executed by:
  • libcrypto.so.1.1
10
93 } else {
executed 28 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
28
94 X509V3err(X509V3_F_V2I_AUTHORITY_KEYID, X509V3_R_UNKNOWN_OPTION);-
95 ERR_add_error_data(2, "name=", cnf->name);-
96 return NULL;
never executed: return ((void *)0) ;
0
97 }-
98 }-
99-
100 if (!ctx || !ctx->issuer_cert) {
!ctxDescription
TRUEnever evaluated
FALSEevaluated 32 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ctx->issuer_certDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32
101 if (ctx && (ctx->flags == CTX_TEST))
ctxDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
(ctx->flags == 0x1)Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-24
102 return AUTHORITY_KEYID_new();
executed 24 times by 1 test: return AUTHORITY_KEYID_new();
Executed by:
  • libcrypto.so.1.1
24
103 X509V3err(X509V3_F_V2I_AUTHORITY_KEYID,-
104 X509V3_R_NO_ISSUER_CERTIFICATE);-
105 return NULL;
never executed: return ((void *)0) ;
0
106 }-
107-
108 cert = ctx->issuer_cert;-
109-
110 if (keyid) {
keyidDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-8
111 i = X509_get_ext_by_NID(cert, NID_subject_key_identifier, -1);-
112 if ((i >= 0) && (ext = X509_get_ext(cert, i)))
(i >= 0)Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
(ext = X509_get_ext(cert, i))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-8
113 ikeyid = X509V3_EXT_d2i(ext);
executed 8 times by 1 test: ikeyid = X509V3_EXT_d2i(ext);
Executed by:
  • libcrypto.so.1.1
8
114 if (keyid == 2 && !ikeyid) {
keyid == 2Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ikeyidDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4
115 X509V3err(X509V3_F_V2I_AUTHORITY_KEYID,-
116 X509V3_R_UNABLE_TO_GET_ISSUER_KEYID);-
117 return NULL;
never executed: return ((void *)0) ;
0
118 }-
119 }
executed 8 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8
120-
121 if ((issuer && !ikeyid) || (issuer == 2)) {
issuerDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!ikeyidDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(issuer == 2)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6
122 isname = X509_NAME_dup(X509_get_issuer_name(cert));-
123 serial = ASN1_INTEGER_dup(X509_get_serialNumber(cert));-
124 if (!isname || !serial) {
!isnameDescription
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!serialDescription
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-5
125 X509V3err(X509V3_F_V2I_AUTHORITY_KEYID,-
126 X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS);-
127 goto err;
never executed: goto err;
0
128 }-
129 }
executed 5 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
5
130-
131 if ((akeyid = AUTHORITY_KEYID_new()) == NULL)
(akeyid = AUTH...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
132 goto err;
never executed: goto err;
0
133-
134 if (isname) {
isnameDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3-5
135 if ((gens = sk_GENERAL_NAME_new_null()) == NULL
(gens = sk_GEN...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-5
136 || (gen = GENERAL_NAME_new()) == NULL
(gen = GENERAL...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-5
137 || !sk_GENERAL_NAME_push(gens, gen)) {
!sk_GENERAL_NA...ush(gens, gen)Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-5
138 X509V3err(X509V3_F_V2I_AUTHORITY_KEYID, ERR_R_MALLOC_FAILURE);-
139 goto err;
never executed: goto err;
0
140 }-
141 gen->type = GEN_DIRNAME;-
142 gen->d.dirn = isname;-
143 }
executed 5 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
5
144-
145 akeyid->issuer = gens;-
146 gen = NULL;-
147 gens = NULL;-
148 akeyid->serial = serial;-
149 akeyid->keyid = ikeyid;-
150-
151 return akeyid;
executed 8 times by 1 test: return akeyid;
Executed by:
  • libcrypto.so.1.1
8
152-
153 err:-
154 sk_GENERAL_NAME_free(gens);-
155 GENERAL_NAME_free(gen);-
156 X509_NAME_free(isname);-
157 ASN1_INTEGER_free(serial);-
158 ASN1_OCTET_STRING_free(ikeyid);-
159 return NULL;
never executed: return ((void *)0) ;
0
160}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2