Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | | - |
30 | | - |
31 | | - |
32 | | - |
33 | | - |
34 | | - |
35 | | - |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | | - |
41 | | - |
42 | | - |
43 | | - |
44 | | - |
45 | | - |
46 | | - |
47 | | - |
48 | | - |
49 | | - |
50 | | - |
51 | | - |
52 | | - |
53 | | - |
54 | | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | #include <stdio.h> | - |
60 | | - |
61 | #include <openssl/opensslconf.h> | - |
62 | | - |
63 | #include <openssl/bn.h> | - |
64 | #include <openssl/buffer.h> | - |
65 | #include <openssl/err.h> | - |
66 | #include <openssl/objects.h> | - |
67 | #include <openssl/x509.h> | - |
68 | #include <openssl/x509v3.h> | - |
69 | | - |
70 | #ifndef OPENSSL_NO_DSA | - |
71 | #include <openssl/dsa.h> | - |
72 | #endif | - |
73 | #ifndef OPENSSL_NO_RSA | - |
74 | #include <openssl/rsa.h> | - |
75 | #endif | - |
76 | | - |
77 | int | - |
78 | X509_REQ_print_fp(FILE *fp, X509_REQ *x) | - |
79 | { | - |
80 | BIO *b; | - |
81 | int ret; | - |
82 | | - |
83 | if ((b = BIO_new(BIO_s_file())) == NULL) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
84 | X509error(ERR_R_BUF_LIB); | - |
85 | return (0); never executed: return (0); | 0 |
86 | } | - |
87 | BIO_set_fp(b, fp, BIO_NOCLOSE); | - |
88 | ret = X509_REQ_print(b, x); | - |
89 | BIO_free(b); | - |
90 | return (ret); never executed: return (ret); | 0 |
91 | } | - |
92 | | - |
93 | int | - |
94 | X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, | - |
95 | unsigned long cflag) | - |
96 | { | - |
97 | unsigned long l; | - |
98 | int i; | - |
99 | const char *neg; | - |
100 | X509_REQ_INFO *ri; | - |
101 | EVP_PKEY *pkey; | - |
102 | STACK_OF(X509_ATTRIBUTE) *sk; | - |
103 | STACK_OF(X509_EXTENSION) *exts; | - |
104 | char mlch = ' '; | - |
105 | int nmindent = 0; | - |
106 | | - |
107 | if ((nmflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
108 | mlch = '\n'; | - |
109 | nmindent = 12; | - |
110 | } never executed: end of block | 0 |
111 | | - |
112 | if (nmflags == X509_FLAG_COMPAT)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
113 | nmindent = 16; never executed: nmindent = 16; | 0 |
114 | | - |
115 | ri = x->req_info; | - |
116 | if (!(cflag & X509_FLAG_NO_HEADER)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
117 | if (BIO_write(bp, "Certificate Request:\n", 21) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
118 | goto err; never executed: goto err; | 0 |
119 | if (BIO_write(bp, " Data:\n", 10) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
120 | | - |
121 | goto err; never executed: goto err; | 0 |
122 | } never executed: end of block | 0 |
123 | if (!(cflag & X509_FLAG_NO_VERSION)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
124 | neg = (ri->version->type == V_ASN1_NEG_INTEGER) ? "-" : "";TRUE | never evaluated | FALSE | never evaluated |
| 0 |
125 | l = 0; | - |
126 | for (i = 0; i < ri->version->length; i++) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
127 | l <<= 8; | - |
128 | l += ri->version->data[i]; | - |
129 | } never executed: end of block | 0 |
130 | if (BIO_printf(bp, "%8sVersion: %s%lu (%s0x%lx)\n", "", neg,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
131 | l, neg, l) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
132 | goto err; never executed: goto err; | 0 |
133 | } never executed: end of block | 0 |
134 | if (!(cflag & X509_FLAG_NO_SUBJECT)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
135 | if (BIO_printf(bp, " Subject:%c", mlch) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
136 | goto err; never executed: goto err; | 0 |
137 | if (X509_NAME_print_ex(bp, ri->subject, nmindent, nmflags) < 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
138 | goto err; never executed: goto err; | 0 |
139 | if (BIO_write(bp, "\n", 1) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
140 | goto err; never executed: goto err; | 0 |
141 | } never executed: end of block | 0 |
142 | if (!(cflag & X509_FLAG_NO_PUBKEY)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
143 | if (BIO_write(bp, " Subject Public Key Info:\n",TRUE | never evaluated | FALSE | never evaluated |
| 0 |
144 | 33) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
145 | goto err; never executed: goto err; | 0 |
146 | if (BIO_printf(bp, "%12sPublic Key Algorithm: ", "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
147 | goto err; never executed: goto err; | 0 |
148 | if (i2a_ASN1_OBJECT(bp, ri->pubkey->algor->algorithm) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
149 | goto err; never executed: goto err; | 0 |
150 | if (BIO_puts(bp, "\n") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
151 | goto err; never executed: goto err; | 0 |
152 | | - |
153 | pkey = X509_REQ_get_pubkey(x); | - |
154 | if (pkey == NULL) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
155 | BIO_printf(bp, "%12sUnable to load Public Key\n", ""); | - |
156 | ERR_print_errors(bp); | - |
157 | } else { never executed: end of block | 0 |
158 | EVP_PKEY_print_public(bp, pkey, 16, NULL); | - |
159 | EVP_PKEY_free(pkey); | - |
160 | } never executed: end of block | 0 |
161 | } | - |
162 | | - |
163 | if (!(cflag & X509_FLAG_NO_ATTRIBUTES)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
164 | | - |
165 | if (BIO_printf(bp, "%8sAttributes:\n", "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
166 | goto err; never executed: goto err; | 0 |
167 | | - |
168 | sk = x->req_info->attributes; | - |
169 | if (sk_X509_ATTRIBUTE_num(sk) == 0) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
170 | if (BIO_printf(bp, "%12sa0:00\n", "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
171 | goto err; never executed: goto err; | 0 |
172 | } else { never executed: end of block | 0 |
173 | for (i = 0; i < sk_X509_ATTRIBUTE_num(sk); i++) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
174 | ASN1_TYPE *at; | - |
175 | X509_ATTRIBUTE *a; | - |
176 | ASN1_BIT_STRING *bs = NULL; | - |
177 | ASN1_TYPE *t; | - |
178 | int j, type = 0, count = 1, ii = 0; | - |
179 | | - |
180 | a = sk_X509_ATTRIBUTE_value(sk, i); | - |
181 | if (X509_REQ_extension_nid(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
182 | OBJ_obj2nid(a->object)))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
183 | continue; never executed: continue; | 0 |
184 | if (BIO_printf(bp, "%12s", "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
185 | goto err; never executed: goto err; | 0 |
186 | if ((j = i2a_ASN1_OBJECT(bp, a->object)) > 0) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
187 | if (a->single) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
188 | t = a->value.single; | - |
189 | type = t->type; | - |
190 | bs = t->value.bit_string; | - |
191 | } else { never executed: end of block | 0 |
192 | ii = 0; | - |
193 | count = sk_ASN1_TYPE_num( | - |
194 | a->value.set); | - |
195 | get_next: code before this statement never executed: get_next: | 0 |
196 | at = sk_ASN1_TYPE_value( | - |
197 | a->value.set, ii); | - |
198 | type = at->type; | - |
199 | bs = at->value.asn1_string; | - |
200 | } never executed: end of block | 0 |
201 | } | - |
202 | for (j = 25 - j; j > 0; j--)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | if (BIO_write(bp, " ", 1) != 1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | goto err; never executed: goto err; | 0 |
205 | if (BIO_puts(bp, ":") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
206 | goto err; never executed: goto err; | 0 |
207 | if ((type == V_ASN1_PRINTABLESTRING) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
208 | (type == V_ASN1_T61STRING) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
209 | (type == V_ASN1_IA5STRING)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
210 | if (BIO_write(bp, (char *)bs->data,TRUE | never evaluated | FALSE | never evaluated |
| 0 |
211 | bs->length) != bs->length)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
212 | goto err; never executed: goto err; | 0 |
213 | BIO_puts(bp, "\n"); | - |
214 | } else { never executed: end of block | 0 |
215 | BIO_puts(bp, | - |
216 | "unable to print attribute\n"); | - |
217 | } never executed: end of block | 0 |
218 | if (++ii < count)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
219 | goto get_next; never executed: goto get_next; | 0 |
220 | } never executed: end of block | 0 |
221 | } never executed: end of block | 0 |
222 | } | - |
223 | if (!(cflag & X509_FLAG_NO_EXTENSIONS)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
224 | exts = X509_REQ_get_extensions(x); | - |
225 | if (exts) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
226 | BIO_printf(bp, "%8sRequested Extensions:\n", ""); | - |
227 | for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
228 | ASN1_OBJECT *obj; | - |
229 | X509_EXTENSION *ex; | - |
230 | int j; | - |
231 | ex = sk_X509_EXTENSION_value(exts, i); | - |
232 | if (BIO_printf(bp, "%12s", "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
233 | goto err; never executed: goto err; | 0 |
234 | obj = X509_EXTENSION_get_object(ex); | - |
235 | i2a_ASN1_OBJECT(bp, obj); | - |
236 | j = X509_EXTENSION_get_critical(ex); | - |
237 | if (BIO_printf(bp, ": %s\n",TRUE | never evaluated | FALSE | never evaluated |
| 0 |
238 | j ? "critical" : "") <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
239 | goto err; never executed: goto err; | 0 |
240 | if (!X509V3_EXT_print(bp, ex, cflag, 16)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
241 | BIO_printf(bp, "%16s", ""); | - |
242 | ASN1_STRING_print(bp, ex->value); | - |
243 | } never executed: end of block | 0 |
244 | if (BIO_write(bp, "\n", 1) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
245 | goto err; never executed: goto err; | 0 |
246 | } never executed: end of block | 0 |
247 | sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); | - |
248 | } never executed: end of block | 0 |
249 | } never executed: end of block | 0 |
250 | | - |
251 | if (!(cflag & X509_FLAG_NO_SIGDUMP)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
252 | if (!X509_signature_print(bp, x->sig_alg, x->signature))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
253 | goto err; never executed: goto err; | 0 |
254 | } never executed: end of block | 0 |
255 | | - |
256 | return (1); never executed: return (1); | 0 |
257 | | - |
258 | err: | - |
259 | X509error(ERR_R_BUF_LIB); | - |
260 | return (0); never executed: return (0); | 0 |
261 | } | - |
262 | | - |
263 | int | - |
264 | X509_REQ_print(BIO *bp, X509_REQ *x) | - |
265 | { | - |
266 | return X509_REQ_print_ex(bp, x, XN_FLAG_COMPAT, X509_FLAG_COMPAT); never executed: return X509_REQ_print_ex(bp, x, 0, 0); | 0 |
267 | } | - |
| | |