commit-classpath
[Top][All Lists]
Advanced

[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]);
+  }
+}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]