Imported GNU Classpath 0.90

Imported GNU Classpath 0.90
       * scripts/makemake.tcl: Set gnu/java/awt/peer/swing to ignore.
       * gnu/classpath/jdwp/VMFrame.java (SIZE): New constant.
       * java/lang/VMCompiler.java: Use gnu.java.security.hash.MD5.
       * java/lang/Math.java: New override file.
       * java/lang/Character.java: Merged from Classpath.
       (start, end): Now 'int's.
       (canonicalName): New field.
       (CANONICAL_NAME, NO_SPACES_NAME, CONSTANT_NAME): New constants.
       (UnicodeBlock): Added argument.
       (of): New overload.
       (forName): New method.
       Updated unicode blocks.
       (sets): Updated.
       * sources.am: Regenerated.
       * Makefile.in: Likewise.

From-SVN: r111942
This commit is contained in:
Mark Wielaard
2006-03-10 21:46:48 +00:00
parent 27079765d0
commit 8aa540d2f7
1367 changed files with 188789 additions and 22762 deletions
@@ -0,0 +1,68 @@
/* HavalSpi.java --
Copyright (C) 2003, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the <code>HAVAL</code> <i>Service Provider Interface</i>
* (<b>SPI</b>) Adapter.<p>
*
* @version Revision: $
*/
public class HavalSpi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public HavalSpi()
{
super(Registry.HAVAL_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,69 @@
/* MD2Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the MD2 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class MD2Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
/** Trivial 0-arguments constructor. */
public MD2Spi()
{
super(Registry.MD2_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,69 @@
/* MD4Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the MD4 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class MD4Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
/** Trivial 0-arguments constructor. */
public MD4Spi()
{
super(Registry.MD4_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* MD5Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the MD5 <i>Service Provider Interface</i> (<b>SPI</b>)
* adapter.<p>
*
* @version $Revision: 1.1 $
*/
public class MD5Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public MD5Spi()
{
super(Registry.MD5_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,147 @@
/* MessageDigestAdapter.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.hash.IMessageDigest;
import gnu.java.security.hash.HashFactory;
import java.security.DigestException;
import java.security.MessageDigestSpi;
/**
* The implementation of a generic {@link java.security.MessageDigest} adapter
* class to wrap gnu.crypto hash instances.<p>
*
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) for the
* {@link java.security.MessageDigest} class, which provides the functionality
* of a message digest algorithm, such as MD5 or SHA. Message digests are secure
* one-way hash functions that take arbitrary-sized data and output a fixed-
* length hash value.<p>
*
* All the abstract methods in the {@link java.security.MessageDigestSpi} class
* are implemented by this class and all its sub-classes.<p>
*
* All the implementations which subclass this object, and which are serviced by
* the GNU Crypto provider implement the {@link java.lang.Cloneable} interface.<p>
*
* @version $Revision: 1.1 $
*/
class MessageDigestAdapter extends MessageDigestSpi implements Cloneable
{
// Constants and variables
// -------------------------------------------------------------------------
/** Our underlying hash instance. */
private IMessageDigest adaptee;
// Constructor(s)
// -------------------------------------------------------------------------
/**
* Trivial protected constructor.
*
* @param mdName the canonical name of the hash algorithm.
*/
protected MessageDigestAdapter(String mdName)
{
this(HashFactory.getInstance(mdName));
}
/**
* Private constructor for cloning purposes.
*
* @param adaptee a clone of the underlying hash algorithm instance.
*/
private MessageDigestAdapter(IMessageDigest adaptee)
{
super();
this.adaptee = adaptee;
}
// Class methods
// -------------------------------------------------------------------------
// java.security.MessageDigestSpi interface implementation
// -------------------------------------------------------------------------
public Object clone()
{
return new MessageDigestAdapter((IMessageDigest) adaptee.clone());
}
public int engineGetDigestLength()
{
return adaptee.hashSize();
}
public void engineUpdate(byte input)
{
adaptee.update(input);
}
public void engineUpdate(byte[] input, int offset, int len)
{
adaptee.update(input, offset, len);
}
public byte[] engineDigest()
{
return adaptee.digest();
}
public int engineDigest(byte[] buf, int offset, int len)
throws DigestException
{
int result = adaptee.hashSize();
if (len < result)
{
throw new DigestException();
}
byte[] md = adaptee.digest();
System.arraycopy(md, 0, buf, offset, result);
return result;
}
public void engineReset()
{
adaptee.reset();
}
}
@@ -0,0 +1,68 @@
/* RipeMD128Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the RIPEMD-128 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
*
* @version $Revision: 1.1 $
*/
public class RipeMD128Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RipeMD128Spi()
{
super(Registry.RIPEMD128_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* RipeMD160Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the RIPEMD-160 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
*
* @version $Revision: 1.1 $
*/
public class RipeMD160Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RipeMD160Spi()
{
super(Registry.RIPEMD160_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* Sha160Spi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the SHA-1 (160-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
*
* @version $Revision: 1.1 $
*/
public class Sha160Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha160Spi()
{
super(Registry.SHA160_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* Sha256Spi.java --
Copyright (C) 2003, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-1 (256-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class Sha256Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha256Spi()
{
super(Registry.SHA256_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* Sha384Spi.java --
Copyright (C) 2003, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-2 (384-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class Sha384Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha384Spi()
{
super(Registry.SHA384_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* Sha512Spi.java --
Copyright (C) 2003, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-3 (512-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class Sha512Spi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha512Spi()
{
super(Registry.SHA512_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,69 @@
/* TigerSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* <p>The implementation of the Tiger <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
*
* @version $Revision: 1.1 $
*/
public class TigerSpi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
/** Trivial 0-arguments constructor. */
public TigerSpi()
{
super(Registry.TIGER_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,68 @@
/* WhirlpoolSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.hash;
import gnu.java.security.Registry;
/**
* The implementation of the Whirlpool <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
*
* @version $Revision: 1.1 $
*/
public class WhirlpoolSpi extends MessageDigestAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public WhirlpoolSpi()
{
super(Registry.WHIRLPOOL_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* HavalRandomSpi.java --
Copyright (C) 2003, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the HAVAL-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) Adapter.<p>
*/
public class HavalRandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public HavalRandomSpi()
{
super(Registry.HAVAL_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* MD2RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the MD2-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class MD2RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public MD2RandomSpi()
{
super(Registry.MD2_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* MD4RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the MD4-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class MD4RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public MD4RandomSpi()
{
super(Registry.MD4_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* MD5RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the MD5-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class MD5RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public MD5RandomSpi()
{
super(Registry.MD5_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* RipeMD128RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* <p>The implementation of the RIPEMD128-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class RipeMD128RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RipeMD128RandomSpi()
{
super(Registry.RIPEMD128_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* RipeMD160RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the RIPEMD160-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class RipeMD160RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RipeMD160RandomSpi()
{
super(Registry.RIPEMD160_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,126 @@
/* SecureRandomAdapter.java --
Copyright (C) 2001, 2002, 2003, 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.java.security.jce.prng;
import gnu.java.security.prng.LimitReachedException;
import gnu.java.security.prng.MDGenerator;
import java.security.SecureRandomSpi;
import java.util.HashMap;
/**
* <p>The implementation of a generic {@link java.security.SecureRandom} adapter
* class to wrap gnu.crypto prng instances based on Message Digest algorithms.</p>
*
* <p>This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) for
* the {@link java.security.SecureRandom} class, which provides the
* functionality of a cryptographically strong pseudo-random number generator.</p>
*
* <p>All the abstract methods in the {@link SecureRandomSpi} class are
* implemented by this class and all its sub-classes.</p>
*/
abstract class SecureRandomAdapter extends SecureRandomSpi
{
// Constants and variables
// -------------------------------------------------------------------------
/** Our underlying prng instance. */
private MDGenerator adaptee = new MDGenerator();
/** The name of the message digest algorithm used by the adaptee. */
private String mdName;
// Constructor(s)
// -------------------------------------------------------------------------
/**
* <p>Trivial protected constructor.</p>
*
* @param mdName the canonical name of the underlying hash algorithm.
*/
protected SecureRandomAdapter(String mdName)
{
super();
this.mdName = mdName;
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
// java.security.SecureRandomSpi interface implementation ------------------
public byte[] engineGenerateSeed(int numBytes)
{
if (numBytes < 1)
{
return new byte[0];
}
byte[] result = new byte[numBytes];
this.engineNextBytes(result);
return result;
}
public void engineNextBytes(byte[] bytes)
{
if (!adaptee.isInitialised())
{
this.engineSetSeed(new byte[0]);
}
try
{
adaptee.nextBytes(bytes, 0, bytes.length);
}
catch (LimitReachedException ignored)
{
}
}
public void engineSetSeed(byte[] seed)
{
HashMap attributes = new HashMap();
attributes.put(MDGenerator.MD_NAME, mdName);
attributes.put(MDGenerator.SEEED, seed);
adaptee.init(attributes);
}
}
@@ -0,0 +1,66 @@
/* Sha160RandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the SHA1-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class Sha160RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha160RandomSpi()
{
super(Registry.SHA160_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* Sha256RandomSpi.java --
Copyright (C) 2003, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-256 based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.</p>
*/
public class Sha256RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha256RandomSpi()
{
super(Registry.SHA256_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* Sha384RandomSpi.java --
Copyright (C) 2003, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-384 based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.</p>
*/
public class Sha384RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha384RandomSpi()
{
super(Registry.SHA384_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* Sha512RandomSpi.java --
Copyright (C) 2003, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-512 based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.</p>
*/
public class Sha512RandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public Sha512RandomSpi()
{
super(Registry.SHA512_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* TigerRandomSpi.java --
Copyright (C) 2003, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the Tiger based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class TigerRandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public TigerRandomSpi()
{
super(Registry.TIGER_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,66 @@
/* WhirlpoolRandomSpi.java --
Copyright (C) 2001, 2002, 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.java.security.jce.prng;
import gnu.java.security.Registry;
/**
* The implementation of the Whirlpool-based SecureRandom <i>Service Provider
* Interface</i> (<b>SPI</b>) adapter.<p>
*/
public class WhirlpoolRandomSpi extends SecureRandomAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public WhirlpoolRandomSpi()
{
super(Registry.WHIRLPOOL_HASH);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,238 @@
/* DSSKeyFactory.java -- JCE DSA key factory Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.dss.DSSKeyPairPKCS8Codec;
import gnu.java.security.key.dss.DSSKeyPairX509Codec;
import gnu.java.security.key.dss.DSSPrivateKey;
import gnu.java.security.key.dss.DSSPublicKey;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactorySpi;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.security.spec.DSAPrivateKeySpec;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
* DSA key factory.
*
* @author Casey Marshall (rsdio@metastatic.org)
*/
public class DSSKeyFactory extends KeyFactorySpi
{
// implicit 0-arguments constructor
protected PublicKey engineGeneratePublic(KeySpec keySpec)
throws InvalidKeySpecException
{
if (keySpec instanceof DSAPublicKeySpec)
{
DSAPublicKeySpec spec = (DSAPublicKeySpec) keySpec;
BigInteger p = spec.getP();
BigInteger q = spec.getQ();
BigInteger g = spec.getG();
BigInteger y = spec.getY();
return new DSSPublicKey(Registry.X509_ENCODING_ID, p, q, g, y);
}
if (keySpec instanceof X509EncodedKeySpec)
{
X509EncodedKeySpec spec = (X509EncodedKeySpec) keySpec;
byte[] encoded = spec.getEncoded();
PublicKey result;
try
{
result = new DSSKeyPairX509Codec().decodePublicKey(encoded);
return result;
}
catch (RuntimeException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
throw new InvalidKeySpecException("Unsupported (public) key specification");
}
protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
throws InvalidKeySpecException
{
if (keySpec instanceof DSAPrivateKeySpec)
{
DSAPrivateKeySpec spec = (DSAPrivateKeySpec) keySpec;
BigInteger p = spec.getP();
BigInteger q = spec.getQ();
BigInteger g = spec.getG();
BigInteger x = spec.getX();
return new DSSPrivateKey(Registry.PKCS8_ENCODING_ID, p, q, g, x);
}
if (keySpec instanceof PKCS8EncodedKeySpec)
{
PKCS8EncodedKeySpec spec = (PKCS8EncodedKeySpec) keySpec;
byte[] encoded = spec.getEncoded();
PrivateKey result;
try
{
result = new DSSKeyPairPKCS8Codec().decodePrivateKey(encoded);
return result;
}
catch (RuntimeException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
throw new InvalidKeySpecException("Unsupported (private) key specification");
}
protected KeySpec engineGetKeySpec(Key key, Class keySpec)
throws InvalidKeySpecException
{
if (key instanceof DSAPublicKey)
{
if (keySpec.isAssignableFrom(DSAPublicKeySpec.class))
{
DSAPublicKey dsaKey = (DSAPublicKey) key;
BigInteger p = dsaKey.getParams().getP();
BigInteger q = dsaKey.getParams().getQ();
BigInteger g = dsaKey.getParams().getG();
BigInteger y = dsaKey.getY();
return new DSAPublicKeySpec(y, p, q, g);
}
if (keySpec.isAssignableFrom(X509EncodedKeySpec.class))
{
if (key instanceof DSSPublicKey)
{
DSSPublicKey dssKey = (DSSPublicKey) key;
byte[] encoded = dssKey.getEncoded(Registry.X509_ENCODING_ID);
return new X509EncodedKeySpec(encoded);
}
if (Registry.X509_ENCODING_SORT_NAME.equalsIgnoreCase(key.getFormat()))
{
byte[] encoded = key.getEncoded();
return new X509EncodedKeySpec(encoded);
}
throw new InvalidKeySpecException("Wrong key type or unsupported (public) key specification");
}
throw new InvalidKeySpecException("Unsupported (public) key specification");
}
if (key instanceof DSAPrivateKey)
{
if (keySpec.isAssignableFrom(DSAPrivateKeySpec.class))
{
DSAPrivateKey dsaKey = (DSAPrivateKey) key;
BigInteger p = dsaKey.getParams().getP();
BigInteger q = dsaKey.getParams().getQ();
BigInteger g = dsaKey.getParams().getG();
BigInteger x = dsaKey.getX();
return new DSAPrivateKeySpec(x, p, q, g);
}
if (keySpec.isAssignableFrom(PKCS8EncodedKeySpec.class))
{
if (key instanceof DSSPrivateKey)
{
DSSPrivateKey dssKey = (DSSPrivateKey) key;
byte[] encoded = dssKey.getEncoded(Registry.PKCS8_ENCODING_ID);
return new PKCS8EncodedKeySpec(encoded);
}
if (Registry.PKCS8_ENCODING_SHORT_NAME.equalsIgnoreCase(key.getFormat()))
{
byte[] encoded = key.getEncoded();
return new PKCS8EncodedKeySpec(encoded);
}
throw new InvalidKeySpecException("Wrong key type or unsupported (private) key specification");
}
throw new InvalidKeySpecException("Unsupported (private) key specification");
}
throw new InvalidKeySpecException("Wrong key type or unsupported key specification");
}
protected Key engineTranslateKey(Key key) throws InvalidKeyException
{
if ((key instanceof DSSPublicKey) || (key instanceof DSSPrivateKey))
return key;
if (key instanceof DSAPublicKey)
{
DSAPublicKey dsaKey = (DSAPublicKey) key;
BigInteger p = dsaKey.getParams().getP();
BigInteger q = dsaKey.getParams().getQ();
BigInteger g = dsaKey.getParams().getG();
BigInteger y = dsaKey.getY();
return new DSSPublicKey(Registry.X509_ENCODING_ID, p, q, g, y);
}
if (key instanceof DSAPrivateKey)
{
DSAPrivateKey dsaKey = (DSAPrivateKey) key;
BigInteger p = dsaKey.getParams().getP();
BigInteger q = dsaKey.getParams().getQ();
BigInteger g = dsaKey.getParams().getG();
BigInteger x = dsaKey.getX();
return new DSSPrivateKey(Registry.PKCS8_ENCODING_ID, p, q, g, x);
}
throw new InvalidKeyException("Wrong key type");
}
}
@@ -0,0 +1,169 @@
/* DSSKeyPairGeneratorSpi.java --
Copyright 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.dss.DSSKeyPairGenerator;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidParameterException;
import java.security.SecureRandom;
import java.security.interfaces.DSAKeyPairGenerator;
import java.security.interfaces.DSAParams;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
import java.util.HashMap;
/**
* The implementation of a {@link java.security.KeyPairGenerator} adapter class
* to wrap gnu.crypto DSS keypair generator instances.<p>
*
* In case the client does not explicitly initialize the KeyPairGenerator (via
* a call to an <code>initialize()</code> method), the GNU Crypto provider
* uses a default <i>modulus</i> size (keysize) of 1024 bits.<p>
*
* @version $Revision: 1.3 $
*/
public class DSSKeyPairGeneratorSpi extends KeyPairGeneratorAdapter implements
DSAKeyPairGenerator
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public DSSKeyPairGeneratorSpi()
{
super(Registry.DSS_KPG);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
public void initialize(int keysize, SecureRandom random)
{
this.initialize(keysize, false, random);
}
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException
{
HashMap attributes = new HashMap();
if (params != null)
{
if (!(params instanceof DSAParameterSpec))
throw new InvalidAlgorithmParameterException(
"Parameters argument is not a non-null instance, or " +
"sub-instance, of java.security.spec.DSAParameterSpec");
attributes.put(DSSKeyPairGenerator.DSS_PARAMETERS, params);
}
if (random != null)
{
attributes.put(DSSKeyPairGenerator.SOURCE_OF_RANDOMNESS, random);
}
attributes.put(DSSKeyPairGenerator.PREFERRED_ENCODING_FORMAT,
new Integer(Registry.ASN1_ENCODING_ID));
try
{
adaptee.setup(attributes);
}
catch (IllegalArgumentException x)
{
InvalidAlgorithmParameterException y =
new InvalidAlgorithmParameterException();
y.initCause(x);
throw y;
}
}
// java.security.interfaces.DSAKeyPairGenerator interface implementation -----
public void initialize(DSAParams params, SecureRandom random)
throws InvalidParameterException
{
if (params == null || !(params instanceof DSAParameterSpec))
throw new InvalidParameterException(
"Parameters argument is either null or is not an instance, or " +
"sub-instance, of java.security.spec.DSAParameterSpec");
DSAParameterSpec spec = (DSAParameterSpec) params;
try
{
this.initialize((AlgorithmParameterSpec) spec, random);
}
catch (InvalidAlgorithmParameterException x)
{
InvalidParameterException y = new InvalidParameterException();
y.initCause(x);
throw y;
}
}
public void initialize(int modlen, boolean genParams, SecureRandom random)
throws InvalidParameterException
{
HashMap attributes = new HashMap();
attributes.put(DSSKeyPairGenerator.MODULUS_LENGTH, new Integer(modlen));
if (random != null)
attributes.put(DSSKeyPairGenerator.SOURCE_OF_RANDOMNESS, random);
attributes.put(DSSKeyPairGenerator.USE_DEFAULTS,
Boolean.valueOf(!genParams));
attributes.put(DSSKeyPairGenerator.STRICT_DEFAULTS, Boolean.TRUE);
attributes.put(DSSKeyPairGenerator.PREFERRED_ENCODING_FORMAT,
new Integer(Registry.ASN1_ENCODING_ID));
try
{
adaptee.setup(attributes);
}
catch (IllegalArgumentException x)
{
InvalidParameterException y = new InvalidParameterException();
y.initCause(x);
throw y;
}
}
}
@@ -0,0 +1,220 @@
/* DSSParameters.java -- DSS parameters DAO
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.der.DER;
import gnu.java.security.der.DERReader;
import gnu.java.security.der.DERValue;
import gnu.java.security.der.DERWriter;
import gnu.java.security.util.DerUtil;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.AlgorithmParametersSpi;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
import java.security.spec.InvalidParameterSpecException;
import java.util.ArrayList;
/**
* A JCE-specific Data Access Object (DAO) for DSS parameters.
*/
public class DSSParameters
extends AlgorithmParametersSpi
{
/**
* A prime modulus, where <code>2<sup>L-1</sup> &lt; p &lt; 2<sup>L</sup></code>
* for <code>512 &lt;= L &lt;= 1024</code> and <code>L</code> a multiple of
* <code>64</code>.
*/
private BigInteger p;
/**
* A prime divisor of <code>p - 1</code>, where <code>2<sup>159</sup> &lt; q
* &lt; 2<sup>160</sup></code>.
*/
private BigInteger q;
/**
* <code>g = h<sup>(p-1)</sup>/q mod p</code>, where <code>h</code> is any
* integer with <code>1 &lt; h &lt; p - 1</code> such that <code>h<sup>
* (p-1)</sup>/q mod p > 1</code> (<code>g</code> has order <code>q mod p
* </code>).
*/
private BigInteger g;
// default 0-arguments constructor
protected void engineInit(AlgorithmParameterSpec spec)
throws InvalidParameterSpecException
{
if (! (spec instanceof DSAParameterSpec))
throw new InvalidParameterSpecException("Wrong AlgorithmParameterSpec type: "
+ spec.getClass().getName());
DSAParameterSpec dsaSpec = (DSAParameterSpec) spec;
p = dsaSpec.getP();
q = dsaSpec.getQ();
g = dsaSpec.getG();
}
/**
* Decodes the set of DSS parameters as per RFC-2459; i.e. the DER-encoded
* form of the following ASN.1 construct:
*
* <pre>
* DssParams ::= SEQUENCE {
* p INTEGER,
* q INTEGER,
* g INTEGER
* }
* </pre>
*/
protected void engineInit(byte[] params) throws IOException
{
DERReader der = new DERReader(params);
DERValue derParams = der.read();
DerUtil.checkIsConstructed(derParams, "Wrong DSS Parameters field");
DERValue val = der.read();
DerUtil.checkIsBigInteger(val, "Wrong P field");
p = (BigInteger) val.getValue();
val = der.read();
DerUtil.checkIsBigInteger(val, "Wrong Q field");
q = (BigInteger) val.getValue();
val = der.read();
DerUtil.checkIsBigInteger(val, "Wrong G field");
g = (BigInteger) val.getValue();
}
protected void engineInit(byte[] params, String format) throws IOException
{
if (format != null)
{
format = format.trim();
if (format.length() == 0)
throw new IOException("Format MUST NOT be an empty string");
if (! format.equalsIgnoreCase(Registry.ASN1_ENCODING_SHORT_NAME))
throw new IOException("Unknown or unsupported format: " + format);
}
engineInit(params);
}
protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
throws InvalidParameterSpecException
{
if (! paramSpec.isAssignableFrom(DSAParameterSpec.class))
throw new InvalidParameterSpecException("Wrong AlgorithmParameterSpec type: "
+ paramSpec.getName());
return new DSAParameterSpec(p, q, g);
}
/**
* Encodes the set of DSS parameters as per RFC-2459; i.e. as the DER-encoded
* form of the following ASN.1 construct:
*
* <pre>
* DssParams ::= SEQUENCE {
* p INTEGER,
* q INTEGER,
* g INTEGER
* }
* </pre>
*/
protected byte[] engineGetEncoded() throws IOException
{
DERValue derP = new DERValue(DER.INTEGER, p);
DERValue derQ = new DERValue(DER.INTEGER, q);
DERValue derG = new DERValue(DER.INTEGER, g);
ArrayList params = new ArrayList(3);
params.add(derP);
params.add(derQ);
params.add(derG);
DERValue derParams = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, params);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DERWriter.write(baos, derParams);
byte[] result = baos.toByteArray();
return result;
}
protected byte[] engineGetEncoded(String format) throws IOException
{
if (format != null)
{
format = format.trim();
if (format.length() == 0)
throw new IOException("Format MUST NOT be an empty string");
if (! format.equalsIgnoreCase(Registry.ASN1_ENCODING_SHORT_NAME))
throw new IOException("Unknown or unsupported format: " + format);
}
return engineGetEncoded();
}
protected String engineToString()
{
StringBuffer sb = new StringBuffer("p=");
if (p == null)
sb.append("???");
else
sb.append("0x").append(p.toString(16));
sb.append(", q=");
if (q == null)
sb.append("???");
else
sb.append("0x").append(q.toString(16));
sb.append(", g=");
if (g == null)
sb.append("???");
else
sb.append("0x").append(g.toString(16));
return sb.toString();
}
}
@@ -0,0 +1,125 @@
/* DSSParametersGenerator.java -- JCE Adapter for a generator of DSS parameters
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.dss.DSSKeyPairGenerator;
import gnu.java.security.key.dss.FIPS186;
import gnu.java.security.provider.Gnu;
import java.math.BigInteger;
import java.security.AlgorithmParameterGeneratorSpi;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
import java.security.spec.InvalidParameterSpecException;
/**
* A JCE Adapter for a generator of DSS parameters.
*/
public class DSSParametersGenerator
extends AlgorithmParameterGeneratorSpi
{
private static final Provider GNU = new Gnu();
/** Size of the public modulus in bits. */
private int modulusLength = -1;
/** User specified source of randomness. */
private SecureRandom rnd;
/** Our concrete DSS parameters generator. */
private FIPS186 fips;
// default 0-arguments constructor
protected void engineInit(int size, SecureRandom random)
{
if ((size % 64) != 0 || size < 512 || size > 1024)
throw new InvalidParameterException("Modulus size/length (in bits) MUST "
+ "be a multiple of 64, greater than "
+ "or equal to 512, and less than or "
+ "equal to 1024");
this.modulusLength = size;
this.rnd = random;
}
protected void engineInit(AlgorithmParameterSpec spec, SecureRandom random)
throws InvalidAlgorithmParameterException
{
if (! (spec instanceof DSAParameterSpec))
throw new InvalidAlgorithmParameterException("Wrong AlgorithmParameterSpec type: "
+ spec.getClass().getName());
DSAParameterSpec dsaSpec = (DSAParameterSpec) spec;
BigInteger p = dsaSpec.getP();
int size = p.bitLength();
this.engineInit(size, random);
}
protected AlgorithmParameters engineGenerateParameters()
{
if (modulusLength < 1)
modulusLength = DSSKeyPairGenerator.DEFAULT_MODULUS_LENGTH;
fips = new FIPS186(modulusLength, rnd);
BigInteger[] params = fips.generateParameters();
BigInteger p = params[3];
BigInteger q = params[2];
BigInteger g = params[5];
DSAParameterSpec spec = new DSAParameterSpec(p, q, g);
AlgorithmParameters result = null;
try
{
result = AlgorithmParameters.getInstance(Registry.DSS_KPG, GNU);
result.init(spec);
}
catch (NoSuchAlgorithmException ignore)
{
}
catch (InvalidParameterSpecException ignore)
{
}
return result;
}
}
@@ -0,0 +1,70 @@
/* DSSRawSignatureSpi.java --
Copyright 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.dss.DSSSignatureRawCodec;
/**
* The implementation of <i>Service Provider Interface</i> (<b>SPI</b>) adapter
* for the DSS (Digital Signature Standard) signature scheme, encoded and/or
* decoded in RAW format.<p>
*
* @version $Revision: 1.1 $
*/
public class DSSRawSignatureSpi extends SignatureAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public DSSRawSignatureSpi()
{
super(Registry.DSS_SIG, new DSSSignatureRawCodec());
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,453 @@
/* EncodedKeyFactory.java -- JCE Encoded key factory Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.dss.DSSPrivateKey;
import gnu.java.security.key.dss.DSSPublicKey;
import gnu.java.security.key.rsa.GnuRSAPrivateKey;
import gnu.java.security.key.rsa.GnuRSAPublicKey;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.InvalidParameterException;
import java.security.Key;
import java.security.KeyFactorySpi;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.DSAPrivateKeySpec;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.interfaces.DHPrivateKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHPrivateKeySpec;
import javax.crypto.spec.DHPublicKeySpec;
/**
* A factory for keys encoded in either the X.509 format (for public keys) or
* the PKCS#8 format (for private keys).
*/
public class EncodedKeyFactory
extends KeyFactorySpi
{
private static final Logger log = Logger.getLogger(EncodedKeyFactory.class.getName());
// implicit 0-arguments constructor
// Class methods
// --------------------------------------------------------------------------
private static Object invokeConstructor(String className, Object[] params)
throws InvalidKeySpecException
{
Class clazz = getConcreteClass(className);
try
{
Constructor ctor = getConcreteCtor(clazz);
Object result = ctor.newInstance(params);
return result;
}
catch (InstantiationException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
catch (IllegalAccessException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(y);
throw y;
}
catch (InvocationTargetException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
private static Class getConcreteClass(String className)
throws InvalidKeySpecException
{
try
{
Class result = Class.forName(className);
return result;
}
catch (ClassNotFoundException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
private static Constructor getConcreteCtor(Class clazz)
throws InvalidKeySpecException
{
try
{
Constructor result = clazz.getConstructor(new Class[] {int.class,
BigInteger.class,
BigInteger.class,
BigInteger.class,
BigInteger.class});
return result;
}
catch (NoSuchMethodException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
private static Object invokeValueOf(String className, byte[] encoded)
throws InvalidKeySpecException
{
Class clazz = getConcreteClass(className);
try
{
Method valueOf = getValueOfMethod(clazz);
Object result = valueOf.invoke(null, new Object[] { encoded });
return result;
}
catch (IllegalAccessException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
catch (InvocationTargetException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
private static Method getValueOfMethod(Class clazz)
throws InvalidKeySpecException
{
try
{
Method result = clazz.getMethod("valueOf", new Class[] {byte[].class});
return result;
}
catch (NoSuchMethodException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
// Instance methods
// --------------------------------------------------------------------------
protected PublicKey engineGeneratePublic(KeySpec keySpec)
throws InvalidKeySpecException
{
log.entering(this.getClass().getName(), "engineGeneratePublic()", keySpec);
PublicKey result = null;
if (keySpec instanceof DSAPublicKeySpec)
result = decodeDSSPublicKey((DSAPublicKeySpec) keySpec);
else if (keySpec instanceof RSAPublicKeySpec)
result = decodeRSAPublicKey((RSAPublicKeySpec) keySpec);
else if (keySpec instanceof DHPublicKeySpec)
result = decodeDHPublicKey((DHPublicKeySpec) keySpec);
else
{
if (! (keySpec instanceof X509EncodedKeySpec))
throw new InvalidKeySpecException("Unsupported key specification");
byte[] input = ((X509EncodedKeySpec) keySpec).getEncoded();
boolean ok = false;
// try DSS
try
{
result = DSSPublicKey.valueOf(input);
ok = true;
}
catch (InvalidParameterException ignored)
{
log.log(Level.FINE, "Exception in DSSPublicKey.valueOf(). Ignore",
ignored);
}
if (! ok) // try RSA
try
{
result = GnuRSAPublicKey.valueOf(input);
ok = true;
}
catch (InvalidParameterException ignored)
{
log.log(Level.FINE,
"Exception in GnuRSAPublicKey.valueOf(). Ignore",
ignored);
}
if (! ok) // try DH
result = decodeDHPublicKey(input);
}
log.exiting(this.getClass().getName(), "engineGeneratePublic()", result);
return result;
}
protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
throws InvalidKeySpecException
{
log.entering(this.getClass().getName(), "engineGeneratePrivate()", keySpec);
PrivateKey result = null;
if (keySpec instanceof DSAPrivateKeySpec)
result = decodeDSSPrivateKey((DSAPrivateKeySpec) keySpec);
else if (keySpec instanceof RSAPrivateCrtKeySpec)
result = decodeRSAPrivateKey((RSAPrivateCrtKeySpec) keySpec);
else if (keySpec instanceof DHPrivateKeySpec)
result = decodeDHPrivateKey((DHPrivateKeySpec) keySpec);
else
{
if (! (keySpec instanceof PKCS8EncodedKeySpec))
throw new InvalidKeySpecException("Unsupported key specification");
byte[] input = ((PKCS8EncodedKeySpec) keySpec).getEncoded();
boolean ok = false;
// try DSS
try
{
result = DSSPrivateKey.valueOf(input);
ok = true;
}
catch (InvalidParameterException ignored)
{
log.log(Level.FINE, "Exception in DSSPrivateKey.valueOf(). Ignore",
ignored);
}
if (! ok) // try RSA
try
{
result = GnuRSAPrivateKey.valueOf(input);
ok = true;
}
catch (InvalidParameterException ignored)
{
log.log(Level.FINE,
"Exception in GnuRSAPrivateKey.valueOf(). Ignore",
ignored);
}
if (! ok) // try DH
result = decodeDHPrivateKey(input);
}
log.exiting(this.getClass().getName(), "engineGeneratePrivate()", result);
return result;
}
protected KeySpec engineGetKeySpec(Key key, Class keySpec)
throws InvalidKeySpecException
{
if (key instanceof PublicKey
&& Registry.X509_ENCODING_SORT_NAME.equalsIgnoreCase(key.getFormat())
&& keySpec.isAssignableFrom(X509EncodedKeySpec.class))
return new X509EncodedKeySpec(key.getEncoded());
if (key instanceof PrivateKey
&& Registry.PKCS8_ENCODING_SHORT_NAME.equalsIgnoreCase(key.getFormat())
&& keySpec.isAssignableFrom(PKCS8EncodedKeySpec.class))
return new PKCS8EncodedKeySpec(key.getEncoded());
throw new InvalidKeySpecException("Unsupported format or invalid key spec class");
}
protected Key engineTranslateKey(Key key) throws InvalidKeyException
{
throw new InvalidKeyException("Key translation not supported");
}
/**
* @param spec an instance of {@link DSAPublicKeySpec} to decode.
* @return an instance of {@link DSSPublicKey} constructed from the
* information in the designated key-specification.
*/
private DSSPublicKey decodeDSSPublicKey(DSAPublicKeySpec spec)
{
BigInteger p = spec.getP();
BigInteger q = spec.getQ();
BigInteger g = spec.getG();
BigInteger y = spec.getY();
return new DSSPublicKey(Registry.X509_ENCODING_ID, p, q, g, y);
}
/**
* @param spec an instance of {@link RSAPublicKeySpec} to decode.
* @return an instance of {@link GnuRSAPublicKey} constructed from the
* information in the designated key-specification.
*/
private GnuRSAPublicKey decodeRSAPublicKey(RSAPublicKeySpec spec)
{
BigInteger n = spec.getModulus();
BigInteger e = spec.getPublicExponent();
return new GnuRSAPublicKey(Registry.X509_ENCODING_ID, n, e);
}
/**
* @param spec an instance of {@link DHPublicKeySpec} to decode.
* @return an instance of a {@link DHPublicKey} constructed from the
* information in the designated key-specification.
* @throws InvalidKeySpecException if no concrete implementation of the
* {@link DHPublicKey} interface exists at run-time, or if an
* exception occurs during its instantiation.
*/
private DHPublicKey decodeDHPublicKey(DHPublicKeySpec spec)
throws InvalidKeySpecException
{
BigInteger p = spec.getP();
BigInteger g = spec.getG();
BigInteger y = spec.getY();
Object[] params = new Object[] {new Integer(Registry.X509_ENCODING_ID),
null, p, g, y};
Object obj = invokeConstructor("gnu.javax.crypto.key.dh.GnuDHPublicKey",
params);
return (DHPublicKey) obj;
}
/**
* @param encoded the bytes to decode.
* @return an instance of a {@link DHPublicKey} constructed from the
* information in the designated key-specification.
* @throws InvalidKeySpecException if no concrete implementation of the
* {@link DHPublicKey} interface exists at run-time, or if an
* exception occurs during its instantiation.
*/
private DHPublicKey decodeDHPublicKey(byte[] encoded)
throws InvalidKeySpecException
{
Object obj = invokeValueOf("gnu.javax.crypto.key.dh.GnuDHPublicKey",
encoded);
return (DHPublicKey) obj;
}
/**
* @param spec an instance of {@link DSAPrivateKeySpec} to decode.
* @return an instance of {@link DSSPrivateKey} constructed from the
* information in the designated key-specification.
*/
private PrivateKey decodeDSSPrivateKey(DSAPrivateKeySpec spec)
{
BigInteger p = spec.getP();
BigInteger q = spec.getQ();
BigInteger g = spec.getG();
BigInteger x = spec.getX();
return new DSSPrivateKey(Registry.PKCS8_ENCODING_ID, p, q, g, x);
}
/**
* @param spec an instance of {@link RSAPrivateCrtKeySpec} to decode.
* @return an instance of {@link GnuRSAPrivateKey} constructed from the
* information in the designated key-specification.
*/
private PrivateKey decodeRSAPrivateKey(RSAPrivateCrtKeySpec spec)
{
BigInteger n = spec.getModulus();
BigInteger e = spec.getPublicExponent();
BigInteger d = spec.getPrivateExponent();
BigInteger p = spec.getPrimeP();
BigInteger q = spec.getPrimeQ();
BigInteger dP = spec.getPrimeExponentP();
BigInteger dQ = spec.getPrimeExponentQ();
BigInteger qInv = spec.getCrtCoefficient();
return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
n, e, d, p, q, dP, dQ, qInv);
}
/**
* @param spec an instance of {@link DHPrivateKeySpec} to decode.
* @return an instance of a {@link DHPrivateKey} constructed from the
* information in the designated key-specification.
* @throws InvalidKeySpecException if no concrete implementation of the
* {@link DHPrivateKey} interface exists at run-time, or if an
* exception occurs during its instantiation.
*/
private DHPrivateKey decodeDHPrivateKey(DHPrivateKeySpec spec)
throws InvalidKeySpecException
{
BigInteger p = spec.getP();
BigInteger g = spec.getG();
BigInteger x = spec.getX();
Object[] params = new Object[] {new Integer(Registry.PKCS8_ENCODING_ID),
null, p, g, x};
Object obj = invokeConstructor("gnu.javax.crypto.key.dh.GnuDHPrivateKey",
params);
return (DHPrivateKey) obj;
}
/**
* @param encoded the bytes to decode.
* @return an instance of a {@link DHPrivateKey} constructed from the
* information in the designated key-specification.
* @throws InvalidKeySpecException if no concrete implementation of the
* {@link DHPrivateKey} interface exists at run-time, or if an
* exception occurs during its instantiation.
*/
private DHPrivateKey decodeDHPrivateKey(byte[] encoded)
throws InvalidKeySpecException
{
Object obj = invokeValueOf("gnu.javax.crypto.key.dh.GnuDHPrivateKey",
encoded);
return (DHPrivateKey) obj;
}
}
@@ -0,0 +1,109 @@
/* KeyPairGeneratorAdapter.java --
Copyright 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.key.IKeyPairGenerator;
import gnu.java.security.key.KeyPairGeneratorFactory;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
/**
* The implementation of a generic {@link java.security.KeyPairGenerator}
* adapter class to wrap gnu.crypto keypair generator instances.<p>
*
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) for the
* {@link java.security.KeyPairGenerator} class, which is used to generate pairs
* of public and private keys.<p>
*
* All the abstract methods in the {@link java.security.KeyPairGeneratorSpi}
* class are implemented by this class and all its sub-classes.<p>
*
* In case the client does not explicitly initialize the KeyPairGenerator (via
* a call to an <code>initialize()</code> method), the GNU Crypto provider
* supplies (and document) default values to be used. For example, the GNU
* Crypto provider uses a default <i>modulus</i> size (keysize) of 1024 bits for
* the DSS (Digital Signature Standard) a.k.a <i>DSA</i>.<p>
*
* @version $Revision: 1.3 $
*/
public abstract class KeyPairGeneratorAdapter extends KeyPairGenerator
{
// Constants and variables
// -------------------------------------------------------------------------
/** Our underlying keypair instance. */
protected IKeyPairGenerator adaptee;
// Constructor(s)
// -------------------------------------------------------------------------
/**
* Trivial protected constructor.
*
* @param kpgName the canonical name of the keypair generator algorithm.
*/
protected KeyPairGeneratorAdapter(String kpgName)
{
super(kpgName);
this.adaptee = KeyPairGeneratorFactory.getInstance(kpgName);
}
// Class methods
// -------------------------------------------------------------------------
// java.security.KeyPairGeneratorSpi interface implementation
// -------------------------------------------------------------------------
public abstract void initialize(int keysize, SecureRandom random);
public abstract void initialize(AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidAlgorithmParameterException;
public KeyPair generateKeyPair()
{
return adaptee.generate();
}
}
@@ -0,0 +1,56 @@
/* MD2WithRSA.java -- RSA PKCS1 with MD2 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with MD2 hash and X.509
* encoding format.
*/
public class MD2withRSA
extends SignatureAdapter
{
public MD2withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.MD2_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,56 @@
/* MD5withRSA.java -- RSA PKCS1 with MD5 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with MD5 hash and X.509
* encoding format.
*/
public class MD5withRSA
extends SignatureAdapter
{
public MD5withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.MD5_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,265 @@
/* RSAKeyFactory.java -- RSA key-factory JCE Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.rsa.GnuRSAPrivateKey;
import gnu.java.security.key.rsa.GnuRSAPublicKey;
import gnu.java.security.key.rsa.RSAKeyPairPKCS8Codec;
import gnu.java.security.key.rsa.RSAKeyPairX509Codec;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactorySpi;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
public class RSAKeyFactory
extends KeyFactorySpi
{
// implicit 0-arguments constructor
protected PublicKey engineGeneratePublic(KeySpec keySpec)
throws InvalidKeySpecException
{
if (keySpec instanceof RSAPublicKeySpec)
{
RSAPublicKeySpec spec = (RSAPublicKeySpec) keySpec;
BigInteger n = spec.getModulus();
BigInteger e = spec.getPublicExponent();
return new GnuRSAPublicKey(Registry.X509_ENCODING_ID, n, e);
}
if (keySpec instanceof X509EncodedKeySpec)
{
X509EncodedKeySpec spec = (X509EncodedKeySpec) keySpec;
byte[] encoded = spec.getEncoded();
PublicKey result;
try
{
result = new RSAKeyPairX509Codec().decodePublicKey(encoded);
}
catch (RuntimeException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
throw new InvalidKeySpecException("Unsupported (public) key specification");
}
protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
throws InvalidKeySpecException
{
if (keySpec instanceof RSAPrivateCrtKeySpec)
{
RSAPrivateCrtKeySpec spec = (RSAPrivateCrtKeySpec) keySpec;
BigInteger n = spec.getModulus();
BigInteger e = spec.getPublicExponent();
BigInteger d = spec.getPrivateExponent();
BigInteger p = spec.getPrimeP();
BigInteger q = spec.getPrimeQ();
BigInteger dP = spec.getPrimeExponentP();
BigInteger dQ = spec.getPrimeExponentQ();
BigInteger qInv = spec.getCrtCoefficient();
return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
n, e, d, p, q, dP, dQ, qInv);
}
// if (keySpec instanceof RSAPrivateKeySpec)
// {
// RSAPrivateKeySpec spec = (RSAPrivateKeySpec) keySpec;
// BigInteger n = spec.getModulus();
// BigInteger d = spec.getPrivateExponent();
// return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
// n, null, d, null, null, null, null, null);
// }
if (keySpec instanceof PKCS8EncodedKeySpec)
{
PKCS8EncodedKeySpec spec = (PKCS8EncodedKeySpec) keySpec;
byte[] encoded = spec.getEncoded();
PrivateKey result;
try
{
result = new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded);
}
catch (RuntimeException x)
{
InvalidKeySpecException y = new InvalidKeySpecException();
y.initCause(x);
throw y;
}
}
throw new InvalidKeySpecException("Unsupported (private) key specification");
}
protected KeySpec engineGetKeySpec(Key key, Class keySpec)
throws InvalidKeySpecException
{
if (key instanceof RSAPublicKey)
{
if (keySpec.isAssignableFrom(RSAPublicKeySpec.class))
{
RSAPublicKey rsaKey = (RSAPublicKey) key;
BigInteger n = rsaKey.getModulus();
BigInteger e = rsaKey.getPublicExponent();
return new RSAPublicKeySpec(n, e);
}
if (keySpec.isAssignableFrom(X509EncodedKeySpec.class))
{
if (key instanceof GnuRSAPublicKey)
{
GnuRSAPublicKey rsaKey = (GnuRSAPublicKey) key;
byte[] encoded = rsaKey.getEncoded(Registry.X509_ENCODING_ID);
return new X509EncodedKeySpec(encoded);
}
if (Registry.X509_ENCODING_SORT_NAME.equalsIgnoreCase(key.getFormat()))
{
byte[] encoded = key.getEncoded();
return new X509EncodedKeySpec(encoded);
}
throw new InvalidKeySpecException("Wrong key type or unsupported (public) key specification");
}
throw new InvalidKeySpecException("Unsupported (public) key specification");
}
if ((key instanceof RSAPrivateCrtKey)
&& keySpec.isAssignableFrom(RSAPrivateCrtKeySpec.class))
{
RSAPrivateCrtKey rsaKey = (RSAPrivateCrtKey) key;
BigInteger n = rsaKey.getModulus();
BigInteger e = rsaKey.getPublicExponent();
BigInteger d = rsaKey.getPrivateExponent();
BigInteger p = rsaKey.getPrimeP();
BigInteger q = rsaKey.getPrimeQ();
BigInteger dP = rsaKey.getPrimeExponentP();
BigInteger dQ = rsaKey.getPrimeExponentQ();
BigInteger qInv = rsaKey.getCrtCoefficient();
return new RSAPrivateCrtKeySpec(n, e, d, p, q, dP, dQ, qInv);
}
if ((key instanceof RSAPrivateKey)
&& keySpec.isAssignableFrom(RSAPrivateKeySpec.class))
{
RSAPrivateKey rsaKey = (RSAPrivateKey) key;
BigInteger n = rsaKey.getModulus();
BigInteger d = rsaKey.getPrivateExponent();
return new RSAPrivateKeySpec(n, d);
}
if (keySpec.isAssignableFrom(PKCS8EncodedKeySpec.class))
{
if (key instanceof GnuRSAPrivateKey)
{
GnuRSAPrivateKey rsaKey = (GnuRSAPrivateKey) key;
byte[] encoded = rsaKey.getEncoded(Registry.PKCS8_ENCODING_ID);
return new PKCS8EncodedKeySpec(encoded);
}
if (Registry.PKCS8_ENCODING_SHORT_NAME.equalsIgnoreCase(key.getFormat()))
{
byte[] encoded = key.getEncoded();
return new PKCS8EncodedKeySpec(encoded);
}
throw new InvalidKeySpecException("Wrong key type or unsupported (private) key specification");
}
throw new InvalidKeySpecException("Wrong key type or unsupported key specification");
}
protected Key engineTranslateKey(Key key) throws InvalidKeyException
{
if ((key instanceof GnuRSAPublicKey) || (key instanceof GnuRSAPrivateKey))
return key;
if (key instanceof RSAPublicKey)
{
RSAPublicKey rsaKey = (RSAPublicKey) key;
BigInteger n = rsaKey.getModulus();
BigInteger e = rsaKey.getPublicExponent();
return new GnuRSAPublicKey(Registry.X509_ENCODING_ID, n, e);
}
if (key instanceof RSAPrivateCrtKey)
{
RSAPrivateCrtKey rsaKey = (RSAPrivateCrtKey) key;
BigInteger n = rsaKey.getModulus();
BigInteger e = rsaKey.getPublicExponent();
BigInteger d = rsaKey.getPrivateExponent();
BigInteger p = rsaKey.getPrimeP();
BigInteger q = rsaKey.getPrimeQ();
BigInteger dP = rsaKey.getPrimeExponentP();
BigInteger dQ = rsaKey.getPrimeExponentQ();
BigInteger qInv = rsaKey.getCrtCoefficient();
return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
n, e, d, p, q, dP, dQ, qInv);
}
// if (key instanceof RSAPrivateKey)
// {
// RSAPrivateKey rsaKey = (RSAPrivateKey) key;
// BigInteger n = rsaKey.getModulus();
// BigInteger d = rsaKey.getPrivateExponent();
// return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
// n, null, d, null, null, null, null, null);
// }
throw new InvalidKeyException("Unsupported key type");
}
}
@@ -0,0 +1,115 @@
/* RSAKeyPairGeneratorSpi.java -- JCE RSA KeyPairGenerator Adapter
Copyright (C) 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.key.rsa.RSAKeyPairGenerator;
import java.security.InvalidAlgorithmParameterException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.RSAKeyGenParameterSpec;
import java.util.HashMap;
/**
* The implementation of a {@link java.security.KeyPairGenerator} adapter class
* to wrap gnu.crypto RSA keypair generator instances.<p>
*
* In case the client does not explicitly initialize the KeyPairGenerator (via
* a call to an <code>initialize()</code> method), the GNU Crypto provider
* uses a default <i>modulus</i> size (keysize) of 1024 bits.<p>
*/
public class RSAKeyPairGeneratorSpi extends KeyPairGeneratorAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RSAKeyPairGeneratorSpi()
{
super(Registry.RSA_KPG);
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
public void initialize(int keysize, SecureRandom random)
{
HashMap attributes = new HashMap();
attributes.put(RSAKeyPairGenerator.MODULUS_LENGTH, new Integer(keysize));
if (random != null)
{
attributes.put(RSAKeyPairGenerator.SOURCE_OF_RANDOMNESS, random);
}
attributes.put(RSAKeyPairGenerator.PREFERRED_ENCODING_FORMAT,
new Integer(Registry.ASN1_ENCODING_ID));
adaptee.setup(attributes);
}
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException
{
HashMap attributes = new HashMap();
if (params != null)
{
if (!(params instanceof RSAKeyGenParameterSpec))
{
throw new InvalidAlgorithmParameterException("params");
}
attributes.put(RSAKeyPairGenerator.RSA_PARAMETERS, params);
}
if (random != null)
{
attributes.put(RSAKeyPairGenerator.SOURCE_OF_RANDOMNESS, random);
}
attributes.put(RSAKeyPairGenerator.PREFERRED_ENCODING_FORMAT,
new Integer(Registry.ASN1_ENCODING_ID));
adaptee.setup(attributes);
}
}
@@ -0,0 +1,69 @@
/* RSAPSSRawSignatureSpi.java --
Copyright 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPSSSignatureRawCodec;
/**
* The implementation of <i>Service Provider Interface</i> (<b>SPI</b>) adapter
* for the RSA-PSS signature scheme, encoded and/or decoded in RAW format.<p>
*
* @version $Revision: 1.1 $
*/
public class RSAPSSRawSignatureSpi extends SignatureAdapter
{
// Constants and variables
// -------------------------------------------------------------------------
// Constructor(s)
// -------------------------------------------------------------------------
public RSAPSSRawSignatureSpi()
{
super(Registry.RSA_PSS_SIG, new RSAPSSSignatureRawCodec());
}
// Class methods
// -------------------------------------------------------------------------
// Instance methods
// -------------------------------------------------------------------------
}
@@ -0,0 +1,54 @@
/* SHA160withDSS.java -- JCE Adapter for DSS with SHA1 signatures
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.dss.DSSSignatureX509Codec;
/**
* A JCE Adapter for providing X.509 formatted DSS with SHA1 signatures.
*/
public class SHA160withDSS
extends SignatureAdapter
{
public SHA160withDSS()
{
super(Registry.DSS_SIG, new DSSSignatureX509Codec());
}
}
@@ -0,0 +1,56 @@
/* SHA160withRSA.java -- RSA PKCS1 with SHA160 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with SHA160 hash and X.509
* encoding format.
*/
public class SHA160withRSA
extends SignatureAdapter
{
public SHA160withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA160_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,56 @@
/* SHA256withRSA.java -- RSA PKCS1 with SHA256 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with SHA256 hash and X.509
* encoding format.
*/
public class SHA256withRSA
extends SignatureAdapter
{
public SHA256withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA256_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,56 @@
/* SHA384withRSA.java -- RSA PKCS1 with SHA384 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with SHA384 hash and X.509
* encoding format.
*/
public class SHA384withRSA
extends SignatureAdapter
{
public SHA384withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA384_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,56 @@
/* SHA512withRSA.java -- RSA PKCS1 with SHA512 JCE signature Adapter
Copyright (C) 2006 Free Software Foundation, Inc.
This file is 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, 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; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, 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.java.security.jce.sig;
import gnu.java.security.Registry;
import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
/**
* A JCE Adapter for the RSA PKCS1 (v1.5) signature with SHA512 hash and X.509
* encoding format.
*/
public class SHA512withRSA
extends SignatureAdapter
{
public SHA512withRSA()
{
super(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA512_HASH,
new RSAPKCS1V1_5SignatureX509Codec());
}
}
@@ -0,0 +1,263 @@
/* SignatureAdapter.java --
Copyright 2001, 2002, 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.java.security.jce.sig;
import gnu.java.security.sig.BaseSignature;
import gnu.java.security.sig.ISignature;
import gnu.java.security.sig.ISignatureCodec;
import gnu.java.security.sig.SignatureFactory;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.InvalidParameterException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.SignatureException;
import java.security.SignatureSpi;
import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import java.util.logging.Logger;
/**
* The implementation of a generic {@link java.security.Signature} adapter class
* to wrap gnu.crypto signature instances.<p>
*
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>) for the
* {@link java.security.Signature} class, which provides the functionality of a
* digital signature algorithm. Digital signatures are used for authentication
* and integrity assurance of digital data.<p>
*
* All the abstract methods in the {@link java.security.SignatureSpi} class are
* implemented by this class and all its sub-classes.<p>
*
* All the implementations which subclass this object, and which are serviced by
* the GNU Crypto provider implement the {@link java.lang.Cloneable} interface.<p>
*
* @version $Revision: 1.2 $
*/
class SignatureAdapter extends SignatureSpi implements Cloneable
{
private static final Logger log = Logger.getLogger(SignatureAdapter.class.getName());
// Constants and variables
// -------------------------------------------------------------------------
/** Our underlying signature instance. */
private ISignature adaptee;
/** Our underlying signature encoder/decoder engine. */
private ISignatureCodec codec;
// Constructor(s)
// -------------------------------------------------------------------------
/**
* Trivial protected constructor.<p>
*
* @param sigName the canonical name of the signature scheme.
* @param codec the signature codec engine to use with this scheme.
*/
protected SignatureAdapter(String sigName, ISignatureCodec codec)
{
this(SignatureFactory.getInstance(sigName), codec);
}
/**
* Private constructor for cloning purposes.<p>
*
* @param adaptee a clone of the underlying signature scheme instance.
* @param codec the signature codec engine to use with this scheme.
*/
private SignatureAdapter(ISignature adaptee, ISignatureCodec codec)
{
super();
this.adaptee = adaptee;
this.codec = codec;
}
// Class methods
// -------------------------------------------------------------------------
// java.security.SignatureSpi interface implementation
// -------------------------------------------------------------------------
public Object clone()
{
return new SignatureAdapter((ISignature) adaptee.clone(), codec);
}
public void engineInitVerify(PublicKey publicKey) throws InvalidKeyException
{
HashMap attributes = new HashMap();
attributes.put(BaseSignature.VERIFIER_KEY, publicKey);
try
{
adaptee.setupVerify(attributes);
}
catch (IllegalArgumentException x)
{
throw new InvalidKeyException(String.valueOf(x));
}
}
public void engineInitSign(PrivateKey privateKey) throws InvalidKeyException
{
HashMap attributes = new HashMap();
attributes.put(BaseSignature.SIGNER_KEY, privateKey);
try
{
adaptee.setupSign(attributes);
}
catch (IllegalArgumentException x)
{
throw new InvalidKeyException(String.valueOf(x));
}
}
public void engineInitSign(PrivateKey privateKey, SecureRandom random)
throws InvalidKeyException
{
HashMap attributes = new HashMap();
attributes.put(BaseSignature.SIGNER_KEY, privateKey);
attributes.put(BaseSignature.SOURCE_OF_RANDOMNESS, random);
try
{
adaptee.setupSign(attributes);
}
catch (IllegalArgumentException x)
{
throw new InvalidKeyException(String.valueOf(x));
}
}
public void engineUpdate(byte b) throws SignatureException
{
try
{
adaptee.update(b);
}
catch (IllegalStateException x)
{
throw new SignatureException(String.valueOf(x));
}
}
public void engineUpdate(byte[] b, int off, int len)
throws SignatureException
{
try
{
adaptee.update(b, off, len);
}
catch (IllegalStateException x)
{
throw new SignatureException(String.valueOf(x));
}
}
public byte[] engineSign() throws SignatureException
{
Object signature = null;
try
{
signature = adaptee.sign();
}
catch (IllegalStateException x)
{
throw new SignatureException(String.valueOf(x));
}
byte[] result = codec.encodeSignature(signature);
return result;
}
public int engineSign(byte[] outbuf, int offset, int len)
throws SignatureException
{
byte[] signature = this.engineSign();
int result = signature.length;
if (result > len)
{
throw new SignatureException("len");
}
System.arraycopy(signature, 0, outbuf, offset, result);
return result;
}
public boolean engineVerify(byte[] sigBytes) throws SignatureException
{
log.entering("SignatureAdapter", "engineVerify");
Object signature = codec.decodeSignature(sigBytes);
boolean result = false;
try
{
result = adaptee.verify(signature);
}
catch (IllegalStateException x)
{
throw new SignatureException(String.valueOf(x));
}
log.exiting("SignatureAdapter", "engineVerify", new Boolean(result));
return result;
}
// Deprecated. Replaced by engineSetParameter.
public void engineSetParameter(String param, Object value)
throws InvalidParameterException
{
throw new InvalidParameterException("deprecated");
}
public void engineSetParameter(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
{
}
// Deprecated
public Object engineGetParameter(String param)
throws InvalidParameterException
{
throw new InvalidParameterException("deprecated");
}
}