Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.cedarsoft.utils.crypt.xml;
  
  import  org.jetbrains.annotations.NonNls;
  import  org.jetbrains.annotations.NotNull;
  import org.w3c.dom.Node;
 
Easy support for xml signatures. Be carefull! The DocumentBuilderFactory has to be namespace aware (DocumentBuilderFactory.setNamespaceAware(boolean)).
 
 public class XmlSignatureSupport {
   @NotNull
   private static final XMLSignatureFactory SIGNATURE_FACTORY = XMLSignatureFactory.getInstance"DOM" );
 
   @NotNull
   private final X509Support x509Support;
 
   @Inject
   public XmlSignatureSupport( @NotNull X509Support x509Support ) {
     this. = x509Support;
   }
 
   public Document sign( @NotNull Document xmlDocument ) {
     try {
       @NotNull @NonNls String elementName = xmlDocument.getFirstChild().getNodeName();
       Reference ref = .newReference'#' + elementName.newDigestMethod.null ) );
 
       Node invoice = xmlDocument.getDocumentElement();
       XMLStructure content = new DOMStructureinvoice );
       XMLObject obj = .newXMLObject( Collections.singletonListcontent ), elementNamenullnull );
 
                                                        .newSignatureMethod.null ), Collections.singletonListref ) );
 
       XMLSignature signature = .newXMLSignaturesinull, Collections.singletonListobj ), nullnull );
 
       DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
       documentBuilderFactory.setNamespaceAwaretrue );
       Document signedDoc = documentBuilderFactory.newDocumentBuilder().newDocument();
       DOMSignContext dsc = new DOMSignContext.getPrivateKey(), signedDoc );
 
       signature.signdsc );
 
       return signedDoc;
     } catch ( Exception e ) {
       throw new RuntimeExceptione );
     }
   }
 
   public boolean hasValidSignature( @NotNull Document doc ) throws Exception {
     NodeList nl = doc.getElementsByTagNameNS."Signature" );
     if ( nl.getLength() == 0 ) {
       throw new IllegalStateException"Cannot find Signature element!" );
     }
 
     DOMValidateContext valContext = new DOMValidateContext.getCertificate().getPublicKey(), nl.item( 0 ) );
     XMLSignature signature = .unmarshalXMLSignaturevalContext );
     return signature.validatevalContext );
 
     //    if ( signature.validate( valContext ) ) {
     //      System.out.println( "Signature passed core validation!" );
     //    } else {
     //      System.err.println( "Signature failed core validation!" );
     //      boolean sv = signature.getSignatureValue().validate( valContext );
     //      System.out.println( "Signature validation status: " + sv );
     //      // Check the validation status of each Reference
     //      Iterator<?> i = signature.getSignedInfo().getReferences().iterator();
     //      int j = 0;
     //
     //      while ( i.hasNext() ) {
     //        boolean refValid = ( ( Reference ) i.next() ).validate( valContext );
     //        System.out.println( "Reference (" + j + ") validation status: " + refValid );
     //        j++;
     //      }
     //    }
   }

  
Returns the node that is the root node of the original signedDocument

Parameters:
signedDocument the signed signedDocument
Returns:
the root node of the original signedDocument
  @NotNull
  public Node getOriginalNode( @NotNull Document signedDocument ) {
    NodeList nl = signedDocument.getElementsByTagNameNS."Object" );
    if ( nl.getLength() == 0 ) {
      throw new IllegalStateException"Cannot find Object element!" );
    }
    Node objectNode = nl.item( 0 );
    return objectNode.getFirstChild();
  }
  @NotNull
  public Document getOriginalDocument( @NotNull Document signedDocument ) {
    try {
      Node node = getOriginalNodesignedDocument );
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      documentBuilderFactory.setNamespaceAwaretrue );
      Document originalDoc = documentBuilderFactory.newDocumentBuilder().newDocument();
      originalDoc.appendChildoriginalDoc.adoptNodenode ) );
      return originalDoc;
    } catch ( ParserConfigurationException e ) {
      throw new RuntimeExceptione );
    }
  }
New to GrepCode? Check out our FAQ X