You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2006/01/27 16:50:59 UTC

svn commit: r372884 - in /xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal: DigesterOutputStream.java MacOutputStream.java SignerOutputStream.java

Author: mullan
Date: Fri Jan 27 07:50:41 2006
New Revision: 372884

URL: http://svn.apache.org/viewcvs?rev=372884&view=rev
Log:
JSR 105 

A    DigesterOutputStream.java
A    SignerOutputStream.java
A    MacOutputStream.java

Added:
    xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/DigesterOutputStream.java
    xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/MacOutputStream.java
    xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/SignerOutputStream.java

Added: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/DigesterOutputStream.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/DigesterOutputStream.java?rev=372884&view=auto
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/DigesterOutputStream.java (added)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/DigesterOutputStream.java Fri Jan 27 07:50:41 2006
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ */
+/*
+ * $Id: DigesterOutputStream.java,v 1.5 2005/12/20 20:02:39 mullan Exp $
+ */
+package org.jcp.xml.dsig.internal;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import org.apache.xml.security.utils.UnsyncByteArrayOutputStream;
+
+/**
+ * This class has been modified slightly to use java.security.MessageDigest
+ * objects as input, rather than 
+ * org.apache.xml.security.algorithms.MessageDigestAlgorithm objects.
+ * It also optionally caches the input bytes.
+ *
+ * @author raul
+ * @author Sean Mullan
+ */
+public class DigesterOutputStream extends OutputStream {
+    private boolean buffer = false;
+    private UnsyncByteArrayOutputStream bos;
+    private final MessageDigest md;
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal");
+
+    /**
+     * Creates a DigesterOutputStream.
+     *
+     * @param md the MessageDigest
+     */
+    public DigesterOutputStream(MessageDigest md) {
+	this(md, false);
+    }
+
+    /**
+     * Creates a DigesterOutputStream.
+     *
+     * @param md the MessageDigest
+     * @param buffer if true, caches the input bytes
+     */
+    public DigesterOutputStream(MessageDigest md, boolean buffer) {
+        this.md = md;
+	this.buffer = buffer;
+	if (buffer) {
+	    bos = new UnsyncByteArrayOutputStream();
+	}
+    }
+
+    /** @inheritDoc */
+    public void write(byte[] input) {
+	write(input, 0, input.length);
+    }
+    
+    /** @inheritDoc */
+    public void write(int input) {
+	if (buffer) {
+	    bos.write(input);
+	}
+	md.update((byte)input);
+    }
+    
+    /** @inheritDoc */
+    public void write(byte[] input, int offset, int len) {
+	if (buffer) {
+	    bos.write(input, offset, len);
+	}
+        if (log.isLoggable(Level.FINER)) {
+	    log.log(Level.FINER, "Pre-digested input:");
+	    StringBuffer sb = new StringBuffer(len);
+            for (int i=offset; i<(offset+len); i++) {
+		sb.append((char) input[i]);
+            }
+	    log.log(Level.FINER, sb.toString());
+	}
+	md.update(input, offset, len);
+    }
+    
+    /**
+     * @return the digest value 
+     */
+    public byte[] getDigestValue() {
+         return md.digest();   
+    }
+
+    /**
+     * @return an input stream containing the cached bytes, or
+     *    null if not cached
+     */
+    public InputStream getInputStream() {
+	if (buffer) {
+	    return new ByteArrayInputStream(bos.toByteArray());
+	} else {
+	    return null;
+	}
+    }
+}

Added: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/MacOutputStream.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/MacOutputStream.java?rev=372884&view=auto
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/MacOutputStream.java (added)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/MacOutputStream.java Fri Jan 27 07:50:41 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.jcp.xml.dsig.internal;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Derived from Apache sources and changed to use HmacSHA1 objects
+ * objects instead of org.apache.xml.security.algorithms.SignatureAlgorithm
+ * objects.
+ *
+ * @author raul
+ * @author Sean Mullan
+ *
+ */
+public class MacOutputStream extends ByteArrayOutputStream {
+    private final static byte none[]="error".getBytes();
+    private final HmacSHA1 mac;
+
+    public MacOutputStream(HmacSHA1 mac) {
+        this.mac = mac;
+    }
+
+    /** @inheritDoc */
+    public byte[] toByteArray() {
+        return none;
+    }
+    
+    /** @inheritDoc */
+    public void write(byte[] arg0)  {
+        mac.update(arg0);
+    }
+    
+    /** @inheritDoc */
+    public void write(int arg0) {
+        mac.update((byte)arg0);
+    }
+    
+    /** @inheritDoc */
+    public void write(byte[] arg0, int arg1, int arg2) {
+        mac.update(arg0,arg1,arg2);
+    }
+}

Added: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/SignerOutputStream.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/SignerOutputStream.java?rev=372884&view=auto
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/SignerOutputStream.java (added)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/SignerOutputStream.java Fri Jan 27 07:50:41 2006
@@ -0,0 +1,73 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ */
+/*
+ * $Id: SignerOutputStream.java,v 1.2 2005/09/15 14:29:02 mullan Exp $
+ */
+package org.jcp.xml.dsig.internal;
+
+import java.io.ByteArrayOutputStream;
+import java.security.Signature;
+import java.security.SignatureException;
+
+/**
+ * Derived from Apache sources and changed to use java.security.Signature 
+ * objects as input instead of org.apache.xml.security.algorithms.SignatureAlgorithm
+ * objects.
+ *
+ * @author raul
+ * @author Sean Mullan
+ */
+public class SignerOutputStream extends ByteArrayOutputStream {
+    private final Signature sig;
+
+    public SignerOutputStream(Signature sig) {
+        this.sig=sig;       
+    }
+
+    /** @inheritDoc */
+    public void write(byte[] arg0)  {
+	super.write(arg0, 0, arg0.length);
+        try {
+	    sig.update(arg0);
+	} catch (SignatureException e) {
+            throw new RuntimeException(""+e);
+	}
+    }
+    
+    /** @inheritDoc */
+    public void write(int arg0) {
+	super.write(arg0);
+        try {
+            sig.update((byte)arg0);
+        } catch (SignatureException e) {
+            throw new RuntimeException(""+e);
+        }
+    }
+    
+    /** @inheritDoc */
+    public void write(byte[] arg0, int arg1, int arg2) {
+	super.write(arg0, arg1, arg2);
+        try {
+            sig.update(arg0,arg1,arg2);
+        } catch (SignatureException e) {
+            throw new RuntimeException(""+e);
+        }
+    }
+}