[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commit-cp] classpath ChangeLog gnu/java/security/Registry....
From: |
Raif S. Naffah |
Subject: |
[commit-cp] classpath ChangeLog gnu/java/security/Registry.... |
Date: |
Fri, 09 Jun 2006 11:49:55 +0000 |
CVSROOT: /cvsroot/classpath
Module name: classpath
Changes by: Raif S. Naffah <raif> 06/06/09 11:49:54
Modified files:
. : ChangeLog
gnu/java/security: Registry.java
gnu/javax/crypto/pad: PadFactory.java
Added files:
gnu/javax/crypto/pad: ISO10126.java
Log message:
2006-06-09 Raif S. Naffah <address@hidden>
On behalf of Matthew Wringe <address@hidden>
* gnu/java/security/Registry.java (ISO10126_PAD): New constant.
* gnu/javax/crypto/pad/ISO10126.java: New class.
* gnu/javax/crypto/pad/PadFactory.java (names): New field.
(getInstance): Added support for ISO-10126 scheme.
(getNames): Likewise.
Cache result for speed.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7732&r2=1.7733
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/security/Registry.java?cvsroot=classpath&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/javax/crypto/pad/PadFactory.java?cvsroot=classpath&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/javax/crypto/pad/ISO10126.java?cvsroot=classpath&rev=1.1
Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.7732
retrieving revision 1.7733
diff -u -b -r1.7732 -r1.7733
--- ChangeLog 9 Jun 2006 11:30:41 -0000 1.7732
+++ ChangeLog 9 Jun 2006 11:49:53 -0000 1.7733
@@ -1,5 +1,15 @@
2006-06-09 Raif S. Naffah <address@hidden>
+ On behalf of Matthew Wringe <address@hidden>
+ * gnu/java/security/Registry.java (ISO10126_PAD): New constant.
+ * gnu/javax/crypto/pad/ISO10126.java: New class.
+ * gnu/javax/crypto/pad/PadFactory.java (names): New field.
+ (getInstance): Added support for ISO-10126 scheme.
+ (getNames): Likewise.
+ Cache result for speed.
+
+2006-06-09 Raif S. Naffah <address@hidden>
+
* gnu/javax/crypto/pad/BasePad.java (selfTest): Re-factored to allow
more
flexible self-test by sub-classes.
(test1BlockSize): New method.
Index: gnu/java/security/Registry.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/security/Registry.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- gnu/java/security/Registry.java 22 Mar 2006 22:49:24 -0000 1.5
+++ gnu/java/security/Registry.java 9 Jun 2006 11:49:54 -0000 1.6
@@ -177,6 +177,9 @@
/** TLSv1 padding scheme. */
String TLS1_PAD = "tls1";
+ /** ISO 10126-2 padding scheme. */
+ String ISO10126_PAD = "iso10126";
+
// Pseudo-random number generators..........................................
/** (Apparently) RC4 keystream PRNG. */
Index: gnu/javax/crypto/pad/PadFactory.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/javax/crypto/pad/PadFactory.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- gnu/javax/crypto/pad/PadFactory.java 22 Mar 2006 22:49:24 -0000
1.2
+++ gnu/javax/crypto/pad/PadFactory.java 9 Jun 2006 11:49:54 -0000
1.3
@@ -49,12 +49,8 @@
*/
public class PadFactory implements Registry
{
-
- // Constants and variables
- // -------------------------------------------------------------------------
-
- // Constructor(s)
- // -------------------------------------------------------------------------
+ /** Collection of padding algorithm names --cached for speed. */
+ private static Set names;
/** Trivial constructor to enforce Singleton pattern. */
private PadFactory()
@@ -104,6 +100,10 @@
{
result = new TLS1();
}
+ else if (pad.equals(ISO10126_PAD))
+ {
+ result = new ISO10126();
+ }
if (result != null && !result.selfTest())
{
@@ -114,13 +114,15 @@
}
/**
- * <p>Returns a address@hidden java.util.Set} of names of padding algorithms
- * supported by this <i>Factory</i>.</p>
+ * Returns a address@hidden java.util.Set} of names of padding algorithms
+ * supported by this <i>Factory</i>.
*
* @return a address@hidden Set} of padding algorithm names (Strings).
*/
public static final Set getNames()
{
+ if (names == null)
+ {
HashSet hs = new HashSet();
hs.add(PKCS5_PAD);
hs.add(PKCS7_PAD);
@@ -128,10 +130,9 @@
hs.add(EME_PKCS1_V1_5_PAD);
hs.add(SSL3_PAD);
hs.add(TLS1_PAD);
-
- return Collections.unmodifiableSet(hs);
+ hs.add(ISO10126_PAD);
+ names = Collections.unmodifiableSet(hs);
+ }
+ return names;
}
-
- // Instance methods
- // -------------------------------------------------------------------------
}
Index: gnu/javax/crypto/pad/ISO10126.java
===================================================================
RCS file: gnu/javax/crypto/pad/ISO10126.java
diff -N gnu/javax/crypto/pad/ISO10126.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/javax/crypto/pad/ISO10126.java 9 Jun 2006 11:49:54 -0000 1.1
@@ -0,0 +1,109 @@
+/* ISO10126.java -- An implementation of the ISO 10126-2 padding scheme
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.crypto.pad;
+
+import gnu.java.security.Registry;
+import gnu.java.security.util.PRNG;
+
+/**
+ * The implementation of the ISO 10126-2 padding algorithm.
+ * <p>
+ * The last byte of the padding block is the number of padding bytes, all other
+ * padding bytes are random.
+ * <p>
+ * References:
+ * <ol>
+ * <li><a href="http://www.w3.org/TR/xmlenc-core/">XML Encryption Syntax and
+ * Processing</a> Section "5.2 Block Encryption Algorithms"; "Padding".</li>
+ * </ol>
+ */
+public final class ISO10126
+ extends BasePad
+{
+ /** Used to generate random numbers for padding bytes. */
+ private PRNG prng;
+
+ ISO10126()
+ {
+ super(Registry.ISO10126_PAD);
+ prng = PRNG.getInstance();
+ }
+
+ public void setup()
+ {
+ // Nothing to do here
+ }
+
+ public byte[] pad(byte[] in, int offset, int length)
+ {
+ int padLength = blockSize - (length % blockSize);
+ final byte[] pad = new byte[padLength];
+
+ // generate random numbers for the padding bytes except for the last byte
+ prng.nextBytes(pad, 0, padLength - 1);
+ // the last byte contains the number of padding bytes
+ pad[padLength - 1] = (byte) padLength;
+
+ return pad;
+ }
+
+ public int unpad(byte[] in, int offset, int length)
+ throws WrongPaddingException
+ {
+ // the last byte contains the number of padding bytes
+ int padLength = in[offset + length - 1] & 0xFF;
+ if (padLength > length)
+ throw new WrongPaddingException();
+
+ return padLength;
+ }
+
+ /**
+ * The default self-test in the super-class would take too long to finish
+ * with this type of padder --due to the large amount of random data needed.
+ * We override the default test and replace it with a simple one for a
16-byte
+ * block-size (default AES block-size). The Mauve test TestOfISO10126 will
+ * exercise all block-sizes that the default self-test uses for the other
+ * padders.
+ */
+ public boolean selfTest()
+ {
+ return test1BlockSize(16, new byte[1024]);
+ }
+}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [commit-cp] classpath ChangeLog gnu/java/security/Registry....,
Raif S. Naffah <=