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