6c2b1dbdedafff179c7a3f8a4719d5e8fc6b0c51
[users/heiko/exim.git] / src / src / dane-openssl.c
1 /*
2  *  Author: Viktor Dukhovni
3  *  License: THIS CODE IS IN THE PUBLIC DOMAIN.
4  *
5  * Copyright (c) The Exim Maintainers 2014 - 2016
6  */
7 #include <stdio.h>
8 #include <string.h>
9 #include <stdint.h>
10
11 #include <openssl/opensslv.h>
12 #include <openssl/err.h>
13 #include <openssl/crypto.h>
14 #include <openssl/safestack.h>
15 #include <openssl/objects.h>
16 #include <openssl/x509.h>
17 #include <openssl/x509v3.h>
18 #include <openssl/evp.h>
19 #include <openssl/bn.h>
20
21 #if OPENSSL_VERSION_NUMBER < 0x1000000fL
22 # error "OpenSSL 1.0.0 or higher required"
23 #else   /* remainder of file */
24
25 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
26 # define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
27 #endif
28 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
29 # define EXIM_HAVE_ASN1_MACROS
30 # define EXIM_OPAQUE_X509
31 #else
32 # define X509_STORE_CTX_get_verify(ctx)         (ctx)->verify
33 # define X509_STORE_CTX_get_verify_cb(ctx)      (ctx)->verify_cb
34 # define X509_STORE_CTX_get0_cert(ctx)          (ctx)->cert
35 # define X509_STORE_CTX_get0_chain(ctx)         (ctx)->chain
36 # define X509_STORE_CTX_get0_untrusted(ctx)     (ctx)->untrusted
37
38 # define X509_STORE_CTX_set_verify(ctx, verify_chain)   (ctx)->verify = (verify_chain)
39 # define X509_STORE_CTX_set0_verified_chain(ctx, sk)    (ctx)->chain = (sk)
40 # define X509_STORE_CTX_set_error_depth(ctx, val)       (ctx)->error_depth = (val)
41 # define X509_STORE_CTX_set_current_cert(ctx, cert)     (ctx)->current_cert = (cert)
42 #endif
43
44
45 #include "danessl.h"
46
47 #define DANESSL_F_ADD_SKID              100
48 #define DANESSL_F_ADD_TLSA              101
49 #define DANESSL_F_CHECK_END_ENTITY      102
50 #define DANESSL_F_CTX_INIT              103
51 #define DANESSL_F_GROW_CHAIN            104
52 #define DANESSL_F_INIT                  105
53 #define DANESSL_F_LIBRARY_INIT          106
54 #define DANESSL_F_LIST_ALLOC            107
55 #define DANESSL_F_MATCH                 108
56 #define DANESSL_F_PUSH_EXT              109
57 #define DANESSL_F_SET_TRUST_ANCHOR      110
58 #define DANESSL_F_VERIFY_CERT           111
59 #define DANESSL_F_WRAP_CERT             112
60
61 #define DANESSL_R_BAD_CERT              100
62 #define DANESSL_R_BAD_CERT_PKEY         101
63 #define DANESSL_R_BAD_DATA_LENGTH       102
64 #define DANESSL_R_BAD_DIGEST            103
65 #define DANESSL_R_BAD_NULL_DATA         104
66 #define DANESSL_R_BAD_PKEY              105
67 #define DANESSL_R_BAD_SELECTOR          106
68 #define DANESSL_R_BAD_USAGE             107
69 #define DANESSL_R_INIT                  108
70 #define DANESSL_R_LIBRARY_INIT          109
71 #define DANESSL_R_NOSIGN_KEY            110
72 #define DANESSL_R_SCTX_INIT             111
73 #define DANESSL_R_SUPPORT               112
74
75 #ifndef OPENSSL_NO_ERR
76 #define DANESSL_F_PLACEHOLDER           0               /* FIRST! Value TBD */
77 static ERR_STRING_DATA dane_str_functs[] = {
78     {DANESSL_F_PLACEHOLDER,             "DANE library"},        /* FIRST!!! */
79     {DANESSL_F_ADD_SKID,                "add_skid"},
80     {DANESSL_F_ADD_TLSA,                "DANESSL_add_tlsa"},
81     {DANESSL_F_CHECK_END_ENTITY,        "check_end_entity"},
82     {DANESSL_F_CTX_INIT,                "DANESSL_CTX_init"},
83     {DANESSL_F_GROW_CHAIN,              "grow_chain"},
84     {DANESSL_F_INIT,                    "DANESSL_init"},
85     {DANESSL_F_LIBRARY_INIT,            "DANESSL_library_init"},
86     {DANESSL_F_LIST_ALLOC,              "list_alloc"},
87     {DANESSL_F_MATCH,                   "match"},
88     {DANESSL_F_PUSH_EXT,                "push_ext"},
89     {DANESSL_F_SET_TRUST_ANCHOR,        "set_trust_anchor"},
90     {DANESSL_F_VERIFY_CERT,             "verify_cert"},
91     {DANESSL_F_WRAP_CERT,               "wrap_cert"},
92     {0,                                 NULL}
93 };
94 static ERR_STRING_DATA dane_str_reasons[] = {
95     {DANESSL_R_BAD_CERT,        "Bad TLSA record certificate"},
96     {DANESSL_R_BAD_CERT_PKEY,   "Bad TLSA record certificate public key"},
97     {DANESSL_R_BAD_DATA_LENGTH, "Bad TLSA record digest length"},
98     {DANESSL_R_BAD_DIGEST,      "Bad TLSA record digest"},
99     {DANESSL_R_BAD_NULL_DATA,   "Bad TLSA record null data"},
100     {DANESSL_R_BAD_PKEY,        "Bad TLSA record public key"},
101     {DANESSL_R_BAD_SELECTOR,    "Bad TLSA record selector"},
102     {DANESSL_R_BAD_USAGE,       "Bad TLSA record usage"},
103     {DANESSL_R_INIT,            "DANESSL_init() required"},
104     {DANESSL_R_LIBRARY_INIT,    "DANESSL_library_init() required"},
105     {DANESSL_R_NOSIGN_KEY,      "Certificate usage 2 requires EC support"},
106     {DANESSL_R_SCTX_INIT,       "DANESSL_CTX_init() required"},
107     {DANESSL_R_SUPPORT,         "DANE library features not supported"},
108     {0,                         NULL}
109 };
110 #endif
111
112 #define DANEerr(f, r) ERR_PUT_error(err_lib_dane, (f), (r), __FILE__, __LINE__)
113
114 static int err_lib_dane = -1;
115 static int dane_idx = -1;
116
117 #ifdef X509_V_FLAG_PARTIAL_CHAIN       /* OpenSSL >= 1.0.2 */
118 static int wrap_to_root = 0;
119 #else
120 static int wrap_to_root = 1;
121 #endif
122
123 static void (*cert_free)(void *) = (void (*)(void *)) X509_free;
124 static void (*pkey_free)(void *) = (void (*)(void *)) EVP_PKEY_free;
125
126 typedef struct dane_list
127 {
128     struct dane_list *next;
129     void *value;
130 } *dane_list;
131
132 #define LINSERT(h, e) do { (e)->next = (h); (h) = (e); } while (0)
133
134 typedef struct dane_host_list
135 {
136     struct dane_host_list *next;
137     char *value;
138 } *dane_host_list;
139
140 typedef struct dane_data
141 {
142     size_t datalen;
143     unsigned char data[0];
144 } *dane_data;
145
146 typedef struct dane_data_list
147 {
148     struct dane_data_list *next;
149     dane_data value;
150 } *dane_data_list;
151
152 typedef struct dane_mtype
153 {
154     int mdlen;
155     const EVP_MD *md;
156     dane_data_list data;
157 } *dane_mtype;
158
159 typedef struct dane_mtype_list
160 {
161     struct dane_mtype_list *next;
162     dane_mtype value;
163 } *dane_mtype_list;
164
165 typedef struct dane_selector
166 {
167     uint8_t selector;
168     dane_mtype_list mtype;
169 } *dane_selector;
170
171 typedef struct dane_selector_list
172 {
173     struct dane_selector_list *next;
174     dane_selector value;
175 } *dane_selector_list;
176
177 typedef struct dane_pkey_list
178 {
179     struct dane_pkey_list *next;
180     EVP_PKEY *value;
181 } *dane_pkey_list;
182
183 typedef struct dane_cert_list
184 {
185     struct dane_cert_list *next;
186     X509 *value;
187 } *dane_cert_list;
188
189 typedef struct ssl_dane
190 {
191     int            (*verify)(X509_STORE_CTX *);
192     STACK_OF(X509) *roots;
193     STACK_OF(X509) *chain;
194     X509           *match;              /* Matched cert */
195     const char     *thost;              /* TLSA base domain */
196     char           *mhost;              /* Matched peer name */
197     dane_pkey_list pkeys;
198     dane_cert_list certs;
199     dane_host_list hosts;
200     dane_selector_list selectors[DANESSL_USAGE_LAST + 1];
201     int            depth;
202     int            mdpth;               /* Depth of matched cert */
203     int            multi;               /* Multi-label wildcards? */
204     int            count;               /* Number of TLSA records */
205 } ssl_dane;
206
207 #ifndef X509_V_ERR_HOSTNAME_MISMATCH
208 # define X509_V_ERR_HOSTNAME_MISMATCH X509_V_ERR_APPLICATION_VERIFICATION
209 #endif
210
211
212
213 static int
214 match(dane_selector_list slist, X509 *cert, int depth)
215 {
216 int matched;
217
218 /*
219  * Note, set_trust_anchor() needs to know whether the match was for a
220  * pkey digest or a certificate digest.  We return MATCHED_PKEY or
221  * MATCHED_CERT accordingly.
222  */
223 #define MATCHED_CERT (DANESSL_SELECTOR_CERT + 1)
224 #define MATCHED_PKEY (DANESSL_SELECTOR_SPKI + 1)
225
226 /*
227  * Loop over each selector, mtype, and associated data element looking
228  * for a match.
229  */
230 for (matched = 0; !matched && slist; slist = slist->next)
231   {
232   dane_mtype_list m;
233   unsigned char mdbuf[EVP_MAX_MD_SIZE];
234   unsigned char *buf = NULL;
235   unsigned char *buf2;
236   unsigned int len = 0;
237
238   /*
239    * Extract ASN.1 DER form of certificate or public key.
240    */
241   switch(slist->value->selector)
242     {
243     case DANESSL_SELECTOR_CERT:
244       len = i2d_X509(cert, NULL);
245       buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
246       if(buf) i2d_X509(cert, &buf2);
247       break;
248     case DANESSL_SELECTOR_SPKI:
249       len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
250       buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
251       if(buf) i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &buf2);
252       break;
253     }
254
255   if (!buf)
256     {
257     DANEerr(DANESSL_F_MATCH, ERR_R_MALLOC_FAILURE);
258     return 0;
259     }
260   OPENSSL_assert(buf2 - buf == len);
261
262   /*
263    * Loop over each mtype and data element
264    */
265   for (m = slist->value->mtype; !matched && m; m = m->next)
266     {
267     dane_data_list d;
268     unsigned char *cmpbuf = buf;
269     unsigned int cmplen = len;
270
271     /*
272      * If it is a digest, compute the corresponding digest of the
273      * DER data for comparison, otherwise, use the full object.
274      */
275     if (m->value->md)
276       {
277       cmpbuf = mdbuf;
278       if (!EVP_Digest(buf, len, cmpbuf, &cmplen, m->value->md, 0))
279           matched = -1;
280       }
281     for (d = m->value->data; !matched && d; d = d->next)
282         if (  cmplen == d->value->datalen
283            && memcmp(cmpbuf, d->value->data, cmplen) == 0)
284             matched = slist->value->selector + 1;
285     }
286
287   OPENSSL_free(buf);
288   }
289
290 return matched;
291 }
292
293 static int
294 push_ext(X509 *cert, X509_EXTENSION *ext)
295 {
296     if (ext) {
297         if (X509_add_ext(cert, ext, -1))
298             return 1;
299         X509_EXTENSION_free(ext);
300     }
301     DANEerr(DANESSL_F_PUSH_EXT, ERR_R_MALLOC_FAILURE);
302     return 0;
303 }
304
305 static int
306 add_ext(X509 *issuer, X509 *subject, int ext_nid, char *ext_val)
307 {
308 X509V3_CTX v3ctx;
309
310 X509V3_set_ctx(&v3ctx, issuer, subject, 0, 0, 0);
311 return push_ext(subject, X509V3_EXT_conf_nid(0, &v3ctx, ext_nid, ext_val));
312 }
313
314 static int
315 set_serial(X509 *cert, AUTHORITY_KEYID *akid, X509 *subject)
316 {
317 int ret = 0;
318 BIGNUM *bn;
319
320 if (akid && akid->serial)
321   return (X509_set_serialNumber(cert, akid->serial));
322
323 /*
324  * Add one to subject's serial to avoid collisions between TA serial and
325  * serial of signing root.
326  */
327 if (  (bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(subject), 0)) != 0
328    && BN_add_word(bn, 1)
329    && BN_to_ASN1_INTEGER(bn, X509_get_serialNumber(cert)))
330   ret = 1;
331
332 if (bn)
333   BN_free(bn);
334 return ret;
335 }
336
337 static int
338 add_akid(X509 *cert, AUTHORITY_KEYID *akid)
339 {
340 int nid = NID_authority_key_identifier;
341 ASN1_STRING *id;
342 unsigned char c = 0;
343 int ret = 0;
344
345 /*
346  * 0 will never be our subject keyid from a SHA-1 hash, but it could be
347  * our subject keyid if forced from child's akid.  If so, set our
348  * authority keyid to 1.  This way we are never self-signed, and thus
349  * exempt from any potential (off by default for now in OpenSSL)
350  * self-signature checks!
351  */
352 id =  (akid && akid->keyid) ? akid->keyid : 0;
353 if (id && ASN1_STRING_length(id) == 1 && *ASN1_STRING_data(id) == c)
354   c = 1;
355
356 if (  (akid = AUTHORITY_KEYID_new()) != 0
357    && (akid->keyid = ASN1_OCTET_STRING_new()) != 0
358 #ifdef EXIM_HAVE_ASN1_MACROS
359    && ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
360 #else
361    && M_ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
362 #endif
363    && X509_add1_ext_i2d(cert, nid, akid, 0, X509V3_ADD_APPEND))
364   ret = 1;
365 if (akid)
366   AUTHORITY_KEYID_free(akid);
367 return ret;
368 }
369
370 static int
371 add_skid(X509 *cert, AUTHORITY_KEYID *akid)
372 {
373 int nid = NID_subject_key_identifier;
374
375 if (!akid || !akid->keyid)
376   return add_ext(0, cert, nid, "hash");
377 return X509_add1_ext_i2d(cert, nid, akid->keyid, 0, X509V3_ADD_APPEND) > 0;
378 }
379
380 static X509_NAME *
381 akid_issuer_name(AUTHORITY_KEYID *akid)
382 {
383 if (akid && akid->issuer)
384   {
385   int     i;
386   GENERAL_NAMES *gens = akid->issuer;
387
388   for (i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
389     {
390     GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
391
392     if (gn->type == GEN_DIRNAME)
393       return (gn->d.dirn);
394     }
395   }
396 return 0;
397 }
398
399 static int
400 set_issuer_name(X509 *cert, AUTHORITY_KEYID *akid)
401 {
402 X509_NAME *name = akid_issuer_name(akid);
403
404 /*
405  * If subject's akid specifies an authority key identifer issuer name, we
406  * must use that.
407  */
408 return X509_set_issuer_name(cert,
409                             name ? name : X509_get_subject_name(cert));
410 }
411
412 static int
413 grow_chain(ssl_dane *dane, int trusted, X509 *cert)
414 {
415 STACK_OF(X509) **xs = trusted ? &dane->roots : &dane->chain;
416 static ASN1_OBJECT *serverAuth = 0;
417
418 #define UNTRUSTED 0
419 #define TRUSTED 1
420
421 if (  trusted && !serverAuth
422    && !(serverAuth = OBJ_nid2obj(NID_server_auth)))
423   {
424   DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
425   return 0;
426   }
427 if (!*xs && !(*xs = sk_X509_new_null()))
428   {
429   DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
430   return 0;
431   }
432
433 if (cert)
434   {
435   if (trusted && !X509_add1_trust_object(cert, serverAuth))
436     return 0;
437 #ifdef EXIM_OPAQUE_X509
438   X509_up_ref(cert);
439 #else
440   CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);
441 #endif
442   if (!sk_X509_push(*xs, cert))
443     {
444     X509_free(cert);
445     DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
446     return 0;
447     }
448   }
449 return 1;
450 }
451
452 static int
453 wrap_issuer(ssl_dane *dane, EVP_PKEY *key, X509 *subject, int depth, int top)
454 {
455 int ret = 1;
456 X509 *cert = 0;
457 AUTHORITY_KEYID *akid;
458 X509_NAME *name = X509_get_issuer_name(subject);
459 EVP_PKEY *newkey = key ? key : X509_get_pubkey(subject);
460
461 #define WRAP_MID 0              /* Ensure intermediate. */
462 #define WRAP_TOP 1              /* Ensure self-signed. */
463
464 if (!name || !newkey || !(cert = X509_new()))
465   return 0;
466
467 /*
468  * Record the depth of the trust-anchor certificate.
469  */
470 if (dane->depth < 0)
471   dane->depth = depth + 1;
472
473 /*
474  * XXX: Uncaught error condition:
475  *
476  * The return value is NULL both when the extension is missing, and when
477  * OpenSSL rans out of memory while parsing the extension.
478  */
479 ERR_clear_error();
480 akid = X509_get_ext_d2i(subject, NID_authority_key_identifier, 0, 0);
481 /* XXX: Should we peek at the error stack here??? */
482
483 /*
484  * If top is true generate a self-issued root CA, otherwise an
485  * intermediate CA and possibly its self-signed issuer.
486  *
487  * CA cert valid for +/- 30 days
488  */
489 if (  !X509_set_version(cert, 2)
490    || !set_serial(cert, akid, subject)
491    || !X509_set_subject_name(cert, name)
492    || !set_issuer_name(cert, akid)
493    || !X509_gmtime_adj(X509_get_notBefore(cert), -30 * 86400L)
494    || !X509_gmtime_adj(X509_get_notAfter(cert), 30 * 86400L)
495    || !X509_set_pubkey(cert, newkey)
496    || !add_ext(0, cert, NID_basic_constraints, "CA:TRUE")
497    || (!top && !add_akid(cert, akid))
498    || !add_skid(cert, akid)
499    || (  !top && wrap_to_root
500       && !wrap_issuer(dane, newkey, cert, depth, WRAP_TOP)))
501   ret = 0;
502
503 if (akid)
504   AUTHORITY_KEYID_free(akid);
505 if (!key)
506   EVP_PKEY_free(newkey);
507 if (ret)
508   ret = grow_chain(dane, !top && wrap_to_root ? UNTRUSTED : TRUSTED, cert);
509 if (cert)
510   X509_free(cert);
511 return ret;
512 }
513
514 static int
515 wrap_cert(ssl_dane *dane, X509 *tacert, int depth)
516 {
517 if (dane->depth < 0)
518   dane->depth = depth + 1;
519
520 /*
521  * If the TA certificate is self-issued, or need not be, use it directly.
522  * Otherwise, synthesize requisuite ancestors.
523  */
524 if (  !wrap_to_root
525    || X509_check_issued(tacert, tacert) == X509_V_OK)
526   return grow_chain(dane, TRUSTED, tacert);
527
528 if (wrap_issuer(dane, 0, tacert, depth, WRAP_MID))
529   return grow_chain(dane, UNTRUSTED, tacert);
530 return 0;
531 }
532
533 static int
534 ta_signed(ssl_dane *dane, X509 *cert, int depth)
535 {
536 dane_cert_list x;
537 dane_pkey_list k;
538 EVP_PKEY *pk;
539 int done = 0;
540
541 /*
542  * First check whether issued and signed by a TA cert, this is cheaper
543  * than the bare-public key checks below, since we can determine whether
544  * the candidate TA certificate issued the certificate to be checked
545  * first (name comparisons), before we bother with signature checks
546  * (public key operations).
547  */
548 for (x = dane->certs; !done && x; x = x->next)
549   {
550   if (X509_check_issued(x->value, cert) == X509_V_OK)
551     {
552     if (!(pk = X509_get_pubkey(x->value)))
553       {
554       /*
555        * The cert originally contained a valid pkey, which does
556        * not just vanish, so this is most likely a memory error.
557        */
558       done = -1;
559       break;
560       }
561     /* Check signature, since some other TA may work if not this. */
562     if (X509_verify(cert, pk) > 0)
563       done = wrap_cert(dane, x->value, depth) ? 1 : -1;
564     EVP_PKEY_free(pk);
565     }
566   }
567
568 /*
569  * With bare TA public keys, we can't check whether the trust chain is
570  * issued by the key, but we can determine whether it is signed by the
571  * key, so we go with that.
572  *
573  * Ideally, the corresponding certificate was presented in the chain, and we
574  * matched it by its public key digest one level up.  This code is here
575  * to handle adverse conditions imposed by sloppy administrators of
576  * receiving systems with poorly constructed chains.
577  *
578  * We'd like to optimize out keys that should not match when the cert's
579  * authority key id does not match the key id of this key computed via
580  * the RFC keyid algorithm (SHA-1 digest of public key bit-string sans
581  * ASN1 tag and length thus also excluding the unused bits field that is
582  * logically part of the length).  However, some CAs have a non-standard
583  * authority keyid, so we lose.  Too bad.
584  *
585  * This may push errors onto the stack when the certificate signature is
586  * not of the right type or length, throw these away,
587  */
588 for (k = dane->pkeys; !done && k; k = k->next)
589   if (X509_verify(cert, k->value) > 0)
590     done = wrap_issuer(dane, k->value, cert, depth, WRAP_MID) ? 1 : -1;
591   else
592     ERR_clear_error();
593
594 return done;
595 }
596
597 static int
598 set_trust_anchor(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
599 {
600 int matched = 0;
601 int n;
602 int i;
603 int depth = 0;
604 EVP_PKEY *takey;
605 X509 *ca;
606 STACK_OF(X509) *in = X509_STORE_CTX_get0_untrusted(ctx);
607
608 if (!grow_chain(dane, UNTRUSTED, 0))
609   return -1;
610
611 /*
612  * Accept a degenerate case: depth 0 self-signed trust-anchor.
613  */
614 if (X509_check_issued(cert, cert) == X509_V_OK)
615   {
616   dane->depth = 0;
617   matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], cert, 0);
618   if (matched > 0 && !grow_chain(dane, TRUSTED, cert))
619     matched = -1;
620   return matched;
621   }
622
623 /* Make a shallow copy of the input untrusted chain. */
624 if (!(in = sk_X509_dup(in)))
625   {
626   DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
627   return -1;
628   }
629
630 /*
631  * At each iteration we consume the issuer of the current cert.  This
632  * reduces the length of the "in" chain by one.  If no issuer is found,
633  * we are done.  We also stop when a certificate matches a TA in the
634  * peer's TLSA RRset.
635  *
636  * Caller ensures that the initial certificate is not self-signed.
637  */
638 for (n = sk_X509_num(in); n > 0; --n, ++depth)
639   {
640   for (i = 0; i < n; ++i)
641     if (X509_check_issued(sk_X509_value(in, i), cert) == X509_V_OK)
642       break;
643
644   /*
645    * Final untrusted element with no issuer in the peer's chain, it may
646    * however be signed by a pkey or cert obtained via a TLSA RR.
647    */
648   if (i == n)
649     break;
650
651   /* Peer's chain contains an issuer ca. */
652   ca = sk_X509_delete(in, i);
653
654   /* If not a trust anchor, record untrusted ca and continue. */
655   if ((matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], ca,
656                      depth + 1)) == 0)
657     {
658     if (grow_chain(dane, UNTRUSTED, ca))
659       {
660       if (!X509_check_issued(ca, ca) == X509_V_OK)
661         {
662         /* Restart with issuer as subject */
663         cert = ca;
664         continue;
665         }
666       /* Final self-signed element, skip ta_signed() check. */
667       cert = 0;
668       }
669     else
670       matched = -1;
671     }
672   else if(matched == MATCHED_CERT)
673     {
674     if(!wrap_cert(dane, ca, depth))
675       matched = -1;
676     }
677   else if(matched == MATCHED_PKEY)
678     {
679     if (  !(takey = X509_get_pubkey(ca))
680        || !wrap_issuer(dane, takey, cert, depth, WRAP_MID))
681       {
682       if (takey)
683         EVP_PKEY_free(takey);
684       else
685         DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
686       matched = -1;
687       }
688     }
689   break;
690   }
691
692 /* Shallow free the duplicated input untrusted chain. */
693 sk_X509_free(in);
694
695 /*
696  * When the loop exits, if "cert" is set, it is not self-signed and has
697  * no issuer in the chain, we check for a possible signature via a DNS
698  * obtained TA cert or public key.
699  */
700 if (matched == 0 && cert)
701   matched = ta_signed(dane, cert, depth);
702
703 return matched;
704 }
705
706 static int
707 check_end_entity(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
708 {
709 int matched;
710
711 matched = match(dane->selectors[DANESSL_USAGE_DANE_EE], cert, 0);
712 if (matched > 0)
713   {
714   dane->mdpth = 0;
715   dane->match = cert;
716   X509_up_ref(cert);
717   if(!X509_STORE_CTX_get0_chain(ctx))
718     {
719     STACK_OF(X509) * sk = sk_X509_new_null();
720     if (sk && sk_X509_push(sk, cert))
721       {
722       X509_STORE_CTX_set0_verified_chain(ctx, sk);
723       X509_up_ref(cert);
724       }
725     else
726       {
727       DANEerr(DANESSL_F_CHECK_END_ENTITY, ERR_R_MALLOC_FAILURE);
728       return -1;
729       }
730     }
731   }
732 return matched;
733 }
734
735 static int
736 match_name(const char *certid, ssl_dane *dane)
737 {
738 int multi = dane->multi;
739 dane_host_list hosts;
740
741 for (hosts = dane->hosts; hosts; hosts = hosts->next)
742   {
743   int match_subdomain = 0;
744   const char *domain = hosts->value;
745   const char *parent;
746   int idlen;
747   int domlen;
748
749   if (*domain == '.' && domain[1] != '\0')
750     {
751     ++domain;
752     match_subdomain = 1;
753     }
754
755   /*
756    * Sub-domain match: certid is any sub-domain of hostname.
757    */
758   if(match_subdomain)
759     {
760     if (  (idlen = strlen(certid)) > (domlen = strlen(domain)) + 1
761        && certid[idlen - domlen - 1] == '.'
762        && !strcasecmp(certid + (idlen - domlen), domain))
763       return 1;
764     else
765       continue;
766     }
767
768   /*
769    * Exact match and initial "*" match. The initial "*" in a certid
770    * matches one (if multi is false) or more hostname components under
771    * the condition that the certid contains multiple hostname components.
772    */
773   if (  !strcasecmp(certid, domain)
774      || (  certid[0] == '*' && certid[1] == '.' && certid[2] != 0
775         && (parent = strchr(domain, '.')) != 0
776         && (idlen = strlen(certid + 1)) <= (domlen = strlen(parent))
777         && strcasecmp(multi ? parent + domlen - idlen : parent, certid+1) == 0))
778     return 1;
779   }
780 return 0;
781 }
782
783 static char *
784 check_name(char *name, int len)
785 {
786 char *cp = name + len;
787
788 while (len > 0 && !*--cp)
789   --len;                          /* Ignore trailing NULs */
790 if (len <= 0)
791   return 0;
792 for (cp = name; *cp; cp++)
793   {
794   char c = *cp;
795   if (!((c >= 'a' && c <= 'z') ||
796         (c >= '0' && c <= '9') ||
797         (c >= 'A' && c <= 'Z') ||
798         (c == '.' || c == '-') ||
799         (c == '*')))
800     return 0;                   /* Only LDH, '.' and '*' */
801   }
802 if (cp - name != len)               /* Guard against internal NULs */
803   return 0;
804 return name;
805 }
806
807 static char *
808 parse_dns_name(const GENERAL_NAME *gn)
809 {
810 if (gn->type != GEN_DNS)
811   return 0;
812 if (ASN1_STRING_type(gn->d.ia5) != V_ASN1_IA5STRING)
813   return 0;
814 return check_name((char *) ASN1_STRING_data(gn->d.ia5),
815                   ASN1_STRING_length(gn->d.ia5));
816 }
817
818 static char *
819 parse_subject_name(X509 *cert)
820 {
821 X509_NAME *name = X509_get_subject_name(cert);
822 X509_NAME_ENTRY *entry;
823 ASN1_STRING *entry_str;
824 unsigned char *namebuf;
825 int nid = NID_commonName;
826 int len;
827 int i;
828
829 if (!name || (i = X509_NAME_get_index_by_NID(name, nid, -1)) < 0)
830   return 0;
831 if (!(entry = X509_NAME_get_entry(name, i)))
832   return 0;
833 if (!(entry_str = X509_NAME_ENTRY_get_data(entry)))
834   return 0;
835
836 if ((len = ASN1_STRING_to_UTF8(&namebuf, entry_str)) < 0)
837   return 0;
838 if (len <= 0 || check_name((char *) namebuf, len) == 0)
839   {
840   OPENSSL_free(namebuf);
841   return 0;
842   }
843 return (char *) namebuf;
844 }
845
846 static int
847 name_check(ssl_dane *dane, X509 *cert)
848 {
849 int matched = 0;
850 BOOL got_altname = FALSE;
851 GENERAL_NAMES *gens;
852
853 gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
854 if (gens)
855   {
856   int n = sk_GENERAL_NAME_num(gens);
857   int i;
858
859   for (i = 0; i < n; ++i)
860     {
861     const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
862     const char *certid;
863
864     if (gn->type != GEN_DNS)
865         continue;
866     got_altname = TRUE;
867     certid = parse_dns_name(gn);
868     if (certid && *certid)
869       {
870       if ((matched = match_name(certid, dane)) == 0)
871         continue;
872       if (!(dane->mhost = OPENSSL_strdup(certid)))
873         matched = -1;
874       DEBUG(D_tls) debug_printf("Dane name_check: matched SAN %s\n", certid);
875       break;
876       }
877     }
878   GENERAL_NAMES_free(gens);
879   }
880
881 /*
882  * XXX: Should the subjectName be skipped when *any* altnames are present,
883  * or only when DNS altnames are present?
884  */
885 if (!got_altname)
886   {
887   char *certid = parse_subject_name(cert);
888   if (certid != 0 && *certid && (matched = match_name(certid, dane)) != 0)
889     {
890     DEBUG(D_tls) debug_printf("Dane name_check: matched SN %s\n", certid);
891     dane->mhost = OPENSSL_strdup(certid);
892     }
893   if (certid)
894     OPENSSL_free(certid);
895   }
896 return matched;
897 }
898
899 static int
900 verify_chain(X509_STORE_CTX *ctx)
901 {
902 int (*cb)(int, X509_STORE_CTX *) = X509_STORE_CTX_get_verify_cb(ctx);
903 X509 *cert = X509_STORE_CTX_get0_cert(ctx);
904 int chain_length = sk_X509_num(X509_STORE_CTX_get0_chain(ctx));
905 int ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
906 SSL *ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
907 ssl_dane *dane = SSL_get_ex_data(ssl, dane_idx);
908 dane_selector_list issuer_rrs = dane->selectors[DANESSL_USAGE_PKIX_TA];
909 dane_selector_list leaf_rrs = dane->selectors[DANESSL_USAGE_PKIX_EE];
910 int matched = 0;
911
912 DEBUG(D_tls) debug_printf("Dane verify_chain\n");
913
914 X509_STORE_CTX_set_verify(ctx, dane->verify);
915
916 if ((matched = name_check(dane, cert)) < 0)
917   {
918   X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
919   return 0;
920   }
921
922 if (!matched)
923   {
924   X509_STORE_CTX_set_error_depth(ctx, 0);
925   X509_STORE_CTX_set_current_cert(ctx, cert);
926   X509_STORE_CTX_set_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH);
927   if (!cb(0, ctx))
928     return 0;
929   }
930 matched = 0;
931
932 /*
933  * Satisfy at least one usage 0 or 1 constraint, unless we've already
934  * matched a usage 2 trust anchor.
935  *
936  * XXX: internal_verify() doesn't callback with top certs that are not
937  * self-issued.  This should be fixed in a future OpenSSL.
938  */
939 if (dane->roots && sk_X509_num(dane->roots))
940   {
941   X509 *top = sk_X509_value(X509_STORE_CTX_get0_chain(ctx), dane->depth);
942
943   dane->mdpth = dane->depth;
944   dane->match = top;
945   X509_up_ref(top);
946
947 #ifndef NO_CALLBACK_WORKAROUND
948   if (X509_check_issued(top, top) != X509_V_OK)
949     {
950     X509_STORE_CTX_set_error_depth(ctx, dane->depth);
951     X509_STORE_CTX_set_current_cert(ctx, top);
952     if (!cb(1, ctx))
953       return 0;
954     }
955 #endif
956   /* Pop synthetic trust-anchor ancestors off the chain! */
957   while (--chain_length > dane->depth)
958       X509_free(sk_X509_pop(X509_STORE_CTX_get0_chain(ctx)));
959   }
960 else
961   {
962   int n = 0;
963   X509 *xn = cert;
964
965   /*
966    * Check for an EE match, then a CA match at depths > 0, and
967    * finally, if the EE cert is self-issued, for a depth 0 CA match.
968    */
969   if (leaf_rrs)
970     matched = match(leaf_rrs, xn, 0);
971   if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched EE\n");
972
973   if (!matched && issuer_rrs)
974     for (n = chain_length-1; !matched && n >= 0; --n)
975       {
976       xn = sk_X509_value(X509_STORE_CTX_get0_chain(ctx), n);
977       if (n > 0 || X509_check_issued(xn, xn) == X509_V_OK)
978         matched = match(issuer_rrs, xn, n);
979       }
980   if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched %s\n",
981     n>0 ? "CA" : "selfisssued EE");
982
983   if (!matched)
984     {
985     X509_STORE_CTX_set_error_depth(ctx, 0);
986     X509_STORE_CTX_set_current_cert(ctx, cert);
987     X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_UNTRUSTED);
988     if (!cb(0, ctx))
989       return 0;
990     }
991   else
992     {
993     dane->mdpth = n;
994     dane->match = xn;
995     X509_up_ref(xn);
996     }
997   }
998
999 return (X509_STORE_CTX_get_verify(ctx))(ctx);
1000 }
1001
1002 static void
1003 dane_reset(ssl_dane *dane)
1004 {
1005 dane->depth = -1;
1006 if (dane->mhost)
1007   {
1008   OPENSSL_free(dane->mhost);
1009   dane->mhost = 0;
1010   }
1011 if (dane->roots)
1012   {
1013   sk_X509_pop_free(dane->roots, X509_free);
1014   dane->roots = 0;
1015   }
1016 if (dane->chain)
1017   {
1018   sk_X509_pop_free(dane->chain, X509_free);
1019   dane->chain = 0;
1020   }
1021 if (dane->match)
1022   {
1023   X509_free(dane->match);
1024   dane->match = 0;
1025   }
1026 dane->mdpth = -1;
1027 }
1028
1029 static int
1030 verify_cert(X509_STORE_CTX *ctx, void *unused_ctx)
1031 {
1032 static int ssl_idx = -1;
1033 SSL *ssl;
1034 ssl_dane *dane;
1035 int (*cb)(int, X509_STORE_CTX *) = X509_STORE_CTX_get_verify_cb(ctx);
1036 X509 *cert = X509_STORE_CTX_get0_cert(ctx);
1037 int matched;
1038
1039 DEBUG(D_tls) debug_printf("Dane verify_cert\n");
1040
1041 if (ssl_idx < 0)
1042   ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1043 if (dane_idx < 0)
1044   {
1045   DANEerr(DANESSL_F_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
1046   return -1;
1047   }
1048
1049 ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
1050 if (!(dane = SSL_get_ex_data(ssl, dane_idx)) || !cert)
1051   return X509_verify_cert(ctx);
1052
1053 /* Reset for verification of a new chain, perhaps a renegotiation. */
1054 dane_reset(dane);
1055
1056 if (dane->selectors[DANESSL_USAGE_DANE_EE])
1057   {
1058   if ((matched = check_end_entity(ctx, dane, cert)) > 0)
1059     {
1060     X509_STORE_CTX_set_error_depth(ctx, 0);
1061     X509_STORE_CTX_set_current_cert(ctx, cert);
1062     return cb(1, ctx);
1063     }
1064   if (matched < 0)
1065     {
1066     X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1067     return -1;
1068     }
1069   }
1070
1071   if (dane->selectors[DANESSL_USAGE_DANE_TA])
1072     {
1073     if ((matched = set_trust_anchor(ctx, dane, cert)) < 0)
1074       {
1075       X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1076       return -1;
1077       }
1078     if (matched)
1079       {
1080       /*
1081        * Check that setting the untrusted chain updates the expected
1082        * structure member at the expected offset.
1083        */
1084       X509_STORE_CTX_trusted_stack(ctx, dane->roots);
1085       X509_STORE_CTX_set_chain(ctx, dane->chain);
1086       OPENSSL_assert(X509_STORE_CTX_get0_untrusted(ctx) == dane->chain);
1087       }
1088     }
1089
1090   /*
1091    * Name checks and usage 0/1 constraint enforcement are delayed until
1092    * X509_verify_cert() builds the full chain and calls our verify_chain()
1093    * wrapper.
1094    */
1095   dane->verify = X509_STORE_CTX_get_verify(ctx);
1096   X509_STORE_CTX_set_verify(ctx, verify_chain);
1097
1098   if (X509_verify_cert(ctx))
1099     return 1;
1100
1101   /*
1102    * If the chain is invalid, clear any matching cert or hostname, to
1103    * protect callers that might erroneously rely on these alone without
1104    * checking the validation status.
1105    */
1106   if (dane->match)
1107     {
1108     X509_free(dane->match);
1109     dane->match = 0;
1110     }
1111   if (dane->mhost)
1112     {
1113     OPENSSL_free(dane->mhost);
1114     dane->mhost = 0;
1115     }
1116    return 0;
1117 }
1118
1119 static dane_list
1120 list_alloc(size_t vsize)
1121 {
1122 void *value = (void *) OPENSSL_malloc(vsize);
1123 dane_list l;
1124
1125 if (!value)
1126   {
1127   DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1128   return 0;
1129   }
1130 if (!(l = (dane_list) OPENSSL_malloc(sizeof(*l))))
1131   {
1132   OPENSSL_free(value);
1133   DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1134   return 0;
1135   }
1136 l->next = 0;
1137 l->value = value;
1138 return l;
1139 }
1140
1141 static void
1142 list_free(void *list, void (*f)(void *))
1143 {
1144 dane_list head;
1145 dane_list next;
1146
1147 for (head = (dane_list) list; head; head = next)
1148   {
1149   next = head->next;
1150   if (f && head->value)
1151       f(head->value);
1152   OPENSSL_free(head);
1153   }
1154 }
1155
1156 static void
1157 dane_mtype_free(void *p)
1158 {
1159 list_free(((dane_mtype) p)->data, CRYPTO_free);
1160 OPENSSL_free(p);
1161 }
1162
1163 static void
1164 dane_selector_free(void *p)
1165 {
1166 list_free(((dane_selector) p)->mtype, dane_mtype_free);
1167 OPENSSL_free(p);
1168 }
1169
1170
1171
1172 /*
1173
1174 Tidy up once the connection is finished with.
1175
1176 Arguments
1177   ssl           The ssl connection handle
1178
1179 => Before calling SSL_free()
1180 tls_close() and tls_getc() [the error path] are the obvious places.
1181 Could we do it earlier - right after verification?  In tls_client_start()
1182 right after SSL_connect() returns, in that case.
1183
1184 */
1185
1186 void
1187 DANESSL_cleanup(SSL *ssl)
1188 {
1189 ssl_dane *dane;
1190 int u;
1191
1192 DEBUG(D_tls) debug_printf("Dane lib-cleanup\n");
1193
1194 if (dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1195   return;
1196 (void) SSL_set_ex_data(ssl, dane_idx, 0);
1197
1198 dane_reset(dane);
1199 if (dane->hosts)
1200   list_free(dane->hosts, CRYPTO_free);
1201 for (u = 0; u <= DANESSL_USAGE_LAST; ++u)
1202   if (dane->selectors[u])
1203     list_free(dane->selectors[u], dane_selector_free);
1204 if (dane->pkeys)
1205   list_free(dane->pkeys, pkey_free);
1206 if (dane->certs)
1207   list_free(dane->certs, cert_free);
1208 OPENSSL_free(dane);
1209 }
1210
1211 static dane_host_list
1212 host_list_init(const char **src)
1213 {
1214 dane_host_list head = NULL;
1215
1216 while (*src)
1217   {
1218   dane_host_list elem = (dane_host_list) OPENSSL_malloc(sizeof(*elem));
1219   if (elem == 0)
1220     {
1221     list_free(head, CRYPTO_free);
1222     return 0;
1223     }
1224   elem->value = OPENSSL_strdup(*src++);
1225   LINSERT(head, elem);
1226   }
1227 return head;
1228 }
1229
1230
1231 int
1232 DANESSL_get_match_cert(SSL *ssl, X509 **match, const char **mhost, int *depth)
1233 {
1234 ssl_dane *dane;
1235
1236 if (dane_idx < 0 || (dane = SSL_get_ex_data(ssl, dane_idx)) == 0)
1237   {
1238   DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1239   return -1;
1240   }
1241
1242 if (dane->match)
1243   {
1244   if (match)
1245     *match = dane->match;
1246   if (mhost)
1247     *mhost = dane->mhost;
1248   if (depth)
1249     *depth = dane->mdpth;
1250   }
1251
1252   return (dane->match != 0);
1253 }
1254
1255
1256 #ifdef never_called
1257 int
1258 DANESSL_verify_chain(SSL *ssl, STACK_OF(X509) *chain)
1259 {
1260 int ret;
1261 X509 *cert;
1262 X509_STORE_CTX store_ctx;
1263 SSL_CTX *ssl_ctx = SSL_get_SSL_CTX(ssl);
1264 X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
1265 int store_ctx_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1266
1267 cert = sk_X509_value(chain, 0);
1268 if (!X509_STORE_CTX_init(&store_ctx, store, cert, chain))
1269   return 0;
1270 X509_STORE_CTX_set_ex_data(&store_ctx, store_ctx_idx, ssl);
1271
1272 X509_STORE_CTX_set_default(&store_ctx,
1273             SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
1274 X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&store_ctx),
1275             SSL_get0_param(ssl));
1276
1277 if (SSL_get_verify_callback(ssl))
1278   X509_STORE_CTX_set_verify_cb(&store_ctx, SSL_get_verify_callback(ssl));
1279
1280 ret = verify_cert(&store_ctx, NULL);
1281
1282 SSL_set_verify_result(ssl, X509_STORE_CTX_get_error(&store_ctx));
1283 X509_STORE_CTX_cleanup(&store_ctx);
1284
1285 return (ret);
1286 }
1287 #endif
1288
1289
1290
1291
1292 /*
1293
1294 Call this for each TLSA record found for the target, after the
1295 DANE setup has been done on the ssl connection handle.
1296
1297 Arguments:
1298   ssl           Connection handle
1299   usage         TLSA record field
1300   selector      TLSA record field
1301   mdname        ??? message digest name?
1302   data          ??? TLSA record megalump?
1303   dlen          length of data
1304
1305 Return
1306   -1 on error
1307   0  action not taken
1308   1  record accepted
1309 */
1310
1311 int
1312 DANESSL_add_tlsa(SSL *ssl, uint8_t usage, uint8_t selector, const char *mdname,
1313         unsigned const char *data, size_t dlen)
1314 {
1315 ssl_dane *dane;
1316 dane_selector_list s = 0;
1317 dane_mtype_list m = 0;
1318 dane_data_list d = 0;
1319 dane_cert_list xlist = 0;
1320 dane_pkey_list klist = 0;
1321 const EVP_MD *md = 0;
1322
1323 DEBUG(D_tls) debug_printf("Dane add-tlsa: usage %u sel %u mdname \"%s\"\n",
1324                           usage, selector, mdname);
1325
1326 if(dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1327   {
1328   DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1329   return -1;
1330   }
1331
1332 if (usage > DANESSL_USAGE_LAST)
1333   {
1334   DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_USAGE);
1335   return 0;
1336   }
1337 if (selector > DANESSL_SELECTOR_LAST)
1338   {
1339   DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_SELECTOR);
1340   return 0;
1341   }
1342
1343     /* Support built-in standard one-digit mtypes */
1344   if (mdname && *mdname && mdname[1] == '\0')
1345     switch (*mdname - '0')
1346     {
1347     case DANESSL_MATCHING_FULL: mdname = 0;        break;
1348     case DANESSL_MATCHING_2256: mdname = "sha256"; break;
1349     case DANESSL_MATCHING_2512: mdname = "sha512"; break;
1350     }
1351   if (mdname && *mdname && (md = EVP_get_digestbyname(mdname)) == 0)
1352     {
1353     DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DIGEST);
1354     return 0;
1355     }
1356   if (mdname && *mdname && dlen != EVP_MD_size(md))
1357     {
1358     DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DATA_LENGTH);
1359     return 0;
1360     }
1361   if (!data)
1362     {
1363     DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_NULL_DATA);
1364     return 0;
1365     }
1366
1367   /*
1368    * Full Certificate or Public Key when NULL or empty digest name
1369    */
1370   if (!mdname || !*mdname)
1371     {
1372     X509 *x = 0;
1373     EVP_PKEY *k = 0;
1374     const unsigned char *p = data;
1375
1376 #define xklistinit(lvar, ltype, var, freeFunc) do { \
1377           (lvar) = (ltype) OPENSSL_malloc(sizeof(*(lvar))); \
1378           if ((lvar) == 0) { \
1379               DANEerr(DANESSL_F_ADD_TLSA, ERR_R_MALLOC_FAILURE); \
1380               freeFunc((var)); \
1381               return 0; \
1382           } \
1383           (lvar)->next = 0; \
1384           lvar->value = var; \
1385       } while (0)
1386 #define xkfreeret(ret) do { \
1387           if (xlist) list_free(xlist, cert_free); \
1388           if (klist) list_free(klist, pkey_free); \
1389           return (ret); \
1390       } while (0)
1391
1392   switch (selector)
1393     {
1394     case DANESSL_SELECTOR_CERT:
1395       if (!d2i_X509(&x, &p, dlen) || dlen != p - data)
1396         {
1397         if (x)
1398           X509_free(x);
1399         DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT);
1400         return 0;
1401         }
1402       k = X509_get_pubkey(x);
1403       EVP_PKEY_free(k);
1404       if (k == 0)
1405         {
1406         X509_free(x);
1407         DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT_PKEY);
1408         return 0;
1409         }
1410       if (usage == DANESSL_USAGE_DANE_TA)
1411         xklistinit(xlist, dane_cert_list, x, X509_free);
1412       break;
1413
1414     case DANESSL_SELECTOR_SPKI:
1415       if (!d2i_PUBKEY(&k, &p, dlen) || dlen != p - data)
1416         {
1417         if (k)
1418           EVP_PKEY_free(k);
1419       DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_PKEY);
1420       return 0;
1421         }
1422       if (usage == DANESSL_USAGE_DANE_TA)
1423         xklistinit(klist, dane_pkey_list, k, EVP_PKEY_free);
1424       break;
1425     }
1426   }
1427
1428 /* Find insertion point and don't add duplicate elements. */
1429 for (s = dane->selectors[usage]; s; s = s->next)
1430   if (s->value->selector == selector)
1431     {
1432     for (m = s->value->mtype; m; m = m->next)
1433       if (m->value->md == md)
1434         {
1435         for (d = m->value->data; d; d = d->next)
1436           if (  d->value->datalen == dlen
1437              && memcmp(d->value->data, data, dlen) == 0)
1438             xkfreeret(1);
1439         break;
1440         }
1441     break;
1442     }
1443
1444 if ((d = (dane_data_list) list_alloc(sizeof(*d->value) + dlen)) == 0)
1445   xkfreeret(0);
1446 d->value->datalen = dlen;
1447 memcpy(d->value->data, data, dlen);
1448 if (!m)
1449   {
1450   if ((m = (dane_mtype_list) list_alloc(sizeof(*m->value))) == 0)
1451     {
1452     list_free(d, CRYPTO_free);
1453     xkfreeret(0);
1454     }
1455   m->value->data = 0;
1456   if ((m->value->md = md) != 0)
1457     m->value->mdlen = dlen;
1458   if (!s)
1459     {
1460     if ((s = (dane_selector_list) list_alloc(sizeof(*s->value))) == 0)
1461       {
1462       list_free(m, dane_mtype_free);
1463       xkfreeret(0);
1464       }
1465     s->value->mtype = 0;
1466     s->value->selector = selector;
1467     LINSERT(dane->selectors[usage], s);
1468     }
1469   LINSERT(s->value->mtype, m);
1470   }
1471 LINSERT(m->value->data, d);
1472
1473 if (xlist)
1474   LINSERT(dane->certs, xlist);
1475 else if (klist)
1476   LINSERT(dane->pkeys, klist);
1477 ++dane->count;
1478 return 1;
1479 }
1480
1481
1482
1483
1484 /*
1485 Call this once we have an ssl connection handle but before
1486 making the TLS connection.
1487
1488 => In tls_client_start() after the call to SSL_new()
1489 and before the call to SSL_connect().  Exactly where
1490 probably does not matter.
1491 We probably want to keep our existing SNI handling;
1492 call this with NULL.
1493
1494 Arguments:
1495   ssl           Connection handle
1496   sni_domain    Optional peer server name
1497   hostnames     list of names to chack against peer cert
1498
1499 Return
1500   -1 on fatal error
1501   0  nonfatal error
1502   1  success
1503 */
1504
1505 int
1506 DANESSL_init(SSL *ssl, const char *sni_domain, const char **hostnames)
1507 {
1508 ssl_dane *dane;
1509 int i;
1510
1511 DEBUG(D_tls) debug_printf("Dane ssl_init\n");
1512 if (dane_idx < 0)
1513   {
1514   DANEerr(DANESSL_F_INIT, DANESSL_R_LIBRARY_INIT);
1515   return -1;
1516   }
1517
1518 if (sni_domain && !SSL_set_tlsext_host_name(ssl, sni_domain))
1519   return 0;
1520
1521 if ((dane = (ssl_dane *) OPENSSL_malloc(sizeof(ssl_dane))) == 0)
1522   {
1523   DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1524   return 0;
1525   }
1526 if (!SSL_set_ex_data(ssl, dane_idx, dane))
1527   {
1528   DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1529   OPENSSL_free(dane);
1530   return 0;
1531   }
1532
1533 dane->verify = 0;
1534 dane->hosts = 0;
1535 dane->thost = 0;
1536 dane->pkeys = 0;
1537 dane->certs = 0;
1538 dane->chain = 0;
1539 dane->match = 0;
1540 dane->roots = 0;
1541 dane->depth = -1;
1542 dane->mhost = 0;                        /* Future SSL control interface */
1543 dane->mdpth = 0;                        /* Future SSL control interface */
1544 dane->multi = 0;                        /* Future SSL control interface */
1545 dane->count = 0;
1546 dane->hosts = 0;
1547
1548 for (i = 0; i <= DANESSL_USAGE_LAST; ++i)
1549   dane->selectors[i] = 0;
1550
1551 if (hostnames && (dane->hosts = host_list_init(hostnames)) == 0)
1552   {
1553   DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1554   DANESSL_cleanup(ssl);
1555   return 0;
1556   }
1557
1558 return 1;
1559 }
1560
1561
1562 /*
1563
1564 Call this once we have a context to work with, but
1565 before DANESSL_init()
1566
1567 => in tls_client_start(), after tls_init() call gives us the ctx,
1568 if we decide we want to (policy) and can (TLSA records available)
1569 replacing (? what about fallback) everything from testing tls_verify_hosts
1570 down to just before calling SSL_new() for the conn handle.
1571
1572 Arguments
1573   ctx           SSL context
1574
1575 Return
1576   -1    Error
1577   1     Success
1578 */
1579
1580 int
1581 DANESSL_CTX_init(SSL_CTX *ctx)
1582 {
1583 DEBUG(D_tls) debug_printf("Dane ctx-init\n");
1584 if (dane_idx >= 0)
1585   {
1586   SSL_CTX_set_cert_verify_callback(ctx, verify_cert, 0);
1587   return 1;
1588   }
1589 DANEerr(DANESSL_F_CTX_INIT, DANESSL_R_LIBRARY_INIT);
1590 return -1;
1591 }
1592
1593 static int
1594 init_once(volatile int *value, int (*init)(void), void (*postinit)(void))
1595 {
1596 int wlock = 0;
1597
1598 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
1599 if (*value < 0)
1600   {
1601   CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1602   CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
1603   wlock = 1;
1604   if (*value < 0)
1605     {
1606     *value = init();
1607     if (postinit)
1608       postinit();
1609     }
1610   }
1611 if (wlock)
1612     CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
1613 else
1614     CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1615 return *value;
1616 }
1617
1618 static void
1619 dane_init(void)
1620 {
1621 /*
1622  * Store library id in zeroth function slot, used to locate the library
1623  * name.  This must be done before we load the error strings.
1624  */
1625 #ifndef OPENSSL_NO_ERR
1626 dane_str_functs[0].error |= ERR_PACK(err_lib_dane, 0, 0);
1627 ERR_load_strings(err_lib_dane, dane_str_functs);
1628 ERR_load_strings(err_lib_dane, dane_str_reasons);
1629 #endif
1630
1631 /*
1632  * Register SHA-2 digests, if implemented and not already registered.
1633  */
1634 #if defined(LN_sha256) && defined(NID_sha256) && !defined(OPENSSL_NO_SHA256)
1635 if (!EVP_get_digestbyname(LN_sha224)) EVP_add_digest(EVP_sha224());
1636 if (!EVP_get_digestbyname(LN_sha256)) EVP_add_digest(EVP_sha256());
1637 #endif
1638 #if defined(LN_sha512) && defined(NID_sha512) && !defined(OPENSSL_NO_SHA512)
1639 if (!EVP_get_digestbyname(LN_sha384)) EVP_add_digest(EVP_sha384());
1640 if (!EVP_get_digestbyname(LN_sha512)) EVP_add_digest(EVP_sha512());
1641 #endif
1642
1643 /*
1644  * Register an SSL index for the connection-specific ssl_dane structure.
1645  * Using a separate index makes it possible to add DANE support to
1646  * existing OpenSSL releases that don't have a suitable pointer in the
1647  * SSL structure.
1648  */
1649 dane_idx = SSL_get_ex_new_index(0, 0, 0, 0, 0);
1650 }
1651
1652
1653
1654 /*
1655
1656 Call this once.  Probably early in startup will do; may need
1657 to be after SSL library init.
1658
1659 => put after call to tls_init() for now
1660
1661 Return
1662   1     Success
1663   0     Fail
1664 */
1665
1666 int
1667 DANESSL_library_init(void)
1668 {
1669 DEBUG(D_tls) debug_printf("Dane lib-init\n");
1670 if (err_lib_dane < 0)
1671   init_once(&err_lib_dane, ERR_get_next_error_library, dane_init);
1672
1673 #if defined(LN_sha256)
1674 /* No DANE without SHA256 support */
1675 if (dane_idx >= 0 && EVP_get_digestbyname(LN_sha256) != 0)
1676   return 1;
1677 #endif
1678 DANEerr(DANESSL_F_LIBRARY_INIT, DANESSL_R_SUPPORT);
1679 return 0;
1680 }
1681
1682
1683 #endif /* OPENSSL_VERSION_NUMBER */
1684 /* vi: aw ai sw=2
1685 */