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