MCPcopy Create free account
hub / github.com/M66B/FairEmail / verifyDane

Method verifyDane

app/src/main/java/eu/faircode/email/DnsHelper.java:372–420  ·  view source on GitHub ↗
(X509Certificate[] chain, String server, int port)

Source from the content-addressed store, hash-verified

370 }
371
372 static void verifyDane(X509Certificate[] chain, String server, int port) throws CertificateException {
373 if (!hasDnsSec())
374 return;
375
376 List<String> log = new ArrayList<>();
377
378 Handler handler = new Handler() {
379 @Override
380 public void publish(LogRecord record) {
381 log.add(record.getMessage());
382 Log.w("DANE " + record.getMessage());
383 }
384
385 @Override
386 public void flush() {
387 }
388
389 @Override
390 public void close() throws SecurityException {
391 }
392 };
393
394 String clazz = DaneVerifier.class.getName();
395 try {
396 Logger.getLogger(clazz).addHandler(handler);
397 Log.w("DANE verify " + server + ":" + port);
398
399 DnssecClient client = DnssecResolverApi.INSTANCE.getDnssecClient();
400
401 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
402 client.setDataSource(new AndroidDataSource());
403
404 client.getDataSource().setTimeout(LOOKUP_TIMEOUT * 1000);
405
406 client.setUseHardcodedDnsServers(false);
407
408 boolean verified = new DaneVerifier(client).verifyCertificateChain(chain, server, port);
409 Log.w("DANE verified=" + verified + " " + server + ":" + port);
410 if (!verified)
411 throw new CertificateException("DANE missing or invalid",
412 new CertificateException(TextUtils.join("\n", log)));
413 } catch (CertificateException ex) {
414 throw ex;
415 } catch (Throwable ex) {
416 throw new CertificateException("DANE error", ex);
417 } finally {
418 Logger.getLogger(clazz).removeHandler(handler);
419 }
420 }
421
422 static List<String> getDnsServers(Context context) {
423 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

Callers 1

checkServerTrustedMethod · 0.95

Calls 7

hasDnsSecMethod · 0.95
wMethod · 0.95
getLoggerMethod · 0.80
joinMethod · 0.80
getNameMethod · 0.65
getDataSourceMethod · 0.45

Tested by

no test coverage detected