001/*
002 * Copyright 2015-2020 the original author or authors
003 *
004 * This software is licensed under the Apache License, Version 2.0,
005 * the GNU Lesser General Public License version 2 or later ("LGPL")
006 * and the WTFPL.
007 * You may choose either license to govern your use of this software only
008 * upon the condition that you accept all of the terms of either
009 * the Apache License 2.0, the LGPL 2.1+ or the WTFPL.
010 */
011package org.minidns.dane;
012
013import java.security.cert.CertificateException;
014import java.util.Collections;
015import java.util.List;
016
017import org.minidns.record.TLSA;
018
019public abstract class DaneCertificateException extends CertificateException {
020
021    /**
022     * 
023     */
024    private static final long serialVersionUID = 1L;
025
026    protected DaneCertificateException() {
027    }
028
029    protected DaneCertificateException(String message) {
030        super(message);
031    }
032
033    public static class CertificateMismatch extends DaneCertificateException {
034
035        /**
036         * 
037         */
038        private static final long serialVersionUID = 1L;
039
040        public final TLSA tlsa;
041        public final byte[] computed;
042
043        public CertificateMismatch(TLSA tlsa, byte[] computed) {
044            super("The TLSA RR does not match the certificate");
045            this.tlsa = tlsa;
046            this.computed = computed;
047        }
048    }
049
050    public static class MultipleCertificateMismatchExceptions extends DaneCertificateException {
051
052        /**
053         * 
054         */
055        private static final long serialVersionUID = 1L;
056
057        public final List<CertificateMismatch> certificateMismatchExceptions;
058
059        public MultipleCertificateMismatchExceptions(List<CertificateMismatch> certificateMismatchExceptions) {
060            super("There where multiple CertificateMismatch exceptions because none of the TLSA RR does match the certificate");
061            assert !certificateMismatchExceptions.isEmpty();
062            this.certificateMismatchExceptions = Collections.unmodifiableList(certificateMismatchExceptions);
063        }
064    }
065}