Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.crypto.dsig.*;

import javax.xml.crypto.dsig.dom.DOMValidateContext;

import java.security.Key;

import java.security.SignatureException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import java.util.Date;

public class Main {
    private static final String NODE_SIGNATURE = "Signature";

    public static boolean validateDocumentByCertificate(final Document document,
            final X509Certificate validatingCertificate) throws CertificateException, SignatureException {
        if (verifyCertificateValidity(validatingCertificate)) {
            return validateDocumentByKey(document, validatingCertificate.getPublicKey());
        }
        return false;
    }

    private static boolean verifyCertificateValidity(X509Certificate certificate) throws CertificateException {
        if (certificate != null) {
            if (certificate.getNotAfter().compareTo(new Date(System.currentTimeMillis())) >= 0) {
                return true;
            }
            throw new CertificateException("Certificate has expired and is not valid for signing document.");
        }
        return false;
    }

    public static boolean validateDocumentByKey(final Document document, Key validatingKey)
            throws SignatureException {
        final DOMValidateContext valContext = new DOMValidateContext(validatingKey,
                getSignatureNode(document.getDocumentElement()));
        try {
            final XMLSignature signature = getXMLSignatureFactory().unmarshalXMLSignature(valContext);
            return signature.validate(valContext);
        } catch (final Exception e) {
            throw new SignatureException("Signature verification error", e);
        }
    }

    private static Node getSignatureNode(final Element rootElement) throws SignatureException {
        final NodeList nl = rootElement.getElementsByTagNameNS(XMLSignature.XMLNS, NODE_SIGNATURE);
        if (nl.getLength() == 0) {
            throw new SignatureException("Cannot find Signature element");
        }
        return nl.item(0);
    }

    private static synchronized XMLSignatureFactory getXMLSignatureFactory() {
        return XMLSignatureFactory.getInstance("DOM");
    }
}