advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement


Listing 3: EnvelopedDigitalSignature.java
package xmlsignatures;

import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.spec.*;
import java.io.File;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.crypto.dsig.keyinfo.*;
import java.util.List;
import java.security.*;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.ArrayList;
import java.security.cert.*;

public class EnvelopedDigitalSignatureCertificate {

    public static void main(String[] args) throws Exception {
  
        //Create a XMLSigantureFactory object
	XMLSignatureFactory xmlSignatureFactory =
	 XMLSignatureFactory.getInstance("DOM");

        //Create the digest method
        DigestMethod digestMethod =
		 xmlSignatureFactory.newDigestMethod
		 (DigestMethod.SHA1, null);
        
        //Create a Tranform object
        Transform transform = 
		xmlSignatureFactory.newTransform(
                   Transform.ENVELOPED, 
				   (TransformParameterSpec) null);
        List < Transform >  transformList =
		 new ArrayList < Transform >  () ; 
        transformList.add(transform);
        
        //Create the Reference object
        Reference reference = 
		xmlSignatureFactory.newReference("", 
                   digestMethod, transformList, null, null);
        List < Reference >  referenceList = 
		new ArrayList < Reference >  () ; 
        referenceList.add(reference);
        
        //Create the canonicalization method
        CanonicalizationMethod canonicalizationMethod =
		 xmlSignatureFactory.newCanonicalizationMethod(
                   CanonicalizationMethod.INCLUSIVE, 
				   (C14NMethodParameterSpec)null);
        
        //Create the signature method
        SignatureMethod signatureMethod = 
		xmlSignatureFactory.newSignatureMethod(
                    SignatureMethod.DSA_SHA1, null);
        
        //Create the SignedInfo object
        SignedInfo signedInfo = 
		xmlSignatureFactory.newSignedInfo
		(canonicalizationMethod, signatureMethod, 
		referenceList, null); 
        
	 //Load the KeyStore (MyCertification) 
	 and get the signing key and certificate.
         KeyStore keyStore = 
		 KeyStore.getInstance("JKS");         
         keyStore.load(new FileInputStream(
       "C://JavaApplications//XMLDigitalSiganture//
XMLSignatures//XMLs//MyCertification"), "e1002qa2".toCharArray());

         //Access <mykey> with <e1002qa2> password
         KeyStore.PrivateKeyEntry keyEntry = 
		 (KeyStore.PrivateKeyEntry)
               keyStore.getEntry
			   ("mykey", new KeyStore.PasswordProtection
			   ("e1002qa2".toCharArray()));
         X509Certificate x509cert = 
		 (X509Certificate) keyEntry.getCertificate();

         //Create the KeyInfo
         KeyInfoFactory keyInfoFactory = 
		 xmlSignatureFactory.getKeyInfoFactory();
         List < Object >  x509CertList = 
		 new ArrayList < Object >  () ;
         x509CertList.add(x509cert.getSubjectX500Principal().getName());
         x509CertList.add(x509cert);
         X509Data x509Data = 
		 keyInfoFactory.newX509Data(x509CertList);
         List < X509Data >  x509DataList = 
		 new ArrayList < X509Data >  () ;
         x509DataList.add(x509Data);
         KeyInfo keyInfo = 
		 keyInfoFactory.newKeyInfo(x509DataList);

        //Create a classic DOM factory instance (DocumentBuilderFactory)
        DocumentBuilderFactory documentBuilderFactory =
		 DocumentBuilderFactory.newInstance();
        
        //Make namespace aware
        documentBuilderFactory.setNamespaceAware(true);
        
        //Create a DocumentBuilder
        DocumentBuilder documentBuilder =
		 documentBuilderFactory.newDocumentBuilder();
        
        //Create a Document
        Document document = 
		documentBuilder.parse(
              new File("C://JavaApplications//XMLDigitalSiganture
//XMLSignatures//XMLs//in.xml"));
        
        //Create a DOMSignContext
        DOMSignContext domSignContext = 
		new DOMSignContext(
                  keyEntry.getPrivateKey(), 
				  document.getDocumentElement());

        //Finally, create the XMLSignature
        XMLSignature xmlSignature =
		 xmlSignatureFactory.newXMLSignature(signedInfo,keyInfo);
        
        //Sign the document
        xmlSignature.sign(domSignContext);
        
        //Write the resulted document
        OutputStream outputStream = 
		new FileOutputStream 
              ("C://JavaApplications//XMLDigitalSiganture
//XMLSignatures//XMLs//outCertEnveloped.xml");
        
        //Create a TransformerFactory
        TransformerFactory transformerFactory = 
		TransformerFactory.newInstance();
        
        //Create a Tranformer
        Transformer transformer = 
		transformerFactory.newTransformer();
        
        //Write the result into the out.xml document
        transformer.transform(new DOMSource(document), 
		new StreamResult(outputStream));
    }
}

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft RIA Development Center
 IBM Rational Resource Center
 Destination .NET
XML error: not well-formed (invalid token) at line 33
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Free VMware Server 2.0 Now Release Candidate
Linux Player Xandros Grabs Storied Rival Linspire
Hey Enterprise: Here Comes the 3G iPhone
MySpace Opens Profile Portability API
Microsoft Jumps Into Virtualization Fray
Eclipse Ganymede Makes It Easier for Devs
Open Source Nokia a Threat to Microsoft, Google?
Salesforce, Google Head for 2nd on Apps
HP Open Sources Unix File System for Linux
Red Hat Opens Its Network to Space

Build a Generic Histogram Generator for SQL Server
Beyond XML and JSON: YAML for Java Developers
Mastering the Windows Mobile Emulators
Avaya AE Services Provide Rapid Telephony Integration with Facebook
Featured Algorithm: Intel Threading Building Blocks: parallel_reduce
Getting Started with Windows Live Admin Center
Eight Key Practices for ASP.NET Deployment
Java ME User Interfaces: Do It with LWUIT!
Talking VPro: Transcript
Bringing Semantic Technology to the Enterprise

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
IBM eBook: Planning a Service Oriented Architecture
IBM eBook: Choosing the Right Architecture--What It Means for You and Your Business
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Avaya Article: Using Intelligent Presence to Create Smarter Business Applications
Intel Go Parallel Article: Getting Started with TBB on Windows
Microsoft Article: 7.0, Microsoft's Lucky Version?
Avaya Article: How to Feed Data into the Avaya Event Processor
IBM Article: Developing a Software Policy for Your Organization
Microsoft Article: Managing Virtual Machines with Microsoft System Center
Intel Go Parallel Article: Intel Threading Tools and OpenMP
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Silverlight 2 App and Walkthrough: Leverage Silverlight 2 with SQL Server and XML
IBM Article: Enterprise Search--Do You Know What's Out There?
HP Demo: StorageWorks EVA4400
Microsoft Article: The Progress and Promise of Deep Zoom
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES