aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/gnu/java/security
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2016-09-30 16:24:48 +0000
committerAndrew Haley <aph@gcc.gnu.org>2016-09-30 16:24:48 +0000
commit07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch)
tree3f22b3241c513ad168c8353805614ae1249410f4 /libjava/classpath/gnu/java/security
parenteae993948bae8b788c53772bcb9217c063716f93 (diff)
downloadgcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com> * Makefile.def: Remove libjava. * Makefile.tpl: Likewise. * Makefile.in: Regenerate. * configure.ac: Likewise. * configure: Likewise. * gcc/java: Remove. * libjava: Likewise. From-SVN: r240662
Diffstat (limited to 'libjava/classpath/gnu/java/security')
-rw-r--r--libjava/classpath/gnu/java/security/.cvsignore1
-rw-r--r--libjava/classpath/gnu/java/security/Configuration.java.in56
-rw-r--r--libjava/classpath/gnu/java/security/Engine.java282
-rw-r--r--libjava/classpath/gnu/java/security/OID.java512
-rw-r--r--libjava/classpath/gnu/java/security/PolicyFile.java687
-rw-r--r--libjava/classpath/gnu/java/security/Properties.java349
-rw-r--r--libjava/classpath/gnu/java/security/Registry.java465
-rw-r--r--libjava/classpath/gnu/java/security/Requires.java59
-rw-r--r--libjava/classpath/gnu/java/security/action/GetPropertyAction.java89
-rw-r--r--libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java93
-rw-r--r--libjava/classpath/gnu/java/security/action/SetAccessibleAction.java77
-rw-r--r--libjava/classpath/gnu/java/security/action/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/ber/BER.java46
-rw-r--r--libjava/classpath/gnu/java/security/ber/BEREncodingException.java54
-rw-r--r--libjava/classpath/gnu/java/security/ber/BERReader.java103
-rw-r--r--libjava/classpath/gnu/java/security/ber/BERValue.java82
-rw-r--r--libjava/classpath/gnu/java/security/ber/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/der/BitString.java332
-rw-r--r--libjava/classpath/gnu/java/security/der/DER.java86
-rw-r--r--libjava/classpath/gnu/java/security/der/DEREncodingException.java54
-rw-r--r--libjava/classpath/gnu/java/security/der/DERReader.java439
-rw-r--r--libjava/classpath/gnu/java/security/der/DERValue.java189
-rw-r--r--libjava/classpath/gnu/java/security/der/DERWriter.java355
-rw-r--r--libjava/classpath/gnu/java/security/der/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/hash/BaseHash.java183
-rw-r--r--libjava/classpath/gnu/java/security/hash/HashFactory.java135
-rw-r--r--libjava/classpath/gnu/java/security/hash/Haval.java807
-rw-r--r--libjava/classpath/gnu/java/security/hash/IMessageDigest.java127
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD2.java256
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD4.java337
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD5.java371
-rw-r--r--libjava/classpath/gnu/java/security/hash/RipeMD128.java257
-rw-r--r--libjava/classpath/gnu/java/security/hash/RipeMD160.java291
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha160.java241
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha256.java252
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha384.java279
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha512.java281
-rw-r--r--libjava/classpath/gnu/java/security/hash/Tiger.java864
-rw-r--r--libjava/classpath/gnu/java/security/hash/Whirlpool.java610
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java55
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java55
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java133
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java55
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/HavalRandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/MD2RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/MD4RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/MD5RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/RipeMD128RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/RipeMD160RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java184
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/Sha160RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/TigerRandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSKeyFactory.java221
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java146
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSParameters.java220
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSParametersGenerator.java125
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/EncodedKeyFactory.java431
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java95
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/MD2withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/MD5withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java231
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/RSAKeyPairGeneratorSpi.java96
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SHA160withDSS.java54
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SHA160withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SHA256withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SHA384withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SHA512withRSA.java56
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java251
-rw-r--r--libjava/classpath/gnu/java/security/key/IKeyPairCodec.java124
-rw-r--r--libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java73
-rw-r--r--libjava/classpath/gnu/java/security/key/KeyPairCodecFactory.java360
-rw-r--r--libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java120
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKey.java213
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairGenerator.java383
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java251
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java347
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairX509Codec.java276
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java205
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java203
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/FIPS186.java262
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java178
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java313
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java190
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java247
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java301
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairRawCodec.java300
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java252
-rw-r--r--libjava/classpath/gnu/java/security/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java69
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java486
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/SignerInfo.java431
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/prng/BasePRNG.java178
-rw-r--r--libjava/classpath/gnu/java/security/prng/EntropySource.java61
-rw-r--r--libjava/classpath/gnu/java/security/prng/IRandom.java174
-rw-r--r--libjava/classpath/gnu/java/security/prng/LimitReachedException.java57
-rw-r--r--libjava/classpath/gnu/java/security/prng/MDGenerator.java127
-rw-r--r--libjava/classpath/gnu/java/security/prng/PRNGFactory.java92
-rw-r--r--libjava/classpath/gnu/java/security/prng/RandomEvent.java81
-rw-r--r--libjava/classpath/gnu/java/security/prng/RandomEventListener.java50
-rw-r--r--libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java102
-rw-r--r--libjava/classpath/gnu/java/security/provider/DefaultPolicy.java68
-rw-r--r--libjava/classpath/gnu/java/security/provider/Gnu.java306
-rw-r--r--libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java694
-rw-r--r--libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java295
-rw-r--r--libjava/classpath/gnu/java/security/provider/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/sig/BaseSignature.java219
-rw-r--r--libjava/classpath/gnu/java/security/sig/ISignature.java160
-rw-r--r--libjava/classpath/gnu/java/security/sig/ISignatureCodec.java59
-rw-r--r--libjava/classpath/gnu/java/security/sig/SignatureCodecFactory.java226
-rw-r--r--libjava/classpath/gnu/java/security/sig/SignatureFactory.java101
-rw-r--r--libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java275
-rw-r--r--libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java164
-rw-r--r--libjava/classpath/gnu/java/security/sig/dss/DSSSignatureX509Codec.java193
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/EME_PKCS1_V1_5.java274
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java243
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java372
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSA.java324
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java224
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureRawCodec.java153
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureX509Codec.java128
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java256
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java134
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSASignatureFactory.java176
-rw-r--r--libjava/classpath/gnu/java/security/util/ByteArray.java111
-rw-r--r--libjava/classpath/gnu/java/security/util/ByteBufferOutputStream.java118
-rw-r--r--libjava/classpath/gnu/java/security/util/DerUtil.java64
-rw-r--r--libjava/classpath/gnu/java/security/util/ExpirableObject.java150
-rw-r--r--libjava/classpath/gnu/java/security/util/FormatUtil.java140
-rw-r--r--libjava/classpath/gnu/java/security/util/IntegerUtil.java109
-rw-r--r--libjava/classpath/gnu/java/security/util/PRNG.java141
-rw-r--r--libjava/classpath/gnu/java/security/util/Prime.java164
-rw-r--r--libjava/classpath/gnu/java/security/util/Sequence.java133
-rw-r--r--libjava/classpath/gnu/java/security/util/SimpleList.java155
-rw-r--r--libjava/classpath/gnu/java/security/util/Util.java629
-rw-r--r--libjava/classpath/gnu/java/security/util/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java59
-rw-r--r--libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java216
-rw-r--r--libjava/classpath/gnu/java/security/x509/Util.java204
-rw-r--r--libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java558
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509CRL.java487
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509CRLEntry.java275
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java137
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509CertPath.java303
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java196
-rw-r--r--libjava/classpath/gnu/java/security/x509/X509Certificate.java757
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java133
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java129
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java97
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java205
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java95
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/Extension.java298
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/GeneralName.java232
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java89
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/GeneralSubtree.java156
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java77
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java92
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/NameConstraints.java161
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java107
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java104
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java105
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java85
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java77
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java84
-rw-r--r--libjava/classpath/gnu/java/security/x509/ext/package.html46
-rw-r--r--libjava/classpath/gnu/java/security/x509/package.html46
181 files changed, 0 insertions, 33031 deletions
diff --git a/libjava/classpath/gnu/java/security/.cvsignore b/libjava/classpath/gnu/java/security/.cvsignore
deleted file mode 100644
index 11f6639..0000000
--- a/libjava/classpath/gnu/java/security/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-Configuration.java
diff --git a/libjava/classpath/gnu/java/security/Configuration.java.in b/libjava/classpath/gnu/java/security/Configuration.java.in
deleted file mode 100644
index 1deb543..0000000
--- a/libjava/classpath/gnu/java/security/Configuration.java.in
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Configuration.java --
- 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;
-
-/**
- * This file defines compile-time constants that can be accessed by
- * our crypto code. All crypto code should use and define such
- * constants here instead of using the gnu.classpath.Configuration class.
- */
-public interface Configuration
-{
-
- /**
- * The value of DEBUG is substituted according to whether the
- * "--enable-debug" argument was passed to configure. Code
- * which is made conditional based on the value of this flag - typically
- * code that generates debugging output - will be removed by the optimizer
- * in a non-debug build.
- */
- boolean DEBUG = @LIBDEBUG@;
-}
diff --git a/libjava/classpath/gnu/java/security/Engine.java b/libjava/classpath/gnu/java/security/Engine.java
deleted file mode 100644
index 969fcef..0000000
--- a/libjava/classpath/gnu/java/security/Engine.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/* Engine -- generic getInstance method.
- Copyright (C) 2003, 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;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import java.security.NoSuchAlgorithmException;
-import java.security.Provider;
-import java.util.Enumeration;
-
-/**
- * Generic implementation of the getInstance methods in the various
- * engine classes in java.security.
- * <p>
- * These classes ({@link java.security.Signature} for example) can be
- * thought of as the "chrome, upholstery, and steering wheel", and the SPI
- * (service provider interface, e.g. {@link java.security.SignatureSpi})
- * classes can be thought of as the "engine" -- providing the actual
- * functionality of whatever cryptographic algorithm the instance
- * represents.
- *
- * @see Provider
- * @author Casey Marshall
- */
-public final class Engine
-{
-
- // Constants.
- // ------------------------------------------------------------------------
-
- /** Prefix for aliases. */
- private static final String ALG_ALIAS = "Alg.Alias.";
-
- /** Maximum number of aliases to try. */
- private static final int MAX_ALIASES = 5;
-
- /** Argument list for no-argument constructors. */
- private static final Object[] NO_ARGS = new Object[0];
-
- // Constructor.
- // ------------------------------------------------------------------------
-
- /** This class cannot be instantiated. */
- private Engine() { }
-
- /**
- * Return the implementation for <i>algorithm</i> for service <i>service</i>
- * from <i>provider</i>. The service is e.g. "Signature", and the algorithm
- * "DSA".
- *
- * @param service The service name.
- * @param algorithm The name of the algorithm to get.
- * @param provider The provider to get the implementation from.
- * @return The engine class for the specified algorithm; the object returned
- * is typically a subclass of the SPI class for that service, but
- * callers should check that this is so.
- * @throws NoSuchAlgorithmException If the implementation cannot be found or
- * cannot be instantiated.
- * @throws InvocationTargetException If the SPI class's constructor throws an
- * exception.
- * @throws IllegalArgumentException If any of the three arguments is null.
- */
- public static Object getInstance(String service, String algorithm,
- Provider provider)
- throws InvocationTargetException, NoSuchAlgorithmException
- {
- return getInstance(service, algorithm, provider, NO_ARGS);
- }
-
- /**
- * Return the implementation for <i>algorithm</i> for service <i>service</i>
- * from <i>provider</i>, passing <i>initArgs</i> to the SPI class's
- * constructor (which cannot be null; pass a zero-length array if the SPI
- * takes no arguments). The service is e.g. "Signature", and the algorithm
- * "DSA".
- *
- * @param service The service name.
- * @param algorithm The name of the algorithm to get.
- * @param provider The provider to get the implementation from.
- * @param initArgs The arguments to pass to the SPI class's constructor
- * (cannot be null).
- * @return The engine class for the specified algorithm; the object returned
- * is typically a subclass of the SPI class for that service, but
- * callers should check that this is so.
- * @throws NoSuchAlgorithmException If the implementation cannot be found or
- * cannot be instantiated.
- * @throws InvocationTargetException If the SPI class's constructor throws an
- * exception.
- * @throws IllegalArgumentException If any of the four arguments is
- * <code>null</code> or if either <code>service</code>, or
- * <code>algorithm</code> is an empty string.
- */
- public static Object getInstance(String service, String algorithm,
- Provider provider, Object[] initArgs)
- throws InvocationTargetException, NoSuchAlgorithmException
- {
- if (service == null)
- throw new IllegalArgumentException("service MUST NOT be null");
- service = service.trim();
- if (service.length() == 0)
- throw new IllegalArgumentException("service MUST NOT be empty");
- if (algorithm == null)
- throw new IllegalArgumentException("algorithm MUST NOT be null");
- algorithm = algorithm.trim();
- if (algorithm.length() == 0)
- throw new IllegalArgumentException("algorithm MUST NOT be empty");
- if (provider == null)
- throw new IllegalArgumentException("provider MUST NOT be null");
- if (initArgs == null)
- throw new IllegalArgumentException("Constructor's parameters MUST NOT be null");
-
- Enumeration enumer = provider.propertyNames();
- String key = null;
- String alias;
- int count = 0;
- boolean algorithmFound = false;
- CPStringBuilder sb = new CPStringBuilder();
- while (enumer.hasMoreElements())
- {
- key = (String) enumer.nextElement();
- if (key.equalsIgnoreCase(service + "." + algorithm))
- {
- // remove the service portion from the key
- algorithm = key.substring(service.length() + 1);
- algorithmFound = true;
- break;
- }
- else if (key.equalsIgnoreCase(ALG_ALIAS + service + "." + algorithm))
- {
- alias = provider.getProperty(key);
- if (! algorithm.equalsIgnoreCase(alias)) // does not refer to itself
- {
- algorithm = alias;
- if (count++ > MAX_ALIASES)
- {
- sb.append("Algorithm [").append(algorithm)
- .append("] of type [").append(service)
- .append("] from provider [").append(provider)
- .append("] has too many aliases");
- throw new NoSuchAlgorithmException(sb.toString());
- }
- // need to reset enumeration to now look for the alias
- enumer = provider.propertyNames();
- }
- }
- }
-
- if (! algorithmFound)
- {
- sb.append("Algorithm [").append(algorithm).append("] of type [")
- .append(service).append("] from provider [")
- .append(provider).append("] is not found");
- throw new NoSuchAlgorithmException(sb.toString());
- }
-
- // Find and instantiate the implementation
- Class clazz = null;
- ClassLoader loader = provider.getClass().getClassLoader();
- Constructor constructor = null;
- String className = provider.getProperty(key);
- sb.append("Class [").append(className).append("] for algorithm [")
- .append(algorithm).append("] of type [").append(service)
- .append("] from provider [").append(provider).append("] ");
- Throwable cause = null;
- try
- {
- if (loader != null)
- clazz = loader.loadClass(className);
- else
- clazz = Class.forName(className);
- constructor = getCompatibleConstructor(clazz, initArgs);
- return constructor.newInstance(initArgs);
- }
- catch (ClassNotFoundException x)
- {
- sb.append("cannot not be found");
- cause = x;
- }
- catch (IllegalAccessException x)
- {
- sb.append("cannot be accessed");
- cause = x;
- }
- catch (InstantiationException x)
- {
- sb.append("cannot be instantiated");
- cause = x;
- }
- catch (ExceptionInInitializerError x)
- {
- sb.append("cannot be initialized");
- cause = x;
- }
- catch (SecurityException x)
- {
- sb.append("caused a security violation");
- cause = x;
- }
- catch (NoSuchMethodException x)
- {
- sb.append("does not have/expose an appropriate constructor");
- cause = x;
- }
-
- NoSuchAlgorithmException x = new NoSuchAlgorithmException(sb.toString());
- x.initCause(cause);
- throw x;
- }
-
- /**
- * Find a constructor in the given class that can take the specified
- * argument list, allowing any of which to be null.
- *
- * @param clazz The class from which to get the constructor.
- * @param initArgs The argument list to be passed to the constructor.
- * @return The constructor.
- * @throws NoSuchMethodException If no constructor of the given class
- * can take the specified argument array.
- */
- private static Constructor getCompatibleConstructor(Class clazz,
- Object[] initArgs)
- throws NoSuchMethodException
- {
- Constructor[] c = clazz.getConstructors();
- outer:for (int i = 0; i < c.length; i++)
- {
- Class[] argTypes = c[i].getParameterTypes();
- if (argTypes.length != initArgs.length)
- continue;
- for (int j = 0; j < argTypes.length; j++)
- {
- if (initArgs[j] != null &&
- !argTypes[j].isAssignableFrom(initArgs[j].getClass()))
- continue outer;
- }
- // If we reach this point, we know this constructor (c[i]) has
- // the same number of parameters as the target parameter list,
- // and all our parameters are either (1) null, or (2) assignable
- // to the target parameter type.
- return c[i];
- }
- throw new NoSuchMethodException();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/OID.java b/libjava/classpath/gnu/java/security/OID.java
deleted file mode 100644
index c7efe65..0000000
--- a/libjava/classpath/gnu/java/security/OID.java
+++ /dev/null
@@ -1,512 +0,0 @@
-/* OID.java -- numeric representation of an object identifier
- Copyright (C) 2003, 2004, 2005, 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;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.der.DEREncodingException;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.StringTokenizer;
-
-/**
- * This immutable class represents an object identifier, or OID.
- *
- * <p>OIDs are represented as a series of hierarchical tokens, each of
- * which is usually represented as a single, unsigned integer. The
- * hierarchy works so that later tokens are considered within the group
- * of earlier tokens. Thus, the OID for the Serpent block cipher,
- * 1.3.6.1.4.1.11591.13.2, is maintained by the GNU project, whose OID
- * is 1.3.6.1.4.1.11591 (which is, in turn, part of bigger, more general
- * bodies; the topmost, 1, stands for the OIDs assigned by the
- * International Standards Organization, ISO).
- *
- * <p>OIDs can be represented in a variety of ways, including the
- * dotted-decimal form we use here.
- *
- * <p>OIDs may be relative, in which case the first two elements of the
- * OID are omitted.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class OID implements Cloneable, Comparable, java.io.Serializable
-{
-
- // Fields.
- // ------------------------------------------------------------------------
-
- /* Serial version id for serialization. */
- static final long serialVersionUID = 5722492029044597779L;
-
- /**
- * The numeric ID structure.
- */
- private int[] components;
-
- /**
- * The string representation of this OID, in dotted-decimal format.
- */
- private transient String strRep;
-
- /**
- * The DER encoding of this OID.
- */
- private transient byte[] der;
-
- /**
- * Whether or not this OID is relative.
- */
- private boolean relative;
-
- // Constructors.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new OID from the given byte array. The argument (which can
- * neither be null nor zero-length) is copied to prevent subsequent
- * modification.
- *
- * @param components The numeric IDs.
- * @throws IllegalArgumentException If <i>components</i> is null or empty.
- */
- public OID(int[] components)
- {
- this(components, false);
- }
-
- /**
- * Create a new OID from the given byte array. The argument (which can
- * neither be null nor zero-length) is copied to prevent subsequent
- * modification.
- *
- * @param components The numeric IDs.
- * @param relative The relative flag.
- * @throws IllegalArgumentException If <i>components</i> is null or empty.
- */
- public OID(int[] components, boolean relative)
- {
- if (components == null || components.length == 0)
- throw new IllegalArgumentException();
- this.components = (int[]) components.clone();
- this.relative = relative;
- }
-
- /**
- * Create a new OID from the given dotted-decimal representation.
- *
- * @param strRep The string representation of the OID.
- * @throws IllegalArgumentException If the string does not contain at
- * least one integer.
- * @throws NumberFormatException If the string does not contain only
- * numbers and periods ('.').
- */
- public OID(String strRep)
- {
- this(strRep, false);
- }
-
- /**
- * Create a new OID from the given dotted-decimal representation.
- *
- * @param strRep The string representation of the OID.
- * @param relative The relative flag.
- * @throws IllegalArgumentException If the string does not contain at
- * least one integer.
- * @throws NumberFormatException If the string does not contain only
- * numbers and periods ('.').
- */
- public OID(String strRep, boolean relative)
- {
- this.relative = relative;
- this.strRep = strRep;
- components = fromString(strRep);
- }
-
- /**
- * Construct a new OID from the DER bytes in an input stream. This method
- * does not read the tag or the length field from the input stream, so
- * the caller must supply the number of octets in this OID's encoded
- * form.
- *
- * @param derIn The DER input stream.
- * @param len The number of bytes in the encoded form.
- * @throws IOException If an error occurs reading the OID.
- */
- public OID(InputStream derIn, int len) throws IOException
- {
- this(derIn, len, false);
- }
-
- /**
- * Construct a new OID from the DER bytes in an input stream. This method
- * does not read the tag or the length field from the input stream, so
- * the caller must supply the number of octets in this OID's encoded
- * form.
- *
- * @param derIn The DER input stream.
- * @param len The number of bytes in the encoded form.
- * @param relative The relative flag.
- * @throws IOException If an error occurs reading the OID.
- */
- public OID(InputStream derIn, int len, boolean relative) throws IOException
- {
- der = new byte[len];
- derIn.read(der);
- this.relative = relative;
- try
- {
- components = fromDER(der, relative);
- }
- catch (ArrayIndexOutOfBoundsException aioobe)
- {
- aioobe.printStackTrace();
- throw aioobe;
- }
- }
-
- /**
- * Construct a new OID from the given DER bytes.
- *
- * @param encoded The DER encoded OID.
- * @throws IOException If an error occurs reading the OID.
- */
- public OID(byte[] encoded) throws IOException
- {
- this(encoded, false);
- }
-
- /**
- * Construct a new OID from the given DER bytes.
- *
- * @param encoded The encoded relative OID.
- * @param relative The relative flag.
- */
- public OID(byte[] encoded, boolean relative) throws IOException
- {
- der = (byte[]) encoded.clone();
- this.relative = relative;
- try
- {
- components = fromDER(der, relative);
- }
- catch (ArrayIndexOutOfBoundsException aioobe)
- {
- aioobe.printStackTrace();
- throw aioobe;
- }
- }
-
- // Instance methods.
- // ------------------------------------------------------------------------
-
- /**
- * Return the numeric IDs of this OID. The value returned is copied to
- * prevent modification.
- *
- * @return The IDs in a new integer array.
- */
- public int[] getIDs()
- {
- return (int[]) components.clone();
- }
-
- /**
- * Get the DER encoding of this OID, minus the tag and length fields.
- *
- * @return The DER bytes.
- */
- public byte[] getDER()
- {
- if (der == null)
- {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- int i = 0;
- if (!relative)
- {
- int b = components[i++] * 40 + (components.length > 1
- ? components[i++] : 0);
- encodeSubID(bout, b);
- }
- for ( ; i < components.length; i++)
- encodeSubID(bout, components[i]);
- der = bout.toByteArray();
- }
- return (byte[]) der.clone();
- }
-
- /**
- * Get the parent OID of this OID. That is, if this OID is "1.2.3.4",
- * then the parent OID will be "1.2.3". If this OID is a top-level
- * OID, this method returns null.
- *
- * @return The parent OID, or null.
- */
- public OID getParent()
- {
- if (components.length == 1)
- return null;
- int[] parent = new int[components.length - 1];
- System.arraycopy(components, 0, parent, 0, parent.length);
- return new OID(parent);
- }
-
- public OID getChild(int id)
- {
- int[] child = new int[components.length + 1];
- System.arraycopy(components, 0, child, 0, components.length);
- child[child.length - 1] = id;
- return new OID(child);
- }
-
- /**
- * Get the root OID of this OID. That is, the first two components.
- *
- * @return The root OID.
- */
- public OID getRoot()
- {
- if (components.length <= 2)
- return this;
- int[] root = new int[2];
- root[0] = components[0];
- root[1] = components[1];
- return new OID(root);
- }
-
- public boolean isRelative()
- {
- return relative;
- }
-
- /**
- * Returns a copy of this OID.
- *
- * @return The copy.
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException cnse)
- {
- InternalError ie = new InternalError();
- ie.initCause(cnse);
- throw ie;
- }
- }
-
- /* Nice idea, but possibly too expensive for whatever benefit it
- * provides.
-
- public String getShortName()
- {
- return OIDTable.getShortName(this);
- }
-
- public String getLongName()
- {
- return OIDTable.getLongName(this);
- }
-
- */
-
- /**
- * Returns the value of this OID in dotted-decimal format.
- *
- * @return The string representation.
- */
- public String toString()
- {
- if (strRep != null)
- return strRep;
- else
- {
- CPStringBuilder buf = new CPStringBuilder();
- for (int i = 0; i < components.length; i++)
- {
- buf.append((long) components[i] & 0xFFFFFFFFL);
- if (i < components.length - 1)
- buf.append('.');
- }
- return (strRep = buf.toString());
- }
- }
-
- /**
- * Computes a hash code for this OID.
- *
- * @return The hash code.
- */
- public int hashCode()
- {
- int ret = 0;
- for (int i = 0; i < components.length; i++)
- ret += components[i] << (i & 31);
- return ret;
- }
-
- /**
- * Tests whether or not this OID equals another.
- *
- * @return Whether or not this OID equals the other.
- */
- public boolean equals(Object o)
- {
- if (!(o instanceof OID))
- return false;
- return java.util.Arrays.equals(components, ((OID) o).components);
- }
-
- /**
- * Compares this OID to another. The comparison is essentially
- * lexicographic, where the two OIDs are compared until their
- * first difference, then that difference is returned. If one OID is
- * shorter, but all elements equal between the two for the shorter
- * length, then the shorter OID is lesser than the longer.
- *
- * @param o The object to compare.
- * @return An integer less than, equal to, or greater than zero if
- * this object is less than, equal to, or greater than the
- * argument.
- * @throws ClassCastException If <i>o</i> is not an OID.
- */
- public int compareTo(Object o)
- {
- if (equals(o))
- return 0;
- int[] components2 = ((OID) o).components;
- int len = Math.min(components.length, components2.length);
- for (int i = 0; i < len; i++)
- {
- if (components[i] != components2[i])
- return (components[i] < components2[i]) ? -1 : 1;
- }
- if (components.length == components2.length)
- return 0;
- return (components.length < components2.length) ? -1 : 1;
- }
-
- // Own methods.
- // ------------------------------------------------------------------------
-
- private static int[] fromDER(byte[] der, boolean relative)
- throws DEREncodingException
- {
- // cannot be longer than this.
- int[] components = new int[der.length + 1];
- int count = 0;
- int i = 0;
- if (!relative && i < der.length)
- {
- // Non-relative OIDs have the first two arcs coded as:
- //
- // i = first_arc * 40 + second_arc;
- //
- int j = (der[i] & 0xFF);
- components[count++] = j / 40;
- components[count++] = j % 40;
- i++;
- }
- while (i < der.length)
- {
- int j = 0;
- do
- {
- j = der[i++] & 0xFF;
- components[count] <<= 7;
- components[count] |= j & 0x7F;
- if (i >= der.length && (j & 0x80) != 0)
- throw new DEREncodingException("malformed OID");
- }
- while ((j & 0x80) != 0);
- count++;
- }
- if (count == components.length)
- return components;
- int[] ret = new int[count];
- System.arraycopy(components, 0, ret, 0, count);
- return ret;
- }
-
- private static int[] fromString(String strRep) throws NumberFormatException
- {
- if (strRep.startsWith("OID.") || strRep.startsWith("oid."))
- strRep = strRep.substring(4);
- StringTokenizer tok = new StringTokenizer(strRep, ".");
- if (tok.countTokens() == 0)
- throw new IllegalArgumentException();
- int[] components = new int[tok.countTokens()];
- int i = 0;
- while (tok.hasMoreTokens())
- {
- components[i++] = Integer.parseInt(tok.nextToken());
- }
- return components;
- }
-
- private static void encodeSubID(ByteArrayOutputStream out, int id)
- {
- if (id < 128)
- {
- out.write(id);
- }
- else if (id < 16384)
- {
- out.write((id >>> 7) | 0x80);
- out.write(id & 0x7F);
- }
- else if (id < 2097152)
- {
- out.write((id >>> 14) | 0x80);
- out.write(((id >>> 7) | 0x80) & 0xFF);
- out.write(id & 0x7F);
- }
- else if (id < 268435456)
- {
- out.write( (id >>> 21) | 0x80);
- out.write(((id >>> 14) | 0x80) & 0xFF);
- out.write(((id >>> 7) | 0x80) & 0xFF);
- out.write(id & 0x7F);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/PolicyFile.java b/libjava/classpath/gnu/java/security/PolicyFile.java
deleted file mode 100644
index 0560bce..0000000
--- a/libjava/classpath/gnu/java/security/PolicyFile.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/* PolicyFile.java -- policy file reader
- Copyright (C) 2004, 2005, 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;
-
-import gnu.classpath.debug.Component;
-import gnu.classpath.debug.SystemLogger;
-
-import gnu.java.lang.CPStringBuilder;
-import gnu.java.security.action.GetPropertyAction;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StreamTokenizer;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.AccessController;
-import java.security.CodeSource;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.Policy;
-import java.security.Principal;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.Security;
-import java.security.UnresolvedPermission;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.logging.Logger;
-
-/**
- * An implementation of a {@link java.security.Policy} object whose
- * permissions are specified by a <em>policy file</em>.
- *
- * <p>The approximate syntax of policy files is:</p>
- *
- * <pre>
- * policyFile ::= keystoreOrGrantEntries ;
- *
- * keystoreOrGrantEntries ::= keystoreOrGrantEntry |
- * keystoreOrGrantEntries keystoreOrGrantEntry |
- * EMPTY ;
- *
- * keystoreOrGrantEntry ::= keystoreEntry | grantEntry ;
- *
- * keystoreEntry ::= "keystore" keystoreUrl ';' |
- * "keystore" keystoreUrl ',' keystoreAlgorithm ';' ;
- *
- * keystoreUrl ::= URL ;
- * keystoreAlgorithm ::= STRING ;
- *
- * grantEntry ::= "grant" domainParameters '{' permissions '}' ';'
- *
- * domainParameters ::= domainParameter |
- * domainParameter ',' domainParameters ;
- *
- * domainParameter ::= "signedBy" signerNames |
- * "codeBase" codeBaseUrl |
- * "principal" principalClassName principalName |
- * "principal" principalName ;
- *
- * signerNames ::= quotedString ;
- * codeBaseUrl ::= URL ;
- * principalClassName ::= STRING ;
- * principalName ::= quotedString ;
- *
- * quotedString ::= quoteChar STRING quoteChar ;
- * quoteChar ::= '"' | '\'';
- *
- * permissions ::= permission | permissions permission ;
- *
- * permission ::= "permission" permissionClassName permissionTarget permissionAction |
- * "permission" permissionClassName permissionTarget |
- * "permission" permissionClassName;
- * </pre>
- *
- * <p>Comments are either form of Java comments. Keystore entries only
- * affect subsequent grant entries, so if a grant entry preceeds a
- * keystore entry, that grant entry is not affected by that keystore
- * entry. Certian instances of <code>${property-name}</code> will be
- * replaced with <code>System.getProperty("property-name")</code> in
- * quoted strings.</p>
- *
- * <p>This class will load the following files when created or
- * refreshed, in order:</p>
- *
- * <ol>
- * <li>The file <code>${java.home}/lib/security/java.policy</code>.</li>
- * <li>All URLs specified by security properties
- * <code>"policy.file.<i>n</i>"</code>, for increasing <i>n</i>
- * starting from 1. The sequence stops at the first undefined
- * property, so you must set <code>"policy.file.1"</code> if you also
- * set <code>"policy.file.2"</code>, and so on.</li>
- * <li>The URL specified by the property
- * <code>"java.security.policy"</code>.</li>
- * </ol>
- *
- * @author Casey Marshall (csm@gnu.org)
- * @see java.security.Policy
- */
-public final class PolicyFile extends Policy
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- protected static final Logger logger = SystemLogger.SYSTEM;
- // Added to cut redundant AccessController.doPrivileged calls
- private static GetPropertyAction prop = new GetPropertyAction("file.separator");
- private static final String fs = (String) AccessController.doPrivileged(prop);
-
- private static final String DEFAULT_POLICY =
- (String) AccessController.doPrivileged(prop.setParameters("java.home"))
- + fs + "lib" + fs + "security" + fs + "java.policy";
- private static final String DEFAULT_USER_POLICY =
- (String) AccessController.doPrivileged(prop.setParameters("user.home")) +
- fs + ".java.policy";
-
- private final Map cs2pc;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public PolicyFile()
- {
- cs2pc = new HashMap();
- refresh();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public PermissionCollection getPermissions(CodeSource codeSource)
- {
- Permissions perms = new Permissions();
- for (Iterator it = cs2pc.entrySet().iterator(); it.hasNext(); )
- {
- Map.Entry e = (Map.Entry) it.next();
- CodeSource cs = (CodeSource) e.getKey();
- if (cs.implies(codeSource))
- {
- logger.log (Component.POLICY, "{0} -> {1}", new Object[]
- { cs, codeSource });
- PermissionCollection pc = (PermissionCollection) e.getValue();
- for (Enumeration ee = pc.elements(); ee.hasMoreElements(); )
- {
- perms.add((Permission) ee.nextElement());
- }
- }
- else
- logger.log (Component.POLICY, "{0} !-> {1}", new Object[]
- { cs, codeSource });
- }
- logger.log (Component.POLICY, "returning permissions {0} for {1}",
- new Object[] { perms, codeSource });
- return perms;
- }
-
- public void refresh()
- {
- cs2pc.clear();
- final List policyFiles = new LinkedList();
- try
- {
- policyFiles.add (new File (DEFAULT_POLICY).toURL());
- policyFiles.add (new File (DEFAULT_USER_POLICY).toURL ());
-
- AccessController.doPrivileged(
- new PrivilegedExceptionAction()
- {
- public Object run() throws Exception
- {
- String allow = Security.getProperty ("policy.allowSystemProperty");
- if (allow == null || Boolean.getBoolean (allow))
- {
- String s = System.getProperty ("java.security.policy");
- logger.log (Component.POLICY, "java.security.policy={0}", s);
- if (s != null)
- {
- boolean only = s.startsWith ("=");
- if (only)
- s = s.substring (1);
- policyFiles.clear ();
- policyFiles.add (new URL (s));
- if (only)
- return null;
- }
- }
- for (int i = 1; ; i++)
- {
- String pname = "policy.url." + i;
- String s = Security.getProperty (pname);
- logger.log (Component.POLICY, "{0}={1}", new Object []
- { pname, s });
- if (s == null)
- break;
- policyFiles.add (new URL (s));
- }
- return null;
- }
- });
- }
- catch (PrivilegedActionException pae)
- {
- logger.log (Component.POLICY, "reading policy properties", pae);
- }
- catch (MalformedURLException mue)
- {
- logger.log (Component.POLICY, "setting default policies", mue);
- }
-
- logger.log (Component.POLICY, "building policy from URLs {0}",
- policyFiles);
- for (Iterator it = policyFiles.iterator(); it.hasNext(); )
- {
- try
- {
- URL url = (URL) it.next();
- parse(url);
- }
- catch (IOException ioe)
- {
- logger.log (Component.POLICY, "reading policy", ioe);
- }
- }
- }
-
- public String toString()
- {
- return super.toString() + " [ " + cs2pc.toString() + " ]";
- }
-
- // Own methods.
- // -------------------------------------------------------------------------
-
- private static final int STATE_BEGIN = 0;
- private static final int STATE_GRANT = 1;
- private static final int STATE_PERMS = 2;
-
- /**
- * Parse a policy file, incorporating the permission definitions
- * described therein.
- *
- * @param url The URL of the policy file to read.
- * @throws IOException if an I/O error occurs, or if the policy file
- * cannot be parsed.
- */
- private void parse(final URL url) throws IOException
- {
- logger.log (Component.POLICY, "reading policy file from {0}", url);
- final StreamTokenizer in = new StreamTokenizer(new InputStreamReader(url.openStream()));
- in.resetSyntax();
- in.slashSlashComments(true);
- in.slashStarComments(true);
- in.wordChars('A', 'Z');
- in.wordChars('a', 'z');
- in.wordChars('0', '9');
- in.wordChars('.', '.');
- in.wordChars('_', '_');
- in.wordChars('$', '$');
- in.whitespaceChars(' ', ' ');
- in.whitespaceChars('\t', '\t');
- in.whitespaceChars('\f', '\f');
- in.whitespaceChars('\n', '\n');
- in.whitespaceChars('\r', '\r');
- in.quoteChar('\'');
- in.quoteChar('"');
-
- int tok;
- int state = STATE_BEGIN;
- List keystores = new LinkedList();
- URL currentBase = null;
- List currentCerts = new LinkedList();
- Permissions currentPerms = new Permissions();
- while ((tok = in.nextToken()) != StreamTokenizer.TT_EOF)
- {
- switch (tok)
- {
- case '{':
- if (state != STATE_GRANT)
- error(url, in, "spurious '{'");
- state = STATE_PERMS;
- tok = in.nextToken();
- break;
- case '}':
- if (state != STATE_PERMS)
- error(url, in, "spurious '}'");
- state = STATE_BEGIN;
- currentPerms.setReadOnly();
- Certificate[] c = null;
- if (!currentCerts.isEmpty())
- c = (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()]);
- cs2pc.put(new CodeSource(currentBase, c), currentPerms);
- currentCerts.clear();
- currentPerms = new Permissions();
- currentBase = null;
- tok = in.nextToken();
- if (tok != ';')
- in.pushBack();
- continue;
- }
- if (tok != StreamTokenizer.TT_WORD)
- {
- error(url, in, "expecting word token");
- }
-
- // keystore "<keystore-path>" [',' "<keystore-type>"] ';'
- if (in.sval.equalsIgnoreCase("keystore"))
- {
- String alg = KeyStore.getDefaultType();
- tok = in.nextToken();
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting key store URL");
- String store = in.sval;
- tok = in.nextToken();
- if (tok == ',')
- {
- tok = in.nextToken();
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting key store type");
- alg = in.sval;
- tok = in.nextToken();
- }
- if (tok != ';')
- error(url, in, "expecting semicolon");
- try
- {
- KeyStore keystore = KeyStore.getInstance(alg);
- keystore.load(new URL(url, store).openStream(), null);
- keystores.add(keystore);
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- }
- else if (in.sval.equalsIgnoreCase("grant"))
- {
- if (state != STATE_BEGIN)
- error(url, in, "extraneous grant keyword");
- state = STATE_GRANT;
- }
- else if (in.sval.equalsIgnoreCase("signedBy"))
- {
- if (state != STATE_GRANT && state != STATE_PERMS)
- error(url, in, "spurious 'signedBy'");
- if (keystores.isEmpty())
- error(url, in, "'signedBy' with no keystores");
- tok = in.nextToken();
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting signedBy name");
- StringTokenizer st = new StringTokenizer(in.sval, ",");
- while (st.hasMoreTokens())
- {
- String alias = st.nextToken();
- for (Iterator it = keystores.iterator(); it.hasNext(); )
- {
- KeyStore keystore = (KeyStore) it.next();
- try
- {
- if (keystore.isCertificateEntry(alias))
- currentCerts.add(keystore.getCertificate(alias));
- }
- catch (KeyStoreException kse)
- {
- error(url, in, kse.toString());
- }
- }
- }
- tok = in.nextToken();
- if (tok != ',')
- {
- if (state != STATE_GRANT)
- error(url, in, "spurious ','");
- in.pushBack();
- }
- }
- else if (in.sval.equalsIgnoreCase("codeBase"))
- {
- if (state != STATE_GRANT)
- error(url, in, "spurious 'codeBase'");
- tok = in.nextToken();
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting code base URL");
- String base = expand(in.sval);
- if (File.separatorChar != '/')
- base = base.replace(File.separatorChar, '/');
- try
- {
- currentBase = new URL(base);
- }
- catch (MalformedURLException mue)
- {
- error(url, in, mue.toString());
- }
- tok = in.nextToken();
- if (tok != ',')
- in.pushBack();
- }
- else if (in.sval.equalsIgnoreCase("principal"))
- {
- if (state != STATE_GRANT)
- error(url, in, "spurious 'principal'");
- tok = in.nextToken();
- if (tok == StreamTokenizer.TT_WORD)
- {
- tok = in.nextToken();
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting principal name");
- String name = in.sval;
- Principal p = null;
- try
- {
- Class pclass = Class.forName(in.sval);
- Constructor c =
- pclass.getConstructor(new Class[] { String.class });
- p = (Principal) c.newInstance(new Object[] { name });
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- for (Iterator it = keystores.iterator(); it.hasNext(); )
- {
- KeyStore ks = (KeyStore) it.next();
- try
- {
- for (Enumeration e = ks.aliases(); e.hasMoreElements(); )
- {
- String alias = (String) e.nextElement();
- if (ks.isCertificateEntry(alias))
- {
- Certificate cert = ks.getCertificate(alias);
- if (!(cert instanceof X509Certificate))
- continue;
- if (p.equals(((X509Certificate) cert).getSubjectDN()) ||
- p.equals(((X509Certificate) cert).getSubjectX500Principal()))
- currentCerts.add(cert);
- }
- }
- }
- catch (KeyStoreException kse)
- {
- error(url, in, kse.toString());
- }
- }
- }
- else if (tok == '"' || tok == '\'')
- {
- String alias = in.sval;
- for (Iterator it = keystores.iterator(); it.hasNext(); )
- {
- KeyStore ks = (KeyStore) it.next();
- try
- {
- if (ks.isCertificateEntry(alias))
- currentCerts.add(ks.getCertificate(alias));
- }
- catch (KeyStoreException kse)
- {
- error(url, in, kse.toString());
- }
- }
- }
- else
- error(url, in, "expecting principal");
- tok = in.nextToken();
- if (tok != ',')
- in.pushBack();
- }
- else if (in.sval.equalsIgnoreCase("permission"))
- {
- if (state != STATE_PERMS)
- error(url, in, "spurious 'permission'");
- tok = in.nextToken();
- if (tok != StreamTokenizer.TT_WORD)
- error(url, in, "expecting permission class name");
- String className = in.sval;
- Class clazz = null;
- try
- {
- clazz = Class.forName(className);
- }
- catch (ClassNotFoundException cnfe)
- {
- }
- tok = in.nextToken();
- if (tok == ';')
- {
- if (clazz == null)
- {
- currentPerms.add(new UnresolvedPermission(className,
- null, null, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
- continue;
- }
- try
- {
- currentPerms.add((Permission) clazz.newInstance());
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- continue;
- }
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting permission target");
- String target = expand(in.sval);
- tok = in.nextToken();
- if (tok == ';')
- {
- if (clazz == null)
- {
- currentPerms.add(new UnresolvedPermission(className,
- target, null, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
- continue;
- }
- try
- {
- Constructor c =
- clazz.getConstructor(new Class[] { String.class });
- currentPerms.add((Permission) c.newInstance(
- new Object[] { target }));
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- continue;
- }
- if (tok != ',')
- error(url, in, "expecting ','");
- tok = in.nextToken();
- if (tok == StreamTokenizer.TT_WORD)
- {
- if (!in.sval.equalsIgnoreCase("signedBy"))
- error(url, in, "expecting 'signedBy'");
- try
- {
- Constructor c =
- clazz.getConstructor(new Class[] { String.class });
- currentPerms.add((Permission) c.newInstance(
- new Object[] { target }));
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- in.pushBack();
- continue;
- }
- if (tok != '"' && tok != '\'')
- error(url, in, "expecting permission action");
- String action = in.sval;
- if (clazz == null)
- {
- currentPerms.add(new UnresolvedPermission(className,
- target, action, (Certificate[]) currentCerts.toArray(new Certificate[currentCerts.size()])));
- continue;
- }
- else
- {
- try
- {
- Constructor c = clazz.getConstructor(
- new Class[] { String.class, String.class });
- currentPerms.add((Permission) c.newInstance(
- new Object[] { target, action }));
- }
- catch (Exception x)
- {
- error(url, in, x.toString());
- }
- }
- tok = in.nextToken();
- if (tok != ';' && tok != ',')
- error(url, in, "expecting ';' or ','");
- }
- }
- }
-
- /**
- * Expand all instances of <code>"${property-name}"</code> into
- * <code>System.getProperty("property-name")</code>.
- */
- private static String expand(final String s)
- {
- final CPStringBuilder result = new CPStringBuilder();
- final CPStringBuilder prop = new CPStringBuilder();
- int state = 0;
- for (int i = 0; i < s.length(); i++)
- {
- switch (state)
- {
- case 0:
- if (s.charAt(i) == '$')
- state = 1;
- else
- result.append(s.charAt(i));
- break;
- case 1:
- if (s.charAt(i) == '{')
- state = 2;
- else
- {
- state = 0;
- result.append('$').append(s.charAt(i));
- }
- break;
- case 2:
- if (s.charAt(i) == '}')
- {
- String p = prop.toString();
- if (p.equals("/"))
- p = "file.separator";
- p = System.getProperty(p);
- if (p == null)
- p = "";
- result.append(p);
- prop.setLength(0);
- state = 0;
- }
- else
- prop.append(s.charAt(i));
- break;
- }
- }
- if (state != 0)
- result.append('$').append('{').append(prop);
- return result.toString();
- }
-
- /**
- * I miss macros.
- */
- private static void error(URL base, StreamTokenizer in, String msg)
- throws IOException
- {
- throw new IOException(base+":"+in.lineno()+": "+msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/Properties.java b/libjava/classpath/gnu/java/security/Properties.java
deleted file mode 100644
index 1a4bf227..0000000
--- a/libjava/classpath/gnu/java/security/Properties.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/* Properties.java -- run-time configuration properties.
- Copyright (C) 2003, 2004, 2006, 2010 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;
-
-import gnu.java.security.Configuration;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.HashMap;
-import java.util.PropertyPermission;
-import java.util.logging.Logger;
-
-/**
- * A global object containing build-specific properties that affect the
- * behaviour of the generated binaries from this library.
- */
-public final class Properties
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(Properties.class.getName()) : null;
-
- public static final String VERSION = "gnu.crypto.version";
-
- public static final String PROPERTIES_FILE = "gnu.crypto.properties.file";
-
- public static final String REPRODUCIBLE_PRNG = "gnu.crypto.with.reproducible.prng";
-
- public static final String CHECK_WEAK_KEYS = "gnu.crypto.with.check.for.weak.keys";
-
- public static final String DO_RSA_BLINDING = "gnu.crypto.with.rsa.blinding";
-
- private static final String TRUE = Boolean.TRUE.toString();
-
- private static final String FALSE = Boolean.FALSE.toString();
-
- private static final HashMap props = new HashMap();
-
- private static Properties singleton = null;
-
- private boolean reproducible = false;
-
- private boolean checkForWeakKeys = true;
-
- private boolean doRSABlinding = true;
-
- /** Trivial constructor to enforce Singleton pattern. */
- private Properties()
- {
- super();
- init();
- }
-
- /**
- * Returns the string representation of the library global configuration
- * property with the designated <code>key</code>.
- *
- * @param key the case-insensitive, non-null and non-empty name of a
- * configuration property.
- * @return the string representation of the designated property, or
- * <code>null</code> if such property is not yet set, or
- * <code>key</code> is empty.
- */
- public static final synchronized String getProperty(String key)
- {
- if (key == null)
- return null;
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(key, "read"));
- key = key.trim().toLowerCase();
- if ("".equals(key))
- return null;
- return (String) props.get(key);
- }
-
- /**
- * Sets the value of a designated library global configuration property, to a
- * string representation of what should be a legal value.
- *
- * @param key the case-insensitive, non-null and non-empty name of a
- * configuration property.
- * @param value the non-null, non-empty string representation of a legal value
- * of the configuration property named by <code>key</code>.
- */
- public static final synchronized void setProperty(String key, String value)
- {
- if (key == null || value == null)
- return;
- key = key.trim().toLowerCase();
- if ("".equals(key))
- return;
- if (key.equals(VERSION))
- return;
- value = value.trim();
- if ("".equals(value))
- return;
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(key, "write"));
- if (key.equals(REPRODUCIBLE_PRNG)
- && (value.equalsIgnoreCase(TRUE) || value.equalsIgnoreCase(FALSE)))
- setReproducible(Boolean.valueOf(value).booleanValue());
- else if (key.equals(CHECK_WEAK_KEYS)
- && (value.equalsIgnoreCase(TRUE) || value.equalsIgnoreCase(FALSE)))
- setCheckForWeakKeys(Boolean.valueOf(value).booleanValue());
- else if (key.equals(DO_RSA_BLINDING)
- && (value.equalsIgnoreCase(TRUE) || value.equalsIgnoreCase(FALSE)))
- setDoRSABlinding(Boolean.valueOf(value).booleanValue());
- else
- props.put(key, value);
- }
-
- /**
- * A convenience method that returns, as a boolean, the library global
- * configuration property indicating if the default Pseudo Random Number
- * Generator produces, or not, the same bit stream when instantiated.
- *
- * @return <code>true</code> if the default PRNG produces the same bit
- * stream with every VM instance. Returns <code>false</code> if the
- * default PRNG is seeded with the time of day of its first
- * invocation.
- */
- public static final synchronized boolean isReproducible()
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(REPRODUCIBLE_PRNG, "read"));
- return instance().reproducible;
- }
-
- /**
- * A convenience method that returns, as a boolean, the library global
- * configuration property indicating if the implementations of symmetric key
- * block ciphers check, or not, for possible/potential weak and semi-weak keys
- * that may be produced in the course of generating round encryption and/or
- * decryption keys.
- *
- * @return <code>true</code> if the cipher implementations check for weak
- * and semi-weak keys. Returns <code>false</code> if the cipher
- * implementations do not check for weak or semi-weak keys.
- */
- public static final synchronized boolean checkForWeakKeys()
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(CHECK_WEAK_KEYS, "read"));
- return instance().checkForWeakKeys;
- }
-
- /**
- * A convenience method that returns, as a boolean, the library global
- * configuration property indicating if RSA decryption (RSADP primitive),
- * does, or not, blinding against timing attacks.
- *
- * @return <code>true</code> if the RSA decryption primitive includes a
- * blinding operation. Returns <code>false</code> if the RSA
- * decryption primitive does not include the additional blinding
- * operation.
- */
- public static final synchronized boolean doRSABlinding()
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(DO_RSA_BLINDING, "read"));
- return instance().doRSABlinding;
- }
-
- /**
- * A convenience method to set the global property for reproducibility of the
- * default PRNG bit stream output.
- *
- * @param value if <code>true</code> then the default PRNG bit stream output
- * is the same with every invocation of the VM.
- */
- public static final synchronized void setReproducible(final boolean value)
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(REPRODUCIBLE_PRNG, "write"));
- instance().reproducible = value;
- props.put(REPRODUCIBLE_PRNG, String.valueOf(value));
- }
-
- /**
- * A convenience method to set the global property for checking for weak and
- * semi-weak cipher keys.
- *
- * @param value if <code>true</code> then the cipher implementations will
- * invoke additional checks for weak and semi-weak key values that
- * may get generated.
- */
- public static final synchronized void setCheckForWeakKeys(final boolean value)
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(CHECK_WEAK_KEYS, "write"));
- instance().checkForWeakKeys = value;
- props.put(CHECK_WEAK_KEYS, String.valueOf(value));
- }
-
- /**
- * A convenience method to set the global property fo adding a blinding
- * operation when executing the RSA decryption primitive.
- *
- * @param value if <code>true</code> then the code for performing the RSA
- * decryption primitive will include a blinding operation.
- */
- public static final synchronized void setDoRSABlinding(final boolean value)
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new PropertyPermission(DO_RSA_BLINDING, "write"));
- instance().doRSABlinding = value;
- props.put(DO_RSA_BLINDING, String.valueOf(value));
- }
-
- private static final synchronized Properties instance()
- {
- if (singleton == null)
- singleton = new Properties();
- return singleton;
- }
-
- private void init()
- {
- // default values
- props.put(REPRODUCIBLE_PRNG, (reproducible ? "true" : "false"));
- props.put(CHECK_WEAK_KEYS, (checkForWeakKeys ? "true" : "false"));
- props.put(DO_RSA_BLINDING, (doRSABlinding ? "true" : "false"));
- // 1. allow site-wide override by reading a properties file
- String propFile = null;
- try
- {
- propFile = (String) AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- return System.getProperty(PROPERTIES_FILE);
- }
- });
- }
- catch (SecurityException se)
- {
- if (Configuration.DEBUG)
- log.fine("Reading property " + PROPERTIES_FILE + " not allowed. Ignored.");
- }
- if (propFile != null)
- {
- try
- {
- final java.util.Properties temp = new java.util.Properties();
- final FileInputStream fin = new FileInputStream(propFile);
- temp.load(fin);
- temp.list(System.out);
- props.putAll(temp);
- }
- catch (IOException ioe)
- {
- if (Configuration.DEBUG)
- log.fine("IO error reading " + propFile + ": " + ioe.getMessage());
- }
- catch (SecurityException se)
- {
- if (Configuration.DEBUG)
- log.fine("Security error reading " + propFile + ": "
- + se.getMessage());
- }
- }
- // 2. allow vm-specific override by allowing -D options in launcher
- handleBooleanProperty(REPRODUCIBLE_PRNG);
- handleBooleanProperty(CHECK_WEAK_KEYS);
- handleBooleanProperty(DO_RSA_BLINDING);
- // re-sync the 'known' properties
- reproducible = Boolean.valueOf((String) props.get(REPRODUCIBLE_PRNG)).booleanValue();
- checkForWeakKeys = Boolean.valueOf((String) props.get(CHECK_WEAK_KEYS)).booleanValue();
- doRSABlinding = Boolean.valueOf((String) props.get(DO_RSA_BLINDING)).booleanValue();
- // This does not change.
- props.put(VERSION, Registry.VERSION_STRING);
- }
-
- private void handleBooleanProperty(final String name)
- {
- String s = null;
- try
- {
- s = System.getProperty(name);
- }
- catch (SecurityException x)
- {
- if (Configuration.DEBUG)
- log.fine("SecurityManager forbids reading system properties. Ignored");
- }
- if (s != null)
- {
- s = s.trim().toLowerCase();
- // we have to test for explicit "true" or "false". anything else may
- // hide valid value set previously
- if (s.equals(TRUE) || s.equals(FALSE))
- {
- if (Configuration.DEBUG)
- log.fine("Setting " + name + " to '" + s + "'");
- props.put(name, s);
- }
- else
- {
- if (Configuration.DEBUG)
- log.fine("Invalid value for -D" + name + ": " + s + ". Ignored");
- }
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/Registry.java b/libjava/classpath/gnu/java/security/Registry.java
deleted file mode 100644
index 4ce5044..0000000
--- a/libjava/classpath/gnu/java/security/Registry.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/* Registry.java --
- Copyright (C) 2001, 2002, 2003, 2004, 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;
-
-/**
- * A placeholder for <i>names</i> and <i>literals</i> used throughout this
- * library.
- */
-public interface Registry
-{
- /** The name of our Providers. */
- String GNU_SECURITY = "GNU";
- String GNU_CRYPTO = "GNU-CRYPTO";
- String GNU_SASL = "GNU-SASL";
-
- /** Our version number. */
- String VERSION_STRING = "2.1.0";
-
- // Names of properties to use in Maps when initialising primitives .........
-
- // Symmetric block cipher algorithms and synonyms...........................
-
- String ANUBIS_CIPHER = "anubis";
-
- String BLOWFISH_CIPHER = "blowfish";
-
- String DES_CIPHER = "des";
-
- String KHAZAD_CIPHER = "khazad";
-
- String RIJNDAEL_CIPHER = "rijndael";
-
- String SERPENT_CIPHER = "serpent";
-
- String SQUARE_CIPHER = "square";
-
- String TRIPLEDES_CIPHER = "tripledes";
-
- String TWOFISH_CIPHER = "twofish";
-
- String CAST5_CIPHER = "cast5";
-
- String NULL_CIPHER = "null";
-
- /** AES is synonymous to Rijndael for 128-bit block size only. */
- String AES_CIPHER = "aes";
-
- /** TripleDES is also known as DESede. */
- String DESEDE_CIPHER = "desede";
-
- /** CAST5 is also known as CAST-128. */
- String CAST128_CIPHER = "cast128";
-
- String CAST_128_CIPHER = "cast-128";
-
- // Key Wrapping Algorithm names and synonyms ...............................
-
- String KWA_PREFIX = "kw-";
- String AES_KWA = KWA_PREFIX + AES_CIPHER;
- String AES128_KWA = AES_KWA + "128";
- String AES192_KWA = AES_KWA + "192";
- String AES256_KWA = AES_KWA + "256";
- String RIJNDAEL_KWA = KWA_PREFIX + RIJNDAEL_CIPHER;
-
- String TRIPLEDES_KWA = KWA_PREFIX + TRIPLEDES_CIPHER;
- String DESEDE_KWA = KWA_PREFIX + DESEDE_CIPHER;
-
- // Message digest algorithms and synonyms...................................
-
- String WHIRLPOOL_HASH = "whirlpool";
-
- String RIPEMD128_HASH = "ripemd128";
-
- String RIPEMD160_HASH = "ripemd160";
-
- String SHA160_HASH = "sha-160";
-
- String SHA256_HASH = "sha-256";
-
- String SHA384_HASH = "sha-384";
-
- String SHA512_HASH = "sha-512";
-
- String TIGER_HASH = "tiger";
-
- String HAVAL_HASH = "haval";
-
- String MD5_HASH = "md5";
-
- String MD4_HASH = "md4";
-
- String MD2_HASH = "md2";
-
- /** RIPEMD-128 is synonymous to RIPEMD128. */
- String RIPEMD_128_HASH = "ripemd-128";
-
- /** RIPEMD-160 is synonymous to RIPEMD160. */
- String RIPEMD_160_HASH = "ripemd-160";
-
- /** SHA-1 is synonymous to SHA-160. */
- String SHA_1_HASH = "sha-1";
-
- /** SHA1 is synonymous to SHA-160. */
- String SHA1_HASH = "sha1";
-
- /** SHA is synonymous to SHA-160. */
- String SHA_HASH = "sha";
-
- // Symmetric block cipher modes of operations...............................
-
- /** Electronic CodeBook mode. */
- String ECB_MODE = "ecb";
-
- /** Counter (NIST) mode. */
- String CTR_MODE = "ctr";
-
- /** Integer Counter Mode (David McGrew). */
- String ICM_MODE = "icm";
-
- /** Output Feedback Mode (NIST). */
- String OFB_MODE = "ofb";
-
- /** Cipher block chaining mode (NIST). */
- String CBC_MODE = "cbc";
-
- /** Cipher feedback mode (NIST). */
- String CFB_MODE = "cfb";
-
- /** Authenticated-Encrypted mode. */
- String EAX_MODE = "eax";
-
- // Padding scheme names and synonyms........................................
-
- /** PKCS#5 padding scheme. */
- String PKCS5_PAD = "pkcs5";
-
- /** PKCS#7 padding scheme. */
- String PKCS7_PAD = "pkcs7";
-
- /** Trailing Bit Complement padding scheme. */
- String TBC_PAD = "tbc";
-
- /** EME-PKCS1-v1_5 padding as described in section 7.2 in RFC-3447. */
- String EME_PKCS1_V1_5_PAD = "eme-pkcs1-v1.5";
-
- /** SSLv3 padding scheme. */
- String SSL3_PAD = "ssl3";
-
- /** TLSv1 padding scheme. */
- String TLS1_PAD = "tls1";
-
- /** ISO 10126-2 padding scheme. */
- String ISO10126_PAD = "iso10126";
-
- // Pseudo-random number generators..........................................
-
- /** (Apparently) RC4 keystream PRNG. */
- String ARCFOUR_PRNG = "arcfour";
-
- /** We use "rc4" as an alias for "arcfour". */
- String RC4_PRNG = "rc4";
-
- /** PRNG based on David McGrew's Integer Counter Mode. */
- String ICM_PRNG = "icm";
-
- /** PRNG based on a designated hash function. */
- String MD_PRNG = "md";
-
- /** PRNG based on UMAC's Key Derivation Function. */
- String UMAC_PRNG = "umac-kdf";
-
- /**
- * PRNG based on PBKDF2 from PKCS #5 v.2. This is suffixed with the name
- * of a MAC to be used as a PRF.
- */
- String PBKDF2_PRNG_PREFIX = "pbkdf2-";
-
- /** The continuously-seeded pseudo-random number generator. */
- String CSPRNG_PRNG = "csprng";
-
- /** The Fortuna PRNG. */
- String FORTUNA_PRNG = "fortuna";
-
- /** The Fortuna generator PRNG. */
- String FORTUNA_GENERATOR_PRNG = "fortuna-generator";
-
- // Asymmetric keypair generators............................................
-
- String DSS_KPG = "dss";
-
- String RSA_KPG = "rsa";
-
- String DH_KPG = "dh";
-
- String SRP_KPG = "srp";
-
- /** DSA is synonymous to DSS. */
- String DSA_KPG = "dsa";
-
- // Signature-with-appendix schemes..........................................
-
- String DSS_SIG = "dss";
-
- String RSA_SIG_PREFIX = "rsa-";
-
- String RSA_PSS_ENCODING = "pss";
-
- String RSA_PSS_SIG = RSA_SIG_PREFIX + RSA_PSS_ENCODING;
-
- String RSA_PKCS1_V1_5_ENCODING = "pkcs1-v1.5";
-
- String RSA_PKCS1_V1_5_SIG = RSA_SIG_PREFIX + RSA_PKCS1_V1_5_ENCODING;
-
- /** DSA is synonymous to DSS. */
- String DSA_SIG = "dsa";
-
- // Key agreement protocols .................................................
-
- String DH_KA = "dh";
-
- String ELGAMAL_KA = "elgamal";
-
- String SRP6_KA = "srp6";
-
- String SRP_SASL_KA = "srp-sasl";
-
- String SRP_TLS_KA = "srp-tls";
-
- // Keyed-Hash Message Authentication Code ..................................
-
- /** Name prefix of every HMAC implementation. */
- String HMAC_NAME_PREFIX = "hmac-";
-
- // Other MAC algorithms ....................................................
-
- /** The One-key CBC MAC. */
- String OMAC_PREFIX = "omac-";
-
- /** Message Authentication Code using Universal Hashing (Ted Krovetz). */
- String UHASH32 = "uhash32";
-
- String UMAC32 = "umac32";
-
- /** The Truncated Multi-Modular Hash Function -v1 (David McGrew). */
- String TMMH16 = "tmmh16";
-
- // String TMMH32 = "tmmh32";
-
- // Format IDs used to identify how we externalise asymmetric keys ..........
- // fully-qualified names of the supported codecs
- String RAW_ENCODING = "gnu.crypto.raw.format";
- String X509_ENCODING = "gnu.crypto.x509.format";
- String PKCS8_ENCODING = "gnu.crypto.pkcs8.format";
- String ASN1_ENCODING = "gnu.crypto.asn1.format";
-
- // short names of the same. used by JCE adapters
- String RAW_ENCODING_SHORT_NAME = "RAW";
- String X509_ENCODING_SORT_NAME = "X.509";
- String PKCS8_ENCODING_SHORT_NAME = "PKCS#8";
- String ASN1_ENCODING_SHORT_NAME = "ASN.1";
-
- // unique identifiers of the same
- int RAW_ENCODING_ID = 1;
- int X509_ENCODING_ID = 2;
- int PKCS8_ENCODING_ID = 3;
- int ASN1_ENCODING_ID = 4;
-
- // OID strings used in encoding/decoding keys
- String DSA_OID_STRING = "1.2.840.10040.4.1";
- String RSA_OID_STRING = "1.2.840.113549.1.1.1";
- String DH_OID_STRING = "1.2.840.10046.2.1";
-
- // Magic bytes we generate/expect in externalised asymmetric keys ..........
- // the four bytes represent G (0x47) for GNU, 1 (0x01) for Raw format,
- // D (0x44) for DSS, R (0x52) for RSA, H (0x48) for Diffie-Hellman, or S
- // (0x53) for SRP-6, and finally P (0x50) for Public, p (0x70) for private,
- // or S (0x53) for signature.
- byte[] MAGIC_RAW_DSS_PUBLIC_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x44, 0x50 };
-
- byte[] MAGIC_RAW_DSS_PRIVATE_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x44, 0x70 };
-
- byte[] MAGIC_RAW_DSS_SIGNATURE = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x44, 0x53 };
-
- byte[] MAGIC_RAW_RSA_PUBLIC_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x52, 0x50 };
-
- byte[] MAGIC_RAW_RSA_PRIVATE_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x52, 0x70 };
-
- byte[] MAGIC_RAW_RSA_PSS_SIGNATURE = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x52, 0x53 };
-
- byte[] MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x52, 0x54 };
-
- byte[] MAGIC_RAW_DH_PUBLIC_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x48, 0x50 };
-
- byte[] MAGIC_RAW_DH_PRIVATE_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x48, 0x70 };
-
- byte[] MAGIC_RAW_SRP_PUBLIC_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x53, 0x50 };
-
- byte[] MAGIC_RAW_SRP_PRIVATE_KEY = new byte[] {
- 0x47, RAW_ENCODING_ID, 0x53, 0x70 };
-
- // SASL Property names .....................................................
-
- String SASL_PREFIX = "gnu.crypto.sasl";
-
- /** Name of username property. */
- String SASL_USERNAME = SASL_PREFIX + ".username";
-
- /** Name of password property. */
- String SASL_PASSWORD = SASL_PREFIX + ".password";
-
- /** Name of authentication information provider packages. */
- String SASL_AUTH_INFO_PROVIDER_PKGS = SASL_PREFIX + ".auth.info.provider.pkgs";
-
- /** SASL authorization ID. */
- String SASL_AUTHORISATION_ID = SASL_PREFIX + ".authorisation.ID";
-
- /** SASL protocol. */
- String SASL_PROTOCOL = SASL_PREFIX + ".protocol";
-
- /** SASL Server name. */
- String SASL_SERVER_NAME = SASL_PREFIX + ".server.name";
-
- /** SASL Callback handler. */
- String SASL_CALLBACK_HANDLER = SASL_PREFIX + ".callback.handler";
-
- /** SASL channel binding. */
- String SASL_CHANNEL_BINDING = SASL_PREFIX + ".channel.binding";
-
- // SASL data element size limits ...........................................
-
- /** The size limit, in bytes, of a SASL OS (Octet Sequence) element. */
- int SASL_ONE_BYTE_MAX_LIMIT = 255;
-
- /**
- * The size limit, in bytes, of both a SASL MPI (Multi-Precision Integer)
- * element and a SASL Text element.
- */
- int SASL_TWO_BYTE_MAX_LIMIT = 65535;
-
- /** The size limit, in bytes, of a SASL EOS (Extended Octet Sequence) element. */
- int SASL_FOUR_BYTE_MAX_LIMIT = 2147483383;
-
- /** The size limit, in bytes, of a SASL Buffer. */
- int SASL_BUFFER_MAX_LIMIT = 2147483643;
-
- // Canonical names of SASL mechanisms ......................................
-
- String SASL_ANONYMOUS_MECHANISM = "ANONYMOUS";
-
- String SASL_CRAM_MD5_MECHANISM = "CRAM-MD5";
-
- String SASL_PLAIN_MECHANISM = "PLAIN";
-
- String SASL_SRP_MECHANISM = "SRP";
-
- // Canonical names of Integrity Protection algorithms ......................
-
- String SASL_HMAC_MD5_IALG = "HMACwithMD5";
-
- String SASL_HMAC_SHA_IALG = "HMACwithSHA";
-
- // Quality Of Protection string representations ............................
-
- /** authentication only. */
- String QOP_AUTH = "auth";
-
- /** authentication plus integrity protection. */
- String QOP_AUTH_INT = "auth-int";
-
- /** authentication plus integrity and confidentiality protection. */
- String QOP_AUTH_CONF = "auth-conf";
-
- // SASL mechanism strength string representation ...........................
-
- String STRENGTH_HIGH = "high";
-
- String STRENGTH_MEDIUM = "medium";
-
- String STRENGTH_LOW = "low";
-
- // SASL Server Authentication requirement ..................................
-
- /** Server must authenticate to the client. */
- String SERVER_AUTH_TRUE = "true";
-
- /** Server does not need to, or cannot, authenticate to the client. */
- String SERVER_AUTH_FALSE = "false";
-
- // SASL mechanism reuse capability .........................................
-
- String REUSE_TRUE = "true";
-
- String REUSE_FALSE = "false";
-
- // Keyrings ...............................................................
-
- byte[] GKR_MAGIC = new byte[] { 0x47, 0x4b, 0x52, 0x01 };
-
- // Ring usage fields.
- int GKR_PRIVATE_KEYS = 1 << 0;
-
- int GKR_PUBLIC_CREDENTIALS = 1 << 1;
-
- int GKR_CERTIFICATES = 1 << 2;
-
- // HMac types.
- int GKR_HMAC_MD5_128 = 0;
-
- int GKR_HMAC_SHA_160 = 1;
-
- int GKR_HMAC_MD5_96 = 2;
-
- int GKR_HMAC_SHA_96 = 3;
-
- // Cipher types.
- int GKR_CIPHER_AES_128_OFB = 0;
-
- int GKR_CIPHER_AES_128_CBC = 1;
-}
diff --git a/libjava/classpath/gnu/java/security/Requires.java b/libjava/classpath/gnu/java/security/Requires.java
deleted file mode 100644
index 6b52bd1..0000000
--- a/libjava/classpath/gnu/java/security/Requires.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Requires.java -- mark methods as requiring permission.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.RetentionPolicy.CLASS;
-import java.security.Permission;
-
-/**
- *
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-@Documented @Retention(CLASS) @Target(METHOD)
-public @interface Requires
-{
- Class<? extends Permission> permissionClass();
- String target();
- String action();
-}
diff --git a/libjava/classpath/gnu/java/security/action/GetPropertyAction.java b/libjava/classpath/gnu/java/security/action/GetPropertyAction.java
deleted file mode 100644
index 7295d8d..0000000
--- a/libjava/classpath/gnu/java/security/action/GetPropertyAction.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* GetPropertyAction.java
- Copyright (C) 2004 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.action;
-
-import java.security.PrivilegedAction;
-
-/**
- * PrivilegedAction implementation that calls System.getProperty() with
- * the property name passed to its constructor.
- *
- * Example of use:
- * <code>
- * GetPropertyAction action = new GetPropertyAction("http.proxyPort");
- * String port = AccessController.doPrivileged(action);
- * </code>
- */
-public class GetPropertyAction implements PrivilegedAction<String>
-{
- String name;
- String value = null;
-
- public GetPropertyAction()
- {
- }
-
- public GetPropertyAction(String propName)
- {
- setParameters(propName);
- }
-
- public GetPropertyAction(String propName, String defaultValue)
- {
- setParameters(propName, defaultValue);
- }
-
- public String run()
- {
- return System.getProperty(name, value);
- }
-
- public GetPropertyAction setParameters(String propName)
- {
- this.name = propName;
- this.value = null;
- return this;
- }
-
- public GetPropertyAction setParameters(String propName, String defaultValue)
- {
- this.name = propName;
- this.value = defaultValue;
- return this;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java b/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java
deleted file mode 100644
index ac928ca..0000000
--- a/libjava/classpath/gnu/java/security/action/GetSecurityPropertyAction.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/* GetSecurityPropertyAction.java
- Copyright (C) 2004 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.action;
-
-import java.security.PrivilegedAction;
-import java.security.Security;
-
-/**
- * PrivilegedAction implementation that calls Security.getProperty()
- * with the property name passed to its constructor.
- *
- * Example of use:
- * <code>
- * GetSecurityPropertyAction action = new GetSecurityPropertyAction("javax.net.ssl.trustStorePassword");
- * String passwd = AccessController.doPrivileged(action);
- * </code>
- */
-public class GetSecurityPropertyAction implements PrivilegedAction<String>
-{
- private String name;
- private String value;
-
- public GetSecurityPropertyAction()
- {
- }
-
- public GetSecurityPropertyAction(String propName)
- {
- setParameters(propName);
- }
-
- public GetSecurityPropertyAction(String propName, String defaultValue)
- {
- setParameters(propName, defaultValue);
- }
-
- public GetSecurityPropertyAction setParameters(String propName)
- {
- this.name = propName;
- this.value = null;
- return this;
- }
-
- public GetSecurityPropertyAction setParameters(String propName, String defaultValue)
- {
- this.name = propName;
- this.value = defaultValue;
- return this;
- }
-
- public String run()
- {
- String val = Security.getProperty(name);
- if (val == null)
- val = value;
- return val;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java b/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java
deleted file mode 100644
index d3e3c0f..0000000
--- a/libjava/classpath/gnu/java/security/action/SetAccessibleAction.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/* SetAccessibleAction.java
- Copyright (C) 2004 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.action;
-
-import java.lang.reflect.AccessibleObject;
-import java.security.PrivilegedAction;
-
-/**
- * PrivilegedAction implementation that calls setAccessible(true) on the
- * AccessibleObject passed to its constructor.
- *
- * Example of use:
- * <code>
- * Field dataField = cl.getDeclaredField("data");
- * AccessController.doPrivileged(new SetAccessibleAction(dataField));
- * </code>
- */
-public class SetAccessibleAction implements PrivilegedAction
-{
- AccessibleObject member;
-
- public SetAccessibleAction()
- {
- }
-
- public SetAccessibleAction(AccessibleObject member)
- {
- this.member = member;
- }
-
- public Object run()
- {
- member.setAccessible(true);
- return null;
- }
-
- public SetAccessibleAction setMember(AccessibleObject member)
- {
- this.member = member;
- return this;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/action/package.html b/libjava/classpath/gnu/java/security/action/package.html
deleted file mode 100644
index fc3dfa2..0000000
--- a/libjava/classpath/gnu/java/security/action/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.action package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.action</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/ber/BER.java b/libjava/classpath/gnu/java/security/ber/BER.java
deleted file mode 100644
index 7efb1bf..0000000
--- a/libjava/classpath/gnu/java/security/ber/BER.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* BER.java -- basic encoding rules (BER) constants.
- Copyright (C) 2004 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.ber;
-
-import gnu.java.security.der.DER;
-
-public interface BER extends DER
-{
- BERValue END_OF_SEQUENCE = new BERValue(0, null);
-}
diff --git a/libjava/classpath/gnu/java/security/ber/BEREncodingException.java b/libjava/classpath/gnu/java/security/ber/BEREncodingException.java
deleted file mode 100644
index aad1093..0000000
--- a/libjava/classpath/gnu/java/security/ber/BEREncodingException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* BEREncodingException.java --- BER Encoding Exception
- Copyright (C) 2004 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.ber;
-
-import gnu.java.security.der.DEREncodingException;
-
-public class BEREncodingException extends DEREncodingException
-{
- public BEREncodingException()
- {
- super ();
- }
-
- public BEREncodingException (String msg)
- {
- super (msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/ber/BERReader.java b/libjava/classpath/gnu/java/security/ber/BERReader.java
deleted file mode 100644
index 53a3f3e..0000000
--- a/libjava/classpath/gnu/java/security/ber/BERReader.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* BERReader.java -- basic encoding rules (BER) reader.
- Copyright (C) 2004 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.ber;
-
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-public class BERReader extends DERReader implements BER
-{
-
- /**
- * Create a new DER reader from a byte array.
- *
- * @param in The encoded bytes.
- */
- public BERReader(byte[] in)
- {
- super(in);
- }
-
- public BERReader (byte[] in, int off, int len)
- {
- super(in, off, len);
- }
-
- /**
- * Create a new DER readed from an input stream.
- *
- * @param in The encoded bytes.
- */
- public BERReader(InputStream in)
- {
- super(in);
- }
-
- public DERValue read() throws IOException
- {
- in.mark(2);
- int tag = in.read();
- if (tag == -1)
- throw new EOFException();
- int length = in.read();
- if (length == 0)
- {
- if (tag == 0)
- return END_OF_SEQUENCE;
- return new BERValue(tag, CONSTRUCTED_VALUE, new byte[] { (byte) tag, 0 });
- }
- else
- {
- in.reset();
- return super.read();
- }
- }
-
- public int peek() throws IOException
- {
- in.mark(1);
- int ret = in.read();
- in.reset();
- return ret;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/ber/BERValue.java b/libjava/classpath/gnu/java/security/ber/BERValue.java
deleted file mode 100644
index aeaef39..0000000
--- a/libjava/classpath/gnu/java/security/ber/BERValue.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* BERReader.java -- basic encoding rules (BER) value.
- Copyright (C) 2004 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.ber;
-
-import gnu.java.security.der.DERValue;
-
-public class BERValue extends DERValue
-{
-
- private boolean indefinite;
-
- public BERValue(int tag, Object value, byte[] encoded)
- {
- super(tag, 0, value, encoded);
- indefinite = true;
- }
-
- public BERValue(int tag, int length, Object value, byte[] encoded)
- {
- super(tag, length, value, encoded);
- }
-
- public BERValue(int tag, Object value)
- {
- super(tag, 0, value, null);
- }
-
- public static boolean isIndefinite(DERValue value)
- {
- if (value instanceof BERValue)
- return ((BERValue) value).getIndefinite();
- return false;
- }
-
- public boolean getIndefinite()
- {
- return indefinite;
- }
-
- public int getLength()
- {
- if (indefinite)
- return 0;
- return super.getLength();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/ber/package.html b/libjava/classpath/gnu/java/security/ber/package.html
deleted file mode 100644
index 348a83c..0000000
--- a/libjava/classpath/gnu/java/security/ber/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.ber package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.ber</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/der/BitString.java b/libjava/classpath/gnu/java/security/der/BitString.java
deleted file mode 100644
index ac10be2..0000000
--- a/libjava/classpath/gnu/java/security/der/BitString.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/* BitString.java -- Java representation of the BIT STRING type.
- Copyright (C) 2003 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.der;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.math.BigInteger;
-import java.util.Arrays;
-
-/**
- * Immutable representation of a bit string, which is equivalent to a
- * byte array except some number of the rightmost bits are ignored. For
- * example, this could be the bit string:
- *
- * <pre> 00010101 11101101 11010xxx</pre>
- *
- * <p>Where the "xxx" represents three bits that should be ignored, and
- * can have any value.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class BitString implements Cloneable, Comparable
-{
-
- // Fields.
- // ------------------------------------------------------------------------
-
- /** The bits themselves. */
- private final byte[] bytes;
-
- /**
- * The exportable byte array. This array has the ignored bits
- * removed.
- */
- private transient byte[] externBytes;
-
- /** The number of bits ignored at the end of the byte array. */
- private final int ignoredBits;
-
- /** This bit string as a boolean array. */
- private transient boolean[] boolVal;
-
- // Constructors.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new bit string, shifting the given byte array if needed.
- *
- * @param bytes The byte array holding the bit string.
- * @param ignoredBits The number of bits to ignore.
- * @param doShift Pass true in this parameter if the byte array has
- * not yet been shifted left by <i>ignoredBits</i>.
- * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
- * or greater than 7.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes, int ignoredBits, boolean doShift)
- {
- this(bytes, 0, bytes.length, ignoredBits, doShift);
- }
-
- /**
- * Create a new bit string, shifting the given byte array if needed.
- *
- * @param bytes The byte array holding the bit string.
- * @param offset The offset where the meaningful bytes begin.
- * @param length The number of meaningful bytes.
- * @param ignoredBits The number of bits to ignore.
- * @param doShift Pass true in this parameter if the byte array has
- * not yet been shifted left by <i>ignoredBits</i>.
- * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
- * or greater than 7.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes, int offset, int length,
- int ignoredBits, boolean doShift)
- {
- if (ignoredBits < 0 || ignoredBits > 7)
- throw new IllegalArgumentException();
- if (bytes == null)
- throw new NullPointerException();
- if (doShift && ignoredBits > 0)
- {
- this.externBytes = new byte[length];
- System.arraycopy(bytes, offset, externBytes, 0, length);
- this.bytes = new BigInteger(externBytes).shiftLeft(ignoredBits)
- .toByteArray();
- }
- else
- {
- this.bytes = new byte[length];
- System.arraycopy(bytes, offset, this.bytes, 0, length);
- }
- this.ignoredBits = ignoredBits;
- }
-
- /**
- * Create a new bit string.
- *
- * @param bytes The byte array holding the bit string.
- * @param offset The offset where the meaningful bytes begin.
- * @param length The number of meaningful bytes.
- * @param ignoredBits The number of bits to ignore.
- * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
- * or greater than 7.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes, int offset, int length, int ignoredBits)
- {
- this(bytes, offset, length, ignoredBits, false);
- }
-
- /**
- * Create a new bit string.
- *
- * @param bytes The byte array holding the bit string.
- * @param ignoredBits The number of bits to ignore.
- * @throws IllegalArgumentException If <i>ignoredBits</i> is negative
- * or greater than 7.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes, int ignoredBits)
- {
- this(bytes, 0, bytes.length, ignoredBits, false);
- }
-
- /**
- * Create a new bit string.
- *
- * @param bytes The byte array holding the bit string.
- * @param offset The offset where the meaningful bytes begin.
- * @param length The number of meaningful bytes.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes, int offset, int length)
- {
- this(bytes, offset, length, 0, false);
- }
-
- /**
- * Create a new bit string.
- *
- * @param bytes The byte array holding the bit string.
- * @throws NullPointerException If <i>bytes</i> is null.
- */
- public BitString(byte[] bytes)
- {
- this(bytes, 0, bytes.length, 0, false);
- }
-
- // Instance methods.
- // ------------------------------------------------------------------------
-
- /**
- * Return this bit string as a byte array, with the ignored bits
- * trimmed off. The byte array is cloned every time this method is
- * called to prevent modification.
- *
- * @return The trimmed byte array.
- */
- public byte[] toByteArray()
- {
- if (ignoredBits == 0)
- return (byte[]) bytes.clone();
- if (externBytes == null)
- externBytes = new BigInteger(bytes).shiftRight(ignoredBits).toByteArray();
- return (byte[]) externBytes.clone();
- }
-
- /**
- * Returns this bit string as a byte array, with the ignored bits
- * present. The byte array is cloned every time this method is
- * called to prevent modification.
- *
- * @return The byte array.
- */
- public byte[] getShiftedByteArray()
- {
- return (byte[]) bytes.clone();
- }
-
- /**
- * Returns the number of ignored bits.
- *
- * @return The number of ignored bits.
- */
- public int getIgnoredBits()
- {
- return ignoredBits;
- }
-
- /**
- * Returns the size, in bits, of this bit string.
- *
- * @return The size of this bit string.
- */
- public int size()
- {
- return (bytes.length << 3) - ignoredBits;
- }
-
- /**
- * Return this bit string as a boolean array. The value returned is of
- * size {@link #size()}, and each <code>true</code> value
- * corresponding to each "1" in this bit string. The boolean array is
- * cloned before it is returned.
- *
- * @return The boolean array.
- */
- public boolean[] toBooleanArray()
- {
- if (boolVal == null)
- {
- boolVal = new boolean[size()];
- for (int i = 0, j = 7, k = 0; i < boolVal.length; i++)
- {
- boolVal[i] = (bytes[k] & 1 << j--) != 0;
- if (j < 0)
- {
- j = 7;
- k++;
- }
- }
- }
- return (boolean[]) boolVal.clone();
- }
-
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException cce)
- {
- throw new InternalError(cce.getMessage());
- }
- }
-
- public int compareTo(Object o)
- {
- BitString that = (BitString) o;
- if (this.equals(that))
- return 0;
- if (this.bytes.length != that.bytes.length)
- return (this.bytes.length < that.bytes.length) ? -1 : 1;
- if (this.ignoredBits != that.ignoredBits)
- return (this.ignoredBits < that.ignoredBits) ? -1 : 1;
- for (int i = 0; i < this.bytes.length; i++)
- if (this.bytes[i] != that.bytes[i])
- return (this.bytes[i] < that.bytes[i]) ? -1 : 1;
- return 0; // not reached.
- }
-
- public int hashCode()
- {
- int result = 0;
- for (int i = 0; i < bytes.length - 1; ++i)
- result = result * 31 + bytes[i];
- if (bytes.length > 0)
- {
- int lastByte = bytes[bytes.length - 1] & ~ ((1 << ignoredBits) - 1);
- result = result * 31 + lastByte;
- }
- return result;
- }
-
- public boolean equals(Object o)
- {
- if (!(o instanceof BitString))
- return false;
- BitString that = (BitString) o;
- // True for cloned instances.
- if (this.bytes == that.bytes && this.ignoredBits == that.ignoredBits)
- return true;
- if (this.ignoredBits == that.ignoredBits)
- return Arrays.equals(this.bytes, that.bytes);
- return false;
- }
-
- public String toString()
- {
- CPStringBuilder sb = new CPStringBuilder();
- for (int i = 0, j = 7, k = 0; i < size(); i++)
- {
- sb.append((bytes[k] & 1 << j) != 0 ? "1" : "0");
- j--;
- if (j < 0)
- {
- j = 7;
- k++;
- }
- }
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/der/DER.java b/libjava/classpath/gnu/java/security/der/DER.java
deleted file mode 100644
index a7eb4a6..0000000
--- a/libjava/classpath/gnu/java/security/der/DER.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* DER.java -- Basic constants in DER sequences.
- Copyright (C) 2003 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.der;
-
-/**
- * The set of tags for DER types.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public interface DER
-{
- int UNIVERSAL = 0x00;
- int APPLICATION = 0x40;
- int CONTEXT = 0x80;
- int PRIVATE = 0xC0;
-
- int CONSTRUCTED = 0x20;
-
- int ANY = 0x00;
- int BOOLEAN = 0x01;
- int INTEGER = 0x02;
- int BIT_STRING = 0x03;
- int OCTET_STRING = 0x04;
- int NULL = 0x05;
- int OBJECT_IDENTIFIER = 0x06;
- int REAL = 0x09;
- int ENUMERATED = 0x0a;
- int RELATIVE_OID = 0x0d;
-
- int SEQUENCE = 0x10;
- int SET = 0x11;
-
- Object CONSTRUCTED_VALUE = new Object();
-
- int NUMERIC_STRING = 0x12;
- int PRINTABLE_STRING = 0x13;
- int T61_STRING = 0x14;
- int VIDEOTEX_STRING = 0x15;
- int IA5_STRING = 0x16;
- int GRAPHIC_STRING = 0x19;
- int ISO646_STRING = 0x1A;
- int GENERAL_STRING = 0x1B;
-
- int UTF8_STRING = 0x0C;
- int UNIVERSAL_STRING = 0x1C;
- int BMP_STRING = 0x1E;
-
- int UTC_TIME = 0x17;
- int GENERALIZED_TIME = 0x18;
-}
diff --git a/libjava/classpath/gnu/java/security/der/DEREncodingException.java b/libjava/classpath/gnu/java/security/der/DEREncodingException.java
deleted file mode 100644
index 90042a3..0000000
--- a/libjava/classpath/gnu/java/security/der/DEREncodingException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* DEREncodingException.java --- DER Encoding Exception
- Copyright (C) 1999,2003 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.der;
-
-import java.io.IOException;
-
-public class DEREncodingException extends IOException
-{
- public DEREncodingException()
- {
- super ();
- }
-
- public DEREncodingException (String msg)
- {
- super (msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/der/DERReader.java b/libjava/classpath/gnu/java/security/der/DERReader.java
deleted file mode 100644
index cd552c8..0000000
--- a/libjava/classpath/gnu/java/security/der/DERReader.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/* DERReader.java -- parses ASN.1 DER sequences
- Copyright (C) 2003 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.der;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.OID;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * This class decodes DER sequences into Java objects. The methods of
- * this class do not have knowledge of higher-levels of structure in the
- * DER stream -- such as ASN.1 constructions -- and it is therefore up
- * to the calling application to determine if the data are structured
- * properly by inspecting the {@link DERValue} that is returned.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class DERReader implements DER
-{
-
- // Fields.
- // ------------------------------------------------------------------------
-
- protected InputStream in;
-
- protected final ByteArrayOutputStream encBuf;
-
- // Constructor.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new DER reader from a byte array.
- *
- * @param in The encoded bytes.
- */
- public DERReader(byte[] in)
- {
- this(new ByteArrayInputStream(in));
- }
-
- public DERReader (byte[] in, int off, int len)
- {
- this (new ByteArrayInputStream (in, off, len));
- }
-
- /**
- * Create a new DER readed from an input stream.
- *
- * @param in The encoded bytes.
- */
- public DERReader(InputStream in)
- {
- if (!in.markSupported())
- this.in = new BufferedInputStream(in, 16384);
- else
- this.in = in;
- encBuf = new ByteArrayOutputStream(2048);
- }
-
- // Class methods.
- // ------------------------------------------------------------------------
-
- /**
- * Convenience method for reading a single primitive value from the
- * given byte array.
- *
- * @param encoded The encoded bytes.
- * @throws IOException If the bytes do not represent an encoded
- * object.
- */
- public static DERValue read(byte[] encoded) throws IOException
- {
- return new DERReader(encoded).read();
- }
-
- // Instance methods.
- // ------------------------------------------------------------------------
-
- public void skip (int bytes) throws IOException
- {
- in.skip (bytes);
- }
-
- /**
- * Decode a single value from the input stream, returning it in a new
- * {@link DERValue}. By "single value" we mean any single type in its
- * entirety -- including constructed types such as SEQUENCE and all
- * the values they contain. Usually it is sufficient to call this
- * method once to parse and return the top-level structure, then to
- * inspect the returned value for the proper contents.
- *
- * @return The parsed DER structure.
- * @throws IOException If an error occurs reading from the input
- * stream.
- * @throws DEREncodingException If the input does not represent a
- * valid DER stream.
- */
- public DERValue read() throws IOException
- {
- int tag = in.read();
- if (tag == -1)
- throw new EOFException();
- encBuf.write(tag);
- int len = readLength();
- DERValue value = null;
- if ((tag & CONSTRUCTED) == CONSTRUCTED)
- {
- in.mark(2048);
- byte[] encoded = new byte[len];
- in.read(encoded);
- encBuf.write(encoded);
- value = new DERValue(tag, len, CONSTRUCTED_VALUE, encBuf.toByteArray());
- in.reset();
- encBuf.reset();
- return value;
- }
- switch (tag & 0xC0)
- {
- case UNIVERSAL:
- value = new DERValue(tag, len, readUniversal(tag, len),
- encBuf.toByteArray());
- encBuf.reset();
- break;
- case CONTEXT:
- byte[] encoded = new byte[len];
- in.read(encoded);
- encBuf.write(encoded);
- value = new DERValue(tag, len, encoded, encBuf.toByteArray());
- encBuf.reset();
- break;
- case APPLICATION:
- // This should not be reached, since (I think) APPLICATION is
- // always constructed.
- throw new DEREncodingException("non-constructed APPLICATION data");
- default:
- throw new DEREncodingException("PRIVATE class not supported");
- }
- return value;
- }
-
- protected int readLength() throws IOException
- {
- int i = in.read();
- if (i == -1)
- throw new EOFException();
- encBuf.write(i);
- if ((i & ~0x7F) == 0)
- {
- return i;
- }
- else if (i < 0xFF)
- {
- byte[] octets = new byte[i & 0x7F];
- in.read(octets);
- encBuf.write(octets);
- return new BigInteger(1, octets).intValue();
- }
- throw new DEREncodingException();
- }
-
- // Own methods.
- // ------------------------------------------------------------------------
-
- private Object readUniversal(int tag, int len) throws IOException
- {
- byte[] value = new byte[len];
- in.read(value);
- encBuf.write(value);
- switch (tag & 0x1F)
- {
- case BOOLEAN:
- if (value.length != 1)
- throw new DEREncodingException();
- return Boolean.valueOf(value[0] != 0);
- case NULL:
- if (len != 0)
- throw new DEREncodingException();
- return null;
- case INTEGER:
- case ENUMERATED:
- return new BigInteger(value);
- case BIT_STRING:
- byte[] bits = new byte[len - 1];
- System.arraycopy(value, 1, bits, 0, bits.length);
- return new BitString(bits, value[0] & 0xFF);
- case OCTET_STRING:
- return value;
- case NUMERIC_STRING:
- case PRINTABLE_STRING:
- case T61_STRING:
- case VIDEOTEX_STRING:
- case IA5_STRING:
- case GRAPHIC_STRING:
- case ISO646_STRING:
- case GENERAL_STRING:
- case UNIVERSAL_STRING:
- case BMP_STRING:
- case UTF8_STRING:
- return makeString(tag, value);
- case UTC_TIME:
- case GENERALIZED_TIME:
- return makeTime(tag, value);
- case OBJECT_IDENTIFIER:
- return new OID(value);
- case RELATIVE_OID:
- return new OID(value, true);
- default:
- throw new DEREncodingException("unknown tag " + tag);
- }
- }
-
- private static String makeString(int tag, byte[] value)
- throws IOException
- {
- switch (tag & 0x1F)
- {
- case NUMERIC_STRING:
- case PRINTABLE_STRING:
- case T61_STRING:
- case VIDEOTEX_STRING:
- case IA5_STRING:
- case GRAPHIC_STRING:
- case ISO646_STRING:
- case GENERAL_STRING:
- return fromIso88591(value);
-
- case UNIVERSAL_STRING:
- // XXX The docs say UniversalString is encoded in four bytes
- // per character, but Java has no support (yet) for UTF-32.
- //return new String(buf, "UTF-32");
- case BMP_STRING:
- return fromUtf16Be(value);
-
- case UTF8_STRING:
- return fromUtf8(value);
-
- default:
- throw new DEREncodingException("unknown string tag");
- }
- }
-
- private static String fromIso88591(byte[] bytes)
- {
- CPStringBuilder str = new CPStringBuilder(bytes.length);
- for (int i = 0; i < bytes.length; i++)
- str.append((char) (bytes[i] & 0xFF));
- return str.toString();
- }
-
- private static String fromUtf16Be(byte[] bytes) throws IOException
- {
- if ((bytes.length & 0x01) != 0)
- throw new IOException("UTF-16 bytes are odd in length");
- CPStringBuilder str = new CPStringBuilder(bytes.length / 2);
- for (int i = 0; i < bytes.length; i += 2)
- {
- char c = (char) ((bytes[i] << 8) & 0xFF);
- c |= (char) (bytes[i+1] & 0xFF);
- str.append(c);
- }
- return str.toString();
- }
-
- private static String fromUtf8(byte[] bytes) throws IOException
- {
- CPStringBuilder str = new CPStringBuilder((int)(bytes.length / 1.5));
- for (int i = 0; i < bytes.length; )
- {
- char c = 0;
- if ((bytes[i] & 0xE0) == 0xE0)
- {
- if ((i + 2) >= bytes.length)
- throw new IOException("short UTF-8 input");
- c = (char) ((bytes[i++] & 0x0F) << 12);
- if ((bytes[i] & 0x80) != 0x80)
- throw new IOException("malformed UTF-8 input");
- c |= (char) ((bytes[i++] & 0x3F) << 6);
- if ((bytes[i] & 0x80) != 0x80)
- throw new IOException("malformed UTF-8 input");
- c |= (char) (bytes[i++] & 0x3F);
- }
- else if ((bytes[i] & 0xC0) == 0xC0)
- {
- if ((i + 1) >= bytes.length)
- throw new IOException("short input");
- c = (char) ((bytes[i++] & 0x1F) << 6);
- if ((bytes[i] & 0x80) != 0x80)
- throw new IOException("malformed UTF-8 input");
- c |= (char) (bytes[i++] & 0x3F);
- }
- else if ((bytes[i] & 0xFF) < 0x80)
- {
- c = (char) (bytes[i++] & 0xFF);
- }
- else
- throw new IOException("badly formed UTF-8 sequence");
- str.append(c);
- }
- return str.toString();
- }
-
- private Date makeTime(int tag, byte[] value) throws IOException
- {
- Calendar calendar = Calendar.getInstance();
- String str = makeString(PRINTABLE_STRING, value);
-
- // Classpath's SimpleDateFormat does not work for parsing these
- // types of times, so we do this by hand.
- String date = str;
- String tz = "";
- if (str.indexOf("+") > 0)
- {
- date = str.substring(0, str.indexOf("+"));
- tz = str.substring(str.indexOf("+"));
- }
- else if (str.indexOf("-") > 0)
- {
- date = str.substring(0, str.indexOf("-"));
- tz = str.substring(str.indexOf("-"));
- }
- else if (str.endsWith("Z"))
- {
- date = str.substring(0, str.length()-2);
- tz = "Z";
- }
- if (!tz.equals("Z") && tz.length() > 0)
- calendar.setTimeZone(TimeZone.getTimeZone(tz));
- else
- calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
- if ((tag & 0x1F) == UTC_TIME)
- {
- if (date.length() < 10) // must be at least 10 chars long
- throw new DEREncodingException("cannot parse date");
- // UTCTime is of the form "yyMMddHHmm[ss](Z|(+|-)hhmm)"
- try
- {
- int year = Integer.parseInt(str.substring(0, 2));
- if (year < 50)
- year += 2000;
- else
- year += 1900;
- calendar.set(year,
- Integer.parseInt(str.substring( 2, 4))-1, // month
- Integer.parseInt(str.substring( 4, 6)), // day
- Integer.parseInt(str.substring( 6, 8)), // hour
- Integer.parseInt(str.substring( 8, 10))); // minute
- if (date.length() == 12)
- calendar.set(Calendar.SECOND,
- Integer.parseInt(str.substring(10, 12)));
- }
- catch (NumberFormatException nfe)
- {
- throw new DEREncodingException("cannot parse date");
- }
- }
- else
- {
- if (date.length() < 10) // must be at least 10 chars long
- throw new DEREncodingException("cannot parse date");
- // GeneralTime is of the form "yyyyMMddHH[mm[ss[(.|,)SSSS]]]"
- // followed by "Z" or "(+|-)hh[mm]"
- try
- {
- calendar.set(
- Integer.parseInt(date.substring(0, 4)), // year
- Integer.parseInt(date.substring(4, 6))-1, // month
- Integer.parseInt(date.substring(6, 8)), // day
- Integer.parseInt(date.substring(8, 10)), 0); // hour, min
- switch (date.length())
- {
- case 19:
- case 18:
- case 17:
- case 16:
- calendar.set(Calendar.MILLISECOND,
- Integer.parseInt(date.substring(15)));
- case 14:
- calendar.set(Calendar.SECOND,
- Integer.parseInt(date.substring(12, 14)));
- case 12:
- calendar.set(Calendar.MINUTE,
- Integer.parseInt(date.substring(10, 12)));
- }
- }
- catch (NumberFormatException nfe)
- {
- throw new DEREncodingException("cannot parse date");
- }
- }
- return calendar.getTime();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/der/DERValue.java b/libjava/classpath/gnu/java/security/der/DERValue.java
deleted file mode 100644
index 2cbe345..0000000
--- a/libjava/classpath/gnu/java/security/der/DERValue.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/* DERValue.java -- a value read or written to a DER encoding.
- Copyright (C) 2003 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.der;
-
-import gnu.java.security.x509.Util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-public class DERValue implements DER
-{
-
- // Fields.
- // ------------------------------------------------------------------------
-
- private final int tagClass;
- private final boolean constructed;
- private final int tag;
- private int length;
- private final Object value;
- private byte[] encoded;
-
- // Constructor.
- // ------------------------------------------------------------------------
-
- public DERValue(int tag, int length, Object value, byte[] encoded)
- {
- tagClass = tag & 0xC0;
- this.tag = tag & 0x1F;
- constructed = (tag & CONSTRUCTED) == CONSTRUCTED;
- this.length = length;
- this.value = value;
- if (encoded != null)
- this.encoded = (byte[]) encoded.clone();
- }
-
- public DERValue(int tag, Object value)
- {
- this(tag, 0, value, null);
- }
-
- // Instance methods.
- // ------------------------------------------------------------------------
-
- public int getExternalTag()
- {
- return tagClass | tag | (constructed ? 0x20 : 0x00);
- }
-
- public int getTag()
- {
- return tag;
- }
-
- public int getTagClass()
- {
- return tagClass;
- }
-
- public boolean isConstructed()
- {
- return constructed;
- }
-
- public int getLength()
- {
- if (encoded == null)
- {
- try
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- length = DERWriter.write(out, this);
- encoded = out.toByteArray();
- }
- catch (IOException ioe)
- {
- IllegalArgumentException iae = new IllegalArgumentException ();
- iae.initCause (ioe);
- throw iae;
- }
- }
- return length;
- }
-
- public Object getValue()
- {
- return value;
- }
-
- public Object getValueAs (final int derType) throws IOException
- {
- byte[] encoded = getEncoded ();
- encoded[0] = (byte) derType;
- return DERReader.read (encoded).getValue ();
- }
-
- public byte[] getEncoded()
- {
- if (encoded == null)
- {
- try
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- length = DERWriter.write(out, this);
- encoded = out.toByteArray();
- }
- catch (IOException ioe)
- {
- IllegalArgumentException iae = new IllegalArgumentException ();
- iae.initCause (ioe);
- throw iae;
- }
- }
- return (byte[]) encoded.clone();
- }
-
- public int getEncodedLength()
- {
- if (encoded == null)
- {
- try
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- length = DERWriter.write(out, this);
- encoded = out.toByteArray();
- }
- catch (IOException ioe)
- {
- IllegalArgumentException iae = new IllegalArgumentException ();
- iae.initCause (ioe);
- throw iae;
- }
- }
- return encoded.length;
- }
-
- public String toString()
- {
- String start = "DERValue ( [";
- if (tagClass == DER.UNIVERSAL)
- start = start + "UNIVERSAL ";
- else if (tagClass == DER.PRIVATE)
- start = start + "PRIVATE ";
- else if (tagClass == DER.APPLICATION)
- start = start + "APPLICATION ";
- start = start + tag + "] constructed=" + constructed + ", value=";
- if (constructed)
- start = start + "\n" + Util.hexDump(getEncoded(), "\t");
- else
- start = start + value;
- return start + " )";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/der/DERWriter.java b/libjava/classpath/gnu/java/security/der/DERWriter.java
deleted file mode 100644
index cea3fa3..0000000
--- a/libjava/classpath/gnu/java/security/der/DERWriter.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/* DERWriter.java -- write Java types in DER format.
- Copyright (C) 2003, 2004, 2005, 2010 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.der;
-
-import gnu.java.security.OID;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.math.BigInteger;
-
-import java.text.SimpleDateFormat;
-
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TimeZone;
-
-/**
- * Methods that allow various Java types to be written as a DER
- * (Distinguished Encoding Rules) stream to the specified output stream.
- * DER is used to encode ASN.1 constructions, but this class provides no
- * methods for interacting with ASN.1. Rather, callers should construct
- * their output objects properly for whatever ASN.1 construct is being
- * output.
- *
- * <p>This class only defines static methods; there are no instance
- * variables needed.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class DERWriter implements DER
-{
-
- // Constructors.
- // ------------------------------------------------------------------------
-
- /** This class only has static methods. */
- private DERWriter()
- {
- }
-
- // Class methods.
- // ------------------------------------------------------------------------
-
- public static int write(OutputStream out, DERValue object)
- throws IOException
- {
- if (DER.CONSTRUCTED_VALUE.equals (object.getValue ()))
- {
- out.write (object.getEncoded ());
- return object.getLength ();
- }
-
- out.write(object.getExternalTag());
- Object value = object.getValue();
- if (value == null)
- {
- writeLength(out, 0);
- return 0;
- }
- if (value instanceof Boolean)
- return writeBoolean(out, (Boolean) value);
- else if (value instanceof BigInteger)
- return writeInteger(out, (BigInteger) value);
- else if (value instanceof Date)
- return writeDate(out, object.getExternalTag(), (Date) value);
- else if (value instanceof String)
- return writeString(out, object.getExternalTag(), (String) value);
- else if (value instanceof List)
- return writeSequence(out, (List) value);
- else if (value instanceof Set)
- return writeSet(out, (Set) value);
- else if (value instanceof BitString)
- return writeBitString(out, (BitString) value);
- else if (value instanceof OID)
- return writeOID(out, (OID) value);
- else if (value instanceof byte[])
- {
- writeLength(out, ((byte[]) value).length);
- out.write((byte[]) value);
- return ((byte[]) value).length;
- }
- else if (value instanceof DERValue)
- {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- write(bout, (DERValue) value);
- byte[] buf = bout.toByteArray();
- writeLength(out, buf.length);
- out.write(buf);
- return buf.length;
- }
- else
- throw new DEREncodingException("cannot encode " + value.getClass().getName());
- }
-
- public static int definiteEncodingSize(int length)
- {
- if (length < 128)
- return 1;
- else if (length < 256)
- return 2;
- else if (length < 65536)
- return 3;
- else if (length < 16777216)
- return 4;
- else
- return 5;
- }
-
- // Own methods.
- // ------------------------------------------------------------------------
-
- /**
- * Write a BOOLEAN type to the given output stream.
- *
- * @param out The sink output stream.
- * @param b The boolean value to write.
- */
- private static int writeBoolean(OutputStream out, Boolean b)
- throws IOException
- {
- writeLength(out, 1);
- if (b.booleanValue())
- out.write(0xFF);
- else
- out.write(0);
- return 1;
- }
-
- /**
- * Write an INTEGER type to the given output stream.
- *
- * @param out The sink output stream.
- * @param integer The integer to write.
- */
- private static int writeInteger(OutputStream out, BigInteger integer)
- throws IOException
- {
- byte[] bytes = integer.toByteArray();
- writeLength(out, bytes.length);
- out.write(bytes);
- return bytes.length;
- }
-
- private static int writeSequence(OutputStream out, List sequence)
- throws IOException
- {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- for (Iterator i = sequence.iterator(); i.hasNext(); )
- {
- write(bout, (DERValue) i.next());
- }
- byte[] buf = bout.toByteArray();
- writeLength(out, buf.length);
- out.write(buf);
- return buf.length;
- }
-
- private static int writeSet(OutputStream out, Set set)
- throws IOException
- {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- for (Iterator i = set.iterator(); i.hasNext(); )
- {
- write(bout, (DERValue) i.next());
- }
- byte[] buf = bout.toByteArray();
- writeLength(out, buf.length);
- out.write(buf);
- return buf.length;
- }
-
- private static int writeOID(OutputStream out, OID oid)
- throws IOException
- {
- byte[] der = oid.getDER();
- writeLength(out, der.length);
- out.write(der);
- return der.length;
- }
-
- private static int writeBitString(OutputStream out, BitString bs)
- throws IOException
- {
- byte[] buf = bs.getShiftedByteArray();
- writeLength(out, buf.length + 1);
- out.write(bs.getIgnoredBits());
- out.write(buf);
- return buf.length + 1;
- }
-
- private static int writeString(OutputStream out, int tag, String str)
- throws IOException
- {
- byte[] b = null;
- switch (tag & 0x1F)
- {
- case NUMERIC_STRING:
- case PRINTABLE_STRING:
- case T61_STRING:
- case VIDEOTEX_STRING:
- case IA5_STRING:
- case GRAPHIC_STRING:
- case ISO646_STRING:
- case GENERAL_STRING:
- b = toIso88591(str);
- break;
-
- case UNIVERSAL_STRING:
- case BMP_STRING:
- b = toUtf16Be(str);
- break;
-
- case UTF8_STRING:
- default:
- b = toUtf8(str);
- break;
- }
- writeLength(out, b.length);
- out.write(b);
- return b.length;
- }
-
- private static byte[] toIso88591(String string)
- {
- byte[] result = new byte[string.length()];
- for (int i = 0; i < string.length(); i++)
- result[i] = (byte) string.charAt(i);
- return result;
- }
-
- private static byte[] toUtf16Be(String string)
- {
- byte[] result = new byte[string.length() * 2];
- for (int i = 0; i < string.length(); i++)
- {
- result[i*2 ] = (byte) ((string.charAt(i) >>> 8) & 0xFF);
- result[i*2+1] = (byte) (string.charAt(i) & 0xFF);
- }
- return result;
- }
-
- private static byte[] toUtf8(String string)
- {
- int len = string.length();
- ByteArrayOutputStream buf = new ByteArrayOutputStream(len + (len >> 1));
- for (int i = 0; i < len; i++)
- {
- char c = string.charAt(i);
- if (c < 0x0080)
- buf.write(c & 0xFF);
- else if (c < 0x0800)
- {
- buf.write(0xC0 | ((c >>> 6) & 0x3F));
- buf.write(0x80 | (c & 0x3F));
- }
- else
- {
- buf.write(0xE0 | ((c >>> 12) & 0x0F));
- buf.write(0x80 | ((c >>> 6) & 0x3F));
- buf.write(0x80 | (c & 0x3F));
- }
- }
- return buf.toByteArray();
- }
-
- private static int writeDate(OutputStream out, int tag, Date date)
- throws IOException
- {
- SimpleDateFormat sdf = null;
- if ((tag & 0x1F) == UTC_TIME)
- sdf = new SimpleDateFormat("yyMMddHHmmss'Z'");
- else
- sdf = new SimpleDateFormat("yyyyMMddHHmmss'.'SSS'Z'");
- sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
- byte[] b = sdf.format(date).getBytes("ISO-8859-1");
- writeLength(out, b.length);
- out.write(b);
- return b.length;
- }
-
- // Package method.
- // ------------------------------------------------------------------------
-
- static void writeLength(OutputStream out, int len) throws IOException
- {
- if (len < 128)
- out.write(len);
- else if (len < 256)
- {
- out.write(0x81);
- out.write(len);
- }
- else if (len < 65536)
- {
- out.write(0x82);
- out.write(len >> 8);
- out.write(len);
- }
- else if (len < 16777216)
- {
- out.write(0x83);
- out.write(len >> 16);
- out.write(len >> 8);
- out.write(len);
- }
- else
- {
- out.write(0x84);
- out.write(len >> 24);
- out.write(len >> 16);
- out.write(len >> 8);
- out.write(len);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/der/package.html b/libjava/classpath/gnu/java/security/der/package.html
deleted file mode 100644
index e74b0db..0000000
--- a/libjava/classpath/gnu/java/security/der/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.der package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.der</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/hash/BaseHash.java b/libjava/classpath/gnu/java/security/hash/BaseHash.java
deleted file mode 100644
index bab930f..0000000
--- a/libjava/classpath/gnu/java/security/hash/BaseHash.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/* BaseHash.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.hash;
-
-/**
- * A base abstract class to facilitate hash implementations.
- */
-public abstract class BaseHash
- implements IMessageDigest
-{
- /** The canonical name prefix of the hash. */
- protected String name;
-
- /** The hash (output) size in bytes. */
- protected int hashSize;
-
- /** The hash (inner) block size in bytes. */
- protected int blockSize;
-
- /** Number of bytes processed so far. */
- protected long count;
-
- /** Temporary input buffer. */
- protected byte[] buffer;
-
- /**
- * Trivial constructor for use by concrete subclasses.
- *
- * @param name the canonical name prefix of this instance.
- * @param hashSize the block size of the output in bytes.
- * @param blockSize the block size of the internal transform.
- */
- protected BaseHash(String name, int hashSize, int blockSize)
- {
- super();
-
- this.name = name;
- this.hashSize = hashSize;
- this.blockSize = blockSize;
- this.buffer = new byte[blockSize];
-
- resetContext();
- }
-
- public String name()
- {
- return name;
- }
-
- public int hashSize()
- {
- return hashSize;
- }
-
- public int blockSize()
- {
- return blockSize;
- }
-
- public void update(byte b)
- {
- // compute number of bytes still unhashed; ie. present in buffer
- int i = (int) (count % blockSize);
- count++;
- buffer[i] = b;
- if (i == (blockSize - 1))
- transform(buffer, 0);
- }
-
- public void update(byte[] b)
- {
- update(b, 0, b.length);
- }
-
- public void update(byte[] b, int offset, int len)
- {
- int n = (int) (count % blockSize);
- count += len;
- int partLen = blockSize - n;
- int i = 0;
-
- if (len >= partLen)
- {
- System.arraycopy(b, offset, buffer, n, partLen);
- transform(buffer, 0);
- for (i = partLen; i + blockSize - 1 < len; i += blockSize)
- transform(b, offset + i);
-
- n = 0;
- }
-
- if (i < len)
- System.arraycopy(b, offset + i, buffer, n, len - i);
- }
-
- public byte[] digest()
- {
- byte[] tail = padBuffer(); // pad remaining bytes in buffer
- update(tail, 0, tail.length); // last transform of a message
- byte[] result = getResult(); // make a result out of context
-
- reset(); // reset this instance for future re-use
-
- return result;
- }
-
- public void reset()
- { // reset this instance for future re-use
- count = 0L;
- for (int i = 0; i < blockSize;)
- buffer[i++] = 0;
-
- resetContext();
- }
-
- public abstract Object clone();
-
- public abstract boolean selfTest();
-
- /**
- * Returns the byte array to use as padding before completing a hash
- * operation.
- *
- * @return the bytes to pad the remaining bytes in the buffer before
- * completing a hash operation.
- */
- protected abstract byte[] padBuffer();
-
- /**
- * Constructs the result from the contents of the current context.
- *
- * @return the output of the completed hash operation.
- */
- protected abstract byte[] getResult();
-
- /** Resets the instance for future re-use. */
- protected abstract void resetContext();
-
- /**
- * The block digest transformation per se.
- *
- * @param in the <i>blockSize</i> long block, as an array of bytes to digest.
- * @param offset the index where the data to digest is located within the
- * input buffer.
- */
- protected abstract void transform(byte[] in, int offset);
-}
diff --git a/libjava/classpath/gnu/java/security/hash/HashFactory.java b/libjava/classpath/gnu/java/security/hash/HashFactory.java
deleted file mode 100644
index 1210ff4..0000000
--- a/libjava/classpath/gnu/java/security/hash/HashFactory.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/* HashFactory.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.hash;
-
-import gnu.java.security.Registry;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A <i>Factory</i> to instantiate message digest algorithm instances.
- */
-public class HashFactory
-{
- /** Trivial constructor to enforce <i>Singleton</i> pattern. */
- private HashFactory()
- {
- super();
- }
-
- /**
- * Return an instance of a hash algorithm given its name.
- *
- * @param name the name of the hash algorithm.
- * @return an instance of the hash algorithm, or null if none found.
- * @exception InternalError if the implementation does not pass its self-
- * test.
- */
- public static IMessageDigest getInstance(String name)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- IMessageDigest result = null;
- if (name.equalsIgnoreCase(Registry.WHIRLPOOL_HASH))
- result = new Whirlpool();
- else if (name.equalsIgnoreCase(Registry.RIPEMD128_HASH)
- || name.equalsIgnoreCase(Registry.RIPEMD_128_HASH))
- result = new RipeMD128();
- else if (name.equalsIgnoreCase(Registry.RIPEMD160_HASH)
- || name.equalsIgnoreCase(Registry.RIPEMD_160_HASH))
- result = new RipeMD160();
- else if (name.equalsIgnoreCase(Registry.SHA160_HASH)
- || name.equalsIgnoreCase(Registry.SHA_1_HASH)
- || name.equalsIgnoreCase(Registry.SHA1_HASH)
- || name.equalsIgnoreCase(Registry.SHA_HASH))
- result = new Sha160();
- else if (name.equalsIgnoreCase(Registry.SHA256_HASH))
- result = new Sha256();
- else if (name.equalsIgnoreCase(Registry.SHA384_HASH))
- result = new Sha384();
- else if (name.equalsIgnoreCase(Registry.SHA512_HASH))
- result = new Sha512();
- else if (name.equalsIgnoreCase(Registry.TIGER_HASH))
- result = new Tiger();
- else if (name.equalsIgnoreCase(Registry.HAVAL_HASH))
- result = new Haval();
- else if (name.equalsIgnoreCase(Registry.MD5_HASH))
- result = new MD5();
- else if (name.equalsIgnoreCase(Registry.MD4_HASH))
- result = new MD4();
- else if (name.equalsIgnoreCase(Registry.MD2_HASH))
- result = new MD2();
- else if (name.equalsIgnoreCase(Registry.HAVAL_HASH))
- result = new Haval();
-
- if (result != null && ! result.selfTest())
- throw new InternalError(result.name());
-
- return result;
- }
-
- /**
- * Returns a {@link Set} of names of hash algorithms supported by this
- * <i>Factory</i>.
- *
- * @return a {@link Set} of hash names (Strings).
- */
- public static final Set getNames()
- {
- HashSet hs = new HashSet();
- hs.add(Registry.WHIRLPOOL_HASH);
- hs.add(Registry.RIPEMD128_HASH);
- hs.add(Registry.RIPEMD160_HASH);
- hs.add(Registry.SHA160_HASH);
- hs.add(Registry.SHA256_HASH);
- hs.add(Registry.SHA384_HASH);
- hs.add(Registry.SHA512_HASH);
- hs.add(Registry.TIGER_HASH);
- hs.add(Registry.HAVAL_HASH);
- hs.add(Registry.MD5_HASH);
- hs.add(Registry.MD4_HASH);
- hs.add(Registry.MD2_HASH);
-
- return Collections.unmodifiableSet(hs);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Haval.java b/libjava/classpath/gnu/java/security/hash/Haval.java
deleted file mode 100644
index 15c3039..0000000
--- a/libjava/classpath/gnu/java/security/hash/Haval.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/* Haval.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * The <i>HAVAL</i> message-digest algorithm is a variable output length, with
- * variable number of rounds. By default, this implementation allows <i>HAVAL</i>
- * to be used as a drop-in replacement for <i>MD5</i>.
- * <p>
- * References:
- * <ol>
- * <li>HAVAL - A One-Way Hashing Algorithm with Variable Length of Output<br>
- * Advances in Cryptology - AUSCRYPT'92, Lecture Notes in Computer Science,<br>
- * Springer-Verlag, 1993; <br>
- * Y. Zheng, J. Pieprzyk and J. Seberry.</li>
- * </ol>
- */
-public class Haval
- extends BaseHash
-{
- public static final int HAVAL_VERSION = 1;
-
- public static final int HAVAL_128_BIT = 16;
-
- public static final int HAVAL_160_BIT = 20;
-
- public static final int HAVAL_192_BIT = 24;
-
- public static final int HAVAL_224_BIT = 28;
-
- public static final int HAVAL_256_BIT = 32;
-
- public static final int HAVAL_3_ROUND = 3;
-
- public static final int HAVAL_4_ROUND = 4;
-
- public static final int HAVAL_5_ROUND = 5;
-
- private static final int BLOCK_SIZE = 128; // inner block size in bytes
-
- private static final String DIGEST0 = "C68F39913F901F3DDF44C707357A7D70";
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /**
- * Number of HAVAL rounds. Allowed values are integers in the range <code>3
- * .. 5</code>.
- * The default is <code>3</code>.
- */
- private int rounds = HAVAL_3_ROUND;
-
- /** 128-bit interim result. */
- private int h0, h1, h2, h3, h4, h5, h6, h7;
-
- /**
- * Calls the constructor with two argument using {@link #HAVAL_128_BIT} as the
- * value for the output size (i.e. <code>128</code> bits, and
- * {@link #HAVAL_3_ROUND} for the value of number of rounds.
- */
- public Haval()
- {
- this(HAVAL_128_BIT, HAVAL_3_ROUND);
- }
-
- /**
- * Calls the constructor with two arguments using the designated output size,
- * and {@link #HAVAL_3_ROUND} for the value of number of rounds.
- *
- * @param size the output size in bytes of this instance.
- * @throws IllegalArgumentException if the designated output size is invalid.
- * @see #HAVAL_128_BIT
- * @see #HAVAL_160_BIT
- * @see #HAVAL_192_BIT
- * @see #HAVAL_224_BIT
- * @see #HAVAL_256_BIT
- */
- public Haval(int size)
- {
- this(size, HAVAL_3_ROUND);
- }
-
- /**
- * Constructs a <code>Haval</code> instance with the designated output size
- * (in bytes). Valid output <code>size</code> values are <code>16</code>,
- * <code>20</code>, <code>24</code>, <code>28</code> and
- * <code>32</code>. Valid values for <code>rounds</code> are in the range
- * <code>3..5</code> inclusive.
- *
- * @param size the output size in bytes of this instance.
- * @param rounds the number of rounds to apply when transforming data.
- * @throws IllegalArgumentException if the designated output size is invalid,
- * or if the number of rounds is invalid.
- * @see #HAVAL_128_BIT
- * @see #HAVAL_160_BIT
- * @see #HAVAL_192_BIT
- * @see #HAVAL_224_BIT
- * @see #HAVAL_256_BIT
- * @see #HAVAL_3_ROUND
- * @see #HAVAL_4_ROUND
- * @see #HAVAL_5_ROUND
- */
- public Haval(int size, int rounds)
- {
- super(Registry.HAVAL_HASH, size, BLOCK_SIZE);
-
- if (size != HAVAL_128_BIT
- && size != HAVAL_160_BIT
- && size != HAVAL_192_BIT
- && size != HAVAL_224_BIT
- && size != HAVAL_256_BIT)
- throw new IllegalArgumentException("Invalid HAVAL output size");
-
- if (rounds != HAVAL_3_ROUND
- && rounds != HAVAL_4_ROUND
- && rounds != HAVAL_5_ROUND)
- throw new IllegalArgumentException("Invalid HAVAL number of rounds");
-
- this.rounds = rounds;
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Haval(Haval md)
- {
- this(md.hashSize, md.rounds);
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.h5 = md.h5;
- this.h6 = md.h6;
- this.h7 = md.h7;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public Object clone()
- {
- return new Haval(this);
- }
-
- protected synchronized void transform(byte[] in, int i)
- {
- int X0 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X1 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X2 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X3 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X4 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X5 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X6 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X7 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X8 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X9 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X10 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X11 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X12 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X13 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X14 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X15 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X16 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X17 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X18 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X19 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X20 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X21 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X22 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X23 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X24 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X25 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X26 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X27 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X28 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X29 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X30 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int X31 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | (in[i++] & 0xFF) << 24;
- int t0 = h0, t1 = h1, t2 = h2, t3 = h3, t4 = h4, t5 = h5, t6 = h6, t7 = h7;
- // Pass 1
- t7 = FF1(t7, t6, t5, t4, t3, t2, t1, t0, X0);
- t6 = FF1(t6, t5, t4, t3, t2, t1, t0, t7, X1);
- t5 = FF1(t5, t4, t3, t2, t1, t0, t7, t6, X2);
- t4 = FF1(t4, t3, t2, t1, t0, t7, t6, t5, X3);
- t3 = FF1(t3, t2, t1, t0, t7, t6, t5, t4, X4);
- t2 = FF1(t2, t1, t0, t7, t6, t5, t4, t3, X5);
- t1 = FF1(t1, t0, t7, t6, t5, t4, t3, t2, X6);
- t0 = FF1(t0, t7, t6, t5, t4, t3, t2, t1, X7);
-
- t7 = FF1(t7, t6, t5, t4, t3, t2, t1, t0, X8);
- t6 = FF1(t6, t5, t4, t3, t2, t1, t0, t7, X9);
- t5 = FF1(t5, t4, t3, t2, t1, t0, t7, t6, X10);
- t4 = FF1(t4, t3, t2, t1, t0, t7, t6, t5, X11);
- t3 = FF1(t3, t2, t1, t0, t7, t6, t5, t4, X12);
- t2 = FF1(t2, t1, t0, t7, t6, t5, t4, t3, X13);
- t1 = FF1(t1, t0, t7, t6, t5, t4, t3, t2, X14);
- t0 = FF1(t0, t7, t6, t5, t4, t3, t2, t1, X15);
-
- t7 = FF1(t7, t6, t5, t4, t3, t2, t1, t0, X16);
- t6 = FF1(t6, t5, t4, t3, t2, t1, t0, t7, X17);
- t5 = FF1(t5, t4, t3, t2, t1, t0, t7, t6, X18);
- t4 = FF1(t4, t3, t2, t1, t0, t7, t6, t5, X19);
- t3 = FF1(t3, t2, t1, t0, t7, t6, t5, t4, X20);
- t2 = FF1(t2, t1, t0, t7, t6, t5, t4, t3, X21);
- t1 = FF1(t1, t0, t7, t6, t5, t4, t3, t2, X22);
- t0 = FF1(t0, t7, t6, t5, t4, t3, t2, t1, X23);
-
- t7 = FF1(t7, t6, t5, t4, t3, t2, t1, t0, X24);
- t6 = FF1(t6, t5, t4, t3, t2, t1, t0, t7, X25);
- t5 = FF1(t5, t4, t3, t2, t1, t0, t7, t6, X26);
- t4 = FF1(t4, t3, t2, t1, t0, t7, t6, t5, X27);
- t3 = FF1(t3, t2, t1, t0, t7, t6, t5, t4, X28);
- t2 = FF1(t2, t1, t0, t7, t6, t5, t4, t3, X29);
- t1 = FF1(t1, t0, t7, t6, t5, t4, t3, t2, X30);
- t0 = FF1(t0, t7, t6, t5, t4, t3, t2, t1, X31);
-
- // Pass 2
- t7 = FF2(t7, t6, t5, t4, t3, t2, t1, t0, X5, 0x452821E6);
- t6 = FF2(t6, t5, t4, t3, t2, t1, t0, t7, X14, 0x38D01377);
- t5 = FF2(t5, t4, t3, t2, t1, t0, t7, t6, X26, 0xBE5466CF);
- t4 = FF2(t4, t3, t2, t1, t0, t7, t6, t5, X18, 0x34E90C6C);
- t3 = FF2(t3, t2, t1, t0, t7, t6, t5, t4, X11, 0xC0AC29B7);
- t2 = FF2(t2, t1, t0, t7, t6, t5, t4, t3, X28, 0xC97C50DD);
- t1 = FF2(t1, t0, t7, t6, t5, t4, t3, t2, X7, 0x3F84D5B5);
- t0 = FF2(t0, t7, t6, t5, t4, t3, t2, t1, X16, 0xB5470917);
-
- t7 = FF2(t7, t6, t5, t4, t3, t2, t1, t0, X0, 0x9216D5D9);
- t6 = FF2(t6, t5, t4, t3, t2, t1, t0, t7, X23, 0x8979FB1B);
- t5 = FF2(t5, t4, t3, t2, t1, t0, t7, t6, X20, 0xD1310BA6);
- t4 = FF2(t4, t3, t2, t1, t0, t7, t6, t5, X22, 0x98DFB5AC);
- t3 = FF2(t3, t2, t1, t0, t7, t6, t5, t4, X1, 0x2FFD72DB);
- t2 = FF2(t2, t1, t0, t7, t6, t5, t4, t3, X10, 0xD01ADFB7);
- t1 = FF2(t1, t0, t7, t6, t5, t4, t3, t2, X4, 0xB8E1AFED);
- t0 = FF2(t0, t7, t6, t5, t4, t3, t2, t1, X8, 0x6A267E96);
-
- t7 = FF2(t7, t6, t5, t4, t3, t2, t1, t0, X30, 0xBA7C9045);
- t6 = FF2(t6, t5, t4, t3, t2, t1, t0, t7, X3, 0xF12C7F99);
- t5 = FF2(t5, t4, t3, t2, t1, t0, t7, t6, X21, 0x24A19947);
- t4 = FF2(t4, t3, t2, t1, t0, t7, t6, t5, X9, 0xB3916CF7);
- t3 = FF2(t3, t2, t1, t0, t7, t6, t5, t4, X17, 0x0801F2E2);
- t2 = FF2(t2, t1, t0, t7, t6, t5, t4, t3, X24, 0x858EFC16);
- t1 = FF2(t1, t0, t7, t6, t5, t4, t3, t2, X29, 0x636920D8);
- t0 = FF2(t0, t7, t6, t5, t4, t3, t2, t1, X6, 0x71574E69);
-
- t7 = FF2(t7, t6, t5, t4, t3, t2, t1, t0, X19, 0xA458FEA3);
- t6 = FF2(t6, t5, t4, t3, t2, t1, t0, t7, X12, 0xF4933D7E);
- t5 = FF2(t5, t4, t3, t2, t1, t0, t7, t6, X15, 0x0D95748F);
- t4 = FF2(t4, t3, t2, t1, t0, t7, t6, t5, X13, 0x728EB658);
- t3 = FF2(t3, t2, t1, t0, t7, t6, t5, t4, X2, 0x718BCD58);
- t2 = FF2(t2, t1, t0, t7, t6, t5, t4, t3, X25, 0x82154AEE);
- t1 = FF2(t1, t0, t7, t6, t5, t4, t3, t2, X31, 0x7B54A41D);
- t0 = FF2(t0, t7, t6, t5, t4, t3, t2, t1, X27, 0xC25A59B5);
-
- // Pass 3
- t7 = FF3(t7, t6, t5, t4, t3, t2, t1, t0, X19, 0x9C30D539);
- t6 = FF3(t6, t5, t4, t3, t2, t1, t0, t7, X9, 0x2AF26013);
- t5 = FF3(t5, t4, t3, t2, t1, t0, t7, t6, X4, 0xC5D1B023);
- t4 = FF3(t4, t3, t2, t1, t0, t7, t6, t5, X20, 0x286085F0);
- t3 = FF3(t3, t2, t1, t0, t7, t6, t5, t4, X28, 0xCA417918);
- t2 = FF3(t2, t1, t0, t7, t6, t5, t4, t3, X17, 0xB8DB38EF);
- t1 = FF3(t1, t0, t7, t6, t5, t4, t3, t2, X8, 0x8E79DCB0);
- t0 = FF3(t0, t7, t6, t5, t4, t3, t2, t1, X22, 0x603A180E);
-
- t7 = FF3(t7, t6, t5, t4, t3, t2, t1, t0, X29, 0x6C9E0E8B);
- t6 = FF3(t6, t5, t4, t3, t2, t1, t0, t7, X14, 0xB01E8A3E);
- t5 = FF3(t5, t4, t3, t2, t1, t0, t7, t6, X25, 0xD71577C1);
- t4 = FF3(t4, t3, t2, t1, t0, t7, t6, t5, X12, 0xBD314B27);
- t3 = FF3(t3, t2, t1, t0, t7, t6, t5, t4, X24, 0x78AF2FDA);
- t2 = FF3(t2, t1, t0, t7, t6, t5, t4, t3, X30, 0x55605C60);
- t1 = FF3(t1, t0, t7, t6, t5, t4, t3, t2, X16, 0xE65525F3);
- t0 = FF3(t0, t7, t6, t5, t4, t3, t2, t1, X26, 0xAA55AB94);
-
- t7 = FF3(t7, t6, t5, t4, t3, t2, t1, t0, X31, 0x57489862);
- t6 = FF3(t6, t5, t4, t3, t2, t1, t0, t7, X15, 0x63E81440);
- t5 = FF3(t5, t4, t3, t2, t1, t0, t7, t6, X7, 0x55CA396A);
- t4 = FF3(t4, t3, t2, t1, t0, t7, t6, t5, X3, 0x2AAB10B6);
- t3 = FF3(t3, t2, t1, t0, t7, t6, t5, t4, X1, 0xB4CC5C34);
- t2 = FF3(t2, t1, t0, t7, t6, t5, t4, t3, X0, 0x1141E8CE);
- t1 = FF3(t1, t0, t7, t6, t5, t4, t3, t2, X18, 0xA15486AF);
- t0 = FF3(t0, t7, t6, t5, t4, t3, t2, t1, X27, 0x7C72E993);
-
- t7 = FF3(t7, t6, t5, t4, t3, t2, t1, t0, X13, 0xB3EE1411);
- t6 = FF3(t6, t5, t4, t3, t2, t1, t0, t7, X6, 0x636FBC2A);
- t5 = FF3(t5, t4, t3, t2, t1, t0, t7, t6, X21, 0x2BA9C55D);
- t4 = FF3(t4, t3, t2, t1, t0, t7, t6, t5, X10, 0x741831F6);
- t3 = FF3(t3, t2, t1, t0, t7, t6, t5, t4, X23, 0xCE5C3E16);
- t2 = FF3(t2, t1, t0, t7, t6, t5, t4, t3, X11, 0x9B87931E);
- t1 = FF3(t1, t0, t7, t6, t5, t4, t3, t2, X5, 0xAFD6BA33);
- t0 = FF3(t0, t7, t6, t5, t4, t3, t2, t1, X2, 0x6C24CF5C);
-
- if (rounds >= 4)
- {
- t7 = FF4(t7, t6, t5, t4, t3, t2, t1, t0, X24, 0x7A325381);
- t6 = FF4(t6, t5, t4, t3, t2, t1, t0, t7, X4, 0x28958677);
- t5 = FF4(t5, t4, t3, t2, t1, t0, t7, t6, X0, 0x3B8F4898);
- t4 = FF4(t4, t3, t2, t1, t0, t7, t6, t5, X14, 0x6B4BB9AF);
- t3 = FF4(t3, t2, t1, t0, t7, t6, t5, t4, X2, 0xC4BFE81B);
- t2 = FF4(t2, t1, t0, t7, t6, t5, t4, t3, X7, 0x66282193);
- t1 = FF4(t1, t0, t7, t6, t5, t4, t3, t2, X28, 0x61D809CC);
- t0 = FF4(t0, t7, t6, t5, t4, t3, t2, t1, X23, 0xFB21A991);
- t7 = FF4(t7, t6, t5, t4, t3, t2, t1, t0, X26, 0x487CAC60);
- t6 = FF4(t6, t5, t4, t3, t2, t1, t0, t7, X6, 0x5DEC8032);
- t5 = FF4(t5, t4, t3, t2, t1, t0, t7, t6, X30, 0xEF845D5D);
- t4 = FF4(t4, t3, t2, t1, t0, t7, t6, t5, X20, 0xE98575B1);
- t3 = FF4(t3, t2, t1, t0, t7, t6, t5, t4, X18, 0xDC262302);
- t2 = FF4(t2, t1, t0, t7, t6, t5, t4, t3, X25, 0xEB651B88);
- t1 = FF4(t1, t0, t7, t6, t5, t4, t3, t2, X19, 0x23893E81);
- t0 = FF4(t0, t7, t6, t5, t4, t3, t2, t1, X3, 0xD396ACC5);
-
- t7 = FF4(t7, t6, t5, t4, t3, t2, t1, t0, X22, 0x0F6D6FF3);
- t6 = FF4(t6, t5, t4, t3, t2, t1, t0, t7, X11, 0x83F44239);
- t5 = FF4(t5, t4, t3, t2, t1, t0, t7, t6, X31, 0x2E0B4482);
- t4 = FF4(t4, t3, t2, t1, t0, t7, t6, t5, X21, 0xA4842004);
- t3 = FF4(t3, t2, t1, t0, t7, t6, t5, t4, X8, 0x69C8F04A);
- t2 = FF4(t2, t1, t0, t7, t6, t5, t4, t3, X27, 0x9E1F9B5E);
- t1 = FF4(t1, t0, t7, t6, t5, t4, t3, t2, X12, 0x21C66842);
- t0 = FF4(t0, t7, t6, t5, t4, t3, t2, t1, X9, 0xF6E96C9A);
- t7 = FF4(t7, t6, t5, t4, t3, t2, t1, t0, X1, 0x670C9C61);
- t6 = FF4(t6, t5, t4, t3, t2, t1, t0, t7, X29, 0xABD388F0);
- t5 = FF4(t5, t4, t3, t2, t1, t0, t7, t6, X5, 0x6A51A0D2);
- t4 = FF4(t4, t3, t2, t1, t0, t7, t6, t5, X15, 0xD8542F68);
- t3 = FF4(t3, t2, t1, t0, t7, t6, t5, t4, X17, 0x960FA728);
- t2 = FF4(t2, t1, t0, t7, t6, t5, t4, t3, X10, 0xAB5133A3);
- t1 = FF4(t1, t0, t7, t6, t5, t4, t3, t2, X16, 0x6EEF0B6C);
- t0 = FF4(t0, t7, t6, t5, t4, t3, t2, t1, X13, 0x137A3BE4);
-
- if (rounds == 5)
- {
- t7 = FF5(t7, t6, t5, t4, t3, t2, t1, t0, X27, 0xBA3BF050);
- t6 = FF5(t6, t5, t4, t3, t2, t1, t0, t7, X3, 0x7EFB2A98);
- t5 = FF5(t5, t4, t3, t2, t1, t0, t7, t6, X21, 0xA1F1651D);
- t4 = FF5(t4, t3, t2, t1, t0, t7, t6, t5, X26, 0x39AF0176);
- t3 = FF5(t3, t2, t1, t0, t7, t6, t5, t4, X17, 0x66CA593E);
- t2 = FF5(t2, t1, t0, t7, t6, t5, t4, t3, X11, 0x82430E88);
- t1 = FF5(t1, t0, t7, t6, t5, t4, t3, t2, X20, 0x8CEE8619);
- t0 = FF5(t0, t7, t6, t5, t4, t3, t2, t1, X29, 0x456F9FB4);
-
- t7 = FF5(t7, t6, t5, t4, t3, t2, t1, t0, X19, 0x7D84A5C3);
- t6 = FF5(t6, t5, t4, t3, t2, t1, t0, t7, X0, 0x3B8B5EBE);
- t5 = FF5(t5, t4, t3, t2, t1, t0, t7, t6, X12, 0xE06F75D8);
- t4 = FF5(t4, t3, t2, t1, t0, t7, t6, t5, X7, 0x85C12073);
- t3 = FF5(t3, t2, t1, t0, t7, t6, t5, t4, X13, 0x401A449F);
- t2 = FF5(t2, t1, t0, t7, t6, t5, t4, t3, X8, 0x56C16AA6);
- t1 = FF5(t1, t0, t7, t6, t5, t4, t3, t2, X31, 0x4ED3AA62);
- t0 = FF5(t0, t7, t6, t5, t4, t3, t2, t1, X10, 0x363F7706);
-
- t7 = FF5(t7, t6, t5, t4, t3, t2, t1, t0, X5, 0x1BFEDF72);
- t6 = FF5(t6, t5, t4, t3, t2, t1, t0, t7, X9, 0x429B023D);
- t5 = FF5(t5, t4, t3, t2, t1, t0, t7, t6, X14, 0x37D0D724);
- t4 = FF5(t4, t3, t2, t1, t0, t7, t6, t5, X30, 0xD00A1248);
- t3 = FF5(t3, t2, t1, t0, t7, t6, t5, t4, X18, 0xDB0FEAD3);
- t2 = FF5(t2, t1, t0, t7, t6, t5, t4, t3, X6, 0x49F1C09B);
- t1 = FF5(t1, t0, t7, t6, t5, t4, t3, t2, X28, 0x075372C9);
- t0 = FF5(t0, t7, t6, t5, t4, t3, t2, t1, X24, 0x80991B7B);
-
- t7 = FF5(t7, t6, t5, t4, t3, t2, t1, t0, X2, 0x25D479D8);
- t6 = FF5(t6, t5, t4, t3, t2, t1, t0, t7, X23, 0xF6E8DEF7);
- t5 = FF5(t5, t4, t3, t2, t1, t0, t7, t6, X16, 0xE3FE501A);
- t4 = FF5(t4, t3, t2, t1, t0, t7, t6, t5, X22, 0xB6794C3B);
- t3 = FF5(t3, t2, t1, t0, t7, t6, t5, t4, X4, 0x976CE0BD);
- t2 = FF5(t2, t1, t0, t7, t6, t5, t4, t3, X1, 0x04C006BA);
- t1 = FF5(t1, t0, t7, t6, t5, t4, t3, t2, X25, 0xC1A94FB6);
- t0 = FF5(t0, t7, t6, t5, t4, t3, t2, t1, X15, 0x409F60C4);
- }
- }
- h7 += t7;
- h6 += t6;
- h5 += t5;
- h4 += t4;
- h3 += t3;
- h2 += t2;
- h1 += t1;
- h0 += t0;
- }
-
- protected byte[] padBuffer()
- {
- // pad out to 118 mod 128. other 10 bytes have special use.
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 118) ? (118 - n) : (246 - n);
- byte[] result = new byte[padding + 10];
- result[0] = (byte) 0x01;
- // save the version number (LSB 3), the number of rounds (3 bits in the
- // middle), the fingerprint length (MSB 2 bits and next byte) and the
- // number of bits in the unpadded message.
- int bl = hashSize * 8;
- int sigByte = (bl & 0x03) << 6;
- sigByte |= (rounds & 0x07) << 3;
- sigByte |= HAVAL_VERSION & 0x07;
- result[padding++] = (byte) sigByte;
- result[padding++] = (byte)(bl >>> 2);
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte) bits;
- result[padding++] = (byte)(bits >>> 8);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 48);
- result[padding ] = (byte)(bits >>> 56);
- return result;
- }
-
- protected byte[] getResult()
- {
- tailorDigestBits(); // tailor context for the designated output size
- // cast enough top context values into an array of hashSize bytes
- byte[] result = new byte[hashSize];
- if (hashSize >= HAVAL_256_BIT)
- {
- result[31] = (byte)(h7 >>> 24);
- result[30] = (byte)(h7 >>> 16);
- result[29] = (byte)(h7 >>> 8);
- result[28] = (byte) h7;
- }
- if (hashSize >= HAVAL_224_BIT)
- {
- result[27] = (byte)(h6 >>> 24);
- result[26] = (byte)(h6 >>> 16);
- result[25] = (byte)(h6 >>> 8);
- result[24] = (byte) h6;
- }
- if (hashSize >= HAVAL_192_BIT)
- {
- result[23] = (byte)(h5 >>> 24);
- result[22] = (byte)(h5 >>> 16);
- result[21] = (byte)(h5 >>> 8);
- result[20] = (byte) h5;
- }
- if (hashSize >= HAVAL_160_BIT)
- {
- result[19] = (byte)(h4 >>> 24);
- result[18] = (byte)(h4 >>> 16);
- result[17] = (byte)(h4 >>> 8);
- result[16] = (byte) h4;
- }
- result[15] = (byte)(h3 >>> 24);
- result[14] = (byte)(h3 >>> 16);
- result[13] = (byte)(h3 >>> 8);
- result[12] = (byte) h3;
- result[11] = (byte)(h2 >>> 24);
- result[10] = (byte)(h2 >>> 16);
- result[ 9] = (byte)(h2 >>> 8);
- result[ 8] = (byte) h2;
- result[ 7] = (byte)(h1 >>> 24);
- result[ 6] = (byte)(h1 >>> 16);
- result[ 5] = (byte)(h1 >>> 8);
- result[ 4] = (byte) h1;
- result[ 3] = (byte)(h0 >>> 24);
- result[ 2] = (byte)(h0 >>> 16);
- result[ 1] = (byte)(h0 >>> 8);
- result[ 0] = (byte) h0;
- return result;
- }
-
- protected void resetContext()
- {
- h0 = 0x243F6A88;
- h1 = 0x85A308D3;
- h2 = 0x13198A2E;
- h3 = 0x03707344;
- h4 = 0xA4093822;
- h5 = 0x299F31D0;
- h6 = 0x082EFA98;
- h7 = 0xEC4E6C89;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new Haval().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-
- /** Tailors the last output. */
- private void tailorDigestBits()
- {
- int t;
- switch (hashSize)
- {
- case HAVAL_128_BIT:
- t = (h7 & 0x000000FF)
- | (h6 & 0xFF000000)
- | (h5 & 0x00FF0000)
- | (h4 & 0x0000FF00);
- h0 += t >>> 8 | t << 24;
- t = (h7 & 0x0000FF00)
- | (h6 & 0x000000FF)
- | (h5 & 0xFF000000)
- | (h4 & 0x00FF0000);
- h1 += t >>> 16 | t << 16;
- t = (h7 & 0x00FF0000)
- | (h6 & 0x0000FF00)
- | (h5 & 0x000000FF)
- | (h4 & 0xFF000000);
- h2 += t >>> 24 | t << 8;
- t = (h7 & 0xFF000000)
- | (h6 & 0x00FF0000)
- | (h5 & 0x0000FF00)
- | (h4 & 0x000000FF);
- h3 += t;
- break;
- case HAVAL_160_BIT:
- t = (h7 & 0x3F) | (h6 & (0x7F << 25)) | (h5 & (0x3F << 19));
- h0 += t >>> 19 | t << 13;
- t = (h7 & (0x3F << 6)) | (h6 & 0x3F) | (h5 & (0x7F << 25));
- h1 += t >>> 25 | t << 7;
- t = (h7 & (0x7F << 12)) | (h6 & (0x3F << 6)) | (h5 & 0x3F);
- h2 += t;
- t = (h7 & (0x3F << 19)) | (h6 & (0x7F << 12)) | (h5 & (0x3F << 6));
- h3 += (t >>> 6);
- t = (h7 & (0x7F << 25)) | (h6 & (0x3F << 19)) | (h5 & (0x7F << 12));
- h4 += (t >>> 12);
- break;
- case HAVAL_192_BIT:
- t = (h7 & 0x1F) | (h6 & (0x3F << 26));
- h0 += t >>> 26 | t << 6;
- t = (h7 & (0x1F << 5)) | (h6 & 0x1F);
- h1 += t;
- t = (h7 & (0x3F << 10)) | (h6 & (0x1F << 5));
- h2 += (t >>> 5);
- t = (h7 & (0x1F << 16)) | (h6 & (0x3F << 10));
- h3 += (t >>> 10);
- t = (h7 & (0x1F << 21)) | (h6 & (0x1F << 16));
- h4 += (t >>> 16);
- t = (h7 & (0x3F << 26)) | (h6 & (0x1F << 21));
- h5 += (t >>> 21);
- break;
- case HAVAL_224_BIT:
- h0 += ((h7 >>> 27) & 0x1F);
- h1 += ((h7 >>> 22) & 0x1F);
- h2 += ((h7 >>> 18) & 0x0F);
- h3 += ((h7 >>> 13) & 0x1F);
- h4 += ((h7 >>> 9) & 0x0F);
- h5 += ((h7 >>> 4) & 0x1F);
- h6 += (h7 & 0x0F);
- }
- }
-
- /**
- * Permutations phi_{i,j}, i=3,4,5, j=1,...,i.
- *
- * rounds = 3: 6 5 4 3 2 1 0
- * | | | | | | | (replaced by)
- * phi_{3,1}: 1 0 3 5 6 2 4
- * phi_{3,2}: 4 2 1 0 5 3 6
- * phi_{3,3}: 6 1 2 3 4 5 0
- *
- * rounds = 4: 6 5 4 3 2 1 0
- * | | | | | | | (replaced by)
- * phi_{4,1}: 2 6 1 4 5 3 0
- * phi_{4,2}: 3 5 2 0 1 6 4
- * phi_{4,3}: 1 4 3 6 0 2 5
- * phi_{4,4}: 6 4 0 5 2 1 3
- *
- * rounds = 5: 6 5 4 3 2 1 0
- * | | | | | | | (replaced by)
- * phi_{5,1}: 3 4 1 0 5 2 6
- * phi_{5,2}: 6 2 1 0 3 4 5
- * phi_{5,3}: 2 6 0 4 3 1 5
- * phi_{5,4}: 1 5 3 2 0 4 6
- * phi_{5,5}: 2 5 0 6 4 3 1
- */
- private int FF1(int x7, int x6, int x5, int x4, int x3, int x2, int x1,
- int x0, int w)
- {
- int t;
- switch (rounds)
- {
- case 3:
- t = f1(x1, x0, x3, x5, x6, x2, x4);
- break;
- case 4:
- t = f1(x2, x6, x1, x4, x5, x3, x0);
- break;
- default:
- t = f1(x3, x4, x1, x0, x5, x2, x6);
- }
- return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w;
- }
-
- private int FF2(int x7, int x6, int x5, int x4, int x3, int x2, int x1,
- int x0, int w, int c)
- {
- int t;
- switch (rounds)
- {
- case 3:
- t = f2(x4, x2, x1, x0, x5, x3, x6);
- break;
- case 4:
- t = f2(x3, x5, x2, x0, x1, x6, x4);
- break;
- default:
- t = f2(x6, x2, x1, x0, x3, x4, x5);
- }
- return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c;
- }
-
- private int FF3(int x7, int x6, int x5, int x4, int x3, int x2, int x1,
- int x0, int w, int c)
- {
- int t;
- switch (rounds)
- {
- case 3:
- t = f3(x6, x1, x2, x3, x4, x5, x0);
- break;
- case 4:
- t = f3(x1, x4, x3, x6, x0, x2, x5);
- break;
- default:
- t = f3(x2, x6, x0, x4, x3, x1, x5);
- }
- return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c;
- }
-
- private int FF4(int x7, int x6, int x5, int x4, int x3, int x2, int x1,
- int x0, int w, int c)
- {
- int t;
- switch (rounds)
- {
- case 4:
- t = f4(x6, x4, x0, x5, x2, x1, x3);
- break;
- default:
- t = f4(x1, x5, x3, x2, x0, x4, x6);
- }
- return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c;
- }
-
- private int FF5(int x7, int x6, int x5, int x4, int x3, int x2, int x1,
- int x0, int w, int c)
- {
- int t = f5(x2, x5, x0, x6, x4, x3, x1);
- return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c;
- }
-
- private int f1(int x6, int x5, int x4, int x3, int x2, int x1, int x0)
- {
- return x1 & (x0 ^ x4) ^ x2 & x5 ^ x3 & x6 ^ x0;
- }
-
- private int f2(int x6, int x5, int x4, int x3, int x2, int x1, int x0)
- {
- return x2 & (x1 & ~x3 ^ x4 & x5 ^ x6 ^ x0) ^ x4 & (x1 ^ x5) ^ x3 & x5 ^ x0;
- }
-
- private int f3(int x6, int x5, int x4, int x3, int x2, int x1, int x0)
- {
- return x3 & (x1 & x2 ^ x6 ^ x0) ^ x1 & x4 ^ x2 & x5 ^ x0;
- }
-
- private int f4(int x6, int x5, int x4, int x3, int x2, int x1, int x0)
- {
- return x4 & (x5 & ~x2 ^ x3 & ~x6 ^ x1 ^ x6 ^ x0) ^ x3
- & (x1 & x2 ^ x5 ^ x6) ^ x2 & x6 ^ x0;
- }
-
- private int f5(int x6, int x5, int x4, int x3, int x2, int x1, int x0)
- {
- return x0 & (x1 & x2 & x3 ^ ~x5) ^ x1 & x4 ^ x2 & x5 ^ x3 & x6;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/IMessageDigest.java b/libjava/classpath/gnu/java/security/hash/IMessageDigest.java
deleted file mode 100644
index 9b716e5..0000000
--- a/libjava/classpath/gnu/java/security/hash/IMessageDigest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* IMessageDigest.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.hash;
-
-/**
- * The basic visible methods of any hash algorithm.
- * <p>
- * A hash (or message digest) algorithm produces its output by iterating a basic
- * compression function on blocks of data.
- */
-public interface IMessageDigest
- extends Cloneable
-{
- /**
- * Returns the canonical name of this algorithm.
- *
- * @return the canonical name of this instance.
- */
- String name();
-
- /**
- * Returns the output length in bytes of this message digest algorithm.
- *
- * @return the output length in bytes of this message digest algorithm.
- */
- int hashSize();
-
- /**
- * Returns the algorithm's (inner) block size in bytes.
- *
- * @return the algorithm's inner block size in bytes.
- */
- int blockSize();
-
- /**
- * Continues a message digest operation using the input byte.
- *
- * @param b the input byte to digest.
- */
- void update(byte b);
-
- /**
- * Continues a message digest operation, by filling the buffer, processing
- * data in the algorithm's HASH_SIZE-bit block(s), updating the context and
- * count, and buffering the remaining bytes in buffer for the next operation.
- *
- * @param in the input block.
- */
- void update(byte[] in);
-
- /**
- * Continues a message digest operation, by filling the buffer, processing
- * data in the algorithm's HASH_SIZE-bit block(s), updating the context and
- * count, and buffering the remaining bytes in buffer for the next operation.
- *
- * @param in the input block.
- * @param offset start of meaningful bytes in input block.
- * @param length number of bytes, in input block, to consider.
- */
- void update(byte[] in, int offset, int length);
-
- /**
- * Completes the message digest by performing final operations such as padding
- * and resetting the instance.
- *
- * @return the array of bytes representing the hash value.
- */
- byte[] digest();
-
- /**
- * Resets the current context of this instance clearing any eventually cached
- * intermediary values.
- */
- void reset();
-
- /**
- * A basic test. Ensures that the digest of a pre-determined message is equal
- * to a known pre-computed value.
- *
- * @return <code>true</code> if the implementation passes a basic self-test.
- * Returns <code>false</code> otherwise.
- */
- boolean selfTest();
-
- /**
- * Returns a clone copy of this instance.
- *
- * @return a clone copy of this instance.
- */
- Object clone();
-}
diff --git a/libjava/classpath/gnu/java/security/hash/MD2.java b/libjava/classpath/gnu/java/security/hash/MD2.java
deleted file mode 100644
index d78af93..0000000
--- a/libjava/classpath/gnu/java/security/hash/MD2.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/* MD2.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * An implementation of the MD2 message digest algorithm.
- * <p>
- * MD2 is not widely used. Unless it is needed for compatibility with
- * existing systems, it is not recommended for use in new applications.
- * <p>
- * References:
- * <ol>
- * <li>The <a href="http://www.ietf.org/rfc/rfc1319.txt">MD2</a>
- * Message-Digest Algorithm.<br>
- * B. Kaliski.</li>
- * <li>The <a href="http://www.rfc-editor.org/errata.html">RFC ERRATA PAGE</a>
- * under section RFC 1319.</li>
- * </ol>
- */
-public class MD2
- extends BaseHash
-{
- /** An MD2 message digest is always 128-bits long, or 16 bytes. */
- private static final int DIGEST_LENGTH = 16;
-
- /** The MD2 algorithm operates on 128-bit blocks, or 16 bytes. */
- private static final int BLOCK_LENGTH = 16;
-
- /** 256 byte "random" permutation of the digits of pi. */
- private static final byte[] PI = {
- 41, 46, 67, -55, -94, -40, 124, 1,
- 61, 54, 84, -95, -20, -16, 6, 19,
- 98, -89, 5, -13, -64, -57, 115, -116,
- -104, -109, 43, -39, -68, 76, -126, -54,
- 30, -101, 87, 60, -3, -44, -32, 22,
- 103, 66, 111, 24, -118, 23, -27, 18,
- -66, 78, -60, -42, -38, -98, -34, 73,
- -96, -5, -11, -114, -69, 47, -18, 122,
- -87, 104, 121, -111, 21, -78, 7, 63,
- -108, -62, 16, -119, 11, 34, 95, 33,
- -128, 127, 93, -102, 90, -112, 50, 39,
- 53, 62, -52, -25, -65, -9, -105, 3,
- -1, 25, 48, -77, 72, -91, -75, -47,
- -41, 94, -110, 42, -84, 86, -86, -58,
- 79, -72, 56, -46, -106, -92, 125, -74,
- 118, -4, 107, -30, -100, 116, 4, -15,
- 69, -99, 112, 89, 100, 113, -121, 32,
- -122, 91, -49, 101, -26, 45, -88, 2,
- 27, 96, 37, -83, -82, -80, -71, -10,
- 28, 70, 97, 105, 52, 64, 126, 15,
- 85, 71, -93, 35, -35, 81, -81, 58,
- -61, 92, -7, -50, -70, -59, -22, 38,
- 44, 83, 13, 110, -123, 40, -124, 9,
- -45, -33, -51, -12, 65, -127, 77, 82,
- 106, -36, 55, -56, 108, -63, -85, -6,
- 36, -31, 123, 8, 12, -67, -79, 74,
- 120, -120, -107, -117, -29, 99, -24, 109,
- -23, -53, -43, -2, 59, 0, 29, 57,
- -14, -17, -73, 14, 102, 88, -48, -28,
- -90, 119, 114, -8, -21, 117, 75, 10,
- 49, 68, 80, -76, -113, -19, 31, 26,
- -37, -103, -115, 51, - 97, 17, -125, 20 };
-
- /** The output of this message digest when no data has been input. */
- private static final String DIGEST0 = "8350E5A3E24C153DF2275C9F80692773";
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** The checksum computed so far. */
- private byte[] checksum;
-
- /**
- * Work array needed by encrypt method. First <code>BLOCK_LENGTH</code> bytes
- * are also used to store the running digest.
- */
- private byte[] work;
-
- /** Creates a new MD2 digest ready for use. */
- public MD2()
- {
- super(Registry.MD2_HASH, DIGEST_LENGTH, BLOCK_LENGTH);
- }
-
- /**
- * Private constructor used for cloning.
- *
- * @param md2 the instance to clone.
- */
- private MD2(MD2 md2)
- {
- this();
-
- // superclass field
- this.count = md2.count;
- this.buffer = (byte[]) md2.buffer.clone();
- // private field
- this.checksum = (byte[]) md2.checksum.clone();
- this.work = (byte[]) md2.work.clone();
- }
-
- public Object clone()
- {
- return new MD2(this);
- }
-
- protected byte[] getResult()
- {
- byte[] result = new byte[DIGEST_LENGTH];
- // Encrypt checksum as last block.
- encryptBlock(checksum, 0);
- for (int i = 0; i < BLOCK_LENGTH; i++)
- result[i] = work[i];
-
- return result;
- }
-
- protected void resetContext()
- {
- checksum = new byte[BLOCK_LENGTH];
- work = new byte[BLOCK_LENGTH * 3];
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new MD2().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-
- /**
- * Generates an array of padding bytes. The padding is defined as
- * <code>i</code> bytes of value <code>i</code>, where <code>i</code> is the
- * number of bytes to fill the last block of the message to
- * <code>BLOCK_LENGTH</code> bytes (or <code>BLOCK_LENGTH</code> bytes when
- * the last block was completely full).
- *
- * @return the bytes to pad the remaining bytes in the buffer before
- * completing a hash operation.
- */
- protected byte[] padBuffer()
- {
- int length = BLOCK_LENGTH - (int) (count % BLOCK_LENGTH);
- if (length == 0)
- length = BLOCK_LENGTH;
-
- byte[] pad = new byte[length];
- for (int i = 0; i < length; i++)
- pad[i] = (byte) length;
-
- return pad;
- }
-
- /**
- * Adds <code>BLOCK_LENGTH</code> bytes to the running digest.
- *
- * @param in the byte array to take the <code>BLOCK_LENGTH</code> bytes from.
- * @param off the offset to start from in the given byte array.
- */
- protected void transform(byte[] in, int off)
- {
- updateCheckSumAndEncryptBlock(in, off);
- }
-
- /**
- * Adds a new block (<code>BLOCK_LENGTH</code> bytes) to the running digest
- * from the given byte array starting from the given offset.
- */
- private void encryptBlock(byte[] in, int off)
- {
- for (int i = 0; i < BLOCK_LENGTH; i++)
- {
- byte b = in[off + i];
- work[BLOCK_LENGTH + i] = b;
- work[BLOCK_LENGTH * 2 + i] = (byte)(work[i] ^ b);
- }
- byte t = 0;
- for (int i = 0; i < 18; i++)
- {
- for (int j = 0; j < 3 * BLOCK_LENGTH; j++)
- {
- t = (byte)(work[j] ^ PI[t & 0xFF]);
- work[j] = t;
- }
- t = (byte)(t + i);
- }
- }
-
- /**
- * Optimized method that combines a checksum update and encrypt of a block.
- */
- private void updateCheckSumAndEncryptBlock(byte[] in, int off)
- {
- byte l = checksum[BLOCK_LENGTH - 1];
- for (int i = 0; i < BLOCK_LENGTH; i++)
- {
- byte b = in[off + i];
- work[BLOCK_LENGTH + i] = b;
- work[BLOCK_LENGTH * 2 + i] = (byte)(work[i] ^ b);
- l = (byte)(checksum[i] ^ PI[(b ^ l) & 0xFF]);
- checksum[i] = l;
- }
- byte t = 0;
- for (int i = 0; i < 18; i++)
- {
- for (int j = 0; j < 3 * BLOCK_LENGTH; j++)
- {
- t = (byte)(work[j] ^ PI[t & 0xFF]);
- work[j] = t;
- }
- t = (byte)(t + i);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/MD4.java b/libjava/classpath/gnu/java/security/hash/MD4.java
deleted file mode 100644
index e6ac11b..0000000
--- a/libjava/classpath/gnu/java/security/hash/MD4.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/* MD4.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * An implementation of Ron Rivest's MD4 message digest algorithm.
- * <p>
- * MD4 was the precursor to the stronger {@link gnu.java.security.hash.MD5}
- * algorithm, and while not considered cryptograpically secure itself, MD4 is
- * in use in various applications. It is slightly faster than MD5.
- * <p>
- * References:
- * <ol>
- * <li>The <a href="http://www.ietf.org/rfc/rfc1320.txt">MD4</a>
- * Message-Digest Algorithm.<br>
- * R. Rivest.</li>
- * </ol>
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class MD4
- extends BaseHash
-{
- /** An MD4 message digest is always 128-bits long, or 16 bytes. */
- private static final int DIGEST_LENGTH = 16;
-
- /** The MD4 algorithm operates on 512-bit blocks, or 64 bytes. */
- private static final int BLOCK_LENGTH = 64;
-
- private static final int A = 0x67452301;
-
- private static final int B = 0xefcdab89;
-
- private static final int C = 0x98badcfe;
-
- private static final int D = 0x10325476;
-
- /** The output of this message digest when no data has been input. */
- private static final String DIGEST0 = "31D6CFE0D16AE931B73C59D7E0C089C0";
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- private int a, b, c, d;
-
- /**
- * Public constructor. Initializes the chaining variables, sets the byte
- * count to <code>0</code>, and creates a new block of <code>512</code> bits.
- */
- public MD4()
- {
- super(Registry.MD4_HASH, DIGEST_LENGTH, BLOCK_LENGTH);
- }
-
- /**
- * Trivial private constructor for cloning purposes.
- *
- * @param that the instance to clone.
- */
- private MD4(MD4 that)
- {
- this();
-
- this.a = that.a;
- this.b = that.b;
- this.c = that.c;
- this.d = that.d;
- this.count = that.count;
- this.buffer = (byte[]) that.buffer.clone();
- }
-
- public Object clone()
- {
- return new MD4(this);
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte) a, (byte)(a >>> 8), (byte)(a >>> 16), (byte)(a >>> 24),
- (byte) b, (byte)(b >>> 8), (byte)(b >>> 16), (byte)(b >>> 24),
- (byte) c, (byte)(c >>> 8), (byte)(c >>> 16), (byte)(c >>> 24),
- (byte) d, (byte)(d >>> 8), (byte)(d >>> 16), (byte)(d >>> 24) };
- }
-
- protected void resetContext()
- {
- a = A;
- b = B;
- c = C;
- d = D;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new MD4().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_LENGTH);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] pad = new byte[padding + 8];
- pad[0] = (byte) 0x80;
- long bits = count << 3;
- pad[padding++] = (byte) bits;
- pad[padding++] = (byte)(bits >>> 8);
- pad[padding++] = (byte)(bits >>> 16);
- pad[padding++] = (byte)(bits >>> 24);
- pad[padding++] = (byte)(bits >>> 32);
- pad[padding++] = (byte)(bits >>> 40);
- pad[padding++] = (byte)(bits >>> 48);
- pad[padding ] = (byte)(bits >>> 56);
- return pad;
- }
-
- protected void transform(byte[] in, int i)
- {
- int X0 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X1 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X2 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X3 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X4 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X5 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X6 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X7 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X8 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X9 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X10 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X11 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X12 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X13 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X14 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X15 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i] << 24;
- int aa, bb, cc, dd;
- aa = a;
- bb = b;
- cc = c;
- dd = d;
-
- aa += ((bb & cc) | ((~bb) & dd)) + X0;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & bb) | ((~aa) & cc)) + X1;
- dd = dd << 7 | dd >>> -7;
- cc += ((dd & aa) | ((~dd) & bb)) + X2;
- cc = cc << 11 | cc >>> -11;
- bb += ((cc & dd) | ((~cc) & aa)) + X3;
- bb = bb << 19 | bb >>> -19;
- aa += ((bb & cc) | ((~bb) & dd)) + X4;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & bb) | ((~aa) & cc)) + X5;
- dd = dd << 7 | dd >>> -7;
- cc += ((dd & aa) | ((~dd) & bb)) + X6;
- cc = cc << 11 | cc >>> -11;
- bb += ((cc & dd) | ((~cc) & aa)) + X7;
- bb = bb << 19 | bb >>> -19;
- aa += ((bb & cc) | ((~bb) & dd)) + X8;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & bb) | ((~aa) & cc)) + X9;
- dd = dd << 7 | dd >>> -7;
- cc += ((dd & aa) | ((~dd) & bb)) + X10;
- cc = cc << 11 | cc >>> -11;
- bb += ((cc & dd) | ((~cc) & aa)) + X11;
- bb = bb << 19 | bb >>> -19;
- aa += ((bb & cc) | ((~bb) & dd)) + X12;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & bb) | ((~aa) & cc)) + X13;
- dd = dd << 7 | dd >>> -7;
- cc += ((dd & aa) | ((~dd) & bb)) + X14;
- cc = cc << 11 | cc >>> -11;
- bb += ((cc & dd) | ((~cc) & aa)) + X15;
- bb = bb << 19 | bb >>> -19;
-
- aa += ((bb & (cc | dd)) | (cc & dd)) + X0 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & (bb | cc)) | (bb & cc)) + X4 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
- cc += ((dd & (aa | bb)) | (aa & bb)) + X8 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
- bb += ((cc & (dd | aa)) | (dd & aa)) + X12 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
- aa += ((bb & (cc | dd)) | (cc & dd)) + X1 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & (bb | cc)) | (bb & cc)) + X5 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
- cc += ((dd & (aa | bb)) | (aa & bb)) + X9 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
- bb += ((cc & (dd | aa)) | (dd & aa)) + X13 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
- aa += ((bb & (cc | dd)) | (cc & dd)) + X2 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & (bb | cc)) | (bb & cc)) + X6 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
- cc += ((dd & (aa | bb)) | (aa & bb)) + X10 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
- bb += ((cc & (dd | aa)) | (dd & aa)) + X14 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
- aa += ((bb & (cc | dd)) | (cc & dd)) + X3 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
- dd += ((aa & (bb | cc)) | (bb & cc)) + X7 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
- cc += ((dd & (aa | bb)) | (aa & bb)) + X11 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
- bb += ((cc & (dd | aa)) | (dd & aa)) + X15 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
-
- aa += (bb ^ cc ^ dd) + X0 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
- dd += (aa ^ bb ^ cc) + X8 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
- cc += (dd ^ aa ^ bb) + X4 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
- bb += (cc ^ dd ^ aa) + X12 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
- aa += (bb ^ cc ^ dd) + X2 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
- dd += (aa ^ bb ^ cc) + X10 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
- cc += (dd ^ aa ^ bb) + X6 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
- bb += (cc ^ dd ^ aa) + X14 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
- aa += (bb ^ cc ^ dd) + X1 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
- dd += (aa ^ bb ^ cc) + X9 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
- cc += (dd ^ aa ^ bb) + X5 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
- bb += (cc ^ dd ^ aa) + X13 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
- aa += (bb ^ cc ^ dd) + X3 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
- dd += (aa ^ bb ^ cc) + X11 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
- cc += (dd ^ aa ^ bb) + X7 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
- bb += (cc ^ dd ^ aa) + X15 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
-
- a += aa;
- b += bb;
- c += cc;
- d += dd;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/MD5.java b/libjava/classpath/gnu/java/security/hash/MD5.java
deleted file mode 100644
index dfffd3c..0000000
--- a/libjava/classpath/gnu/java/security/hash/MD5.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/* MD5.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * The MD5 message-digest algorithm takes as input a message of arbitrary
- * length and produces as output a 128-bit "fingerprint" or "message digest" of
- * the input. It is conjectured that it is computationally infeasible to
- * produce two messages having the same message digest, or to produce any
- * message having a given prespecified target message digest.
- * <p>
- * References:
- * <ol>
- * <li>The <a href="http://www.ietf.org/rfc/rfc1321.txt">MD5</a> Message-
- * Digest Algorithm.<br>
- * R. Rivest.</li>
- * </ol>
- */
-public class MD5
- extends BaseHash
-{
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- private static final String DIGEST0 = "D41D8CD98F00B204E9800998ECF8427E";
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 128-bit interim result. */
- private int h0, h1, h2, h3;
-
- /** Trivial 0-arguments constructor. */
- public MD5()
- {
- super(Registry.MD5_HASH, 16, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private MD5(MD5 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public Object clone()
- {
- return new MD5(this);
- }
-
- protected synchronized void transform(byte[] in, int i)
- {
- int X0 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X1 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X2 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X3 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X4 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X5 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X6 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X7 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X8 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X9 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X10 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X11 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X12 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X13 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X14 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i++] << 24;
- int X15 = (in[i++] & 0xFF)
- | (in[i++] & 0xFF) << 8
- | (in[i++] & 0xFF) << 16
- | in[i] << 24;
- int A = h0;
- int B = h1;
- int C = h2;
- int D = h3;
- // hex constants are from md5.c in FSF Gnu Privacy Guard 0.9.2
- // round 1
- A += ((B & C) | (~B & D)) + X0 + 0xD76AA478;
- A = B + (A << 7 | A >>> -7);
- D += ((A & B) | (~A & C)) + X1 + 0xE8C7B756;
- D = A + (D << 12 | D >>> -12);
- C += ((D & A) | (~D & B)) + X2 + 0x242070DB;
- C = D + (C << 17 | C >>> -17);
- B += ((C & D) | (~C & A)) + X3 + 0xC1BDCEEE;
- B = C + (B << 22 | B >>> -22);
-
- A += ((B & C) | (~B & D)) + X4 + 0xF57C0FAF;
- A = B + (A << 7 | A >>> -7);
- D += ((A & B) | (~A & C)) + X5 + 0x4787C62A;
- D = A + (D << 12 | D >>> -12);
- C += ((D & A) | (~D & B)) + X6 + 0xA8304613;
- C = D + (C << 17 | C >>> -17);
- B += ((C & D) | (~C & A)) + X7 + 0xFD469501;
- B = C + (B << 22 | B >>> -22);
-
- A += ((B & C) | (~B & D)) + X8 + 0x698098D8;
- A = B + (A << 7 | A >>> -7);
- D += ((A & B) | (~A & C)) + X9 + 0x8B44F7AF;
- D = A + (D << 12 | D >>> -12);
- C += ((D & A) | (~D & B)) + X10 + 0xFFFF5BB1;
- C = D + (C << 17 | C >>> -17);
- B += ((C & D) | (~C & A)) + X11 + 0x895CD7BE;
- B = C + (B << 22 | B >>> -22);
-
- A += ((B & C) | (~B & D)) + X12 + 0x6B901122;
- A = B + (A << 7 | A >>> -7);
- D += ((A & B) | (~A & C)) + X13 + 0xFD987193;
- D = A + (D << 12 | D >>> -12);
- C += ((D & A) | (~D & B)) + X14 + 0xA679438E;
- C = D + (C << 17 | C >>> -17);
- B += ((C & D) | (~C & A)) + X15 + 0x49B40821;
- B = C + (B << 22 | B >>> -22);
-
- // round 2
- A += ((B & D) | (C & ~D)) + X1 + 0xF61E2562;
- A = B + (A << 5 | A >>> -5);
- D += ((A & C) | (B & ~C)) + X6 + 0xC040B340;
- D = A + (D << 9 | D >>> -9);
- C += ((D & B) | (A & ~B)) + X11 + 0x265E5A51;
- C = D + (C << 14 | C >>> -14);
- B += ((C & A) | (D & ~A)) + X0 + 0xE9B6C7AA;
- B = C + (B << 20 | B >>> -20);
-
- A += ((B & D) | (C & ~D)) + X5 + 0xD62F105D;
- A = B + (A << 5 | A >>> -5);
- D += ((A & C) | (B & ~C)) + X10 + 0x02441453;
- D = A + (D << 9 | D >>> -9);
- C += ((D & B) | (A & ~B)) + X15 + 0xD8A1E681;
- C = D + (C << 14 | C >>> -14);
- B += ((C & A) | (D & ~A)) + X4 + 0xE7D3FBC8;
- B = C + (B << 20 | B >>> -20);
-
- A += ((B & D) | (C & ~D)) + X9 + 0x21E1CDE6;
- A = B + (A << 5 | A >>> -5);
- D += ((A & C) | (B & ~C)) + X14 + 0xC33707D6;
- D = A + (D << 9 | D >>> -9);
- C += ((D & B) | (A & ~B)) + X3 + 0xF4D50D87;
- C = D + (C << 14 | C >>> -14);
- B += ((C & A) | (D & ~A)) + X8 + 0x455A14ED;
- B = C + (B << 20 | B >>> -20);
-
- A += ((B & D) | (C & ~D)) + X13 + 0xA9E3E905;
- A = B + (A << 5 | A >>> -5);
- D += ((A & C) | (B & ~C)) + X2 + 0xFCEFA3F8;
- D = A + (D << 9 | D >>> -9);
- C += ((D & B) | (A & ~B)) + X7 + 0x676F02D9;
- C = D + (C << 14 | C >>> -14);
- B += ((C & A) | (D & ~A)) + X12 + 0x8D2A4C8A;
- B = C + (B << 20 | B >>> -20);
-
- // round 3
- A += (B ^ C ^ D) + X5 + 0xFFFA3942;
- A = B + (A << 4 | A >>> -4);
- D += (A ^ B ^ C) + X8 + 0x8771F681;
- D = A + (D << 11 | D >>> -11);
- C += (D ^ A ^ B) + X11 + 0x6D9D6122;
- C = D + (C << 16 | C >>> -16);
- B += (C ^ D ^ A) + X14 + 0xFDE5380C;
- B = C + (B << 23 | B >>> -23);
-
- A += (B ^ C ^ D) + X1 + 0xA4BEEA44;
- A = B + (A << 4 | A >>> -4);
- D += (A ^ B ^ C) + X4 + 0x4BDECFA9;
- D = A + (D << 11 | D >>> -11);
- C += (D ^ A ^ B) + X7 + 0xF6BB4B60;
- C = D + (C << 16 | C >>> -16);
- B += (C ^ D ^ A) + X10 + 0xBEBFBC70;
- B = C + (B << 23 | B >>> -23);
-
- A += (B ^ C ^ D) + X13 + 0x289B7EC6;
- A = B + (A << 4 | A >>> -4);
- D += (A ^ B ^ C) + X0 + 0xEAA127FA;
- D = A + (D << 11 | D >>> -11);
- C += (D ^ A ^ B) + X3 + 0xD4EF3085;
- C = D + (C << 16 | C >>> -16);
- B += (C ^ D ^ A) + X6 + 0x04881D05;
- B = C + (B << 23 | B >>> -23);
-
- A += (B ^ C ^ D) + X9 + 0xD9D4D039;
- A = B + (A << 4 | A >>> -4);
- D += (A ^ B ^ C) + X12 + 0xE6DB99E5;
- D = A + (D << 11 | D >>> -11);
- C += (D ^ A ^ B) + X15 + 0x1FA27CF8;
- C = D + (C << 16 | C >>> -16);
- B += (C ^ D ^ A) + X2 + 0xC4AC5665;
- B = C + (B << 23 | B >>> -23);
-
- // round 4
- A += (C ^ (B | ~D)) + X0 + 0xF4292244;
- A = B + (A << 6 | A >>> -6);
- D += (B ^ (A | ~C)) + X7 + 0x432AFF97;
- D = A + (D << 10 | D >>> -10);
- C += (A ^ (D | ~B)) + X14 + 0xAB9423A7;
- C = D + (C << 15 | C >>> -15);
- B += (D ^ (C | ~A)) + X5 + 0xFC93A039;
- B = C + (B << 21 | B >>> -21);
-
- A += (C ^ (B | ~D)) + X12 + 0x655B59C3;
- A = B + (A << 6 | A >>> -6);
- D += (B ^ (A | ~C)) + X3 + 0x8F0CCC92;
- D = A + (D << 10 | D >>> -10);
- C += (A ^ (D | ~B)) + X10 + 0xFFEFF47D;
- C = D + (C << 15 | C >>> -15);
- B += (D ^ (C | ~A)) + X1 + 0x85845dd1;
- B = C + (B << 21 | B >>> -21);
-
- A += (C ^ (B | ~D)) + X8 + 0x6FA87E4F;
- A = B + (A << 6 | A >>> -6);
- D += (B ^ (A | ~C)) + X15 + 0xFE2CE6E0;
- D = A + (D << 10 | D >>> -10);
- C += (A ^ (D | ~B)) + X6 + 0xA3014314;
- C = D + (C << 15 | C >>> -15);
- B += (D ^ (C | ~A)) + X13 + 0x4E0811A1;
- B = C + (B << 21 | B >>> -21);
-
- A += (C ^ (B | ~D)) + X4 + 0xF7537E82;
- A = B + (A << 6 | A >>> -6);
- D += (B ^ (A | ~C)) + X11 + 0xBD3AF235;
- D = A + (D << 10 | D >>> -10);
- C += (A ^ (D | ~B)) + X2 + 0x2AD7D2BB;
- C = D + (C << 15 | C >>> -15);
- B += (D ^ (C | ~A)) + X9 + 0xEB86D391;
- B = C + (B << 21 | B >>> -21);
-
- h0 += A;
- h1 += B;
- h2 += C;
- h3 += D;
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] result = new byte[padding + 8];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte) bits;
- result[padding++] = (byte)(bits >>> 8);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 48);
- result[padding ] = (byte)(bits >>> 56);
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte) h0, (byte)(h0 >>> 8), (byte)(h0 >>> 16), (byte)(h0 >>> 24),
- (byte) h1, (byte)(h1 >>> 8), (byte)(h1 >>> 16), (byte)(h1 >>> 24),
- (byte) h2, (byte)(h2 >>> 8), (byte)(h2 >>> 16), (byte)(h2 >>> 24),
- (byte) h3, (byte)(h3 >>> 8), (byte)(h3 >>> 16), (byte)(h3 >>> 24) };
- }
-
- protected void resetContext()
- {
- // magic MD5/RIPEMD128 initialisation constants
- h0 = 0x67452301;
- h1 = 0xEFCDAB89;
- h2 = 0x98BADCFE;
- h3 = 0x10325476;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new MD5().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/RipeMD128.java b/libjava/classpath/gnu/java/security/hash/RipeMD128.java
deleted file mode 100644
index bd0adc5..0000000
--- a/libjava/classpath/gnu/java/security/hash/RipeMD128.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/* RipeMD128.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * RIPEMD-128 is a 128-bit message digest.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html">
- * RIPEMD160</a>: A Strengthened Version of RIPEMD.<br>
- * Hans Dobbertin, Antoon Bosselaers and Bart Preneel.</li>
- * </ol>
- */
-public class RipeMD128
- extends BaseHash
-{
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- private static final String DIGEST0 = "CDF26213A150DC3ECB610F18F6B38B46";
-
- /** Constants for the transform method. */
- // selection of message word
- private static final int[] R = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
- 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
- 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 };
-
- private static final int[] Rp = {
- 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
- 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
- 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
- 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 };
-
- // amount for rotate left (rol)
- private static final int[] S = {
- 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
- 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
- 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
- 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 };
-
- private static final int[] Sp = {
- 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
- 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
- 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
- 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 };
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 128-bit h0, h1, h2, h3 (interim result) */
- private int h0, h1, h2, h3;
-
- /** 512 bits work buffer = 16 x 32-bit words */
- private int[] X = new int[16];
-
- /** Trivial 0-arguments constructor. */
- public RipeMD128()
- {
- super(Registry.RIPEMD128_HASH, 16, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private RipeMD128(RipeMD128 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public Object clone()
- {
- return new RipeMD128(this);
- }
-
- protected void transform(byte[] in, int offset)
- {
- int A, B, C, D, Ap, Bp, Cp, Dp, T, s, i;
- // encode 64 bytes from input block into an array of 16 unsigned integers.
- for (i = 0; i < 16; i++)
- X[i] = (in[offset++] & 0xFF)
- | (in[offset++] & 0xFF) << 8
- | (in[offset++] & 0xFF) << 16
- | in[offset++] << 24;
- A = Ap = h0;
- B = Bp = h1;
- C = Cp = h2;
- D = Dp = h3;
- for (i = 0; i < 16; i++) // rounds 0...15
- {
- s = S[i];
- T = A + (B ^ C ^ D) + X[i];
- A = D;
- D = C;
- C = B;
- B = T << s | T >>> (32 - s);
-
- s = Sp[i];
- T = Ap + ((Bp & Dp) | (Cp & ~Dp)) + X[Rp[i]] + 0x50A28BE6;
- Ap = Dp;
- Dp = Cp;
- Cp = Bp;
- Bp = T << s | T >>> (32 - s);
- }
- for (; i < 32; i++) // rounds 16...31
- {
- s = S[i];
- T = A + ((B & C) | (~B & D)) + X[R[i]] + 0x5A827999;
- A = D;
- D = C;
- C = B;
- B = T << s | T >>> (32 - s);
-
- s = Sp[i];
- T = Ap + ((Bp | ~Cp) ^ Dp) + X[Rp[i]] + 0x5C4DD124;
- Ap = Dp;
- Dp = Cp;
- Cp = Bp;
- Bp = T << s | T >>> (32 - s);
- }
- for (; i < 48; i++) // rounds 32...47
- {
- s = S[i];
- T = A + ((B | ~C) ^ D) + X[R[i]] + 0x6ED9EBA1;
- A = D;
- D = C;
- C = B;
- B = T << s | T >>> (32 - s);
-
- s = Sp[i];
- T = Ap + ((Bp & Cp) | (~Bp & Dp)) + X[Rp[i]] + 0x6D703EF3;
- Ap = Dp;
- Dp = Cp;
- Cp = Bp;
- Bp = T << s | T >>> (32 - s);
- }
- for (; i < 64; i++) // rounds 48...63
- {
- s = S[i];
- T = A + ((B & D) | (C & ~D)) + X[R[i]] + 0x8F1BBCDC;
- A = D;
- D = C;
- C = B;
- B = T << s | T >>> (32 - s);
-
- s = Sp[i];
- T = Ap + (Bp ^ Cp ^ Dp) + X[Rp[i]];
- Ap = Dp;
- Dp = Cp;
- Cp = Bp;
- Bp = T << s | T >>> (32 - s);
- }
- T = h1 + C + Dp;
- h1 = h2 + D + Ap;
- h2 = h3 + A + Bp;
- h3 = h0 + B + Cp;
- h0 = T;
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] result = new byte[padding + 8];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte) bits;
- result[padding++] = (byte)(bits >>> 8);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 48);
- result[padding ] = (byte)(bits >>> 56);
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte) h0, (byte)(h0 >>> 8), (byte)(h0 >>> 16), (byte)(h0 >>> 24),
- (byte) h1, (byte)(h1 >>> 8), (byte)(h1 >>> 16), (byte)(h1 >>> 24),
- (byte) h2, (byte)(h2 >>> 8), (byte)(h2 >>> 16), (byte)(h2 >>> 24),
- (byte) h3, (byte)(h3 >>> 8), (byte)(h3 >>> 16), (byte)(h3 >>> 24)
- };
- }
-
- protected void resetContext()
- {
- // magic RIPEMD128 initialisation constants
- h0 = 0x67452301;
- h1 = 0xEFCDAB89;
- h2 = 0x98BADCFE;
- h3 = 0x10325476;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new RipeMD128().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/RipeMD160.java b/libjava/classpath/gnu/java/security/hash/RipeMD160.java
deleted file mode 100644
index 795f5a4..0000000
--- a/libjava/classpath/gnu/java/security/hash/RipeMD160.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/* RipeMD160.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * RIPEMD-160 is a 160-bit message digest.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html">
- * RIPEMD160</a>: A Strengthened Version of RIPEMD.<br>
- * Hans Dobbertin, Antoon Bosselaers and Bart Preneel.</li>
- * </ol>
- */
-public class RipeMD160
- extends BaseHash
-{
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- private static final String DIGEST0 = "9C1185A5C5E9FC54612808977EE8F548B2258D31";
-
- // selection of message word
- private static final int[] R = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
- 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
- 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
- 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 };
-
- private static final int[] Rp = {
- 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
- 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
- 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
- 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
- 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 };
-
- // amount for rotate left (rol)
- private static final int[] S = {
- 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
- 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
- 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
- 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
- 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 };
-
- private static final int[] Sp = {
- 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
- 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
- 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
- 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
- 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 };
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 160-bit h0, h1, h2, h3, h4 (interim result) */
- private int h0, h1, h2, h3, h4;
-
- /** 512 bits work buffer = 16 x 32-bit words */
- private int[] X = new int[16];
-
- /** Trivial 0-arguments constructor. */
- public RipeMD160()
- {
- super(Registry.RIPEMD160_HASH, 20, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private RipeMD160(RipeMD160 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public Object clone()
- {
- return (new RipeMD160(this));
- }
-
- protected void transform(byte[] in, int offset)
- {
- int A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, T, s, i;
- // encode 64 bytes from input block into an array of 16 unsigned integers
- for (i = 0; i < 16; i++)
- X[i] = (in[offset++] & 0xFF)
- | (in[offset++] & 0xFF) << 8
- | (in[offset++] & 0xFF) << 16
- | in[offset++] << 24;
- A = Ap = h0;
- B = Bp = h1;
- C = Cp = h2;
- D = Dp = h3;
- E = Ep = h4;
- for (i = 0; i < 16; i++) // rounds 0...15
- {
- s = S[i];
- T = A + (B ^ C ^ D) + X[i];
- A = E;
- E = D;
- D = C << 10 | C >>> 22;
- C = B;
- B = (T << s | T >>> (32 - s)) + A;
-
- s = Sp[i];
- T = Ap + (Bp ^ (Cp | ~Dp)) + X[Rp[i]] + 0x50A28BE6;
- Ap = Ep;
- Ep = Dp;
- Dp = Cp << 10 | Cp >>> 22;
- Cp = Bp;
- Bp = (T << s | T >>> (32 - s)) + Ap;
- }
- for (; i < 32; i++) // rounds 16...31
- {
- s = S[i];
- T = A + ((B & C) | (~B & D)) + X[R[i]] + 0x5A827999;
- A = E;
- E = D;
- D = C << 10 | C >>> 22;
- C = B;
- B = (T << s | T >>> (32 - s)) + A;
-
- s = Sp[i];
- T = Ap + ((Bp & Dp) | (Cp & ~Dp)) + X[Rp[i]] + 0x5C4DD124;
- Ap = Ep;
- Ep = Dp;
- Dp = Cp << 10 | Cp >>> 22;
- Cp = Bp;
- Bp = (T << s | T >>> (32 - s)) + Ap;
- }
- for (; i < 48; i++) // rounds 32...47
- {
- s = S[i];
- T = A + ((B | ~C) ^ D) + X[R[i]] + 0x6ED9EBA1;
- A = E;
- E = D;
- D = C << 10 | C >>> 22;
- C = B;
- B = (T << s | T >>> (32 - s)) + A;
-
- s = Sp[i];
- T = Ap + ((Bp | ~Cp) ^ Dp) + X[Rp[i]] + 0x6D703EF3;
- Ap = Ep;
- Ep = Dp;
- Dp = Cp << 10 | Cp >>> 22;
- Cp = Bp;
- Bp = (T << s | T >>> (32 - s)) + Ap;
- }
- for (; i < 64; i++) // rounds 48...63
- {
- s = S[i];
- T = A + ((B & D) | (C & ~D)) + X[R[i]] + 0x8F1BBCDC;
- A = E;
- E = D;
- D = C << 10 | C >>> 22;
- C = B;
- B = (T << s | T >>> (32 - s)) + A;
-
- s = Sp[i];
- T = Ap + ((Bp & Cp) | (~Bp & Dp)) + X[Rp[i]] + 0x7A6D76E9;
- Ap = Ep;
- Ep = Dp;
- Dp = Cp << 10 | Cp >>> 22;
- Cp = Bp;
- Bp = (T << s | T >>> (32 - s)) + Ap;
- }
- for (; i < 80; i++) // rounds 64...79
- {
- s = S[i];
- T = A + (B ^ (C | ~D)) + X[R[i]] + 0xA953FD4E;
- A = E;
- E = D;
- D = C << 10 | C >>> 22;
- C = B;
- B = (T << s | T >>> (32 - s)) + A;
-
- s = Sp[i];
- T = Ap + (Bp ^ Cp ^ Dp) + X[Rp[i]];
- Ap = Ep;
- Ep = Dp;
- Dp = Cp << 10 | Cp >>> 22;
- Cp = Bp;
- Bp = (T << s | T >>> (32 - s)) + Ap;
- }
- T = h1 + C + Dp;
- h1 = h2 + D + Ep;
- h2 = h3 + E + Ap;
- h3 = h4 + A + Bp;
- h4 = h0 + B + Cp;
- h0 = T;
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] result = new byte[padding + 8];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte) bits;
- result[padding++] = (byte)(bits >>> 8);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 48);
- result[padding ] = (byte)(bits >>> 56);
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte) h0, (byte)(h0 >>> 8), (byte)(h0 >>> 16), (byte)(h0 >>> 24),
- (byte) h1, (byte)(h1 >>> 8), (byte)(h1 >>> 16), (byte)(h1 >>> 24),
- (byte) h2, (byte)(h2 >>> 8), (byte)(h2 >>> 16), (byte)(h2 >>> 24),
- (byte) h3, (byte)(h3 >>> 8), (byte)(h3 >>> 16), (byte)(h3 >>> 24),
- (byte) h4, (byte)(h4 >>> 8), (byte)(h4 >>> 16), (byte)(h4 >>> 24)
- };
- }
-
- protected void resetContext()
- {
- // magic RIPEMD160 initialisation constants
- h0 = 0x67452301;
- h1 = 0xEFCDAB89;
- h2 = 0x98BADCFE;
- h3 = 0x10325476;
- h4 = 0xC3D2E1F0;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new RipeMD160().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha160.java b/libjava/classpath/gnu/java/security/hash/Sha160.java
deleted file mode 100644
index 88bf0e4..0000000
--- a/libjava/classpath/gnu/java/security/hash/Sha160.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Sha160.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * The Secure Hash Algorithm (SHA-1) is required for use with the Digital
- * Signature Algorithm (DSA) as specified in the Digital Signature Standard
- * (DSS) and whenever a secure hash algorithm is required for federal
- * applications. For a message of length less than 2^64 bits, the SHA-1
- * produces a 160-bit condensed representation of the message called a message
- * digest. The message digest is used during generation of a signature for the
- * message. The SHA-1 is also used to compute a message digest for the received
- * version of the message during the process of verifying the signature. Any
- * change to the message in transit will, with very high probability, result in
- * a different message digest, and the signature will fail to verify.
- * <p>
- * The SHA-1 is designed to have the following properties: it is
- * computationally infeasible to find a message which corresponds to a given
- * message digest, or to find two different messages which produce the same
- * message digest.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.itl.nist.gov/fipspubs/fip180-1.htm">SECURE HASH
- * STANDARD</a><br>
- * Federal Information, Processing Standards Publication 180-1, 1995 April 17.
- * </li>
- * </ol>
- */
-public class Sha160
- extends BaseHash
-{
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- private static final String DIGEST0 = "A9993E364706816ABA3E25717850C26C9CD0D89D";
-
- private static final int[] w = new int[80];
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 160-bit interim result. */
- private int h0, h1, h2, h3, h4;
-
- /** Trivial 0-arguments constructor. */
- public Sha160()
- {
- super(Registry.SHA160_HASH, 20, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Sha160(Sha160 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public static final int[] G(int hh0, int hh1, int hh2, int hh3, int hh4,
- byte[] in, int offset)
- {
- return sha(hh0, hh1, hh2, hh3, hh4, in, offset);
- }
-
- public Object clone()
- {
- return new Sha160(this);
- }
-
- protected void transform(byte[] in, int offset)
- {
- int[] result = sha(h0, h1, h2, h3, h4, in, offset);
- h0 = result[0];
- h1 = result[1];
- h2 = result[2];
- h3 = result[3];
- h4 = result[4];
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] result = new byte[padding + 8];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte)(bits >>> 56);
- result[padding++] = (byte)(bits >>> 48);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 8);
- result[padding ] = (byte) bits;
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte)(h0 >>> 24), (byte)(h0 >>> 16), (byte)(h0 >>> 8), (byte) h0,
- (byte)(h1 >>> 24), (byte)(h1 >>> 16), (byte)(h1 >>> 8), (byte) h1,
- (byte)(h2 >>> 24), (byte)(h2 >>> 16), (byte)(h2 >>> 8), (byte) h2,
- (byte)(h3 >>> 24), (byte)(h3 >>> 16), (byte)(h3 >>> 8), (byte) h3,
- (byte)(h4 >>> 24), (byte)(h4 >>> 16), (byte)(h4 >>> 8), (byte) h4 };
- }
-
- protected void resetContext()
- {
- // magic SHA-1/RIPEMD160 initialisation constants
- h0 = 0x67452301;
- h1 = 0xEFCDAB89;
- h2 = 0x98BADCFE;
- h3 = 0x10325476;
- h4 = 0xC3D2E1F0;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- Sha160 md = new Sha160();
- md.update((byte) 0x61); // a
- md.update((byte) 0x62); // b
- md.update((byte) 0x63); // c
- String result = Util.toString(md.digest());
- valid = Boolean.valueOf(DIGEST0.equals(result));
- }
- return valid.booleanValue();
- }
-
- private static synchronized final int[] sha(int hh0, int hh1, int hh2,
- int hh3, int hh4, byte[] in,
- int offset)
- {
- int A = hh0;
- int B = hh1;
- int C = hh2;
- int D = hh3;
- int E = hh4;
- int r, T;
- for (r = 0; r < 16; r++)
- w[r] = in[offset++] << 24
- | (in[offset++] & 0xFF) << 16
- | (in[offset++] & 0xFF) << 8
- | (in[offset++] & 0xFF);
- for (r = 16; r < 80; r++)
- {
- T = w[r - 3] ^ w[r - 8] ^ w[r - 14] ^ w[r - 16];
- w[r] = T << 1 | T >>> 31;
- }
- for (r = 0; r < 20; r++) // rounds 0-19
- {
- T = (A << 5 | A >>> 27) + ((B & C) | (~B & D)) + E + w[r] + 0x5A827999;
- E = D;
- D = C;
- C = B << 30 | B >>> 2;
- B = A;
- A = T;
- }
- for (r = 20; r < 40; r++) // rounds 20-39
- {
- T = (A << 5 | A >>> 27) + (B ^ C ^ D) + E + w[r] + 0x6ED9EBA1;
- E = D;
- D = C;
- C = B << 30 | B >>> 2;
- B = A;
- A = T;
- }
- for (r = 40; r < 60; r++) // rounds 40-59
- {
- T = (A << 5 | A >>> 27) + (B & C | B & D | C & D) + E + w[r] + 0x8F1BBCDC;
- E = D;
- D = C;
- C = B << 30 | B >>> 2;
- B = A;
- A = T;
- }
- for (r = 60; r < 80; r++) // rounds 60-79
- {
- T = (A << 5 | A >>> 27) + (B ^ C ^ D) + E + w[r] + 0xCA62C1D6;
- E = D;
- D = C;
- C = B << 30 | B >>> 2;
- B = A;
- A = T;
- }
- return new int[] { hh0 + A, hh1 + B, hh2 + C, hh3 + D, hh4 + E };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha256.java b/libjava/classpath/gnu/java/security/hash/Sha256.java
deleted file mode 100644
index 76e28d4..0000000
--- a/libjava/classpath/gnu/java/security/hash/Sha256.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Sha256.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * Implementation of SHA2-1 [SHA-256] per the IETF Draft Specification.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://ftp.ipv4.heanet.ie/pub/ietf/internet-drafts/draft-ietf-ipsec-ciph-aes-cbc-03.txt">
- * Descriptions of SHA-256, SHA-384, and SHA-512</a>,</li>
- * <li>http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf</li>
- * </ol>
- */
-public class Sha256
- extends BaseHash
-{
- private static final int[] k = {
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
- };
-
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- private static final String DIGEST0 =
- "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD";
-
- private static final int[] w = new int[64];
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 256-bit interim result. */
- private int h0, h1, h2, h3, h4, h5, h6, h7;
-
- /** Trivial 0-arguments constructor. */
- public Sha256()
- {
- super(Registry.SHA256_HASH, 32, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Sha256(Sha256 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.h5 = md.h5;
- this.h6 = md.h6;
- this.h7 = md.h7;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public static final int[] G(int hh0, int hh1, int hh2, int hh3, int hh4,
- int hh5, int hh6, int hh7, byte[] in, int offset)
- {
- return sha(hh0, hh1, hh2, hh3, hh4, hh5, hh6, hh7, in, offset);
- }
-
- public Object clone()
- {
- return new Sha256(this);
- }
-
- protected void transform(byte[] in, int offset)
- {
- int[] result = sha(h0, h1, h2, h3, h4, h5, h6, h7, in, offset);
- h0 = result[0];
- h1 = result[1];
- h2 = result[2];
- h3 = result[3];
- h4 = result[4];
- h5 = result[5];
- h6 = result[6];
- h7 = result[7];
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] result = new byte[padding + 8];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- long bits = count << 3;
- result[padding++] = (byte)(bits >>> 56);
- result[padding++] = (byte)(bits >>> 48);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 8);
- result[padding ] = (byte) bits;
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte)(h0 >>> 24), (byte)(h0 >>> 16), (byte)(h0 >>> 8), (byte) h0,
- (byte)(h1 >>> 24), (byte)(h1 >>> 16), (byte)(h1 >>> 8), (byte) h1,
- (byte)(h2 >>> 24), (byte)(h2 >>> 16), (byte)(h2 >>> 8), (byte) h2,
- (byte)(h3 >>> 24), (byte)(h3 >>> 16), (byte)(h3 >>> 8), (byte) h3,
- (byte)(h4 >>> 24), (byte)(h4 >>> 16), (byte)(h4 >>> 8), (byte) h4,
- (byte)(h5 >>> 24), (byte)(h5 >>> 16), (byte)(h5 >>> 8), (byte) h5,
- (byte)(h6 >>> 24), (byte)(h6 >>> 16), (byte)(h6 >>> 8), (byte) h6,
- (byte)(h7 >>> 24), (byte)(h7 >>> 16), (byte)(h7 >>> 8), (byte) h7 };
- }
-
- protected void resetContext()
- {
- // magic SHA-256 initialisation constants
- h0 = 0x6a09e667;
- h1 = 0xbb67ae85;
- h2 = 0x3c6ef372;
- h3 = 0xa54ff53a;
- h4 = 0x510e527f;
- h5 = 0x9b05688c;
- h6 = 0x1f83d9ab;
- h7 = 0x5be0cd19;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- Sha256 md = new Sha256();
- md.update((byte) 0x61); // a
- md.update((byte) 0x62); // b
- md.update((byte) 0x63); // c
- String result = Util.toString(md.digest());
- valid = Boolean.valueOf(DIGEST0.equals(result));
- }
- return valid.booleanValue();
- }
-
- private static synchronized final int[] sha(int hh0, int hh1, int hh2,
- int hh3, int hh4, int hh5,
- int hh6, int hh7, byte[] in,
- int offset)
- {
- int A = hh0;
- int B = hh1;
- int C = hh2;
- int D = hh3;
- int E = hh4;
- int F = hh5;
- int G = hh6;
- int H = hh7;
- int r, T, T2;
- for (r = 0; r < 16; r++)
- w[r] = (in[offset++] << 24
- | (in[offset++] & 0xFF) << 16
- | (in[offset++] & 0xFF) << 8
- | (in[offset++] & 0xFF));
- for (r = 16; r < 64; r++)
- {
- T = w[r - 2];
- T2 = w[r - 15];
- w[r] = ((((T >>> 17) | (T << 15)) ^ ((T >>> 19) | (T << 13)) ^ (T >>> 10))
- + w[r - 7]
- + (((T2 >>> 7) | (T2 << 25))
- ^ ((T2 >>> 18) | (T2 << 14))
- ^ (T2 >>> 3)) + w[r - 16]);
- }
- for (r = 0; r < 64; r++)
- {
- T = (H
- + (((E >>> 6) | (E << 26))
- ^ ((E >>> 11) | (E << 21))
- ^ ((E >>> 25) | (E << 7)))
- + ((E & F) ^ (~E & G)) + k[r] + w[r]);
- T2 = ((((A >>> 2) | (A << 30))
- ^ ((A >>> 13) | (A << 19))
- ^ ((A >>> 22) | (A << 10))) + ((A & B) ^ (A & C) ^ (B & C)));
- H = G;
- G = F;
- F = E;
- E = D + T;
- D = C;
- C = B;
- B = A;
- A = T + T2;
- }
- return new int[] {
- hh0 + A, hh1 + B, hh2 + C, hh3 + D,
- hh4 + E, hh5 + F, hh6 + G, hh7 + H };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha384.java b/libjava/classpath/gnu/java/security/hash/Sha384.java
deleted file mode 100644
index 5fea4f3..0000000
--- a/libjava/classpath/gnu/java/security/hash/Sha384.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/* Sha384.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * Implementation of SHA2-2 [SHA-384] per the IETF Draft Specification.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://ftp.ipv4.heanet.ie/pub/ietf/internet-drafts/draft-ietf-ipsec-ciph-aes-cbc-03.txt">
- * Descriptions of SHA-256, SHA-384, and SHA-512</a>,</li>
- * <li>http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf</li>
- * </ol>
- */
-public class Sha384
- extends BaseHash
-{
- private static final long[] k = {
- 0x428a2f98d728ae22L, 0x7137449123ef65cdL, 0xb5c0fbcfec4d3b2fL,
- 0xe9b5dba58189dbbcL, 0x3956c25bf348b538L, 0x59f111f1b605d019L,
- 0x923f82a4af194f9bL, 0xab1c5ed5da6d8118L, 0xd807aa98a3030242L,
- 0x12835b0145706fbeL, 0x243185be4ee4b28cL, 0x550c7dc3d5ffb4e2L,
- 0x72be5d74f27b896fL, 0x80deb1fe3b1696b1L, 0x9bdc06a725c71235L,
- 0xc19bf174cf692694L, 0xe49b69c19ef14ad2L, 0xefbe4786384f25e3L,
- 0x0fc19dc68b8cd5b5L, 0x240ca1cc77ac9c65L, 0x2de92c6f592b0275L,
- 0x4a7484aa6ea6e483L, 0x5cb0a9dcbd41fbd4L, 0x76f988da831153b5L,
- 0x983e5152ee66dfabL, 0xa831c66d2db43210L, 0xb00327c898fb213fL,
- 0xbf597fc7beef0ee4L, 0xc6e00bf33da88fc2L, 0xd5a79147930aa725L,
- 0x06ca6351e003826fL, 0x142929670a0e6e70L, 0x27b70a8546d22ffcL,
- 0x2e1b21385c26c926L, 0x4d2c6dfc5ac42aedL, 0x53380d139d95b3dfL,
- 0x650a73548baf63deL, 0x766a0abb3c77b2a8L, 0x81c2c92e47edaee6L,
- 0x92722c851482353bL, 0xa2bfe8a14cf10364L, 0xa81a664bbc423001L,
- 0xc24b8b70d0f89791L, 0xc76c51a30654be30L, 0xd192e819d6ef5218L,
- 0xd69906245565a910L, 0xf40e35855771202aL, 0x106aa07032bbd1b8L,
- 0x19a4c116b8d2d0c8L, 0x1e376c085141ab53L, 0x2748774cdf8eeb99L,
- 0x34b0bcb5e19b48a8L, 0x391c0cb3c5c95a63L, 0x4ed8aa4ae3418acbL,
- 0x5b9cca4f7763e373L, 0x682e6ff3d6b2b8a3L, 0x748f82ee5defb2fcL,
- 0x78a5636f43172f60L, 0x84c87814a1f0ab72L, 0x8cc702081a6439ecL,
- 0x90befffa23631e28L, 0xa4506cebde82bde9L, 0xbef9a3f7b2c67915L,
- 0xc67178f2e372532bL, 0xca273eceea26619cL, 0xd186b8c721c0c207L,
- 0xeada7dd6cde0eb1eL, 0xf57d4f7fee6ed178L, 0x06f067aa72176fbaL,
- 0x0a637dc5a2c898a6L, 0x113f9804bef90daeL, 0x1b710b35131c471bL,
- 0x28db77f523047d84L, 0x32caab7b40c72493L, 0x3c9ebe0a15c9bebcL,
- 0x431d67c49c100d4cL, 0x4cc5d4becb3e42b6L, 0x597f299cfc657e2aL,
- 0x5fcb6fab3ad6faecL, 0x6c44198c4a475817L };
-
- private static final int BLOCK_SIZE = 128; // inner block size in bytes
-
- private static final String DIGEST0 =
- "CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED"
- + "8086072BA1E7CC2358BAECA134C825A7";
-
- private static final long[] w = new long[80];
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 512-bit interim result. */
- private long h0, h1, h2, h3, h4, h5, h6, h7;
-
- /** Trivial 0-arguments constructor. */
- public Sha384()
- {
- super(Registry.SHA384_HASH, 48, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Sha384(Sha384 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.h5 = md.h5;
- this.h6 = md.h6;
- this.h7 = md.h7;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public static final long[] G(long hh0, long hh1, long hh2, long hh3,
- long hh4, long hh5, long hh6, long hh7,
- byte[] in, int offset)
- {
- return sha(hh0, hh1, hh2, hh3, hh4, hh5, hh6, hh7, in, offset);
- }
-
- public Object clone()
- {
- return new Sha384(this);
- }
-
- protected void transform(byte[] in, int offset)
- {
- long[] result = sha(h0, h1, h2, h3, h4, h5, h6, h7, in, offset);
- h0 = result[0];
- h1 = result[1];
- h2 = result[2];
- h3 = result[3];
- h4 = result[4];
- h5 = result[5];
- h6 = result[6];
- h7 = result[7];
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 112) ? (112 - n) : (240 - n);
- byte[] result = new byte[padding + 16];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- // TODO: FIX Only ~35 bits of 128 bit counter usable this way
- long bits = count << 3;
- padding += 8;
- result[padding++] = (byte)(bits >>> 56);
- result[padding++] = (byte)(bits >>> 48);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 8);
- result[padding ] = (byte) bits;
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte)(h0 >>> 56), (byte)(h0 >>> 48), (byte)(h0 >>> 40), (byte)(h0 >>> 32),
- (byte)(h0 >>> 24), (byte)(h0 >>> 16), (byte)(h0 >>> 8), (byte) h0,
- (byte)(h1 >>> 56), (byte)(h1 >>> 48), (byte)(h1 >>> 40), (byte)(h1 >>> 32),
- (byte)(h1 >>> 24), (byte)(h1 >>> 16), (byte)(h1 >>> 8), (byte) h1,
- (byte)(h2 >>> 56), (byte)(h2 >>> 48), (byte)(h2 >>> 40), (byte)(h2 >>> 32),
- (byte)(h2 >>> 24), (byte)(h2 >>> 16), (byte)(h2 >>> 8), (byte) h2,
- (byte)(h3 >>> 56), (byte)(h3 >>> 48), (byte)(h3 >>> 40), (byte)(h3 >>> 32),
- (byte)(h3 >>> 24), (byte)(h3 >>> 16), (byte)(h3 >>> 8), (byte) h3,
- (byte)(h4 >>> 56), (byte)(h4 >>> 48), (byte)(h4 >>> 40), (byte)(h4 >>> 32),
- (byte)(h4 >>> 24), (byte)(h4 >>> 16), (byte)(h4 >>> 8), (byte) h4,
- (byte)(h5 >>> 56), (byte)(h5 >>> 48), (byte)(h5 >>> 40), (byte)(h5 >>> 32),
- (byte)(h5 >>> 24), (byte)(h5 >>> 16), (byte)(h5 >>> 8), (byte) h5 };
- }
-
- protected void resetContext()
- {
- // magic SHA-384 initialisation constants
- h0 = 0xcbbb9d5dc1059ed8L;
- h1 = 0x629a292a367cd507L;
- h2 = 0x9159015a3070dd17L;
- h3 = 0x152fecd8f70e5939L;
- h4 = 0x67332667ffc00b31L;
- h5 = 0x8eb44a8768581511L;
- h6 = 0xdb0c2e0d64f98fa7L;
- h7 = 0x47b5481dbefa4fa4L;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- Sha384 md = new Sha384();
- md.update((byte) 0x61); // a
- md.update((byte) 0x62); // b
- md.update((byte) 0x63); // c
- String result = Util.toString(md.digest());
- valid = Boolean.valueOf(DIGEST0.equals(result));
- }
- return valid.booleanValue();
- }
-
- private static synchronized final long[] sha(long hh0, long hh1, long hh2,
- long hh3, long hh4, long hh5,
- long hh6, long hh7, byte[] in,
- int offset)
- {
- long A = hh0;
- long B = hh1;
- long C = hh2;
- long D = hh3;
- long E = hh4;
- long F = hh5;
- long G = hh6;
- long H = hh7;
- long T, T2;
- int r;
- for (r = 0; r < 16; r++)
- w[r] = (long) in[offset++] << 56
- | ((long) in[offset++] & 0xFF) << 48
- | ((long) in[offset++] & 0xFF) << 40
- | ((long) in[offset++] & 0xFF) << 32
- | ((long) in[offset++] & 0xFF) << 24
- | ((long) in[offset++] & 0xFF) << 16
- | ((long) in[offset++] & 0xFF) << 8
- | ((long) in[offset++] & 0xFF);
- for (r = 16; r < 80; r++)
- {
- T = w[r - 2];
- T2 = w[r - 15];
- w[r] = (((T >>> 19) | (T << 45)) ^ ((T >>> 61) | (T << 3)) ^ (T >>> 6))
- + w[r - 7]
- + (((T2 >>> 1) | (T2 << 63))
- ^ ((T2 >>> 8) | (T2 << 56))
- ^ (T2 >>> 7))
- + w[r - 16];
- }
- for (r = 0; r < 80; r++)
- {
-
- T = H
- + (((E >>> 14) | (E << 50))
- ^ ((E >>> 18) | (E << 46))
- ^ ((E >>> 41) | (E << 23)))
- + ((E & F) ^ ((~E) & G)) + k[r] + w[r];
- // T IS INCORRECT SOMEHOW
- T2 = (((A >>> 28) | (A << 36))
- ^ ((A >>> 34) | (A << 30))
- ^ ((A >>> 39) | (A << 25)))
- + ((A & B) ^ (A & C) ^ (B & C));
- H = G;
- G = F;
- F = E;
- E = D + T;
- D = C;
- C = B;
- B = A;
- A = T + T2;
- }
- return new long[] {
- hh0 + A, hh1 + B, hh2 + C, hh3 + D,
- hh4 + E, hh5 + F, hh6 + G, hh7 + H };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha512.java b/libjava/classpath/gnu/java/security/hash/Sha512.java
deleted file mode 100644
index 17c4323..0000000
--- a/libjava/classpath/gnu/java/security/hash/Sha512.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/* Sha512.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * Implementation of SHA2-3 [SHA-512] per the IETF Draft Specification.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://ftp.ipv4.heanet.ie/pub/ietf/internet-drafts/draft-ietf-ipsec-ciph-aes-cbc-03.txt">
- * Descriptions of SHA-256, SHA-384, and SHA-512</a>,</li>
- * <li>http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf</li>
- * </ol>
- */
-public class Sha512
- extends BaseHash
-{
- private static final long[] k = {
- 0x428a2f98d728ae22L, 0x7137449123ef65cdL, 0xb5c0fbcfec4d3b2fL,
- 0xe9b5dba58189dbbcL, 0x3956c25bf348b538L, 0x59f111f1b605d019L,
- 0x923f82a4af194f9bL, 0xab1c5ed5da6d8118L, 0xd807aa98a3030242L,
- 0x12835b0145706fbeL, 0x243185be4ee4b28cL, 0x550c7dc3d5ffb4e2L,
- 0x72be5d74f27b896fL, 0x80deb1fe3b1696b1L, 0x9bdc06a725c71235L,
- 0xc19bf174cf692694L, 0xe49b69c19ef14ad2L, 0xefbe4786384f25e3L,
- 0x0fc19dc68b8cd5b5L, 0x240ca1cc77ac9c65L, 0x2de92c6f592b0275L,
- 0x4a7484aa6ea6e483L, 0x5cb0a9dcbd41fbd4L, 0x76f988da831153b5L,
- 0x983e5152ee66dfabL, 0xa831c66d2db43210L, 0xb00327c898fb213fL,
- 0xbf597fc7beef0ee4L, 0xc6e00bf33da88fc2L, 0xd5a79147930aa725L,
- 0x06ca6351e003826fL, 0x142929670a0e6e70L, 0x27b70a8546d22ffcL,
- 0x2e1b21385c26c926L, 0x4d2c6dfc5ac42aedL, 0x53380d139d95b3dfL,
- 0x650a73548baf63deL, 0x766a0abb3c77b2a8L, 0x81c2c92e47edaee6L,
- 0x92722c851482353bL, 0xa2bfe8a14cf10364L, 0xa81a664bbc423001L,
- 0xc24b8b70d0f89791L, 0xc76c51a30654be30L, 0xd192e819d6ef5218L,
- 0xd69906245565a910L, 0xf40e35855771202aL, 0x106aa07032bbd1b8L,
- 0x19a4c116b8d2d0c8L, 0x1e376c085141ab53L, 0x2748774cdf8eeb99L,
- 0x34b0bcb5e19b48a8L, 0x391c0cb3c5c95a63L, 0x4ed8aa4ae3418acbL,
- 0x5b9cca4f7763e373L, 0x682e6ff3d6b2b8a3L, 0x748f82ee5defb2fcL,
- 0x78a5636f43172f60L, 0x84c87814a1f0ab72L, 0x8cc702081a6439ecL,
- 0x90befffa23631e28L, 0xa4506cebde82bde9L, 0xbef9a3f7b2c67915L,
- 0xc67178f2e372532bL, 0xca273eceea26619cL, 0xd186b8c721c0c207L,
- 0xeada7dd6cde0eb1eL, 0xf57d4f7fee6ed178L, 0x06f067aa72176fbaL,
- 0x0a637dc5a2c898a6L, 0x113f9804bef90daeL, 0x1b710b35131c471bL,
- 0x28db77f523047d84L, 0x32caab7b40c72493L, 0x3c9ebe0a15c9bebcL,
- 0x431d67c49c100d4cL, 0x4cc5d4becb3e42b6L, 0x597f299cfc657e2aL,
- 0x5fcb6fab3ad6faecL, 0x6c44198c4a475817L };
-
- private static final int BLOCK_SIZE = 128; // inner block size in bytes
-
- private static final String DIGEST0 =
- "DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A"
- + "2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F";
-
- private static final long[] w = new long[80];
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** 512-bit interim result. */
- private long h0, h1, h2, h3, h4, h5, h6, h7;
-
- /** Trivial 0-arguments constructor. */
- public Sha512()
- {
- super(Registry.SHA512_HASH, 64, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Sha512(Sha512 md)
- {
- this();
-
- this.h0 = md.h0;
- this.h1 = md.h1;
- this.h2 = md.h2;
- this.h3 = md.h3;
- this.h4 = md.h4;
- this.h5 = md.h5;
- this.h6 = md.h6;
- this.h7 = md.h7;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public static final long[] G(long hh0, long hh1, long hh2, long hh3,
- long hh4, long hh5, long hh6, long hh7,
- byte[] in, int offset)
- {
- return sha(hh0, hh1, hh2, hh3, hh4, hh5, hh6, hh7, in, offset);
- }
-
- public Object clone()
- {
- return new Sha512(this);
- }
-
- protected void transform(byte[] in, int offset)
- {
- long[] result = sha(h0, h1, h2, h3, h4, h5, h6, h7, in, offset);
- h0 = result[0];
- h1 = result[1];
- h2 = result[2];
- h3 = result[3];
- h4 = result[4];
- h5 = result[5];
- h6 = result[6];
- h7 = result[7];
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 112) ? (112 - n) : (240 - n);
- byte[] result = new byte[padding + 16];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save number of bits, casting the long to an array of 8 bytes
- // TODO: FIX Only ~35 bits of 128 bit counter usable this way
- long bits = count << 3;
- padding += 8;
- result[padding++] = (byte)(bits >>> 56);
- result[padding++] = (byte)(bits >>> 48);
- result[padding++] = (byte)(bits >>> 40);
- result[padding++] = (byte)(bits >>> 32);
- result[padding++] = (byte)(bits >>> 24);
- result[padding++] = (byte)(bits >>> 16);
- result[padding++] = (byte)(bits >>> 8);
- result[padding ] = (byte) bits;
- return result;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte)(h0 >>> 56), (byte)(h0 >>> 48), (byte)(h0 >>> 40), (byte)(h0 >>> 32),
- (byte)(h0 >>> 24), (byte)(h0 >>> 16), (byte)(h0 >>> 8), (byte) h0,
- (byte)(h1 >>> 56), (byte)(h1 >>> 48), (byte)(h1 >>> 40), (byte)(h1 >>> 32),
- (byte)(h1 >>> 24), (byte)(h1 >>> 16), (byte)(h1 >>> 8), (byte) h1,
- (byte)(h2 >>> 56), (byte)(h2 >>> 48), (byte)(h2 >>> 40), (byte)(h2 >>> 32),
- (byte)(h2 >>> 24), (byte)(h2 >>> 16), (byte)(h2 >>> 8), (byte) h2,
- (byte)(h3 >>> 56), (byte)(h3 >>> 48), (byte)(h3 >>> 40), (byte)(h3 >>> 32),
- (byte)(h3 >>> 24), (byte)(h3 >>> 16), (byte)(h3 >>> 8), (byte) h3,
- (byte)(h4 >>> 56), (byte)(h4 >>> 48), (byte)(h4 >>> 40), (byte)(h4 >>> 32),
- (byte)(h4 >>> 24), (byte)(h4 >>> 16), (byte)(h4 >>> 8), (byte) h4,
- (byte)(h5 >>> 56), (byte)(h5 >>> 48), (byte)(h5 >>> 40), (byte)(h5 >>> 32),
- (byte)(h5 >>> 24), (byte)(h5 >>> 16), (byte)(h5 >>> 8), (byte) h5,
- (byte)(h6 >>> 56), (byte)(h6 >>> 48), (byte)(h6 >>> 40), (byte)(h6 >>> 32),
- (byte)(h6 >>> 24), (byte)(h6 >>> 16), (byte)(h6 >>> 8), (byte) h6,
- (byte)(h7 >>> 56), (byte)(h7 >>> 48), (byte)(h7 >>> 40), (byte)(h7 >>> 32),
- (byte)(h7 >>> 24), (byte)(h7 >>> 16), (byte)(h7 >>> 8), (byte) h7 };
- }
-
- protected void resetContext()
- {
- // magic SHA-512 initialisation constants
- h0 = 0x6a09e667f3bcc908L;
- h1 = 0xbb67ae8584caa73bL;
- h2 = 0x3c6ef372fe94f82bL;
- h3 = 0xa54ff53a5f1d36f1L;
- h4 = 0x510e527fade682d1L;
- h5 = 0x9b05688c2b3e6c1fL;
- h6 = 0x1f83d9abfb41bd6bL;
- h7 = 0x5be0cd19137e2179L;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- Sha512 md = new Sha512();
- md.update((byte) 0x61); // a
- md.update((byte) 0x62); // b
- md.update((byte) 0x63); // c
- String result = Util.toString(md.digest());
- valid = Boolean.valueOf(DIGEST0.equals(result));
- }
- return valid.booleanValue();
- }
-
- private static synchronized final long[] sha(long hh0, long hh1, long hh2,
- long hh3, long hh4, long hh5,
- long hh6, long hh7, byte[] in,
- int offset)
- {
- long A = hh0;
- long B = hh1;
- long C = hh2;
- long D = hh3;
- long E = hh4;
- long F = hh5;
- long G = hh6;
- long H = hh7;
- long T, T2;
- int r;
- for (r = 0; r < 16; r++)
- w[r] = (long) in[offset++] << 56
- | ((long) in[offset++] & 0xFF) << 48
- | ((long) in[offset++] & 0xFF) << 40
- | ((long) in[offset++] & 0xFF) << 32
- | ((long) in[offset++] & 0xFF) << 24
- | ((long) in[offset++] & 0xFF) << 16
- | ((long) in[offset++] & 0xFF) << 8
- | ((long) in[offset++] & 0xFF);
- for (r = 16; r < 80; r++)
- {
- T = w[r - 2];
- T2 = w[r - 15];
- w[r] = (((T >>> 19) | (T << 45)) ^ ((T >>> 61) | (T << 3)) ^ (T >>> 6))
- + w[r - 7]
- + (((T2 >>> 1) | (T2 << 63))
- ^ ((T2 >>> 8) | (T2 << 56))
- ^ (T2 >>> 7))
- + w[r - 16];
- }
- for (r = 0; r < 80; r++)
- {
- T = H
- + (((E >>> 14) | (E << 50))
- ^ ((E >>> 18) | (E << 46))
- ^ ((E >>> 41) | (E << 23)))
- + ((E & F) ^ ((~E) & G)) + k[r] + w[r];
- T2 = (((A >>> 28) | (A << 36))
- ^ ((A >>> 34) | (A << 30))
- ^ ((A >>> 39) | (A << 25)))
- + ((A & B) ^ (A & C) ^ (B & C));
- H = G;
- G = F;
- F = E;
- E = D + T;
- D = C;
- C = B;
- B = A;
- A = T + T2;
- }
- return new long[] {
- hh0 + A, hh1 + B, hh2 + C, hh3 + D,
- hh4 + E, hh5 + F, hh6 + G, hh7 + H };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Tiger.java b/libjava/classpath/gnu/java/security/hash/Tiger.java
deleted file mode 100644
index d2993db..0000000
--- a/libjava/classpath/gnu/java/security/hash/Tiger.java
+++ /dev/null
@@ -1,864 +0,0 @@
-/* Tiger.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.hash;
-
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-/**
- * The Tiger message digest. Tiger was designed by Ross Anderson and Eli
- * Biham, with the goal of producing a secure, fast hash function that
- * performs especially well on next-generation 64-bit architectures, but
- * is still efficient on 32- and 16-bit architectures.
- * <p>
- * Tiger processes data in 512-bit blocks and produces a 192-bit
- * digest.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cs.technion.ac.il/~biham/Reports/Tiger/">Tiger: A
- * Fast New Hash Function</a>, Ross Anderson and Eli Biham.</a></li>
- * </ol>
- */
-public class Tiger
- extends BaseHash
-{
- private static final int HASH_SIZE = 24;
-
- private static final int BLOCK_SIZE = 64;
-
- /** Result when no data has been input. */
- private static final String DIGEST0 =
- "3293AC630C13F0245F92BBB1766E16167A4E58492DDE73F3";
-
- private static final long A = 0x0123456789ABCDEFL;
-
- private static final long B = 0xFEDCBA9876543210L;
-
- private static final long C = 0xF096A5B4C3B2E187L;
-
- /** S-Box T1. */
- private static final long[] T1 = {
- 0x02AAB17CF7E90C5EL, 0xAC424B03E243A8ECL, 0x72CD5BE30DD5FCD3L,
- 0x6D019B93F6F97F3AL, 0xCD9978FFD21F9193L, 0x7573A1C9708029E2L,
- 0xB164326B922A83C3L, 0x46883EEE04915870L, 0xEAACE3057103ECE6L,
- 0xC54169B808A3535CL, 0x4CE754918DDEC47CL, 0x0AA2F4DFDC0DF40CL,
- 0x10B76F18A74DBEFAL, 0xC6CCB6235AD1AB6AL, 0x13726121572FE2FFL,
- 0x1A488C6F199D921EL, 0x4BC9F9F4DA0007CAL, 0x26F5E6F6E85241C7L,
- 0x859079DBEA5947B6L, 0x4F1885C5C99E8C92L, 0xD78E761EA96F864BL,
- 0x8E36428C52B5C17DL, 0x69CF6827373063C1L, 0xB607C93D9BB4C56EL,
- 0x7D820E760E76B5EAL, 0x645C9CC6F07FDC42L, 0xBF38A078243342E0L,
- 0x5F6B343C9D2E7D04L, 0xF2C28AEB600B0EC6L, 0x6C0ED85F7254BCACL,
- 0x71592281A4DB4FE5L, 0x1967FA69CE0FED9FL, 0xFD5293F8B96545DBL,
- 0xC879E9D7F2A7600BL, 0x860248920193194EL, 0xA4F9533B2D9CC0B3L,
- 0x9053836C15957613L, 0xDB6DCF8AFC357BF1L, 0x18BEEA7A7A370F57L,
- 0x037117CA50B99066L, 0x6AB30A9774424A35L, 0xF4E92F02E325249BL,
- 0x7739DB07061CCAE1L, 0xD8F3B49CECA42A05L, 0xBD56BE3F51382F73L,
- 0x45FAED5843B0BB28L, 0x1C813D5C11BF1F83L, 0x8AF0E4B6D75FA169L,
- 0x33EE18A487AD9999L, 0x3C26E8EAB1C94410L, 0xB510102BC0A822F9L,
- 0x141EEF310CE6123BL, 0xFC65B90059DDB154L, 0xE0158640C5E0E607L,
- 0x884E079826C3A3CFL, 0x930D0D9523C535FDL, 0x35638D754E9A2B00L,
- 0x4085FCCF40469DD5L, 0xC4B17AD28BE23A4CL, 0xCAB2F0FC6A3E6A2EL,
- 0x2860971A6B943FCDL, 0x3DDE6EE212E30446L, 0x6222F32AE01765AEL,
- 0x5D550BB5478308FEL, 0xA9EFA98DA0EDA22AL, 0xC351A71686C40DA7L,
- 0x1105586D9C867C84L, 0xDCFFEE85FDA22853L, 0xCCFBD0262C5EEF76L,
- 0xBAF294CB8990D201L, 0xE69464F52AFAD975L, 0x94B013AFDF133E14L,
- 0x06A7D1A32823C958L, 0x6F95FE5130F61119L, 0xD92AB34E462C06C0L,
- 0xED7BDE33887C71D2L, 0x79746D6E6518393EL, 0x5BA419385D713329L,
- 0x7C1BA6B948A97564L, 0x31987C197BFDAC67L, 0xDE6C23C44B053D02L,
- 0x581C49FED002D64DL, 0xDD474D6338261571L, 0xAA4546C3E473D062L,
- 0x928FCE349455F860L, 0x48161BBACAAB94D9L, 0x63912430770E6F68L,
- 0x6EC8A5E602C6641CL, 0x87282515337DDD2BL, 0x2CDA6B42034B701BL,
- 0xB03D37C181CB096DL, 0xE108438266C71C6FL, 0x2B3180C7EB51B255L,
- 0xDF92B82F96C08BBCL, 0x5C68C8C0A632F3BAL, 0x5504CC861C3D0556L,
- 0xABBFA4E55FB26B8FL, 0x41848B0AB3BACEB4L, 0xB334A273AA445D32L,
- 0xBCA696F0A85AD881L, 0x24F6EC65B528D56CL, 0x0CE1512E90F4524AL,
- 0x4E9DD79D5506D35AL, 0x258905FAC6CE9779L, 0x2019295B3E109B33L,
- 0xF8A9478B73A054CCL, 0x2924F2F934417EB0L, 0x3993357D536D1BC4L,
- 0x38A81AC21DB6FF8BL, 0x47C4FBF17D6016BFL, 0x1E0FAADD7667E3F5L,
- 0x7ABCFF62938BEB96L, 0xA78DAD948FC179C9L, 0x8F1F98B72911E50DL,
- 0x61E48EAE27121A91L, 0x4D62F7AD31859808L, 0xECEBA345EF5CEAEBL,
- 0xF5CEB25EBC9684CEL, 0xF633E20CB7F76221L, 0xA32CDF06AB8293E4L,
- 0x985A202CA5EE2CA4L, 0xCF0B8447CC8A8FB1L, 0x9F765244979859A3L,
- 0xA8D516B1A1240017L, 0x0BD7BA3EBB5DC726L, 0xE54BCA55B86ADB39L,
- 0x1D7A3AFD6C478063L, 0x519EC608E7669EDDL, 0x0E5715A2D149AA23L,
- 0x177D4571848FF194L, 0xEEB55F3241014C22L, 0x0F5E5CA13A6E2EC2L,
- 0x8029927B75F5C361L, 0xAD139FABC3D6E436L, 0x0D5DF1A94CCF402FL,
- 0x3E8BD948BEA5DFC8L, 0xA5A0D357BD3FF77EL, 0xA2D12E251F74F645L,
- 0x66FD9E525E81A082L, 0x2E0C90CE7F687A49L, 0xC2E8BCBEBA973BC5L,
- 0x000001BCE509745FL, 0x423777BBE6DAB3D6L, 0xD1661C7EAEF06EB5L,
- 0xA1781F354DAACFD8L, 0x2D11284A2B16AFFCL, 0xF1FC4F67FA891D1FL,
- 0x73ECC25DCB920ADAL, 0xAE610C22C2A12651L, 0x96E0A810D356B78AL,
- 0x5A9A381F2FE7870FL, 0xD5AD62EDE94E5530L, 0xD225E5E8368D1427L,
- 0x65977B70C7AF4631L, 0x99F889B2DE39D74FL, 0x233F30BF54E1D143L,
- 0x9A9675D3D9A63C97L, 0x5470554FF334F9A8L, 0x166ACB744A4F5688L,
- 0x70C74CAAB2E4AEADL, 0xF0D091646F294D12L, 0x57B82A89684031D1L,
- 0xEFD95A5A61BE0B6BL, 0x2FBD12E969F2F29AL, 0x9BD37013FEFF9FE8L,
- 0x3F9B0404D6085A06L, 0x4940C1F3166CFE15L, 0x09542C4DCDF3DEFBL,
- 0xB4C5218385CD5CE3L, 0xC935B7DC4462A641L, 0x3417F8A68ED3B63FL,
- 0xB80959295B215B40L, 0xF99CDAEF3B8C8572L, 0x018C0614F8FCB95DL,
- 0x1B14ACCD1A3ACDF3L, 0x84D471F200BB732DL, 0xC1A3110E95E8DA16L,
- 0x430A7220BF1A82B8L, 0xB77E090D39DF210EL, 0x5EF4BD9F3CD05E9DL,
- 0x9D4FF6DA7E57A444L, 0xDA1D60E183D4A5F8L, 0xB287C38417998E47L,
- 0xFE3EDC121BB31886L, 0xC7FE3CCC980CCBEFL, 0xE46FB590189BFD03L,
- 0x3732FD469A4C57DCL, 0x7EF700A07CF1AD65L, 0x59C64468A31D8859L,
- 0x762FB0B4D45B61F6L, 0x155BAED099047718L, 0x68755E4C3D50BAA6L,
- 0xE9214E7F22D8B4DFL, 0x2ADDBF532EAC95F4L, 0x32AE3909B4BD0109L,
- 0x834DF537B08E3450L, 0xFA209DA84220728DL, 0x9E691D9B9EFE23F7L,
- 0x0446D288C4AE8D7FL, 0x7B4CC524E169785BL, 0x21D87F0135CA1385L,
- 0xCEBB400F137B8AA5L, 0x272E2B66580796BEL, 0x3612264125C2B0DEL,
- 0x057702BDAD1EFBB2L, 0xD4BABB8EACF84BE9L, 0x91583139641BC67BL,
- 0x8BDC2DE08036E024L, 0x603C8156F49F68EDL, 0xF7D236F7DBEF5111L,
- 0x9727C4598AD21E80L, 0xA08A0896670A5FD7L, 0xCB4A8F4309EBA9CBL,
- 0x81AF564B0F7036A1L, 0xC0B99AA778199ABDL, 0x959F1EC83FC8E952L,
- 0x8C505077794A81B9L, 0x3ACAAF8F056338F0L, 0x07B43F50627A6778L,
- 0x4A44AB49F5ECCC77L, 0x3BC3D6E4B679EE98L, 0x9CC0D4D1CF14108CL,
- 0x4406C00B206BC8A0L, 0x82A18854C8D72D89L, 0x67E366B35C3C432CL,
- 0xB923DD61102B37F2L, 0x56AB2779D884271DL, 0xBE83E1B0FF1525AFL,
- 0xFB7C65D4217E49A9L, 0x6BDBE0E76D48E7D4L, 0x08DF828745D9179EL,
- 0x22EA6A9ADD53BD34L, 0xE36E141C5622200AL, 0x7F805D1B8CB750EEL,
- 0xAFE5C7A59F58E837L, 0xE27F996A4FB1C23CL, 0xD3867DFB0775F0D0L,
- 0xD0E673DE6E88891AL, 0x123AEB9EAFB86C25L, 0x30F1D5D5C145B895L,
- 0xBB434A2DEE7269E7L, 0x78CB67ECF931FA38L, 0xF33B0372323BBF9CL,
- 0x52D66336FB279C74L, 0x505F33AC0AFB4EAAL, 0xE8A5CD99A2CCE187L,
- 0x534974801E2D30BBL, 0x8D2D5711D5876D90L, 0x1F1A412891BC038EL,
- 0xD6E2E71D82E56648L, 0x74036C3A497732B7L, 0x89B67ED96361F5ABL,
- 0xFFED95D8F1EA02A2L, 0xE72B3BD61464D43DL, 0xA6300F170BDC4820L,
- 0xEBC18760ED78A77AL };
-
- /** S-Box T2. */
- private static final long[] T2 = {
- 0xE6A6BE5A05A12138L, 0xB5A122A5B4F87C98L, 0x563C6089140B6990L,
- 0x4C46CB2E391F5DD5L, 0xD932ADDBC9B79434L, 0x08EA70E42015AFF5L,
- 0xD765A6673E478CF1L, 0xC4FB757EAB278D99L, 0xDF11C6862D6E0692L,
- 0xDDEB84F10D7F3B16L, 0x6F2EF604A665EA04L, 0x4A8E0F0FF0E0DFB3L,
- 0xA5EDEEF83DBCBA51L, 0xFC4F0A2A0EA4371EL, 0xE83E1DA85CB38429L,
- 0xDC8FF882BA1B1CE2L, 0xCD45505E8353E80DL, 0x18D19A00D4DB0717L,
- 0x34A0CFEDA5F38101L, 0x0BE77E518887CAF2L, 0x1E341438B3C45136L,
- 0xE05797F49089CCF9L, 0xFFD23F9DF2591D14L, 0x543DDA228595C5CDL,
- 0x661F81FD99052A33L, 0x8736E641DB0F7B76L, 0x15227725418E5307L,
- 0xE25F7F46162EB2FAL, 0x48A8B2126C13D9FEL, 0xAFDC541792E76EEAL,
- 0x03D912BFC6D1898FL, 0x31B1AAFA1B83F51BL, 0xF1AC2796E42AB7D9L,
- 0x40A3A7D7FCD2EBACL, 0x1056136D0AFBBCC5L, 0x7889E1DD9A6D0C85L,
- 0xD33525782A7974AAL, 0xA7E25D09078AC09BL, 0xBD4138B3EAC6EDD0L,
- 0x920ABFBE71EB9E70L, 0xA2A5D0F54FC2625CL, 0xC054E36B0B1290A3L,
- 0xF6DD59FF62FE932BL, 0x3537354511A8AC7DL, 0xCA845E9172FADCD4L,
- 0x84F82B60329D20DCL, 0x79C62CE1CD672F18L, 0x8B09A2ADD124642CL,
- 0xD0C1E96A19D9E726L, 0x5A786A9B4BA9500CL, 0x0E020336634C43F3L,
- 0xC17B474AEB66D822L, 0x6A731AE3EC9BAAC2L, 0x8226667AE0840258L,
- 0x67D4567691CAECA5L, 0x1D94155C4875ADB5L, 0x6D00FD985B813FDFL,
- 0x51286EFCB774CD06L, 0x5E8834471FA744AFL, 0xF72CA0AEE761AE2EL,
- 0xBE40E4CDAEE8E09AL, 0xE9970BBB5118F665L, 0x726E4BEB33DF1964L,
- 0x703B000729199762L, 0x4631D816F5EF30A7L, 0xB880B5B51504A6BEL,
- 0x641793C37ED84B6CL, 0x7B21ED77F6E97D96L, 0x776306312EF96B73L,
- 0xAE528948E86FF3F4L, 0x53DBD7F286A3F8F8L, 0x16CADCE74CFC1063L,
- 0x005C19BDFA52C6DDL, 0x68868F5D64D46AD3L, 0x3A9D512CCF1E186AL,
- 0x367E62C2385660AEL, 0xE359E7EA77DCB1D7L, 0x526C0773749ABE6EL,
- 0x735AE5F9D09F734BL, 0x493FC7CC8A558BA8L, 0xB0B9C1533041AB45L,
- 0x321958BA470A59BDL, 0x852DB00B5F46C393L, 0x91209B2BD336B0E5L,
- 0x6E604F7D659EF19FL, 0xB99A8AE2782CCB24L, 0xCCF52AB6C814C4C7L,
- 0x4727D9AFBE11727BL, 0x7E950D0C0121B34DL, 0x756F435670AD471FL,
- 0xF5ADD442615A6849L, 0x4E87E09980B9957AL, 0x2ACFA1DF50AEE355L,
- 0xD898263AFD2FD556L, 0xC8F4924DD80C8FD6L, 0xCF99CA3D754A173AL,
- 0xFE477BACAF91BF3CL, 0xED5371F6D690C12DL, 0x831A5C285E687094L,
- 0xC5D3C90A3708A0A4L, 0x0F7F903717D06580L, 0x19F9BB13B8FDF27FL,
- 0xB1BD6F1B4D502843L, 0x1C761BA38FFF4012L, 0x0D1530C4E2E21F3BL,
- 0x8943CE69A7372C8AL, 0xE5184E11FEB5CE66L, 0x618BDB80BD736621L,
- 0x7D29BAD68B574D0BL, 0x81BB613E25E6FE5BL, 0x071C9C10BC07913FL,
- 0xC7BEEB7909AC2D97L, 0xC3E58D353BC5D757L, 0xEB017892F38F61E8L,
- 0xD4EFFB9C9B1CC21AL, 0x99727D26F494F7ABL, 0xA3E063A2956B3E03L,
- 0x9D4A8B9A4AA09C30L, 0x3F6AB7D500090FB4L, 0x9CC0F2A057268AC0L,
- 0x3DEE9D2DEDBF42D1L, 0x330F49C87960A972L, 0xC6B2720287421B41L,
- 0x0AC59EC07C00369CL, 0xEF4EAC49CB353425L, 0xF450244EEF0129D8L,
- 0x8ACC46E5CAF4DEB6L, 0x2FFEAB63989263F7L, 0x8F7CB9FE5D7A4578L,
- 0x5BD8F7644E634635L, 0x427A7315BF2DC900L, 0x17D0C4AA2125261CL,
- 0x3992486C93518E50L, 0xB4CBFEE0A2D7D4C3L, 0x7C75D6202C5DDD8DL,
- 0xDBC295D8E35B6C61L, 0x60B369D302032B19L, 0xCE42685FDCE44132L,
- 0x06F3DDB9DDF65610L, 0x8EA4D21DB5E148F0L, 0x20B0FCE62FCD496FL,
- 0x2C1B912358B0EE31L, 0xB28317B818F5A308L, 0xA89C1E189CA6D2CFL,
- 0x0C6B18576AAADBC8L, 0xB65DEAA91299FAE3L, 0xFB2B794B7F1027E7L,
- 0x04E4317F443B5BEBL, 0x4B852D325939D0A6L, 0xD5AE6BEEFB207FFCL,
- 0x309682B281C7D374L, 0xBAE309A194C3B475L, 0x8CC3F97B13B49F05L,
- 0x98A9422FF8293967L, 0x244B16B01076FF7CL, 0xF8BF571C663D67EEL,
- 0x1F0D6758EEE30DA1L, 0xC9B611D97ADEB9B7L, 0xB7AFD5887B6C57A2L,
- 0x6290AE846B984FE1L, 0x94DF4CDEACC1A5FDL, 0x058A5BD1C5483AFFL,
- 0x63166CC142BA3C37L, 0x8DB8526EB2F76F40L, 0xE10880036F0D6D4EL,
- 0x9E0523C9971D311DL, 0x45EC2824CC7CD691L, 0x575B8359E62382C9L,
- 0xFA9E400DC4889995L, 0xD1823ECB45721568L, 0xDAFD983B8206082FL,
- 0xAA7D29082386A8CBL, 0x269FCD4403B87588L, 0x1B91F5F728BDD1E0L,
- 0xE4669F39040201F6L, 0x7A1D7C218CF04ADEL, 0x65623C29D79CE5CEL,
- 0x2368449096C00BB1L, 0xAB9BF1879DA503BAL, 0xBC23ECB1A458058EL,
- 0x9A58DF01BB401ECCL, 0xA070E868A85F143DL, 0x4FF188307DF2239EL,
- 0x14D565B41A641183L, 0xEE13337452701602L, 0x950E3DCF3F285E09L,
- 0x59930254B9C80953L, 0x3BF299408930DA6DL, 0xA955943F53691387L,
- 0xA15EDECAA9CB8784L, 0x29142127352BE9A0L, 0x76F0371FFF4E7AFBL,
- 0x0239F450274F2228L, 0xBB073AF01D5E868BL, 0xBFC80571C10E96C1L,
- 0xD267088568222E23L, 0x9671A3D48E80B5B0L, 0x55B5D38AE193BB81L,
- 0x693AE2D0A18B04B8L, 0x5C48B4ECADD5335FL, 0xFD743B194916A1CAL,
- 0x2577018134BE98C4L, 0xE77987E83C54A4ADL, 0x28E11014DA33E1B9L,
- 0x270CC59E226AA213L, 0x71495F756D1A5F60L, 0x9BE853FB60AFEF77L,
- 0xADC786A7F7443DBFL, 0x0904456173B29A82L, 0x58BC7A66C232BD5EL,
- 0xF306558C673AC8B2L, 0x41F639C6B6C9772AL, 0x216DEFE99FDA35DAL,
- 0x11640CC71C7BE615L, 0x93C43694565C5527L, 0xEA038E6246777839L,
- 0xF9ABF3CE5A3E2469L, 0x741E768D0FD312D2L, 0x0144B883CED652C6L,
- 0xC20B5A5BA33F8552L, 0x1AE69633C3435A9DL, 0x97A28CA4088CFDECL,
- 0x8824A43C1E96F420L, 0x37612FA66EEEA746L, 0x6B4CB165F9CF0E5AL,
- 0x43AA1C06A0ABFB4AL, 0x7F4DC26FF162796BL, 0x6CBACC8E54ED9B0FL,
- 0xA6B7FFEFD2BB253EL, 0x2E25BC95B0A29D4FL, 0x86D6A58BDEF1388CL,
- 0xDED74AC576B6F054L, 0x8030BDBC2B45805DL, 0x3C81AF70E94D9289L,
- 0x3EFF6DDA9E3100DBL, 0xB38DC39FDFCC8847L, 0x123885528D17B87EL,
- 0xF2DA0ED240B1B642L, 0x44CEFADCD54BF9A9L, 0x1312200E433C7EE6L,
- 0x9FFCC84F3A78C748L, 0xF0CD1F72248576BBL, 0xEC6974053638CFE4L,
- 0x2BA7B67C0CEC4E4CL, 0xAC2F4DF3E5CE32EDL, 0xCB33D14326EA4C11L,
- 0xA4E9044CC77E58BCL, 0x5F513293D934FCEFL, 0x5DC9645506E55444L,
- 0x50DE418F317DE40AL, 0x388CB31A69DDE259L, 0x2DB4A83455820A86L,
- 0x9010A91E84711AE9L, 0x4DF7F0B7B1498371L, 0xD62A2EABC0977179L,
- 0x22FAC097AA8D5C0EL };
-
- /** S-Box T3. */
- private static final long[] T3 = {
- 0xF49FCC2FF1DAF39BL, 0x487FD5C66FF29281L, 0xE8A30667FCDCA83FL,
- 0x2C9B4BE3D2FCCE63L, 0xDA3FF74B93FBBBC2L, 0x2FA165D2FE70BA66L,
- 0xA103E279970E93D4L, 0xBECDEC77B0E45E71L, 0xCFB41E723985E497L,
- 0xB70AAA025EF75017L, 0xD42309F03840B8E0L, 0x8EFC1AD035898579L,
- 0x96C6920BE2B2ABC5L, 0x66AF4163375A9172L, 0x2174ABDCCA7127FBL,
- 0xB33CCEA64A72FF41L, 0xF04A4933083066A5L, 0x8D970ACDD7289AF5L,
- 0x8F96E8E031C8C25EL, 0xF3FEC02276875D47L, 0xEC7BF310056190DDL,
- 0xF5ADB0AEBB0F1491L, 0x9B50F8850FD58892L, 0x4975488358B74DE8L,
- 0xA3354FF691531C61L, 0x0702BBE481D2C6EEL, 0x89FB24057DEDED98L,
- 0xAC3075138596E902L, 0x1D2D3580172772EDL, 0xEB738FC28E6BC30DL,
- 0x5854EF8F63044326L, 0x9E5C52325ADD3BBEL, 0x90AA53CF325C4623L,
- 0xC1D24D51349DD067L, 0x2051CFEEA69EA624L, 0x13220F0A862E7E4FL,
- 0xCE39399404E04864L, 0xD9C42CA47086FCB7L, 0x685AD2238A03E7CCL,
- 0x066484B2AB2FF1DBL, 0xFE9D5D70EFBF79ECL, 0x5B13B9DD9C481854L,
- 0x15F0D475ED1509ADL, 0x0BEBCD060EC79851L, 0xD58C6791183AB7F8L,
- 0xD1187C5052F3EEE4L, 0xC95D1192E54E82FFL, 0x86EEA14CB9AC6CA2L,
- 0x3485BEB153677D5DL, 0xDD191D781F8C492AL, 0xF60866BAA784EBF9L,
- 0x518F643BA2D08C74L, 0x8852E956E1087C22L, 0xA768CB8DC410AE8DL,
- 0x38047726BFEC8E1AL, 0xA67738B4CD3B45AAL, 0xAD16691CEC0DDE19L,
- 0xC6D4319380462E07L, 0xC5A5876D0BA61938L, 0x16B9FA1FA58FD840L,
- 0x188AB1173CA74F18L, 0xABDA2F98C99C021FL, 0x3E0580AB134AE816L,
- 0x5F3B05B773645ABBL, 0x2501A2BE5575F2F6L, 0x1B2F74004E7E8BA9L,
- 0x1CD7580371E8D953L, 0x7F6ED89562764E30L, 0xB15926FF596F003DL,
- 0x9F65293DA8C5D6B9L, 0x6ECEF04DD690F84CL, 0x4782275FFF33AF88L,
- 0xE41433083F820801L, 0xFD0DFE409A1AF9B5L, 0x4325A3342CDB396BL,
- 0x8AE77E62B301B252L, 0xC36F9E9F6655615AL, 0x85455A2D92D32C09L,
- 0xF2C7DEA949477485L, 0x63CFB4C133A39EBAL, 0x83B040CC6EBC5462L,
- 0x3B9454C8FDB326B0L, 0x56F56A9E87FFD78CL, 0x2DC2940D99F42BC6L,
- 0x98F7DF096B096E2DL, 0x19A6E01E3AD852BFL, 0x42A99CCBDBD4B40BL,
- 0xA59998AF45E9C559L, 0x366295E807D93186L, 0x6B48181BFAA1F773L,
- 0x1FEC57E2157A0A1DL, 0x4667446AF6201AD5L, 0xE615EBCACFB0F075L,
- 0xB8F31F4F68290778L, 0x22713ED6CE22D11EL, 0x3057C1A72EC3C93BL,
- 0xCB46ACC37C3F1F2FL, 0xDBB893FD02AAF50EL, 0x331FD92E600B9FCFL,
- 0xA498F96148EA3AD6L, 0xA8D8426E8B6A83EAL, 0xA089B274B7735CDCL,
- 0x87F6B3731E524A11L, 0x118808E5CBC96749L, 0x9906E4C7B19BD394L,
- 0xAFED7F7E9B24A20CL, 0x6509EADEEB3644A7L, 0x6C1EF1D3E8EF0EDEL,
- 0xB9C97D43E9798FB4L, 0xA2F2D784740C28A3L, 0x7B8496476197566FL,
- 0x7A5BE3E6B65F069DL, 0xF96330ED78BE6F10L, 0xEEE60DE77A076A15L,
- 0x2B4BEE4AA08B9BD0L, 0x6A56A63EC7B8894EL, 0x02121359BA34FEF4L,
- 0x4CBF99F8283703FCL, 0x398071350CAF30C8L, 0xD0A77A89F017687AL,
- 0xF1C1A9EB9E423569L, 0x8C7976282DEE8199L, 0x5D1737A5DD1F7ABDL,
- 0x4F53433C09A9FA80L, 0xFA8B0C53DF7CA1D9L, 0x3FD9DCBC886CCB77L,
- 0xC040917CA91B4720L, 0x7DD00142F9D1DCDFL, 0x8476FC1D4F387B58L,
- 0x23F8E7C5F3316503L, 0x032A2244E7E37339L, 0x5C87A5D750F5A74BL,
- 0x082B4CC43698992EL, 0xDF917BECB858F63CL, 0x3270B8FC5BF86DDAL,
- 0x10AE72BB29B5DD76L, 0x576AC94E7700362BL, 0x1AD112DAC61EFB8FL,
- 0x691BC30EC5FAA427L, 0xFF246311CC327143L, 0x3142368E30E53206L,
- 0x71380E31E02CA396L, 0x958D5C960AAD76F1L, 0xF8D6F430C16DA536L,
- 0xC8FFD13F1BE7E1D2L, 0x7578AE66004DDBE1L, 0x05833F01067BE646L,
- 0xBB34B5AD3BFE586DL, 0x095F34C9A12B97F0L, 0x247AB64525D60CA8L,
- 0xDCDBC6F3017477D1L, 0x4A2E14D4DECAD24DL, 0xBDB5E6D9BE0A1EEBL,
- 0x2A7E70F7794301ABL, 0xDEF42D8A270540FDL, 0x01078EC0A34C22C1L,
- 0xE5DE511AF4C16387L, 0x7EBB3A52BD9A330AL, 0x77697857AA7D6435L,
- 0x004E831603AE4C32L, 0xE7A21020AD78E312L, 0x9D41A70C6AB420F2L,
- 0x28E06C18EA1141E6L, 0xD2B28CBD984F6B28L, 0x26B75F6C446E9D83L,
- 0xBA47568C4D418D7FL, 0xD80BADBFE6183D8EL, 0x0E206D7F5F166044L,
- 0xE258A43911CBCA3EL, 0x723A1746B21DC0BCL, 0xC7CAA854F5D7CDD3L,
- 0x7CAC32883D261D9CL, 0x7690C26423BA942CL, 0x17E55524478042B8L,
- 0xE0BE477656A2389FL, 0x4D289B5E67AB2DA0L, 0x44862B9C8FBBFD31L,
- 0xB47CC8049D141365L, 0x822C1B362B91C793L, 0x4EB14655FB13DFD8L,
- 0x1ECBBA0714E2A97BL, 0x6143459D5CDE5F14L, 0x53A8FBF1D5F0AC89L,
- 0x97EA04D81C5E5B00L, 0x622181A8D4FDB3F3L, 0xE9BCD341572A1208L,
- 0x1411258643CCE58AL, 0x9144C5FEA4C6E0A4L, 0x0D33D06565CF620FL,
- 0x54A48D489F219CA1L, 0xC43E5EAC6D63C821L, 0xA9728B3A72770DAFL,
- 0xD7934E7B20DF87EFL, 0xE35503B61A3E86E5L, 0xCAE321FBC819D504L,
- 0x129A50B3AC60BFA6L, 0xCD5E68EA7E9FB6C3L, 0xB01C90199483B1C7L,
- 0x3DE93CD5C295376CL, 0xAED52EDF2AB9AD13L, 0x2E60F512C0A07884L,
- 0xBC3D86A3E36210C9L, 0x35269D9B163951CEL, 0x0C7D6E2AD0CDB5FAL,
- 0x59E86297D87F5733L, 0x298EF221898DB0E7L, 0x55000029D1A5AA7EL,
- 0x8BC08AE1B5061B45L, 0xC2C31C2B6C92703AL, 0x94CC596BAF25EF42L,
- 0x0A1D73DB22540456L, 0x04B6A0F9D9C4179AL, 0xEFFDAFA2AE3D3C60L,
- 0xF7C8075BB49496C4L, 0x9CC5C7141D1CD4E3L, 0x78BD1638218E5534L,
- 0xB2F11568F850246AL, 0xEDFABCFA9502BC29L, 0x796CE5F2DA23051BL,
- 0xAAE128B0DC93537CL, 0x3A493DA0EE4B29AEL, 0xB5DF6B2C416895D7L,
- 0xFCABBD25122D7F37L, 0x70810B58105DC4B1L, 0xE10FDD37F7882A90L,
- 0x524DCAB5518A3F5CL, 0x3C9E85878451255BL, 0x4029828119BD34E2L,
- 0x74A05B6F5D3CECCBL, 0xB610021542E13ECAL, 0x0FF979D12F59E2ACL,
- 0x6037DA27E4F9CC50L, 0x5E92975A0DF1847DL, 0xD66DE190D3E623FEL,
- 0x5032D6B87B568048L, 0x9A36B7CE8235216EL, 0x80272A7A24F64B4AL,
- 0x93EFED8B8C6916F7L, 0x37DDBFF44CCE1555L, 0x4B95DB5D4B99BD25L,
- 0x92D3FDA169812FC0L, 0xFB1A4A9A90660BB6L, 0x730C196946A4B9B2L,
- 0x81E289AA7F49DA68L, 0x64669A0F83B1A05FL, 0x27B3FF7D9644F48BL,
- 0xCC6B615C8DB675B3L, 0x674F20B9BCEBBE95L, 0x6F31238275655982L,
- 0x5AE488713E45CF05L, 0xBF619F9954C21157L, 0xEABAC46040A8EAE9L,
- 0x454C6FE9F2C0C1CDL, 0x419CF6496412691CL, 0xD3DC3BEF265B0F70L,
- 0x6D0E60F5C3578A9EL };
-
- /** S-Box T4. */
- private static final long[] T4 = {
- 0x5B0E608526323C55L, 0x1A46C1A9FA1B59F5L, 0xA9E245A17C4C8FFAL,
- 0x65CA5159DB2955D7L, 0x05DB0A76CE35AFC2L, 0x81EAC77EA9113D45L,
- 0x528EF88AB6AC0A0DL, 0xA09EA253597BE3FFL, 0x430DDFB3AC48CD56L,
- 0xC4B3A67AF45CE46FL, 0x4ECECFD8FBE2D05EL, 0x3EF56F10B39935F0L,
- 0x0B22D6829CD619C6L, 0x17FD460A74DF2069L, 0x6CF8CC8E8510ED40L,
- 0xD6C824BF3A6ECAA7L, 0x61243D581A817049L, 0x048BACB6BBC163A2L,
- 0xD9A38AC27D44CC32L, 0x7FDDFF5BAAF410ABL, 0xAD6D495AA804824BL,
- 0xE1A6A74F2D8C9F94L, 0xD4F7851235DEE8E3L, 0xFD4B7F886540D893L,
- 0x247C20042AA4BFDAL, 0x096EA1C517D1327CL, 0xD56966B4361A6685L,
- 0x277DA5C31221057DL, 0x94D59893A43ACFF7L, 0x64F0C51CCDC02281L,
- 0x3D33BCC4FF6189DBL, 0xE005CB184CE66AF1L, 0xFF5CCD1D1DB99BEAL,
- 0xB0B854A7FE42980FL, 0x7BD46A6A718D4B9FL, 0xD10FA8CC22A5FD8CL,
- 0xD31484952BE4BD31L, 0xC7FA975FCB243847L, 0x4886ED1E5846C407L,
- 0x28CDDB791EB70B04L, 0xC2B00BE2F573417FL, 0x5C9590452180F877L,
- 0x7A6BDDFFF370EB00L, 0xCE509E38D6D9D6A4L, 0xEBEB0F00647FA702L,
- 0x1DCC06CF76606F06L, 0xE4D9F28BA286FF0AL, 0xD85A305DC918C262L,
- 0x475B1D8732225F54L, 0x2D4FB51668CCB5FEL, 0xA679B9D9D72BBA20L,
- 0x53841C0D912D43A5L, 0x3B7EAA48BF12A4E8L, 0x781E0E47F22F1DDFL,
- 0xEFF20CE60AB50973L, 0x20D261D19DFFB742L, 0x16A12B03062A2E39L,
- 0x1960EB2239650495L, 0x251C16FED50EB8B8L, 0x9AC0C330F826016EL,
- 0xED152665953E7671L, 0x02D63194A6369570L, 0x5074F08394B1C987L,
- 0x70BA598C90B25CE1L, 0x794A15810B9742F6L, 0x0D5925E9FCAF8C6CL,
- 0x3067716CD868744EL, 0x910AB077E8D7731BL, 0x6A61BBDB5AC42F61L,
- 0x93513EFBF0851567L, 0xF494724B9E83E9D5L, 0xE887E1985C09648DL,
- 0x34B1D3C675370CFDL, 0xDC35E433BC0D255DL, 0xD0AAB84234131BE0L,
- 0x08042A50B48B7EAFL, 0x9997C4EE44A3AB35L, 0x829A7B49201799D0L,
- 0x263B8307B7C54441L, 0x752F95F4FD6A6CA6L, 0x927217402C08C6E5L,
- 0x2A8AB754A795D9EEL, 0xA442F7552F72943DL, 0x2C31334E19781208L,
- 0x4FA98D7CEAEE6291L, 0x55C3862F665DB309L, 0xBD0610175D53B1F3L,
- 0x46FE6CB840413F27L, 0x3FE03792DF0CFA59L, 0xCFE700372EB85E8FL,
- 0xA7BE29E7ADBCE118L, 0xE544EE5CDE8431DDL, 0x8A781B1B41F1873EL,
- 0xA5C94C78A0D2F0E7L, 0x39412E2877B60728L, 0xA1265EF3AFC9A62CL,
- 0xBCC2770C6A2506C5L, 0x3AB66DD5DCE1CE12L, 0xE65499D04A675B37L,
- 0x7D8F523481BFD216L, 0x0F6F64FCEC15F389L, 0x74EFBE618B5B13C8L,
- 0xACDC82B714273E1DL, 0xDD40BFE003199D17L, 0x37E99257E7E061F8L,
- 0xFA52626904775AAAL, 0x8BBBF63A463D56F9L, 0xF0013F1543A26E64L,
- 0xA8307E9F879EC898L, 0xCC4C27A4150177CCL, 0x1B432F2CCA1D3348L,
- 0xDE1D1F8F9F6FA013L, 0x606602A047A7DDD6L, 0xD237AB64CC1CB2C7L,
- 0x9B938E7225FCD1D3L, 0xEC4E03708E0FF476L, 0xFEB2FBDA3D03C12DL,
- 0xAE0BCED2EE43889AL, 0x22CB8923EBFB4F43L, 0x69360D013CF7396DL,
- 0x855E3602D2D4E022L, 0x073805BAD01F784CL, 0x33E17A133852F546L,
- 0xDF4874058AC7B638L, 0xBA92B29C678AA14AL, 0x0CE89FC76CFAADCDL,
- 0x5F9D4E0908339E34L, 0xF1AFE9291F5923B9L, 0x6E3480F60F4A265FL,
- 0xEEBF3A2AB29B841CL, 0xE21938A88F91B4ADL, 0x57DFEFF845C6D3C3L,
- 0x2F006B0BF62CAAF2L, 0x62F479EF6F75EE78L, 0x11A55AD41C8916A9L,
- 0xF229D29084FED453L, 0x42F1C27B16B000E6L, 0x2B1F76749823C074L,
- 0x4B76ECA3C2745360L, 0x8C98F463B91691BDL, 0x14BCC93CF1ADE66AL,
- 0x8885213E6D458397L, 0x8E177DF0274D4711L, 0xB49B73B5503F2951L,
- 0x10168168C3F96B6BL, 0x0E3D963B63CAB0AEL, 0x8DFC4B5655A1DB14L,
- 0xF789F1356E14DE5CL, 0x683E68AF4E51DAC1L, 0xC9A84F9D8D4B0FD9L,
- 0x3691E03F52A0F9D1L, 0x5ED86E46E1878E80L, 0x3C711A0E99D07150L,
- 0x5A0865B20C4E9310L, 0x56FBFC1FE4F0682EL, 0xEA8D5DE3105EDF9BL,
- 0x71ABFDB12379187AL, 0x2EB99DE1BEE77B9CL, 0x21ECC0EA33CF4523L,
- 0x59A4D7521805C7A1L, 0x3896F5EB56AE7C72L, 0xAA638F3DB18F75DCL,
- 0x9F39358DABE9808EL, 0xB7DEFA91C00B72ACL, 0x6B5541FD62492D92L,
- 0x6DC6DEE8F92E4D5BL, 0x353F57ABC4BEEA7EL, 0x735769D6DA5690CEL,
- 0x0A234AA642391484L, 0xF6F9508028F80D9DL, 0xB8E319A27AB3F215L,
- 0x31AD9C1151341A4DL, 0x773C22A57BEF5805L, 0x45C7561A07968633L,
- 0xF913DA9E249DBE36L, 0xDA652D9B78A64C68L, 0x4C27A97F3BC334EFL,
- 0x76621220E66B17F4L, 0x967743899ACD7D0BL, 0xF3EE5BCAE0ED6782L,
- 0x409F753600C879FCL, 0x06D09A39B5926DB6L, 0x6F83AEB0317AC588L,
- 0x01E6CA4A86381F21L, 0x66FF3462D19F3025L, 0x72207C24DDFD3BFBL,
- 0x4AF6B6D3E2ECE2EBL, 0x9C994DBEC7EA08DEL, 0x49ACE597B09A8BC4L,
- 0xB38C4766CF0797BAL, 0x131B9373C57C2A75L, 0xB1822CCE61931E58L,
- 0x9D7555B909BA1C0CL, 0x127FAFDD937D11D2L, 0x29DA3BADC66D92E4L,
- 0xA2C1D57154C2ECBCL, 0x58C5134D82F6FE24L, 0x1C3AE3515B62274FL,
- 0xE907C82E01CB8126L, 0xF8ED091913E37FCBL, 0x3249D8F9C80046C9L,
- 0x80CF9BEDE388FB63L, 0x1881539A116CF19EL, 0x5103F3F76BD52457L,
- 0x15B7E6F5AE47F7A8L, 0xDBD7C6DED47E9CCFL, 0x44E55C410228BB1AL,
- 0xB647D4255EDB4E99L, 0x5D11882BB8AAFC30L, 0xF5098BBB29D3212AL,
- 0x8FB5EA14E90296B3L, 0x677B942157DD025AL, 0xFB58E7C0A390ACB5L,
- 0x89D3674C83BD4A01L, 0x9E2DA4DF4BF3B93BL, 0xFCC41E328CAB4829L,
- 0x03F38C96BA582C52L, 0xCAD1BDBD7FD85DB2L, 0xBBB442C16082AE83L,
- 0xB95FE86BA5DA9AB0L, 0xB22E04673771A93FL, 0x845358C9493152D8L,
- 0xBE2A488697B4541EL, 0x95A2DC2DD38E6966L, 0xC02C11AC923C852BL,
- 0x2388B1990DF2A87BL, 0x7C8008FA1B4F37BEL, 0x1F70D0C84D54E503L,
- 0x5490ADEC7ECE57D4L, 0x002B3C27D9063A3AL, 0x7EAEA3848030A2BFL,
- 0xC602326DED2003C0L, 0x83A7287D69A94086L, 0xC57A5FCB30F57A8AL,
- 0xB56844E479EBE779L, 0xA373B40F05DCBCE9L, 0xD71A786E88570EE2L,
- 0x879CBACDBDE8F6A0L, 0x976AD1BCC164A32FL, 0xAB21E25E9666D78BL,
- 0x901063AAE5E5C33CL, 0x9818B34448698D90L, 0xE36487AE3E1E8ABBL,
- 0xAFBDF931893BDCB4L, 0x6345A0DC5FBBD519L, 0x8628FE269B9465CAL,
- 0x1E5D01603F9C51ECL, 0x4DE44006A15049B7L, 0xBF6C70E5F776CBB1L,
- 0x411218F2EF552BEDL, 0xCB0C0708705A36A3L, 0xE74D14754F986044L,
- 0xCD56D9430EA8280EL, 0xC12591D7535F5065L, 0xC83223F1720AEF96L,
- 0xC3A0396F7363A51FL };
-
- // The cached self-test result.
- private static Boolean valid;
-
- // The context.
- private long a, b, c;
-
- /**
- * Trivial 0-arguments constructor.
- */
- public Tiger()
- {
- super(Registry.TIGER_HASH, HASH_SIZE, BLOCK_SIZE);
- }
-
- /**
- * Private copying constructor for cloning.
- *
- * @param that The instance being cloned.
- */
- private Tiger(Tiger that)
- {
- this();
- this.a = that.a;
- this.b = that.b;
- this.c = that.c;
- this.count = that.count;
- this.buffer = (that.buffer != null) ? (byte[]) that.buffer.clone() : null;
- }
-
- public Object clone()
- {
- return new Tiger(this);
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new Tiger().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-
- protected byte[] padBuffer()
- {
- int n = (int)(count % BLOCK_SIZE);
- int padding = (n < 56) ? (56 - n) : (120 - n);
- byte[] pad = new byte[padding + 8];
- pad[0] = 1;
- long bits = count << 3;
- pad[padding++] = (byte) bits;
- pad[padding++] = (byte)(bits >>> 8);
- pad[padding++] = (byte)(bits >>> 16);
- pad[padding++] = (byte)(bits >>> 24);
- pad[padding++] = (byte)(bits >>> 32);
- pad[padding++] = (byte)(bits >>> 40);
- pad[padding++] = (byte)(bits >>> 48);
- pad[padding ] = (byte)(bits >>> 56);
- return pad;
- }
-
- protected byte[] getResult()
- {
- return new byte[] {
- (byte) a, (byte)(a >>> 8), (byte)(a >>> 16), (byte)(a >>> 24),
- (byte)(a >>> 32), (byte)(a >>> 40), (byte)(a >>> 48), (byte)(a >>> 56),
- (byte) b, (byte)(b >>> 8), (byte)(b >>> 16), (byte)(b >>> 24),
- (byte)(b >>> 32), (byte)(b >>> 40), (byte)(b >>> 48), (byte)(b >>> 56),
- (byte) c, (byte)(c >>> 8), (byte)(c >>> 16), (byte)(c >>> 24),
- (byte)(c >>> 32), (byte)(c >>> 40), (byte)(c >>> 48), (byte)(c >>> 56) };
- }
-
- protected void resetContext()
- {
- a = A;
- b = B;
- c = C;
- }
-
- protected void transform(byte[] in, int offset)
- {
- long x0, x1, x2, x3, x4, x5, x6, x7;
- x0 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x1 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x2 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x3 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x4 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x5 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x6 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset++] & 0xFF) << 56);
- x7 = ((long) in[offset++] & 0xFF)
- | ((long) (in[offset++] & 0xFF) << 8)
- | ((long) (in[offset++] & 0xFF) << 16)
- | ((long) (in[offset++] & 0xFF) << 24)
- | ((long) (in[offset++] & 0xFF) << 32)
- | ((long) (in[offset++] & 0xFF) << 40)
- | ((long) (in[offset++] & 0xFF) << 48)
- | ((long) (in[offset ] & 0xFF) << 56);
- // save_abc ::=
- long aa = a, bb = b, cc = c;
- // pass(aa, bb, cc, 5) ::=
- cc ^= x0;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 5;
- aa ^= x1;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 5;
- bb ^= x2;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 5;
- cc ^= x3;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 5;
- aa ^= x4;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 5;
- bb ^= x5;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 5;
- cc ^= x6;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 5;
- aa ^= x7;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 5;
- // key_schedule ::=
- x0 -= x7 ^ 0xA5A5A5A5A5A5A5A5L;
- x1 ^= x0;
- x2 += x1;
- x3 -= x2 ^ ((~x1) << 19);
- x4 ^= x3;
- x5 += x4;
- x6 -= x5 ^ ((~x4) >>> 23);
- x7 ^= x6;
- x0 += x7;
- x1 -= x0 ^ ((~x7) << 19);
- x2 ^= x1;
- x3 += x2;
- x4 -= x3 ^ ((~x2) >>> 23);
- x5 ^= x4;
- x6 += x5;
- x7 -= x6 ^ 0x0123456789ABCDEFL;
- // pass(cc, aa, bb, 7) ::=
- bb ^= x0;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 7;
- cc ^= x1;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 7;
- aa ^= x2;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 7;
- bb ^= x3;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 7;
- cc ^= x4;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 7;
- aa ^= x5;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 7;
- bb ^= x6;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 7;
- cc ^= x7;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 7;
- // key_schedule ::=
- x0 -= x7 ^ 0xA5A5A5A5A5A5A5A5L;
- x1 ^= x0;
- x2 += x1;
- x3 -= x2 ^ ((~x1) << 19);
- x4 ^= x3;
- x5 += x4;
- x6 -= x5 ^ ((~x4) >>> 23);
- x7 ^= x6;
- x0 += x7;
- x1 -= x0 ^ ((~x7) << 19);
- x2 ^= x1;
- x3 += x2;
- x4 -= x3 ^ ((~x2) >>> 23);
- x5 ^= x4;
- x6 += x5;
- x7 -= x6 ^ 0x0123456789ABCDEFL;
- // pass(bb,cc,aa,9) ::=
- aa ^= x0;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 9;
- bb ^= x1;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 9;
- cc ^= x2;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 9;
- aa ^= x3;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 9;
- bb ^= x4;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 9;
- cc ^= x5;
- aa -= T1[(int) cc & 0xff]
- ^ T2[(int)(cc >> 16) & 0xff]
- ^ T3[(int)(cc >> 32) & 0xff]
- ^ T4[(int)(cc >> 48) & 0xff];
- bb += T4[(int)(cc >> 8) & 0xff]
- ^ T3[(int)(cc >> 24) & 0xff]
- ^ T2[(int)(cc >> 40) & 0xff]
- ^ T1[(int)(cc >> 56) & 0xff];
- bb *= 9;
- aa ^= x6;
- bb -= T1[(int) aa & 0xff]
- ^ T2[(int)(aa >> 16) & 0xff]
- ^ T3[(int)(aa >> 32) & 0xff]
- ^ T4[(int)(aa >> 48) & 0xff];
- cc += T4[(int)(aa >> 8) & 0xff]
- ^ T3[(int)(aa >> 24) & 0xff]
- ^ T2[(int)(aa >> 40) & 0xff]
- ^ T1[(int)(aa >> 56) & 0xff];
- cc *= 9;
- bb ^= x7;
- cc -= T1[(int) bb & 0xff]
- ^ T2[(int)(bb >> 16) & 0xff]
- ^ T3[(int)(bb >> 32) & 0xff]
- ^ T4[(int)(bb >> 48) & 0xff];
- aa += T4[(int)(bb >> 8) & 0xff]
- ^ T3[(int)(bb >> 24) & 0xff]
- ^ T2[(int)(bb >> 40) & 0xff]
- ^ T1[(int)(bb >> 56) & 0xff];
- aa *= 9;
- // feedforward ::=
- a ^= aa;
- b = bb - b;
- c += cc;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/hash/Whirlpool.java b/libjava/classpath/gnu/java/security/hash/Whirlpool.java
deleted file mode 100644
index 29eed59..0000000
--- a/libjava/classpath/gnu/java/security/hash/Whirlpool.java
+++ /dev/null
@@ -1,610 +0,0 @@
-/* Whirlpool.java --
- Copyright (C) 2001, 2002, 2006, 2010 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.hash;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.Registry;
-import gnu.java.security.util.Util;
-
-import java.util.logging.Logger;
-
-/**
- * Whirlpool, a new 512-bit hashing function operating on messages less than
- * 2 ** 256 bits in length. The function structure is designed according to the
- * Wide Trail strategy and permits a wide variety of implementation trade-offs.
- * <p>
- * This implementation is of Whirlpool Version 3, described in [1] last revised
- * on May 24th, 2003.
- * <p>
- * <b>IMPORTANT</b>: This implementation is not thread-safe.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html">
- * The WHIRLPOOL Hashing Function</a>.<br>
- * <a href="mailto:paulo.barreto@terra.com.br">Paulo S.L.M. Barreto</a> and
- * <a href="mailto:vincent.rijmen@iaik.tugraz.at">Vincent Rijmen</a>.</li>
- * </ol>
- */
-public final class Whirlpool
- extends BaseHash
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(Whirlpool.class.getName()) : null;
-
- private static final int BLOCK_SIZE = 64; // inner block size in bytes
-
- /** The digest of the 0-bit long message. */
- private static final String DIGEST0 =
- "19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7"
- + "3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3";
-
- /** Default number of rounds. */
- private static final int R = 10;
-
- /** Whirlpool S-box; p. 19. */
- private static final String S_box = // p. 19 [WHIRLPOOL]
- "\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152"
- + "\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57"
- + "\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85"
- + "\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8"
- + "\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333"
- + "\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0"
- + "\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE"
- + "\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d"
- + "\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF"
- + "\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A"
- + "\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c"
- + "\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04"
- + "\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB"
- + "\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9"
- + "\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1"
- + "\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886";
-
- /** The 64-bit lookup tables; section 7.1 p. 13. */
- private static final long[] T0 = new long[256];
- private static final long[] T1 = new long[256];
- private static final long[] T2 = new long[256];
- private static final long[] T3 = new long[256];
- private static final long[] T4 = new long[256];
- private static final long[] T5 = new long[256];
- private static final long[] T6 = new long[256];
- private static final long[] T7 = new long[256];
-
- /** The round constants. */
- private static final long[] rc = new long[R];
-
- /** caches the result of the correctness test, once executed. */
- private static Boolean valid;
-
- /** The 512-bit context as 8 longs. */
- private long H0, H1, H2, H3, H4, H5, H6, H7;
-
- /** Work area for computing the round key schedule. */
- private long k00, k01, k02, k03, k04, k05, k06, k07;
- private long Kr0, Kr1, Kr2, Kr3, Kr4, Kr5, Kr6, Kr7;
-
- /** work area for transforming the 512-bit buffer. */
- private long n0, n1, n2, n3, n4, n5, n6, n7;
- private long nn0, nn1, nn2, nn3, nn4, nn5, nn6, nn7;
-
- /** work area for holding block cipher's intermediate values. */
- private long w0, w1, w2, w3, w4, w5, w6, w7;
-
- static
- {
- long time = System.currentTimeMillis();
- int ROOT = 0x11D; // para. 2.1 [WHIRLPOOL]
- int i, r, j;
- long s1, s2, s4, s5, s8, s9, t;
- char c;
- final byte[] S = new byte[256];
- for (i = 0; i < 256; i++)
- {
- c = S_box.charAt(i >>> 1);
-
- s1 = ((i & 1) == 0 ? c >>> 8 : c) & 0xFFL;
- s2 = s1 << 1;
- if (s2 > 0xFFL)
- s2 ^= ROOT;
-
- s4 = s2 << 1;
- if (s4 > 0xFFL)
- s4 ^= ROOT;
-
- s5 = s4 ^ s1;
- s8 = s4 << 1;
- if (s8 > 0xFFL)
- s8 ^= ROOT;
-
- s9 = s8 ^ s1;
-
- T0[i] = t = s1 << 56 | s1 << 48 | s4 << 40 | s1 << 32
- | s8 << 24 | s5 << 16 | s2 << 8 | s9;
- T1[i] = t >>> 8 | t << 56;
- T2[i] = t >>> 16 | t << 48;
- T3[i] = t >>> 24 | t << 40;
- T4[i] = t >>> 32 | t << 32;
- T5[i] = t >>> 40 | t << 24;
- T6[i] = t >>> 48 | t << 16;
- T7[i] = t >>> 56 | t << 8;
- }
- for (r = 0, i = 0; r < R; )
- rc[r++] = (T0[i++] & 0xFF00000000000000L)
- ^ (T1[i++] & 0x00FF000000000000L)
- ^ (T2[i++] & 0x0000FF0000000000L)
- ^ (T3[i++] & 0x000000FF00000000L)
- ^ (T4[i++] & 0x00000000FF000000L)
- ^ (T5[i++] & 0x0000000000FF0000L)
- ^ (T6[i++] & 0x000000000000FF00L)
- ^ (T7[i++] & 0x00000000000000FFL);
- time = System.currentTimeMillis() - time;
- if (Configuration.DEBUG)
- {
- log.fine("Static data");
- log.fine("T0[]:");
- CPStringBuilder sb;
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T0[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T1[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T1[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T2[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T2[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T3[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T3[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("\nT4[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T4[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T5[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T5[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T6[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T5[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("T7[]:");
- for (i = 0; i < 64; i++)
- {
- sb = new CPStringBuilder();
- for (j = 0; j < 4; j++)
- sb.append("0x").append(Util.toString(T5[i * 4 + j])).append(", ");
-
- log.fine(sb.toString());
- }
- log.fine("rc[]:");
- for (i = 0; i < R; i++)
- log.fine("0x" + Util.toString(rc[i]));
-
- log.fine("Total initialization time: " + time + " ms.");
- }
- }
-
- /** Trivial 0-arguments constructor. */
- public Whirlpool()
- {
- super(Registry.WHIRLPOOL_HASH, 20, BLOCK_SIZE);
- }
-
- /**
- * Private constructor for cloning purposes.
- *
- * @param md the instance to clone.
- */
- private Whirlpool(Whirlpool md)
- {
- this();
-
- this.H0 = md.H0;
- this.H1 = md.H1;
- this.H2 = md.H2;
- this.H3 = md.H3;
- this.H4 = md.H4;
- this.H5 = md.H5;
- this.H6 = md.H6;
- this.H7 = md.H7;
- this.count = md.count;
- this.buffer = (byte[]) md.buffer.clone();
- }
-
- public Object clone()
- {
- return (new Whirlpool(this));
- }
-
- protected void transform(byte[] in, int offset)
- {
- // apply mu to the input
- n0 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n1 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n2 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n3 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n4 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n5 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n6 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- n7 = (in[offset++] & 0xFFL) << 56
- | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40
- | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24
- | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8
- | (in[offset++] & 0xFFL);
- // transform K into the key schedule Kr; 0 <= r <= R
- k00 = H0;
- k01 = H1;
- k02 = H2;
- k03 = H3;
- k04 = H4;
- k05 = H5;
- k06 = H6;
- k07 = H7;
- nn0 = n0 ^ k00;
- nn1 = n1 ^ k01;
- nn2 = n2 ^ k02;
- nn3 = n3 ^ k03;
- nn4 = n4 ^ k04;
- nn5 = n5 ^ k05;
- nn6 = n6 ^ k06;
- nn7 = n7 ^ k07;
- // intermediate cipher output
- w0 = w1 = w2 = w3 = w4 = w5 = w6 = w7 = 0L;
- for (int r = 0; r < R; r++)
- {
- // 1. compute intermediate round key schedule by applying ro[rc]
- // to the previous round key schedule --rc being the round constant
- Kr0 = T0[(int)((k00 >> 56) & 0xFFL)]
- ^ T1[(int)((k07 >> 48) & 0xFFL)]
- ^ T2[(int)((k06 >> 40) & 0xFFL)]
- ^ T3[(int)((k05 >> 32) & 0xFFL)]
- ^ T4[(int)((k04 >> 24) & 0xFFL)]
- ^ T5[(int)((k03 >> 16) & 0xFFL)]
- ^ T6[(int)((k02 >> 8) & 0xFFL)]
- ^ T7[(int)( k01 & 0xFFL)] ^ rc[r];
- Kr1 = T0[(int)((k01 >> 56) & 0xFFL)]
- ^ T1[(int)((k00 >> 48) & 0xFFL)]
- ^ T2[(int)((k07 >> 40) & 0xFFL)]
- ^ T3[(int)((k06 >> 32) & 0xFFL)]
- ^ T4[(int)((k05 >> 24) & 0xFFL)]
- ^ T5[(int)((k04 >> 16) & 0xFFL)]
- ^ T6[(int)((k03 >> 8) & 0xFFL)]
- ^ T7[(int)( k02 & 0xFFL)];
- Kr2 = T0[(int)((k02 >> 56) & 0xFFL)]
- ^ T1[(int)((k01 >> 48) & 0xFFL)]
- ^ T2[(int)((k00 >> 40) & 0xFFL)]
- ^ T3[(int)((k07 >> 32) & 0xFFL)]
- ^ T4[(int)((k06 >> 24) & 0xFFL)]
- ^ T5[(int)((k05 >> 16) & 0xFFL)]
- ^ T6[(int)((k04 >> 8) & 0xFFL)]
- ^ T7[(int)( k03 & 0xFFL)];
- Kr3 = T0[(int)((k03 >> 56) & 0xFFL)]
- ^ T1[(int)((k02 >> 48) & 0xFFL)]
- ^ T2[(int)((k01 >> 40) & 0xFFL)]
- ^ T3[(int)((k00 >> 32) & 0xFFL)]
- ^ T4[(int)((k07 >> 24) & 0xFFL)]
- ^ T5[(int)((k06 >> 16) & 0xFFL)]
- ^ T6[(int)((k05 >> 8) & 0xFFL)]
- ^ T7[(int)( k04 & 0xFFL)];
- Kr4 = T0[(int)((k04 >> 56) & 0xFFL)]
- ^ T1[(int)((k03 >> 48) & 0xFFL)]
- ^ T2[(int)((k02 >> 40) & 0xFFL)]
- ^ T3[(int)((k01 >> 32) & 0xFFL)]
- ^ T4[(int)((k00 >> 24) & 0xFFL)]
- ^ T5[(int)((k07 >> 16) & 0xFFL)]
- ^ T6[(int)((k06 >> 8) & 0xFFL)]
- ^ T7[(int)( k05 & 0xFFL)];
- Kr5 = T0[(int)((k05 >> 56) & 0xFFL)]
- ^ T1[(int)((k04 >> 48) & 0xFFL)]
- ^ T2[(int)((k03 >> 40) & 0xFFL)]
- ^ T3[(int)((k02 >> 32) & 0xFFL)]
- ^ T4[(int)((k01 >> 24) & 0xFFL)]
- ^ T5[(int)((k00 >> 16) & 0xFFL)]
- ^ T6[(int)((k07 >> 8) & 0xFFL)]
- ^ T7[(int)( k06 & 0xFFL)];
- Kr6 = T0[(int)((k06 >> 56) & 0xFFL)]
- ^ T1[(int)((k05 >> 48) & 0xFFL)]
- ^ T2[(int)((k04 >> 40) & 0xFFL)]
- ^ T3[(int)((k03 >> 32) & 0xFFL)]
- ^ T4[(int)((k02 >> 24) & 0xFFL)]
- ^ T5[(int)((k01 >> 16) & 0xFFL)]
- ^ T6[(int)((k00 >> 8) & 0xFFL)]
- ^ T7[(int)( k07 & 0xFFL)];
- Kr7 = T0[(int)((k07 >> 56) & 0xFFL)]
- ^ T1[(int)((k06 >> 48) & 0xFFL)]
- ^ T2[(int)((k05 >> 40) & 0xFFL)]
- ^ T3[(int)((k04 >> 32) & 0xFFL)]
- ^ T4[(int)((k03 >> 24) & 0xFFL)]
- ^ T5[(int)((k02 >> 16) & 0xFFL)]
- ^ T6[(int)((k01 >> 8) & 0xFFL)]
- ^ T7[(int)( k00 & 0xFFL)];
- k00 = Kr0;
- k01 = Kr1;
- k02 = Kr2;
- k03 = Kr3;
- k04 = Kr4;
- k05 = Kr5;
- k06 = Kr6;
- k07 = Kr7;
- // 2. incrementally compute the cipher output
- w0 = T0[(int)((nn0 >> 56) & 0xFFL)]
- ^ T1[(int)((nn7 >> 48) & 0xFFL)]
- ^ T2[(int)((nn6 >> 40) & 0xFFL)]
- ^ T3[(int)((nn5 >> 32) & 0xFFL)]
- ^ T4[(int)((nn4 >> 24) & 0xFFL)]
- ^ T5[(int)((nn3 >> 16) & 0xFFL)]
- ^ T6[(int)((nn2 >> 8) & 0xFFL)]
- ^ T7[(int)( nn1 & 0xFFL)] ^ Kr0;
- w1 = T0[(int)((nn1 >> 56) & 0xFFL)]
- ^ T1[(int)((nn0 >> 48) & 0xFFL)]
- ^ T2[(int)((nn7 >> 40) & 0xFFL)]
- ^ T3[(int)((nn6 >> 32) & 0xFFL)]
- ^ T4[(int)((nn5 >> 24) & 0xFFL)]
- ^ T5[(int)((nn4 >> 16) & 0xFFL)]
- ^ T6[(int)((nn3 >> 8) & 0xFFL)]
- ^ T7[(int)( nn2 & 0xFFL)] ^ Kr1;
- w2 = T0[(int)((nn2 >> 56) & 0xFFL)]
- ^ T1[(int)((nn1 >> 48) & 0xFFL)]
- ^ T2[(int)((nn0 >> 40) & 0xFFL)]
- ^ T3[(int)((nn7 >> 32) & 0xFFL)]
- ^ T4[(int)((nn6 >> 24) & 0xFFL)]
- ^ T5[(int)((nn5 >> 16) & 0xFFL)]
- ^ T6[(int)((nn4 >> 8) & 0xFFL)]
- ^ T7[(int)( nn3 & 0xFFL)] ^ Kr2;
- w3 = T0[(int)((nn3 >> 56) & 0xFFL)]
- ^ T1[(int)((nn2 >> 48) & 0xFFL)]
- ^ T2[(int)((nn1 >> 40) & 0xFFL)]
- ^ T3[(int)((nn0 >> 32) & 0xFFL)]
- ^ T4[(int)((nn7 >> 24) & 0xFFL)]
- ^ T5[(int)((nn6 >> 16) & 0xFFL)]
- ^ T6[(int)((nn5 >> 8) & 0xFFL)]
- ^ T7[(int)( nn4 & 0xFFL)] ^ Kr3;
- w4 = T0[(int)((nn4 >> 56) & 0xFFL)]
- ^ T1[(int)((nn3 >> 48) & 0xFFL)]
- ^ T2[(int)((nn2 >> 40) & 0xFFL)]
- ^ T3[(int)((nn1 >> 32) & 0xFFL)]
- ^ T4[(int)((nn0 >> 24) & 0xFFL)]
- ^ T5[(int)((nn7 >> 16) & 0xFFL)]
- ^ T6[(int)((nn6 >> 8) & 0xFFL)]
- ^ T7[(int)( nn5 & 0xFFL)] ^ Kr4;
- w5 = T0[(int)((nn5 >> 56) & 0xFFL)]
- ^ T1[(int)((nn4 >> 48) & 0xFFL)]
- ^ T2[(int)((nn3 >> 40) & 0xFFL)]
- ^ T3[(int)((nn2 >> 32) & 0xFFL)]
- ^ T4[(int)((nn1 >> 24) & 0xFFL)]
- ^ T5[(int)((nn0 >> 16) & 0xFFL)]
- ^ T6[(int)((nn7 >> 8) & 0xFFL)]
- ^ T7[(int)( nn6 & 0xFFL)] ^ Kr5;
- w6 = T0[(int)((nn6 >> 56) & 0xFFL)]
- ^ T1[(int)((nn5 >> 48) & 0xFFL)]
- ^ T2[(int)((nn4 >> 40) & 0xFFL)]
- ^ T3[(int)((nn3 >> 32) & 0xFFL)]
- ^ T4[(int)((nn2 >> 24) & 0xFFL)]
- ^ T5[(int)((nn1 >> 16) & 0xFFL)]
- ^ T6[(int)((nn0 >> 8) & 0xFFL)]
- ^ T7[(int)( nn7 & 0xFFL)] ^ Kr6;
- w7 = T0[(int)((nn7 >> 56) & 0xFFL)]
- ^ T1[(int)((nn6 >> 48) & 0xFFL)]
- ^ T2[(int)((nn5 >> 40) & 0xFFL)]
- ^ T3[(int)((nn4 >> 32) & 0xFFL)]
- ^ T4[(int)((nn3 >> 24) & 0xFFL)]
- ^ T5[(int)((nn2 >> 16) & 0xFFL)]
- ^ T6[(int)((nn1 >> 8) & 0xFFL)]
- ^ T7[(int)( nn0 & 0xFFL)] ^ Kr7;
- nn0 = w0;
- nn1 = w1;
- nn2 = w2;
- nn3 = w3;
- nn4 = w4;
- nn5 = w5;
- nn6 = w6;
- nn7 = w7;
- }
- // apply the Miyaguchi-Preneel hash scheme
- H0 ^= w0 ^ n0;
- H1 ^= w1 ^ n1;
- H2 ^= w2 ^ n2;
- H3 ^= w3 ^ n3;
- H4 ^= w4 ^ n4;
- H5 ^= w5 ^ n5;
- H6 ^= w6 ^ n6;
- H7 ^= w7 ^ n7;
- }
-
- protected byte[] padBuffer()
- {
- // [WHIRLPOOL] p. 6:
- // "...padded with a 1-bit, then with as few 0-bits as necessary to
- // obtain a bit string whose length is an odd multiple of 256, and
- // finally with the 256-bit right-justified binary representation of L."
- // in this implementation we use 'count' as the number of bytes hashed
- // so far. hence the minimal number of bytes added to the message proper
- // are 33 (1 for the 1-bit followed by the 0-bits and the encoding of
- // the count framed in a 256-bit block). our formula is then:
- // count + 33 + padding = 0 (mod BLOCK_SIZE)
- int n = (int)((count + 33) % BLOCK_SIZE);
- int padding = n == 0 ? 33 : BLOCK_SIZE - n + 33;
- byte[] result = new byte[padding];
- // padding is always binary 1 followed by binary 0s
- result[0] = (byte) 0x80;
- // save (right justified) the number of bits hashed
- long bits = count * 8;
- int i = padding - 8;
- result[i++] = (byte)(bits >>> 56);
- result[i++] = (byte)(bits >>> 48);
- result[i++] = (byte)(bits >>> 40);
- result[i++] = (byte)(bits >>> 32);
- result[i++] = (byte)(bits >>> 24);
- result[i++] = (byte)(bits >>> 16);
- result[i++] = (byte)(bits >>> 8);
- result[i ] = (byte) bits;
- return result;
- }
-
- protected byte[] getResult()
- {
- // apply inverse mu to the context
- return new byte[] {
- (byte)(H0 >>> 56), (byte)(H0 >>> 48), (byte)(H0 >>> 40), (byte)(H0 >>> 32),
- (byte)(H0 >>> 24), (byte)(H0 >>> 16), (byte)(H0 >>> 8), (byte) H0,
- (byte)(H1 >>> 56), (byte)(H1 >>> 48), (byte)(H1 >>> 40), (byte)(H1 >>> 32),
- (byte)(H1 >>> 24), (byte)(H1 >>> 16), (byte)(H1 >>> 8), (byte) H1,
- (byte)(H2 >>> 56), (byte)(H2 >>> 48), (byte)(H2 >>> 40), (byte)(H2 >>> 32),
- (byte)(H2 >>> 24), (byte)(H2 >>> 16), (byte)(H2 >>> 8), (byte) H2,
- (byte)(H3 >>> 56), (byte)(H3 >>> 48), (byte)(H3 >>> 40), (byte)(H3 >>> 32),
- (byte)(H3 >>> 24), (byte)(H3 >>> 16), (byte)(H3 >>> 8), (byte) H3,
- (byte)(H4 >>> 56), (byte)(H4 >>> 48), (byte)(H4 >>> 40), (byte)(H4 >>> 32),
- (byte)(H4 >>> 24), (byte)(H4 >>> 16), (byte)(H4 >>> 8), (byte) H4,
- (byte)(H5 >>> 56), (byte)(H5 >>> 48), (byte)(H5 >>> 40), (byte)(H5 >>> 32),
- (byte)(H5 >>> 24), (byte)(H5 >>> 16), (byte)(H5 >>> 8), (byte) H5,
- (byte)(H6 >>> 56), (byte)(H6 >>> 48), (byte)(H6 >>> 40), (byte)(H6 >>> 32),
- (byte)(H6 >>> 24), (byte)(H6 >>> 16), (byte)(H6 >>> 8), (byte) H6,
- (byte)(H7 >>> 56), (byte)(H7 >>> 48), (byte)(H7 >>> 40), (byte)(H7 >>> 32),
- (byte)(H7 >>> 24), (byte)(H7 >>> 16), (byte)(H7 >>> 8), (byte) H7 };
-
- }
-
- protected void resetContext()
- {
- H0 = H1 = H2 = H3 = H4 = H5 = H6 = H7 = 0L;
- }
-
- public boolean selfTest()
- {
- if (valid == null)
- {
- String d = Util.toString(new Whirlpool().digest());
- valid = Boolean.valueOf(DIGEST0.equals(d));
- }
- return valid.booleanValue();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java b/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java
deleted file mode 100644
index 7c0a602..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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 HAVAL <i>Service Provider Interface</i>
- * (<b>SPI</b>) adapter.
- */
-public class HavalSpi
- extends MessageDigestAdapter
-{
- public HavalSpi()
- {
- super(Registry.HAVAL_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java
deleted file mode 100644
index 76def7a..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the MD2 <i>Service Provider Interface</i> (<b>SPI</b>)
- * adapter.
- */
-public class MD2Spi
- extends MessageDigestAdapter
-{
- /** Trivial 0-arguments constructor. */
- public MD2Spi()
- {
- super(Registry.MD2_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java
deleted file mode 100644
index 125943d..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the MD4 <i>Service Provider Interface</i> (<b>SPI</b>)
- * adapter.
- */
-public class MD4Spi
- extends MessageDigestAdapter
-{
- /** Trivial 0-arguments constructor. */
- public MD4Spi()
- {
- super(Registry.MD4_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java
deleted file mode 100644
index 25d9240..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class MD5Spi
- extends MessageDigestAdapter
-{
- public MD5Spi()
- {
- super(Registry.MD5_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java b/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java
deleted file mode 100644
index 2651ecf..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/* 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 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 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 provider implement the {@link Cloneable} interface.
- */
-class MessageDigestAdapter
- extends MessageDigestSpi
- implements Cloneable
-{
- /** Our underlying hash instance. */
- private IMessageDigest adaptee;
-
- /**
- * 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;
- }
-
- 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();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java b/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java
deleted file mode 100644
index 499996c..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class RipeMD128Spi
- extends MessageDigestAdapter
-{
- public RipeMD128Spi()
- {
- super(Registry.RIPEMD128_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java b/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java
deleted file mode 100644
index a62bea6..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class RipeMD160Spi
- extends MessageDigestAdapter
-{
- public RipeMD160Spi()
- {
- super(Registry.RIPEMD160_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java
deleted file mode 100644
index ea2dfe2..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class Sha160Spi
- extends MessageDigestAdapter
-{
- public Sha160Spi()
- {
- super(Registry.SHA160_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java
deleted file mode 100644
index 39d31d0..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-2-1 (256-bit) <i>Service Provider Interface</i>
- * (<b>SPI</b>) adapter.
- */
-public class Sha256Spi
- extends MessageDigestAdapter
-{
- public Sha256Spi()
- {
- super(Registry.SHA256_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java
deleted file mode 100644
index fa1e3f9..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-2-2 (384-bit) <i>Service Provider Interface</i>
- * (<b>SPI</b>) adapter.
- */
-public class Sha384Spi
- extends MessageDigestAdapter
-{
- public Sha384Spi()
- {
- super(Registry.SHA384_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java
deleted file mode 100644
index 4bd39da..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-2-3 (512-bit) <i>Service Provider Interface</i>
- * (<b>SPI</b>) adapter.
- */
-public class Sha512Spi
- extends MessageDigestAdapter
-{
- public Sha512Spi()
- {
- super(Registry.SHA512_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java b/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java
deleted file mode 100644
index 3d38c84..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the Tiger <i>Service Provider Interface</i>
- * (<b>SPI</b>) adapter.
- */
-public class TigerSpi
- extends MessageDigestAdapter
-{
- /** Trivial 0-arguments constructor. */
- public TigerSpi()
- {
- super(Registry.TIGER_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java b/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java
deleted file mode 100644
index 68a3a70..0000000
--- a/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class WhirlpoolSpi
- extends MessageDigestAdapter
-{
- public WhirlpoolSpi()
- {
- super(Registry.WHIRLPOOL_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/HavalRandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/HavalRandomSpi.java
deleted file mode 100644
index ebf80f2..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/HavalRandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class HavalRandomSpi
- extends SecureRandomAdapter
-{
- public HavalRandomSpi()
- {
- super(Registry.HAVAL_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/MD2RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/MD2RandomSpi.java
deleted file mode 100644
index 8b9abe4..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/MD2RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class MD2RandomSpi
- extends SecureRandomAdapter
-{
- public MD2RandomSpi()
- {
- super(Registry.MD2_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/MD4RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/MD4RandomSpi.java
deleted file mode 100644
index 2a71d6a..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/MD4RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class MD4RandomSpi
- extends SecureRandomAdapter
-{
- public MD4RandomSpi()
- {
- super(Registry.MD4_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/MD5RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/MD5RandomSpi.java
deleted file mode 100644
index 8fb50e1..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/MD5RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class MD5RandomSpi
- extends SecureRandomAdapter
-{
- public MD5RandomSpi()
- {
- super(Registry.MD5_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/RipeMD128RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/RipeMD128RandomSpi.java
deleted file mode 100644
index 6f8dde0..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/RipeMD128RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the RIPEMD128-based SecureRandom <i>Service Provider
- * Interface</i> (<b>SPI</b>) adapter.
- */
-public class RipeMD128RandomSpi
- extends SecureRandomAdapter
-{
- public RipeMD128RandomSpi()
- {
- super(Registry.RIPEMD128_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/RipeMD160RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/RipeMD160RandomSpi.java
deleted file mode 100644
index 6bb4e2b..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/RipeMD160RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class RipeMD160RandomSpi
- extends SecureRandomAdapter
-{
- public RipeMD160RandomSpi()
- {
- super(Registry.RIPEMD160_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java b/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java
deleted file mode 100644
index 9307cfa..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/* 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.action.GetSecurityPropertyAction;
-import gnu.classpath.SystemProperties;
-import gnu.java.security.prng.LimitReachedException;
-import gnu.java.security.prng.MDGenerator;
-
-import java.security.AccessController;
-import java.security.SecureRandom;
-import java.security.SecureRandomSpi;
-
-import java.util.Collections;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * <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>
- */
-public abstract class SecureRandomAdapter
- extends SecureRandomSpi
-{
-
- private boolean isSeeded = false;
-
- /** Our underlying prng instance. */
- private MDGenerator adaptee = new MDGenerator();
-
- /** The name of the message digest algorithm used by the adaptee. */
- private String mdName;
-
- private static final Logger logger =
- Logger.getLogger(SecureRandom.class.getName());
-
- private static final String SECURERANDOM_SOURCE = "securerandom.source";
- private static final String JAVA_SECURITY_EGD = "java.security.egd";
-
- /**
- * <p>Trivial protected constructor.</p>
- *
- * @param mdName the canonical name of the underlying hash algorithm.
- */
- protected SecureRandomAdapter(String mdName)
- {
- super();
-
- this.mdName = mdName;
- adaptee.init (Collections.singletonMap (MDGenerator.MD_NAME, mdName));
- }
-
- public static final byte[] getSeed(int numBytes)
- {
- URL sourceUrl = null;
- String urlStr = null;
-
- byte[] buffer = new byte[numBytes];
-
- GetSecurityPropertyAction action =
- new GetSecurityPropertyAction(SECURERANDOM_SOURCE);
- try
- {
- urlStr = (String) AccessController.doPrivileged(action);
- if (urlStr != null)
- sourceUrl = new URL(urlStr);
- }
- catch (MalformedURLException ignored)
- {
- logger.log(Level.WARNING,
- SECURERANDOM_SOURCE + " property is malformed: {0}",
- urlStr);
- }
-
- if (sourceUrl == null)
- {
- try
- {
- urlStr = SystemProperties.getProperty(JAVA_SECURITY_EGD);
- if (urlStr != null)
- sourceUrl = new URL(urlStr);
- }
- catch (MalformedURLException mue)
- {
- logger.log(Level.WARNING,
- JAVA_SECURITY_EGD + " property is malformed: {0}",
- urlStr);
- }
- }
-
- if (sourceUrl != null)
- {
- try
- {
- InputStream in = sourceUrl.openStream();
- in.read(buffer);
- return buffer;
- }
- catch (IOException ioe)
- {
- logger.log(Level.FINE, "error reading random bytes", ioe);
- }
- }
-
- // If we get here, we did not get any seed from a property URL.
- VMSecureRandom.generateSeed(buffer, 0, buffer.length);
- return buffer;
- }
-
- public byte[] engineGenerateSeed(int numBytes)
- {
- return getSeed(numBytes);
- }
-
- public void engineNextBytes(byte[] bytes)
- {
- if (!isSeeded)
- {
- engineSetSeed(engineGenerateSeed(32));
- }
- try
- {
- adaptee.nextBytes(bytes, 0, bytes.length);
- }
- catch (LimitReachedException ignored)
- {
- }
- }
-
- public void engineSetSeed(byte[] seed)
- {
- adaptee.addRandomBytes (seed);
- isSeeded = true;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/Sha160RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/Sha160RandomSpi.java
deleted file mode 100644
index ba4d222..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/Sha160RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class Sha160RandomSpi
- extends SecureRandomAdapter
-{
- public Sha160RandomSpi()
- {
- super(Registry.SHA160_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java
deleted file mode 100644
index a6ddb70..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-256 based SecureRandom <i>Service Provider
- * Interface</i> (<b>SPI</b>) adapter.
- */
-public class Sha256RandomSpi
- extends SecureRandomAdapter
-{
- public Sha256RandomSpi()
- {
- super(Registry.SHA256_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java
deleted file mode 100644
index 4954b1b..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-384 based SecureRandom <i>Service Provider
- * Interface</i> (<b>SPI</b>) adapter.
- */
-public class Sha384RandomSpi
- extends SecureRandomAdapter
-{
- public Sha384RandomSpi()
- {
- super(Registry.SHA384_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java
deleted file mode 100644
index 27de7f3..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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;
-
-/**
- * The implementation of the SHA-512 based SecureRandom <i>Service Provider
- * Interface</i> (<b>SPI</b>) adapter.
- */
-public class Sha512RandomSpi
- extends SecureRandomAdapter
-{
- public Sha512RandomSpi()
- {
- super(Registry.SHA512_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/TigerRandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/TigerRandomSpi.java
deleted file mode 100644
index 722ab32..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/TigerRandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class TigerRandomSpi
- extends SecureRandomAdapter
-{
- public TigerRandomSpi()
- {
- super(Registry.TIGER_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java b/libjava/classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java
deleted file mode 100644
index 5da43d7..0000000
--- a/libjava/classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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.
- */
-public class WhirlpoolRandomSpi
- extends SecureRandomAdapter
-{
- public WhirlpoolRandomSpi()
- {
- super(Registry.WHIRLPOOL_HASH);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyFactory.java b/libjava/classpath/gnu/java/security/jce/sig/DSSKeyFactory.java
deleted file mode 100644
index ec99343..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyFactory.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/* 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)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
- 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)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
- 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");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java b/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java
deleted file mode 100644
index 2d33e16..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* 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 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 provider uses a
- * default <i>modulus</i> size (keysize) of 1024 bits.
- */
-public class DSSKeyPairGeneratorSpi
- extends KeyPairGeneratorAdapter
- implements DSAKeyPairGenerator
-{
- public DSSKeyPairGeneratorSpi()
- {
- super(Registry.DSS_KPG);
- }
-
- 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,
- Integer.valueOf(Registry.ASN1_ENCODING_ID));
- try
- {
- adaptee.setup(attributes);
- }
- catch (IllegalArgumentException x)
- {
- throw new InvalidAlgorithmParameterException(x.getMessage(), x);
- }
- }
-
- 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(x.getMessage());
- 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, Integer.valueOf(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,
- Integer.valueOf(Registry.ASN1_ENCODING_ID));
- try
- {
- adaptee.setup(attributes);
- }
- catch (IllegalArgumentException x)
- {
- InvalidParameterException y = new InvalidParameterException(x.getMessage());
- y.initCause(x);
- throw y;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSParameters.java b/libjava/classpath/gnu/java/security/jce/sig/DSSParameters.java
deleted file mode 100644
index fbf778d..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSParameters.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/* 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.lang.CPStringBuilder;
-
-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()
- {
- CPStringBuilder sb = new CPStringBuilder("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();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSParametersGenerator.java b/libjava/classpath/gnu/java/security/jce/sig/DSSParametersGenerator.java
deleted file mode 100644
index 09c1386..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSParametersGenerator.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/* 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;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java b/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java
deleted file mode 100644
index edee4e5..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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.
- */
-public class DSSRawSignatureSpi
- extends SignatureAdapter
-{
- public DSSRawSignatureSpi()
- {
- super(Registry.DSS_SIG, new DSSSignatureRawCodec());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/EncodedKeyFactory.java b/libjava/classpath/gnu/java/security/jce/sig/EncodedKeyFactory.java
deleted file mode 100644
index ec74201..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/EncodedKeyFactory.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/* EncodedKeyFactory.java -- JCE Encoded key factory Adapter
- Copyright (C) 2006, 2010 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.Configuration;
-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 = Configuration.DEBUG ?
- Logger.getLogger(EncodedKeyFactory.class.getName()) : null;
-
- 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)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- catch (IllegalAccessException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- catch (InvocationTargetException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
-
- private static Class getConcreteClass(String className)
- throws InvalidKeySpecException
- {
- try
- {
- Class result = Class.forName(className);
- return result;
- }
- catch (ClassNotFoundException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
-
- 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)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
-
- 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)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- catch (InvocationTargetException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
-
- private static Method getValueOfMethod(Class clazz)
- throws InvalidKeySpecException
- {
- try
- {
- Method result = clazz.getMethod("valueOf", new Class[] {byte[].class});
- return result;
- }
- catch (NoSuchMethodException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
-
- protected PublicKey engineGeneratePublic(KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (Configuration.DEBUG)
- 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)
- {
- if (Configuration.DEBUG)
- log.log(Level.FINE, "Exception in DSSPublicKey.valueOf(). Ignore",
- ignored);
- }
- if (! ok) // try RSA
- try
- {
- result = GnuRSAPublicKey.valueOf(input);
- ok = true;
- }
- catch (InvalidParameterException ignored)
- {
- if (Configuration.DEBUG)
- log.log(Level.FINE,
- "Exception in GnuRSAPublicKey.valueOf(). Ignore",
- ignored);
- }
- if (! ok) // try DH
- result = decodeDHPublicKey(input);
- }
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "engineGeneratePublic()", result);
- return result;
- }
-
- protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (Configuration.DEBUG)
- 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)
- {
- if (Configuration.DEBUG)
- log.log(Level.FINE, "Exception in DSSPrivateKey.valueOf(). Ignore",
- ignored);
- }
- if (! ok) // try RSA
- try
- {
- result = GnuRSAPrivateKey.valueOf(input);
- ok = true;
- }
- catch (InvalidParameterException ignored)
- {
- if (Configuration.DEBUG)
- log.log(Level.FINE,
- "Exception in GnuRSAPrivateKey.valueOf(). Ignore",
- ignored);
- }
- if (! ok) // try DH
- result = decodeDHPrivateKey(input);
- }
- if (Configuration.DEBUG)
- 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[] {Integer.valueOf(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[] {Integer.valueOf(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;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java b/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java
deleted file mode 100644
index 9d3e5ef..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* 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 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 provider supplies
- * (and document) default values to be used. For example, the GNU provider uses
- * a default <i>modulus</i> size (keysize) of 1024 bits for the DSS (Digital
- * Signature Standard) a.k.a <i>DSA</i>.
- */
-public abstract class KeyPairGeneratorAdapter
- extends KeyPairGenerator
-{
- /** Our underlying keypair instance. */
- protected IKeyPairGenerator adaptee;
-
- /**
- * Trivial protected constructor.
- *
- * @param kpgName the canonical name of the keypair generator algorithm.
- */
- protected KeyPairGeneratorAdapter(String kpgName)
- {
- super(kpgName);
-
- this.adaptee = KeyPairGeneratorFactory.getInstance(kpgName);
- }
-
- public abstract void initialize(int keysize, SecureRandom random);
-
- public abstract void initialize(AlgorithmParameterSpec params,
- SecureRandom random)
- throws InvalidAlgorithmParameterException;
-
- public KeyPair generateKeyPair()
- {
- return adaptee.generate();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/MD2withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/MD2withRSA.java
deleted file mode 100644
index 353be21..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/MD2withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/MD5withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/MD5withRSA.java
deleted file mode 100644
index 42c481b..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/MD5withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java b/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java
deleted file mode 100644
index 3ba49ed..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/* 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
- {
- return new RSAKeyPairX509Codec().decodePublicKey(encoded);
- }
- catch (RuntimeException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
- 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 PKCS8EncodedKeySpec)
- {
- PKCS8EncodedKeySpec spec = (PKCS8EncodedKeySpec) keySpec;
- byte[] encoded = spec.getEncoded();
- PrivateKey result;
- try
- {
- return new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded);
- }
- catch (RuntimeException x)
- {
- throw new InvalidKeySpecException(x.getMessage(), x);
- }
- }
- 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);
- }
- throw new InvalidKeyException("Unsupported key type");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyPairGeneratorSpi.java b/libjava/classpath/gnu/java/security/jce/sig/RSAKeyPairGeneratorSpi.java
deleted file mode 100644
index ef53b81..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyPairGeneratorSpi.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 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 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 provider uses a
- * default <i>modulus</i> size (keysize) of 1024 bits.
- */
-public class RSAKeyPairGeneratorSpi
- extends KeyPairGeneratorAdapter
-{
- public RSAKeyPairGeneratorSpi()
- {
- super(Registry.RSA_KPG);
- }
-
- public void initialize(int keysize, SecureRandom random)
- {
- HashMap attributes = new HashMap();
- attributes.put(RSAKeyPairGenerator.MODULUS_LENGTH, Integer.valueOf(keysize));
- if (random != null)
- attributes.put(RSAKeyPairGenerator.SOURCE_OF_RANDOMNESS, random);
-
- attributes.put(RSAKeyPairGenerator.PREFERRED_ENCODING_FORMAT,
- Integer.valueOf(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,
- Integer.valueOf(Registry.ASN1_ENCODING_ID));
- adaptee.setup(attributes);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java b/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java
deleted file mode 100644
index 496c9ca..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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.
- */
-public class RSAPSSRawSignatureSpi
- extends SignatureAdapter
-{
- public RSAPSSRawSignatureSpi()
- {
- super(Registry.RSA_PSS_SIG, new RSAPSSSignatureRawCodec());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SHA160withDSS.java b/libjava/classpath/gnu/java/security/jce/sig/SHA160withDSS.java
deleted file mode 100644
index c55139f..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SHA160withDSS.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SHA160withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/SHA160withRSA.java
deleted file mode 100644
index d3b2054..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SHA160withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SHA256withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/SHA256withRSA.java
deleted file mode 100644
index d21888b..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SHA256withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SHA384withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/SHA384withRSA.java
deleted file mode 100644
index 5495ec1..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SHA384withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SHA512withRSA.java b/libjava/classpath/gnu/java/security/jce/sig/SHA512withRSA.java
deleted file mode 100644
index f763229..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SHA512withRSA.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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());
- }
-}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java b/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java
deleted file mode 100644
index efe3681..0000000
--- a/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/* SignatureAdapter.java --
- Copyright 2001, 2002, 2006, 2010 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.Configuration;
-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 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 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 provider implement the {@link Cloneable} interface.
- */
-class SignatureAdapter
- extends SignatureSpi
- implements Cloneable
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(SignatureAdapter.class.getName()) : null;
-
- /** Our underlying signature instance. */
- private ISignature adaptee;
-
- /** Our underlying signature encoder/decoder engine. */
- private ISignatureCodec codec;
-
- /**
- * Trivial protected constructor.
- *
- * @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.
- *
- * @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;
- }
-
- 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(x.getMessage(), 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(x.getMessage(), 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(x.getMessage(), x);
- }
- }
-
- public void engineUpdate(byte b) throws SignatureException
- {
- try
- {
- adaptee.update(b);
- }
- catch (IllegalStateException x)
- {
- throw new SignatureException(x.getMessage(), x);
- }
- }
-
- public void engineUpdate(byte[] b, int off, int len)
- throws SignatureException
- {
- try
- {
- adaptee.update(b, off, len);
- }
- catch (IllegalStateException x)
- {
- throw new SignatureException(x.getMessage(), x);
- }
- }
-
- public byte[] engineSign() throws SignatureException
- {
- Object signature = null;
- try
- {
- signature = adaptee.sign();
- }
- catch (IllegalStateException x)
- {
- throw new SignatureException(x.getMessage(), 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("Not enough room to store signature");
-
- System.arraycopy(signature, 0, outbuf, offset, result);
- return result;
- }
-
- public boolean engineVerify(byte[] sigBytes) throws SignatureException
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "engineVerify");
- Object signature = codec.decodeSignature(sigBytes);
- boolean result = false;
- try
- {
- result = adaptee.verify(signature);
- }
- catch (IllegalStateException x)
- {
- throw new SignatureException(x.getMessage(), x);
- }
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "engineVerify",
- Boolean.valueOf(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");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java b/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java
deleted file mode 100644
index 5c88c86..0000000
--- a/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* IKeyPairCodec.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.key;
-
-import gnu.java.security.Registry;
-
-import java.security.PrivateKey;
-import java.security.PublicKey;
-
-/**
- * The visible methods of an object that knows how to encode and decode
- * cryptographic asymmetric keypairs. Codecs are useful for (a) externalising
- * public and private keys for storage and on-the-wire transmission, as well as
- * (b) re-creating their internal Java representation from external sources.
- */
-public interface IKeyPairCodec
-{
- /** Constant identifying the <i>Raw</i> encoding format. */
- int RAW_FORMAT = Registry.RAW_ENCODING_ID;
-
- /** Constant identifying the <i>X.509</i> encoding format. */
- int X509_FORMAT = Registry.X509_ENCODING_ID;
-
- /** Constant identifying the <i>PKCS#8</i> encoding format. */
- int PKCS8_FORMAT = Registry.PKCS8_ENCODING_ID;
-
- /**
- * Constant identifying the <i>ASN.1</i> encoding format: a combined encoding
- * of <i>X.509</i> for public keys, and <i>PKCS#8</i> for private ones.
- */
- int ASN1_FORMAT = Registry.ASN1_ENCODING_ID;
-
- /**
- * Returns the unique identifier (within this library) of the format used to
- * externalise public and private keys.
- *
- * @return the identifier of the format, the object supports.
- */
- int getFormatID();
-
- /**
- * Encodes an instance of a public key for storage or transmission purposes.
- *
- * @param key the non-null key to encode.
- * @return a byte sequence representing the encoding of the designated key
- * according to the format supported by this codec.
- * @exception IllegalArgumentException if the designated key is not supported
- * by this codec.
- */
- byte[] encodePublicKey(PublicKey key);
-
- /**
- * Encodes an instance of a private key for storage or transmission purposes.
- *
- * @param key the non-null key to encode.
- * @return a byte sequence representing the encoding of the designated key
- * according to the format supported by this codec.
- * @exception IllegalArgumentException if the designated key is not supported
- * by this codec.
- */
- byte[] encodePrivateKey(PrivateKey key);
-
- /**
- * Decodes an instance of an external public key into its native Java
- * representation.
- *
- * @param input the source of the externalised key to decode.
- * @return a concrete instance of a public key, reconstructed from the
- * designated input.
- * @exception IllegalArgumentException if the designated input does not
- * contain a known representation of a public key for the format
- * supported by the concrete codec.
- */
- PublicKey decodePublicKey(byte[] input);
-
- /**
- * Decodes an instance of an external private key into its native Java
- * representation.
- *
- * @param input the source of the externalised key to decode.
- * @return a concrete instance of a private key, reconstructed from the
- * designated input.
- * @exception IllegalArgumentException if the designated input does not
- * contain a known representation of a private key for the format
- * supported by the concrete codec.
- */
- PrivateKey decodePrivateKey(byte[] input);
-}
diff --git a/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java b/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java
deleted file mode 100644
index 72aac24..0000000
--- a/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/* IKeyPairGenerator.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.key;
-
-import java.security.KeyPair;
-import java.util.Map;
-
-/**
- * The visible methods of every asymmetric keypair generator.
- */
-public interface IKeyPairGenerator
-{
- /**
- * Returns the canonical name of this keypair generator.
- *
- * @return the canonical name of this instance.
- */
- String name();
-
- /**
- * [Re]-initialises this instance for use with a given set of attributes.
- *
- * @param attributes a map of name/value pairs to use for setting up the
- * instance.
- * @exception IllegalArgumentException if at least one of the mandatory
- * attributes is missing or an invalid value was specified.
- */
- void setup(Map attributes);
-
- /**
- * Generates a new keypair based on the attributes used to configure the
- * instance.
- *
- * @return a new keypair.
- */
- KeyPair generate();
-}
diff --git a/libjava/classpath/gnu/java/security/key/KeyPairCodecFactory.java b/libjava/classpath/gnu/java/security/key/KeyPairCodecFactory.java
deleted file mode 100644
index d428664..0000000
--- a/libjava/classpath/gnu/java/security/key/KeyPairCodecFactory.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/* KeyPairCodecFactory.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.key;
-
-import gnu.java.security.Registry;
-import gnu.java.security.key.dss.DSSKeyPairPKCS8Codec;
-import gnu.java.security.key.dss.DSSKeyPairRawCodec;
-import gnu.java.security.key.dss.DSSKeyPairX509Codec;
-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 gnu.java.security.key.rsa.RSAKeyPairPKCS8Codec;
-import gnu.java.security.key.rsa.RSAKeyPairRawCodec;
-import gnu.java.security.key.rsa.RSAKeyPairX509Codec;
-import gnu.java.security.util.FormatUtil;
-
-import java.lang.reflect.Constructor;
-import java.security.Key;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A <i>Factory</i> class to instantiate key encoder/decoder instances.
- */
-public class KeyPairCodecFactory
-{
- private static Set names;
-
- /** Trivial constructor to enforce Singleton pattern. */
- private KeyPairCodecFactory()
- {
- super();
- }
-
- /**
- * Returns the appropriate codec given a composed key-pair generator algorithm
- * and an encoding format. A composed name is formed by the concatenation of
- * the canonical key-pair algorithm name, the forward slash character
- * <code>/</code> and the canonical name of the encoding format.
- * <p>
- * <b>IMPORTANT</b>: For backward compatibility, when the encoding format
- * name is missing, the Raw encoding format is assumed. When this is the case
- * the trailing forward slash is discarded from the name.
- *
- * @param name the case-insensitive key codec name.
- * @return an instance of the keypair codec, or <code>null</code> if none
- * found.
- */
- public static IKeyPairCodec getInstance(String name)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- if (name.length() == 0)
- return null;
-
- if (name.startsWith("/"))
- return null;
-
- if (name.endsWith("/"))
- return getInstance(name.substring(0, name.length() - 1),
- Registry.RAW_ENCODING_ID);
-
- int i = name.indexOf("/");
- if (i == -1)
- return getInstance(name, Registry.RAW_ENCODING_ID);
-
- String kpgName = name.substring(0, i);
- String formatName = name.substring(i + 1);
- return getInstance(kpgName, formatName);
- }
-
- /**
- * Returns an instance of a keypair codec given the canonical name of the
- * key-pair algorithm, and the name of the encoding format to use when
- * externalizing the keys.
- *
- * @param name the case-insensitive key-pair algorithm name.
- * @param format the name of the encoding format to use when externalizing the
- * keys generated by the key-pair algorithm.
- * @return an instance of the key-pair codec, or <code>null</code> if none
- * found.
- */
- public static IKeyPairCodec getInstance(String name, String format)
- {
- int formatID = FormatUtil.getFormatID(format);
- if (formatID == 0)
- return null;
-
- return getInstance(name, formatID);
- }
-
- /**
- * Returns an instance of a keypair codec given the canonical name of the
- * key-pair algorithm, and the identifier of the format to use when
- * externalizing the keys.
- *
- * @param name the case-insensitive key-pair algorithm name.
- * @param formatID the identifier of the format to use when externalizing the
- * keys generated by the key-pair algorithm.
- * @return an instance of the key-pair codec, or <code>null</code> if none
- * found.
- */
- public static IKeyPairCodec getInstance(String name, int formatID)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- switch (formatID)
- {
- case Registry.RAW_ENCODING_ID:
- return getRawCodec(name);
- case Registry.X509_ENCODING_ID:
- return getX509Codec(name);
- case Registry.PKCS8_ENCODING_ID:
- return getPKCS8Codec(name);
- }
-
- return null;
- }
-
- /**
- * Returns an instance of a keypair codec given a key.
- *
- * @param key the key to encode.
- * @return an instance of the keypair codec, or <code>null</code> if none
- * found.
- */
- public static IKeyPairCodec getInstance(Key key)
- {
- if (key == null)
- return null;
-
- String format = key.getFormat();
- int formatID = FormatUtil.getFormatID(format);
- if (formatID == 0)
- return null;
-
- switch (formatID)
- {
- case Registry.RAW_ENCODING_ID:
- return getRawCodec(key);
- case Registry.X509_ENCODING_ID:
- return getX509Codec(key);
- case Registry.PKCS8_ENCODING_ID:
- return getPKCS8Codec(key);
- }
-
- return null;
- }
-
- /**
- * Returns a {@link Set} of supported key-pair codec names.
- *
- * @return a {@link Set} of the names of supported key-pair codec (Strings).
- */
- public static synchronized final Set getNames()
- {
- if (names == null)
- {
- HashSet hs = new HashSet();
- hs.add(Registry.DSS_KPG + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- hs.add(Registry.DSS_KPG + "/" + Registry.X509_ENCODING_SORT_NAME);
- hs.add(Registry.DSS_KPG + "/" + Registry.PKCS8_ENCODING_SHORT_NAME);
- hs.add(Registry.RSA_KPG + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- hs.add(Registry.RSA_KPG + "/" + Registry.X509_ENCODING_SORT_NAME);
- hs.add(Registry.RSA_KPG + "/" + Registry.PKCS8_ENCODING_SHORT_NAME);
- hs.add(Registry.DH_KPG + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- hs.add(Registry.SRP_KPG + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- names = Collections.unmodifiableSet(hs);
- }
- return names;
- }
-
- private static IKeyPairCodec makeInstance (String clazz)
- {
- try
- {
- Class c = Class.forName (clazz);
- Constructor ctor = c.getConstructor (new Class[0]);
- return (IKeyPairCodec) ctor.newInstance (new Object[0]);
- }
- catch (Exception x)
- {
- IllegalArgumentException iae =
- new IllegalArgumentException ("strong crypto key codec not available: "
- + clazz);
- iae.initCause (x);
- throw iae;
- }
- }
-
- private static boolean matches (Object o, String clazz)
- {
- try
- {
- Class c = Class.forName (clazz);
- return c.isAssignableFrom (o.getClass ());
- }
- catch (Exception x)
- {
- // Can't match.
- return false;
- }
- }
-
- /**
- * @param name the trimmed name of a key-pair algorithm.
- * @return a Raw format codec for the designated key-pair algorithm, or
- * <code>null</code> if none exists.
- */
- private static IKeyPairCodec getRawCodec(String name)
- {
- IKeyPairCodec result = null;
- if (name.equalsIgnoreCase(Registry.DSA_KPG)
- || name.equals(Registry.DSS_KPG))
- result = new DSSKeyPairRawCodec();
- else if (name.equalsIgnoreCase(Registry.RSA_KPG))
- result = new RSAKeyPairRawCodec();
- else if (name.equalsIgnoreCase(Registry.DH_KPG))
- result = makeInstance("gnu.javax.crypto.key.dh.DHKeyPairRawCodec");
- else if (name.equalsIgnoreCase(Registry.SRP_KPG))
- result = makeInstance("gnu.javax.crypto.key.srp6.SRPKeyPairRawCodec");
-
- return result;
- }
-
- /**
- * @param name the trimmed name of a key-pair algorithm.
- * @return a X.509 format codec for the designated key-pair algorithm, or
- * <code>null</code> if none exists.
- */
- private static IKeyPairCodec getX509Codec(String name)
- {
- IKeyPairCodec result = null;
- if (name.equalsIgnoreCase(Registry.DSA_KPG)
- || name.equals(Registry.DSS_KPG))
- result = new DSSKeyPairX509Codec();
- else if (name.equalsIgnoreCase(Registry.RSA_KPG))
- result = new RSAKeyPairX509Codec();
- else if (name.equalsIgnoreCase(Registry.DH_KPG))
- result = makeInstance("gnu.javax.crypto.key.dh.DHKeyPairX509Codec");
-
- return result;
- }
-
- /**
- * @param name the trimmed name of a key-pair algorithm.
- * @return a PKCS#8 format codec for the designated key-pair algorithm, or
- * <code>null</code> if none exists.
- */
- private static IKeyPairCodec getPKCS8Codec(String name)
- {
- IKeyPairCodec result = null;
- if (name.equalsIgnoreCase(Registry.DSA_KPG)
- || name.equals(Registry.DSS_KPG))
- result = new DSSKeyPairPKCS8Codec();
- else if (name.equalsIgnoreCase(Registry.RSA_KPG))
- result = new RSAKeyPairPKCS8Codec();
- else if (name.equalsIgnoreCase(Registry.DH_KPG))
- result = makeInstance("gnu.javax.crypto.key.dh.DHKeyPairPKCS8Codec");
-
- return result;
- }
-
- /**
- * @param key a {@link Key} for which we want to return a Raw codec.
- * @return the Raw codec corresponding to the key, or <code>null</code> if
- * none exists for this key.
- */
- private static IKeyPairCodec getRawCodec(Key key)
- {
- IKeyPairCodec result = null;
- if ((key instanceof DSSPublicKey) || (key instanceof DSSPrivateKey))
- result = new DSSKeyPairRawCodec();
- else if ((key instanceof GnuRSAPublicKey)
- || (key instanceof GnuRSAPrivateKey))
- result = new RSAKeyPairRawCodec();
- else if (matches(key, "gnu.javax.crypto.key.dh.GnuDHPublicKey")
- || matches(key, "gnu.javax.crypto.key.dh.GnuDHPrivateKey"))
- result = makeInstance("gnu.javax.crypto.key.dh.DHKeyPairRawCodec");
- else if (matches(key, "gnu.javax.crypto.key.srp6.SRPPublicKey")
- || matches(key, "gnu.javax.crypto.key.srp6.SRPPrivateKey"))
- result = makeInstance("gnu.javax.crypto.key.srp6.SRPKeyPairRawCodec");
-
- return result;
- }
-
- /**
- * @param key a {@link Key} for which we want to return an X.509 codec.
- * @return the X.509 codec corresponding to the key, or <code>null</code> if
- * none exists for this key.
- */
- private static IKeyPairCodec getX509Codec(Key key)
- {
- IKeyPairCodec result = null;
- if (key instanceof DSSPublicKey)
- result = new DSSKeyPairX509Codec();
- else if (key instanceof GnuRSAPublicKey)
- result = new RSAKeyPairX509Codec();
-
- return result;
- }
-
- /**
- * @param key a {@link Key} for which we want to return a PKCS#8 codec.
- * @return the PKCS#8 codec corresponding to the key, or <code>null</code> if
- * none exists for this key.
- */
- private static IKeyPairCodec getPKCS8Codec(Key key)
- {
- IKeyPairCodec result = null;
- if (key instanceof DSSPrivateKey)
- result = new DSSKeyPairPKCS8Codec();
- else if (key instanceof GnuRSAPrivateKey)
- result = new RSAKeyPairPKCS8Codec();
-
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java b/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java
deleted file mode 100644
index 151cace..0000000
--- a/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/* KeyPairGeneratorFactory.java --
- Copyright 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.key;
-
-import gnu.java.security.Registry;
-import gnu.java.security.key.dss.DSSKeyPairGenerator;
-import gnu.java.security.key.rsa.RSAKeyPairGenerator;
-
-import java.lang.reflect.Constructor;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A Factory to instantiate asymmetric keypair generators.
- */
-public class KeyPairGeneratorFactory
-{
- /** Trivial constructor to enforce Singleton pattern. */
- private KeyPairGeneratorFactory()
- {
- super();
- }
-
- /**
- * Returns an instance of a keypair generator given its name.
- *
- * @param name the case-insensitive key generator name.
- * @return an instance of the keypair generator, or <code>null</code> if
- * none found.
- */
- public static IKeyPairGenerator getInstance(String name)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- IKeyPairGenerator result = null;
- if (name.equalsIgnoreCase(Registry.DSA_KPG)
- || name.equalsIgnoreCase(Registry.DSS_KPG))
- result = new DSSKeyPairGenerator();
- else if (name.equalsIgnoreCase(Registry.RSA_KPG))
- result = new RSAKeyPairGenerator();
- else if (name.equalsIgnoreCase(Registry.DH_KPG))
- result = makeInstance("gnu.javax.crypto.key.dh.GnuDHKeyPairGenerator");
- else if (name.equalsIgnoreCase(Registry.SRP_KPG))
- result = makeInstance("gnu.javax.crypto.key.srp6.SRPKeyPairGenerator");
-
- return result;
- }
-
- /**
- * Returns a {@link Set} of keypair generator names supported by this
- * <i>Factory</i>. Those keypair generators may be used in conjunction with
- * the digital signature schemes with appendix supported by this library.
- *
- * @return a {@link Set} of keypair generator names (Strings).
- */
- public static final Set getNames()
- {
- HashSet hs = new HashSet();
- hs.add(Registry.DSS_KPG);
- hs.add(Registry.DSA_KPG);
- hs.add(Registry.RSA_KPG);
- hs.add(Registry.DH_KPG);
- hs.add(Registry.SRP_KPG);
- return Collections.unmodifiableSet(hs);
- }
-
- private static IKeyPairGenerator makeInstance(String clazz)
- {
- try
- {
- Class c = Class.forName(clazz);
- Constructor ctor = c.getConstructor(new Class[0]);
- return (IKeyPairGenerator) ctor.newInstance(new Object[0]);
- }
- catch (Exception x)
- {
- throw new IllegalArgumentException(
- "strong crypto key pair generator not available: " + clazz, x);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSKey.java
deleted file mode 100644
index 49f229f..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKey.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/* DSSKey.java --
- Copyright 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.key.dss;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Registry;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.util.FormatUtil;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.Key;
-import java.security.interfaces.DSAKey;
-import java.security.interfaces.DSAParams;
-import java.security.spec.DSAParameterSpec;
-
-/**
- * A base asbtract class for both public and private DSS (Digital Signature
- * Standard) keys. It encapsulates the three DSS numbers: <code>p</code>,
- * <code>q</code> and <code>g</code>.
- * <p>
- * According to the JDK, cryptographic <i>Keys</i> all have a <i>format</i>.
- * The format used in this implementation is called <i>Raw</i>, and basically
- * consists of the raw byte sequences of algorithm parameters. The exact order
- * of the byte sequences and the implementation details are given in each of the
- * relevant <code>getEncoded()</code> methods of each of the private and
- * public keys.
- * <p>
- * <b>IMPORTANT</b>: Under certain circumstances (e.g. in an X.509 certificate
- * with inherited AlgorithmIdentifier's parameters of a SubjectPublicKeyInfo
- * element) these three MPIs may be <code>null</code>.
- *
- * @see DSSPrivateKey#getEncoded
- * @see DSSPublicKey#getEncoded
- */
-public abstract class DSSKey
- implements Key, DSAKey
-{
- /**
- * 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>.
- */
- protected final BigInteger p;
-
- /**
- * A prime divisor of <code>p - 1</code>, where
- * <code>2<sup>159</sup> &lt; q
- * &lt; 2<sup>160</sup></code>.
- */
- protected final 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>).
- */
- protected final BigInteger g;
-
- /**
- * Identifier of the default encoding format to use when externalizing the key
- * material.
- */
- protected final int defaultFormat;
-
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Trivial protected constructor.
- *
- * @param defaultFormat the identifier of the encoding format to use by
- * default when externalizing the key.
- * @param p the DSS parameter <code>p</code>.
- * @param q the DSS parameter <code>q</code>.
- * @param g the DSS parameter <code>g</code>.
- */
- protected DSSKey(int defaultFormat, BigInteger p, BigInteger q, BigInteger g)
- {
- super();
-
- this.defaultFormat = defaultFormat <= 0 ? Registry.RAW_ENCODING_ID
- : defaultFormat;
- this.p = p;
- this.q = q;
- this.g = g;
- }
-
- public DSAParams getParams()
- {
- return new DSAParameterSpec(p, q, g);
- }
-
- public String getAlgorithm()
- {
- return Registry.DSS_KPG;
- }
-
- /** @deprecated see getEncoded(int). */
- public byte[] getEncoded()
- {
- return getEncoded(defaultFormat);
- }
-
- public String getFormat()
- {
- return FormatUtil.getEncodingShortName(defaultFormat);
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of
- * {@link DSAKey} and has the same DSS (Digital Signature Standard) parameter
- * values as this one.
- * <p>
- * Always returns <code>false</code> if the MPIs of this key are
- * <i>inherited</i>. This may be the case when the key is re-constructed from
- * an X.509 certificate with absent or NULL AlgorithmIdentifier's parameters
- * field.
- *
- * @param obj the other non-null DSS key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(Object obj)
- {
- if (hasInheritedParameters())
- return false;
-
- if (obj == null)
- return false;
-
- if (! (obj instanceof DSAKey))
- return false;
-
- DSAKey that = (DSAKey) obj;
- return p.equals(that.getParams().getP())
- && q.equals(that.getParams().getQ())
- && g.equals(that.getParams().getG());
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged(new GetPropertyAction("line.separator"));
- CPStringBuilder sb = new CPStringBuilder(ls)
- .append("defaultFormat=").append(defaultFormat).append(",")
- .append(ls);
- if (hasInheritedParameters())
- sb.append("p=inherited,").append(ls)
- .append("q=inherited,").append(ls)
- .append("g=inherited");
- else
- sb.append("p=0x").append(p.toString(16)).append(",").append(ls)
- .append("q=0x").append(q.toString(16)).append(",").append(ls)
- .append("g=0x").append(g.toString(16));
- str = sb.toString();
- }
- return str;
- }
-
- public abstract byte[] getEncoded(int format);
-
- /**
- * @return <code>true</code> if <code>p</code>, <code>q</code> and
- * <code>g</code> are all <code>null</code>. Returns
- * <code>false</code> otherwise.
- */
- public boolean hasInheritedParameters()
- {
- return p == null && q == null && g == null;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairGenerator.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairGenerator.java
deleted file mode 100644
index 70df734..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairGenerator.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/* DSSKeyPairGenerator.java --
- Copyright 2001, 2002, 2003, 2006, 2010 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.key.dss;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.Registry;
-import gnu.java.security.hash.Sha160;
-import gnu.java.security.key.IKeyPairGenerator;
-import gnu.java.security.util.PRNG;
-
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.spec.DSAParameterSpec;
-import java.util.Map;
-import java.util.logging.Logger;
-
-/**
- * A key-pair generator for asymetric keys to use in conjunction with the DSS
- * (Digital Signature Standard).
- * <p>
- * References:
- * <p>
- * <a href="http://www.itl.nist.gov/fipspubs/fip186.htm">Digital Signature
- * Standard (DSS)</a>, Federal Information Processing Standards Publication
- * 186. National Institute of Standards and Technology.
- */
-public class DSSKeyPairGenerator
- implements IKeyPairGenerator
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(DSSKeyPairGenerator.class.getName()) : null;
-
- /** The BigInteger constant 2. */
- private static final BigInteger TWO = BigInteger.valueOf(2L);
-
- /** Property name of the length (Integer) of the modulus (p) of a DSS key. */
- public static final String MODULUS_LENGTH = "gnu.crypto.dss.L";
-
- /**
- * Property name of the Boolean indicating wether or not to use default pre-
- * computed values of <code>p</code>, <code>q</code> and <code>g</code>
- * for a given modulus length. The ultimate behaviour of this generator with
- * regard to using pre-computed parameter sets will depend on the value of
- * this property and of the following one {@link #STRICT_DEFAULTS}:
- * <ol>
- * <li>If this property is {@link Boolean#FALSE} then this generator will
- * accept being setup for generating parameters for any modulus length
- * provided the modulus length is between <code>512</code> and
- * <code>1024</code>, and is of the form <code>512 + 64 * n</code>. In
- * addition, a new paramter set will always be generated; i.e. no pre-
- * computed values are used.</li>
- * <li>If this property is {@link Boolean#TRUE} and the value of
- * {@link #STRICT_DEFAULTS} is also {@link Boolean#TRUE} then this generator
- * will only accept being setup for generating parameters for modulus lengths
- * of <code>512</code>, <code>768</code> and <code>1024</code>. Any
- * other value, of the modulus length, even if between <code>512</code> and
- * <code>1024</code>, and of the form <code>512 + 64 * n</code>, will
- * cause an {@link IllegalArgumentException} to be thrown. When those modulus
- * length (<code>512</code>, <code>768</code>, and <code>1024</code>)
- * are specified, the paramter set is always the same.</li>
- * <li>Finally, if this property is {@link Boolean#TRUE} and the value of
- * {@link #STRICT_DEFAULTS} is {@link Boolean#FALSE} then this generator will
- * behave as in point 1 above, except that it will use pre-computed values
- * when possible; i.e. the modulus length is one of <code>512</code>,
- * <code>768</code>, or <code>1024</code>.</li>
- * </ol>
- * The default value of this property is {@link Boolean#TRUE}.
- */
- public static final String USE_DEFAULTS = "gnu.crypto.dss.use.defaults";
-
- /**
- * Property name of the Boolean indicating wether or not to generate new
- * parameters, even if the modulus length <i>L</i> is not one of the pre-
- * computed defaults (value {@link Boolean#FALSE}), or throw an exception
- * (value {@link Boolean#TRUE}) -- the exception in this case is an
- * {@link IllegalArgumentException}. The default value for this property is
- * {@link Boolean#FALSE}. The ultimate behaviour of this generator will
- * depend on the values of this and {@link #USE_DEFAULTS} properties -- see
- * {@link #USE_DEFAULTS} for more information.
- */
- public static final String STRICT_DEFAULTS = "gnu.crypto.dss.strict.defaults";
-
- /**
- * Property name of an optional {@link SecureRandom} instance to use. The
- * default is to use a classloader singleton from {@link PRNG}.
- */
- public static final String SOURCE_OF_RANDOMNESS = "gnu.crypto.dss.prng";
-
- /**
- * Property name of an optional {@link DSAParameterSpec} instance to use for
- * this generator's <code>p</code>, <code>q</code>, and <code>g</code>
- * values. The default is to generate these values or use pre-computed ones,
- * depending on the value of the <code>USE_DEFAULTS</code> attribute.
- */
- public static final String DSS_PARAMETERS = "gnu.crypto.dss.params";
-
- /**
- * Property name of the preferred encoding format to use when externalizing
- * generated instance of key-pairs from this generator. The property is taken
- * to be an {@link Integer} that encapsulates an encoding format identifier.
- */
- public static final String PREFERRED_ENCODING_FORMAT = "gnu.crypto.dss.encoding";
-
- /** Default value for the modulus length. */
- public static final int DEFAULT_MODULUS_LENGTH = 1024;
-
- /** Default encoding format to use when none was specified. */
- private static final int DEFAULT_ENCODING_FORMAT = Registry.RAW_ENCODING_ID;
-
- /** Initial SHS context. */
- private static final int[] T_SHS = new int[] {
- 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0
- };
-
- // from jdk1.3.1/docs/guide/security/CryptoSpec.html#AppB
- public static final DSAParameterSpec KEY_PARAMS_512 = new DSAParameterSpec(
- new BigInteger(
- "fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae"
- + "01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17", 16),
- new BigInteger("962eddcc369cba8ebb260ee6b6a126d9346e38c5", 16),
- new BigInteger(
- "678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e"
- + "35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4", 16));
- public static final DSAParameterSpec KEY_PARAMS_768 = new DSAParameterSpec(
- new BigInteger(
- "e9e642599d355f37c97ffd3567120b8e25c9cd43e927b3a9670fbec5d8901419"
- + "22d2c3b3ad2480093799869d1e846aab49fab0ad26d2ce6a22219d470bce7d77"
- + "7d4a21fbe9c270b57f607002f3cef8393694cf45ee3688c11a8c56ab127a3daf", 16),
- new BigInteger("9cdbd84c9f1ac2f38d0f80f42ab952e7338bf511", 16),
- new BigInteger(
- "30470ad5a005fb14ce2d9dcd87e38bc7d1b1c5facbaecbe95f190aa7a31d23c4"
- + "dbbcbe06174544401a5b2c020965d8c2bd2171d3668445771f74ba084d2029d8"
- + "3c1c158547f3a9f1a2715be23d51ae4d3e5a1f6a7064f316933a346d3f529252", 16));
- public static final DSAParameterSpec KEY_PARAMS_1024 = new DSAParameterSpec(
- new BigInteger(
- "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669"
- + "455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b7"
- + "6b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb"
- + "83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7", 16),
- new BigInteger("9760508f15230bccb292b982a2eb840bf0581cf5", 16),
- new BigInteger(
- "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d078267"
- + "5159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e1"
- + "3c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243b"
- + "cca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a", 16));
-
- private static final BigInteger TWO_POW_160 = TWO.pow(160);
-
- /** The length of the modulus of DSS keys generated by this instance. */
- private int L;
-
- /** The optional {@link SecureRandom} instance to use. */
- private SecureRandom rnd = null;
-
- private BigInteger seed;
-
- private BigInteger counter;
-
- private BigInteger p;
-
- private BigInteger q;
-
- private BigInteger e;
-
- private BigInteger g;
-
- private BigInteger XKEY;
-
- /** Our default source of randomness. */
- private PRNG prng = null;
-
- /** Preferred encoding format of generated keys. */
- private int preferredFormat;
-
- public String name()
- {
- return Registry.DSS_KPG;
- }
-
- /**
- * Configures this instance.
- *
- * @param attributes the map of name/value pairs to use.
- * @exception IllegalArgumentException if the designated MODULUS_LENGTH value
- * is not greater than 512, less than 1024 and not of the form
- * <code>512 + 64j</code>.
- */
- public void setup(Map attributes)
- {
- // find out the modulus length
- Integer l = (Integer) attributes.get(MODULUS_LENGTH);
- L = (l == null ? DEFAULT_MODULUS_LENGTH : l.intValue());
- if ((L % 64) != 0 || L < 512 || L > 1024)
- throw new IllegalArgumentException(MODULUS_LENGTH);
-
- // should we use the default pre-computed params?
- Boolean useDefaults = (Boolean) attributes.get(USE_DEFAULTS);
- if (useDefaults == null)
- useDefaults = Boolean.TRUE;
-
- Boolean strictDefaults = (Boolean) attributes.get(STRICT_DEFAULTS);
- if (strictDefaults == null)
- strictDefaults = Boolean.FALSE;
-
- // are we given a set of DSA params or we shall use/generate our own?
- DSAParameterSpec params = (DSAParameterSpec) attributes.get(DSS_PARAMETERS);
- if (params != null)
- {
- p = params.getP();
- q = params.getQ();
- g = params.getG();
- }
- else if (useDefaults.equals(Boolean.TRUE))
- {
- switch (L)
- {
- case 512:
- p = KEY_PARAMS_512.getP();
- q = KEY_PARAMS_512.getQ();
- g = KEY_PARAMS_512.getG();
- break;
- case 768:
- p = KEY_PARAMS_768.getP();
- q = KEY_PARAMS_768.getQ();
- g = KEY_PARAMS_768.getG();
- break;
- case 1024:
- p = KEY_PARAMS_1024.getP();
- q = KEY_PARAMS_1024.getQ();
- g = KEY_PARAMS_1024.getG();
- break;
- default:
- if (strictDefaults.equals(Boolean.TRUE))
- throw new IllegalArgumentException(
- "Does not provide default parameters for " + L
- + "-bit modulus length");
- else
- {
- p = null;
- q = null;
- g = null;
- }
- }
- }
- else
- {
- p = null;
- q = null;
- g = null;
- }
- // do we have a SecureRandom, or should we use our own?
- rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS);
- // what is the preferred encoding format
- Integer formatID = (Integer) attributes.get(PREFERRED_ENCODING_FORMAT);
- preferredFormat = formatID == null ? DEFAULT_ENCODING_FORMAT
- : formatID.intValue();
- // set the seed-key
- byte[] kb = new byte[20]; // we need 160 bits of randomness
- nextRandomBytes(kb);
- XKEY = new BigInteger(1, kb).setBit(159).setBit(0);
- }
-
- public KeyPair generate()
- {
- if (p == null)
- {
- BigInteger[] params = new FIPS186(L, rnd).generateParameters();
- seed = params[FIPS186.DSA_PARAMS_SEED];
- counter = params[FIPS186.DSA_PARAMS_COUNTER];
- q = params[FIPS186.DSA_PARAMS_Q];
- p = params[FIPS186.DSA_PARAMS_P];
- e = params[FIPS186.DSA_PARAMS_E];
- g = params[FIPS186.DSA_PARAMS_G];
- if (Configuration.DEBUG)
- {
- log.fine("seed: " + seed.toString(16));
- log.fine("counter: " + counter.intValue());
- log.fine("q: " + q.toString(16));
- log.fine("p: " + p.toString(16));
- log.fine("e: " + e.toString(16));
- log.fine("g: " + g.toString(16));
- }
- }
- BigInteger x = nextX();
- BigInteger y = g.modPow(x, p);
- PublicKey pubK = new DSSPublicKey(preferredFormat, p, q, g, y);
- PrivateKey secK = new DSSPrivateKey(preferredFormat, p, q, g, x);
- return new KeyPair(pubK, secK);
- }
-
- /**
- * This method applies the following algorithm described in 3.1 of FIPS-186:
- * <ol>
- * <li>XSEED = optional user input.</li>
- * <li>XVAL = (XKEY + XSEED) mod 2<sup>b</sup>.</li>
- * <li>x = G(t, XVAL) mod q.</li>
- * <li>XKEY = (1 + XKEY + x) mod 2<sup>b</sup>.</li>
- * </ol>
- * <p>
- * Where <code>b</code> is the length of a secret b-bit seed-key (XKEY).
- * <p>
- * Note that in this implementation, XSEED, the optional user input, is always
- * zero.
- */
- private synchronized BigInteger nextX()
- {
- byte[] xk = XKEY.toByteArray();
- byte[] in = new byte[64]; // 512-bit block for SHS
- System.arraycopy(xk, 0, in, 0, xk.length);
- int[] H = Sha160.G(T_SHS[0], T_SHS[1], T_SHS[2], T_SHS[3], T_SHS[4], in, 0);
- byte[] h = new byte[20];
- for (int i = 0, j = 0; i < 5; i++)
- {
- h[j++] = (byte)(H[i] >>> 24);
- h[j++] = (byte)(H[i] >>> 16);
- h[j++] = (byte)(H[i] >>> 8);
- h[j++] = (byte) H[i];
- }
- BigInteger result = new BigInteger(1, h).mod(q);
- XKEY = XKEY.add(result).add(BigInteger.ONE).mod(TWO_POW_160);
- return result;
- }
-
- /**
- * Fills the designated byte array with random data.
- *
- * @param buffer the byte array to fill with random data.
- */
- private void nextRandomBytes(byte[] buffer)
- {
- if (rnd != null)
- rnd.nextBytes(buffer);
- else
- getDefaultPRNG().nextBytes(buffer);
- }
-
- private PRNG getDefaultPRNG()
- {
- if (prng == null)
- prng = PRNG.getInstance();
-
- return prng;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java
deleted file mode 100644
index 1806ecf..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/* DSSKeyPairPKCS8Codec.java -- PKCS#8 Encoding/Decoding handler
- Copyright (C) 2006, 2010 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.key.dss;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-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.key.IKeyPairCodec;
-import gnu.java.security.util.DerUtil;
-import gnu.java.security.util.Util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidParameterException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-/**
- * An implementation of an {@link IKeyPairCodec} that knows how to encode /
- * decode PKCS#8 ASN.1 external representation of DSS private keys.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class DSSKeyPairPKCS8Codec
- implements IKeyPairCodec
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(DSSKeyPairPKCS8Codec.class.getName()) : null;
-
- private static final OID DSA_ALG_OID = new OID(Registry.DSA_OID_STRING);
-
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return PKCS8_FORMAT;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- throw new InvalidParameterException("Wrong format for public keys");
- }
-
- /**
- * Returns the PKCS#8 ASN.1 <i>PrivateKeyInfo</i> representation of a DSA
- * private key. The ASN.1 specification is as follows:
- *
- * <pre>
- * PrivateKeyInfo ::= SEQUENCE {
- * version INTEGER, -- MUST be 0
- * privateKeyAlgorithm AlgorithmIdentifier,
- * privateKey OCTET STRING
- * }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * DssParams ::= SEQUENCE {
- * p INTEGER,
- * q INTEGER,
- * g INTEGER
- * }
- * </pre>
- *
- * @return the DER encoded form of the ASN.1 representation of the
- * <i>PrivateKeyInfo</i> field in an X.509 certificate.
- * @throw InvalidParameterException if an error occurs during the marshalling
- * process.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- if (! (key instanceof DSSPrivateKey))
- throw new InvalidParameterException("Wrong key type");
-
- DERValue derVersion = new DERValue(DER.INTEGER, BigInteger.ZERO);
-
- DERValue derOID = new DERValue(DER.OBJECT_IDENTIFIER, DSA_ALG_OID);
-
- DSSPrivateKey pk = (DSSPrivateKey) key;
- BigInteger p = pk.getParams().getP();
- BigInteger q = pk.getParams().getQ();
- BigInteger g = pk.getParams().getG();
- BigInteger x = pk.getX();
-
- ArrayList params = new ArrayList(3);
- params.add(new DERValue(DER.INTEGER, p));
- params.add(new DERValue(DER.INTEGER, q));
- params.add(new DERValue(DER.INTEGER, g));
- DERValue derParams = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, params);
-
- ArrayList algorithmID = new ArrayList(2);
- algorithmID.add(derOID);
- algorithmID.add(derParams);
- DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- algorithmID);
-
- // The OCTET STRING is the DER encoding of an INTEGER.
- DERValue derX = new DERValue(DER.INTEGER, x);
- DERValue derPrivateKey = new DERValue(DER.OCTET_STRING, derX.getEncoded());
-
- ArrayList pki = new ArrayList(3);
- pki.add(derVersion);
- pki.add(derAlgorithmID);
- pki.add(derPrivateKey);
- DERValue derPKI = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, pki);
-
- byte[] result;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try
- {
- DERWriter.write(baos, derPKI);
- result = baos.toByteArray();
- }
- catch (IOException e)
- {
- InvalidParameterException y = new InvalidParameterException(e.getMessage());
- y.initCause(e);
- throw y;
- }
- return result;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public PublicKey decodePublicKey(byte[] input)
- {
- throw new InvalidParameterException("Wrong format for public keys");
- }
-
- /**
- * @param input the byte array to unmarshall into a valid DSS
- * {@link PrivateKey} instance. MUST NOT be null.
- * @return a new instance of a {@link DSSPrivateKey} decoded from the
- * <i>PrivateKeyInfo</i> material fed as <code>input</code>.
- * @throw InvalidParameterException if an exception occurs during the
- * unmarshalling process.
- */
- public PrivateKey decodePrivateKey(byte[] input)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "decodePrivateKey");
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- BigInteger version, p, q, g, x;
- DERReader der = new DERReader(input);
- try
- {
- DERValue derPKI = der.read();
- DerUtil.checkIsConstructed(derPKI, "Wrong PrivateKeyInfo field");
-
- DERValue derVersion = der.read();
- if (! (derVersion.getValue() instanceof BigInteger))
- throw new InvalidParameterException("Wrong Version field");
-
- version = (BigInteger) derVersion.getValue();
- if (version.compareTo(BigInteger.ZERO) != 0)
- throw new InvalidParameterException("Unexpected Version: " + version);
-
- DERValue derAlgoritmID = der.read();
- DerUtil.checkIsConstructed(derAlgoritmID, "Wrong AlgorithmIdentifier field");
-
- DERValue derOID = der.read();
- OID algOID = (OID) derOID.getValue();
- if (! algOID.equals(DSA_ALG_OID))
- throw new InvalidParameterException("Unexpected OID: " + algOID);
-
- 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();
-
- val = der.read();
- if (Configuration.DEBUG)
- log.fine("val = " + val);
- byte[] xBytes = (byte[]) val.getValue();
- if (Configuration.DEBUG)
- log.fine(Util.dumpString(xBytes, "xBytes: "));
- DERReader der2 = new DERReader(xBytes);
- val = der2.read();
- DerUtil.checkIsBigInteger(val, "Wrong X field");
- x = (BigInteger) val.getValue();
- }
- catch (IOException e)
- {
- InvalidParameterException y = new InvalidParameterException(e.getMessage());
- y.initCause(e);
- throw y;
- }
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "decodePrivateKey");
- return new DSSPrivateKey(Registry.PKCS8_ENCODING_ID, p, q, g, x);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java
deleted file mode 100644
index 5b93c6b..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/* DSSKeyPairRawCodec.java --
- Copyright 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.key.dss;
-
-import gnu.java.security.Registry;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.io.ByteArrayOutputStream;
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-
-/**
- * An object that implements the {@link IKeyPairCodec} operations for the
- * <i>Raw</i> format to use with DSS keypairs.
- */
-public class DSSKeyPairRawCodec
- implements IKeyPairCodec
-{
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return RAW_FORMAT;
- }
-
- /**
- * Returns the encoded form of the designated DSS (Digital Signature Standard)
- * public key according to the <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for a DSA public key, in this implementation, is a
- * byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_DSS_PUBLIC_KEY},
- * <li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>p</code> in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>p</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>q</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>q</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>g</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>g</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>y</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>y</code>,
- * </li>
- * </ol>
- *
- * @param key the key to encode.
- * @return the <i>Raw</i> format encoding of the designated key.
- * @throws IllegalArgumentException if the designated key is not a DSS
- * (Digital Signature Standard) one.
- * @see Registry#MAGIC_RAW_DSS_PUBLIC_KEY
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- if (! (key instanceof DSSPublicKey))
- throw new IllegalArgumentException("key");
-
- DSSPublicKey dssKey = (DSSPublicKey) key;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_DSS_PUBLIC_KEY[0]);
- baos.write(Registry.MAGIC_RAW_DSS_PUBLIC_KEY[1]);
- baos.write(Registry.MAGIC_RAW_DSS_PUBLIC_KEY[2]);
- baos.write(Registry.MAGIC_RAW_DSS_PUBLIC_KEY[3]);
- // version
- baos.write(0x01);
- // p
- byte[] buffer = dssKey.getParams().getP().toByteArray();
- int length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // q
- buffer = dssKey.getParams().getQ().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // g
- buffer = dssKey.getParams().getG().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // y
- buffer = dssKey.getY().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public PublicKey decodePublicKey(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_DSS_PUBLIC_KEY[0]
- || k[1] != Registry.MAGIC_RAW_DSS_PUBLIC_KEY[1]
- || k[2] != Registry.MAGIC_RAW_DSS_PUBLIC_KEY[2]
- || k[3] != Registry.MAGIC_RAW_DSS_PUBLIC_KEY[3])
- throw new IllegalArgumentException("magic");
-
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
-
- int i = 5;
- int l;
- byte[] buffer;
- // p
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger p = new BigInteger(1, buffer);
- // q
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger q = new BigInteger(1, buffer);
- // g
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger g = new BigInteger(1, buffer);
- // y
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger y = new BigInteger(1, buffer);
- return new DSSPublicKey(p, q, g, y);
- }
-
- /**
- * Returns the encoded form of the designated DSS (Digital Signature Standard)
- * private key according to the <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for a DSA private key, in this implementation, is a
- * byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_DSS_PRIVATE_KEY},
- * <li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>p</code> in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>p</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>q</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>q</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>g</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>g</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSA parameter
- * <code>x</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSA parameter <code>x</code>,
- * </li>
- * </ol>
- *
- * @param key the key to encode.
- * @return the <i>Raw</i> format encoding of the designated key.
- * @throws IllegalArgumentException if the designated key is not a DSS
- * (Digital Signature Standard) one.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- if (! (key instanceof DSSPrivateKey))
- throw new IllegalArgumentException("key");
-
- DSSPrivateKey dssKey = (DSSPrivateKey) key;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_DSS_PRIVATE_KEY[0]);
- baos.write(Registry.MAGIC_RAW_DSS_PRIVATE_KEY[1]);
- baos.write(Registry.MAGIC_RAW_DSS_PRIVATE_KEY[2]);
- baos.write(Registry.MAGIC_RAW_DSS_PRIVATE_KEY[3]);
- // version
- baos.write(0x01);
- // p
- byte[] buffer = dssKey.getParams().getP().toByteArray();
- int length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // q
- buffer = dssKey.getParams().getQ().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // g
- buffer = dssKey.getParams().getG().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // x
- buffer = dssKey.getX().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public PrivateKey decodePrivateKey(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_DSS_PRIVATE_KEY[0]
- || k[1] != Registry.MAGIC_RAW_DSS_PRIVATE_KEY[1]
- || k[2] != Registry.MAGIC_RAW_DSS_PRIVATE_KEY[2]
- || k[3] != Registry.MAGIC_RAW_DSS_PRIVATE_KEY[3])
- throw new IllegalArgumentException("magic");
-
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
-
- int i = 5;
- int l;
- byte[] buffer;
- // p
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger p = new BigInteger(1, buffer);
- // q
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger q = new BigInteger(1, buffer);
- // g
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger g = new BigInteger(1, buffer);
- // x
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger x = new BigInteger(1, buffer);
- return new DSSPrivateKey(p, q, g, x);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairX509Codec.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairX509Codec.java
deleted file mode 100644
index 8c26910..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairX509Codec.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/* DSSKeyPairX509Codec.java -- X.509 Encoding/Decoding handler
- 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.key.dss;
-
-import gnu.java.security.OID;
-import gnu.java.security.Registry;
-import gnu.java.security.der.BitString;
-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.key.IKeyPairCodec;
-import gnu.java.security.util.DerUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidParameterException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.ArrayList;
-
-/**
- * An implementation of an {@link IKeyPairCodec} that knows how to encode /
- * decode X.509 ASN.1 external representation of DSS public keys.
- */
-public class DSSKeyPairX509Codec
- implements IKeyPairCodec
-{
- private static final OID DSA_ALG_OID = new OID(Registry.DSA_OID_STRING);
-
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return X509_FORMAT;
- }
-
- /**
- * Returns the X.509 ASN.1 <i>SubjectPublicKeyInfo</i> representation of a
- * DSA public key. The ASN.1 specification, as defined in RFC-3280, and
- * RFC-2459, is as follows:
- *
- * <pre>
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING
- * }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * DssParams ::= SEQUENCE {
- * p INTEGER,
- * q INTEGER,
- * g INTEGER
- * }
- * </pre>
- * <p>
- * Note that RFC-3280 (page 79) implies that some certificates MAY have an
- * absent, or NULL, parameters field in their AlgorithmIdentifier element,
- * implying that those parameters MUST be <i>inherited</i> from another
- * certificate. This implementation, encodes a <i>NULL</i> element as the DER
- * value of the parameters field when such is the case.
- * <p>
- * The <i>subjectPublicKey</i> field, which is a BIT STRING, contains the
- * DER-encoded form of the DSA public key as an INTEGER.
- *
- * <pre>
- * DSAPublicKey ::= INTEGER -- public key, Y
- * </pre>
- *
- * @param key the {@link PublicKey} instance to encode. MUST be an instance of
- * {@link DSSPublicKey}.
- * @return the ASN.1 representation of the <i>SubjectPublicKeyInfo</i> in an
- * X.509 certificate.
- * @throw InvalidParameterException if <code>key</code> is not an instance
- * of {@link DSSPublicKey} or if an exception occurs during the
- * marshalling process.
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- if (! (key instanceof DSSPublicKey))
- throw new InvalidParameterException("key");
-
- DERValue derOID = new DERValue(DER.OBJECT_IDENTIFIER, DSA_ALG_OID);
-
- DSSPublicKey dssKey = (DSSPublicKey) key;
- DERValue derParams;
- if (dssKey.hasInheritedParameters())
- derParams = new DERValue(DER.NULL, null);
- else
- {
- BigInteger p = dssKey.getParams().getP();
- BigInteger q = dssKey.getParams().getQ();
- BigInteger g = dssKey.getParams().getG();
-
- 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);
- derParams = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, params);
- }
-
- ArrayList algorithmID = new ArrayList(2);
- algorithmID.add(derOID);
- algorithmID.add(derParams);
- DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- algorithmID);
-
- BigInteger y = dssKey.getY();
- DERValue derDSAPublicKey = new DERValue(DER.INTEGER, y);
- byte[] yBytes = derDSAPublicKey.getEncoded();
- DERValue derSPK = new DERValue(DER.BIT_STRING, new BitString(yBytes));
-
- ArrayList spki = new ArrayList(2);
- spki.add(derAlgorithmID);
- spki.add(derSPK);
- DERValue derSPKI = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, spki);
-
- byte[] result;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try
- {
- DERWriter.write(baos, derSPKI);
- result = baos.toByteArray();
- }
- catch (IOException x)
- {
- InvalidParameterException e = new InvalidParameterException(x.getMessage());
- e.initCause(x);
- throw e;
- }
- return result;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- throw new InvalidParameterException("Wrong format for private keys");
- }
-
- /**
- * @param input the byte array to unmarshall into a valid DSS
- * {@link PublicKey} instance. MUST NOT be null.
- * @return a new instance of a {@link DSSPublicKey} decoded from the
- * <i>SubjectPublicKeyInfo</i> material in an X.509 certificate.
- * @throw InvalidParameterException if an exception occurs during the
- * unmarshalling process.
- */
- public PublicKey decodePublicKey(byte[] input)
- {
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- BigInteger p = null;
- BigInteger g = null;
- BigInteger q = null;
- BigInteger y;
- DERReader der = new DERReader(input);
- try
- {
- DERValue derSPKI = der.read();
- DerUtil.checkIsConstructed(derSPKI, "Wrong SubjectPublicKeyInfo field");
-
- DERValue derAlgorithmID = der.read();
- DerUtil.checkIsConstructed(derAlgorithmID, "Wrong AlgorithmIdentifier field");
-
- DERValue derOID = der.read();
- if (! (derOID.getValue() instanceof OID))
- throw new InvalidParameterException("Wrong Algorithm field");
-
- OID algOID = (OID) derOID.getValue();
- if (! algOID.equals(DSA_ALG_OID))
- throw new InvalidParameterException("Unexpected OID: " + algOID);
-
- DERValue val = der.read();
- // RFC-3280, page 79 states: "If the subjectPublicKeyInfo field of the
- // certificate contains an algorithm field with null parameters or
- // parameters are omitted, compare the certificate subjectPublicKey
- // algorithm to the working_public_key_algorithm. If the certificate
- // subjectPublicKey algorithm and the working_public_key_algorithm are
- // different, set the working_public_key_parameters to null."
- // in other words, the parameters field of an AlgorithmIdentifier
- // element MAY NOT be present at all, or if present MAY be NULL!
- // the Mauve test ValidDSAParameterInheritenceTest5, in
- // gnu.testlet.java.security.cert.pkix.pkits, is/was failing because
- // of this.
- if (val.getTag() == DER.NULL)
- val = der.read();
- else if (val.isConstructed())
- {
- 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();
-
- val = der.read();
- }
-
- if (! (val.getValue() instanceof BitString))
- throw new InvalidParameterException("Wrong SubjectPublicKey field");
-
- byte[] yBytes = ((BitString) val.getValue()).toByteArray();
-
- DERReader dsaPub = new DERReader(yBytes);
- val = dsaPub.read();
- DerUtil.checkIsBigInteger(val, "Wrong Y field");
- y = (BigInteger) val.getValue();
- }
- catch (IOException x)
- {
- InvalidParameterException e = new InvalidParameterException(x.getMessage());
- e.initCause(x);
- throw e;
- }
- return new DSSPublicKey(Registry.X509_ENCODING_ID, p, q, g, y);
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public PrivateKey decodePrivateKey(byte[] input)
- {
- throw new InvalidParameterException("Wrong format for private keys");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java
deleted file mode 100644
index de3668c..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/* DSSPrivateKey.java --
- Copyright 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.key.dss;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.Registry;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.PrivateKey;
-import java.security.interfaces.DSAPrivateKey;
-
-/**
- * An object that embodies a DSS (Digital Signature Standard) private key.
- *
- * @see #getEncoded
- */
-public class DSSPrivateKey
- extends DSSKey
- implements PrivateKey, DSAPrivateKey
-{
- /**
- * A randomly or pseudorandomly generated integer with <code>0 &lt; x &lt;
- * q</code>.
- */
- private final BigInteger x;
-
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Convenience constructor. Calls the constructor with 5 arguments passing
- * {@link Registry#RAW_ENCODING_ID} as the identifier of the preferred
- * encoding format.
- *
- * @param p the public modulus.
- * @param q the public prime divisor of <code>p-1</code>.
- * @param g a generator of the unique cyclic group <code>Z<sup>*</sup>
- * <sub>p</sub></code>.
- * @param x the private key part.
- */
- public DSSPrivateKey(BigInteger p, BigInteger q, BigInteger g, BigInteger x)
- {
- this(Registry.RAW_ENCODING_ID, p, q, g, x);
- }
-
- /**
- * Constructs a new instance of a <code>DSSPrivateKey</code> given the
- * designated arguments.
- *
- * @param preferredFormat the indetifier of the preferred encoding format to
- * use when externalizing this key.
- * @param p the public modulus.
- * @param q the public prime divisor of <code>p-1</code>.
- * @param g a generator of the unique cyclic group <code>Z<sup>*</sup>
- * <sub>p</sub></code>.
- * @param x the private key part.
- */
- public DSSPrivateKey(int preferredFormat, BigInteger p, BigInteger q,
- BigInteger g, BigInteger x)
- {
- super(preferredFormat == Registry.ASN1_ENCODING_ID ? Registry.PKCS8_ENCODING_ID
- : preferredFormat,
- p, q, g);
- this.x = x;
- }
-
- /**
- * A class method that takes the output of the <code>encodePrivateKey()</code>
- * method of a DSS keypair codec object (an instance implementing
- * {@link gnu.java.security.key.IKeyPairCodec} for DSS keys, and re-constructs
- * an instance of this object.
- *
- * @param k the contents of a previously encoded instance of this object.
- * @exception ArrayIndexOutOfBoundsException if there is not enough bytes, in
- * <code>k</code>, to represent a valid encoding of an
- * instance of this object.
- * @exception IllegalArgumentException if the byte sequence does not represent
- * a valid encoding of an instance of this object.
- */
- public static DSSPrivateKey valueOf(byte[] k)
- {
- // try RAW codec
- if (k[0] == Registry.MAGIC_RAW_DSS_PRIVATE_KEY[0])
- try
- {
- return (DSSPrivateKey) new DSSKeyPairRawCodec().decodePrivateKey(k);
- }
- catch (IllegalArgumentException ignored)
- {
- }
- // try PKCS#8 codec
- return (DSSPrivateKey) new DSSKeyPairPKCS8Codec().decodePrivateKey(k);
- }
-
- public BigInteger getX()
- {
- return x;
- }
-
- /**
- * Returns the encoded form of this private key according to the designated
- * format.
- *
- * @param format the desired format identifier of the resulting encoding.
- * @return the byte sequence encoding this key according to the designated
- * format.
- * @exception IllegalArgumentException if the format is not supported.
- * @see DSSKeyPairRawCodec
- */
- public byte[] getEncoded(int format)
- {
- byte[] result;
- switch (format)
- {
- case IKeyPairCodec.RAW_FORMAT:
- result = new DSSKeyPairRawCodec().encodePrivateKey(this);
- break;
- case IKeyPairCodec.PKCS8_FORMAT:
- result = new DSSKeyPairPKCS8Codec().encodePrivateKey(this);
- break;
- default:
- throw new IllegalArgumentException("Unsupported encoding format: "
- + format);
- }
- return result;
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of
- * {@link DSAPrivateKey} and has the same DSS (Digital Signature Standard)
- * parameter values as this one.
- *
- * @param obj the other non-null DSS key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(Object obj)
- {
- if (obj == null)
- return false;
-
- if (! (obj instanceof DSAPrivateKey))
- return false;
-
- DSAPrivateKey that = (DSAPrivateKey) obj;
- return super.equals(that) && x.equals(that.getX());
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged
- (new GetPropertyAction("line.separator"));
- str = new CPStringBuilder(this.getClass().getName()).append("(")
- .append(super.toString()).append(",").append(ls)
- .append("x=0x").append(Configuration.DEBUG ? x.toString(16)
- : "**...*").append(ls)
- .append(")")
- .toString();
- }
- return str;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java
deleted file mode 100644
index d7c1afe..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/* DSSPublicKey.java --
- Copyright 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.key.dss;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Registry;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.PublicKey;
-import java.security.interfaces.DSAPublicKey;
-
-/**
- * An object that embodies a DSS (Digital Signature Standard) public key.
- *
- * @see #getEncoded
- */
-public class DSSPublicKey
- extends DSSKey
- implements PublicKey, DSAPublicKey
-{
- /**
- * <code>y = g<sup>x</sup> mod p</code> where <code>x</code> is the
- * private part of the DSA key.
- */
- private final BigInteger y;
-
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Conveience constructor. Calls the constructor with 5 arguments passing
- * {@link Registry#RAW_ENCODING_ID} as the identifier of the preferred
- * encoding format.
- *
- * @param p the public modulus.
- * @param q the public prime divisor of <code>p-1</code>.
- * @param g a generator of the unique cyclic group <code>Z<sup>*</sup>
- * <sub>p</sub></code>.
- * @param y the public key part.
- */
- public DSSPublicKey(BigInteger p, BigInteger q, BigInteger g, BigInteger y)
- {
- this(Registry.RAW_ENCODING_ID, p, q, g, y);
- }
-
- /**
- * Constructs a new instance of <code>DSSPublicKey</code> given the
- * designated arguments.
- *
- * @param preferredFormat the identifier of the preferred encoding format to
- * use when externalizing this key.
- * @param p the public modulus.
- * @param q the public prime divisor of <code>p-1</code>.
- * @param g a generator of the unique cyclic group <code>Z<sup>*</sup>
- * <sub>p</sub></code>.
- * @param y the public key part.
- */
- public DSSPublicKey(int preferredFormat, BigInteger p, BigInteger q,
- BigInteger g, BigInteger y)
- {
- super(preferredFormat == Registry.ASN1_ENCODING_ID ? Registry.X509_ENCODING_ID
- : preferredFormat,
- p, q, g);
- this.y = y;
- }
-
- /**
- * A class method that takes the output of the <code>encodePublicKey()</code>
- * method of a DSS keypair codec object (an instance implementing
- * {@link gnu.java.security.key.IKeyPairCodec} for DSS keys, and re-constructs
- * an instance of this object.
- *
- * @param k the contents of a previously encoded instance of this object.
- * @exception ArrayIndexOutOfBoundsException if there is not enough bytes, in
- * <code>k</code>, to represent a valid encoding of an
- * instance of this object.
- * @exception IllegalArgumentException if the byte sequence does not represent
- * a valid encoding of an instance of this object.
- */
- public static DSSPublicKey valueOf(byte[] k)
- {
- // try RAW codec
- if (k[0] == Registry.MAGIC_RAW_DSS_PUBLIC_KEY[0])
- try
- {
- return (DSSPublicKey) new DSSKeyPairRawCodec().decodePublicKey(k);
- }
- catch (IllegalArgumentException ignored)
- {
- }
- // try X.509 codec
- return (DSSPublicKey) new DSSKeyPairX509Codec().decodePublicKey(k);
- }
-
- public BigInteger getY()
- {
- return y;
- }
-
- /**
- * Returns the encoded form of this public key according to the designated
- * format.
- *
- * @param format the desired format identifier of the resulting encoding.
- * @return the byte sequence encoding this key according to the designated
- * format.
- * @exception IllegalArgumentException if the format is not supported.
- * @see DSSKeyPairRawCodec
- */
- public byte[] getEncoded(int format)
- {
- byte[] result;
- switch (format)
- {
- case IKeyPairCodec.RAW_FORMAT:
- result = new DSSKeyPairRawCodec().encodePublicKey(this);
- break;
- case IKeyPairCodec.X509_FORMAT:
- result = new DSSKeyPairX509Codec().encodePublicKey(this);
- break;
- default:
- throw new IllegalArgumentException("Unsupported encoding format: "
- + format);
- }
- return result;
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of
- * {@link DSAPublicKey} and has the same DSS (Digital Signature Standard)
- * parameter values as this one.
- *
- * @param obj the other non-null DSS key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(Object obj)
- {
- if (obj == null)
- return false;
-
- if (! (obj instanceof DSAPublicKey))
- return false;
-
- DSAPublicKey that = (DSAPublicKey) obj;
- return super.equals(that) && y.equals(that.getY());
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged
- (new GetPropertyAction("line.separator"));
- str = new CPStringBuilder(this.getClass().getName()).append("(")
- .append(super.toString()).append(",").append(ls)
- .append("y=0x").append(y.toString(16)).append(ls)
- .append(")")
- .toString();
- }
- return str;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/dss/FIPS186.java b/libjava/classpath/gnu/java/security/key/dss/FIPS186.java
deleted file mode 100644
index 5d371e1..0000000
--- a/libjava/classpath/gnu/java/security/key/dss/FIPS186.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/* FIPS186.java --
- Copyright 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.key.dss;
-
-import gnu.java.security.hash.Sha160;
-import gnu.java.security.util.PRNG;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-/**
- * An implementation of the DSA parameters generation as described in FIPS-186.
- * <p>
- * References:
- * <p>
- * <a href="http://www.itl.nist.gov/fipspubs/fip186.htm">Digital Signature
- * Standard (DSS)</a>, Federal Information Processing Standards Publication
- * 186. National Institute of Standards and Technology.
- */
-public class FIPS186
-{
- public static final int DSA_PARAMS_SEED = 0;
-
- public static final int DSA_PARAMS_COUNTER = 1;
-
- public static final int DSA_PARAMS_Q = 2;
-
- public static final int DSA_PARAMS_P = 3;
-
- public static final int DSA_PARAMS_E = 4;
-
- public static final int DSA_PARAMS_G = 5;
-
- /** The BigInteger constant 2. */
- private static final BigInteger TWO = BigInteger.valueOf(2L);
-
- private static final BigInteger TWO_POW_160 = TWO.pow(160);
-
- /** The SHA instance to use. */
- private Sha160 sha = new Sha160();
-
- /** The length of the modulus of DSS keys generated by this instance. */
- private int L;
-
- /** The optional {@link SecureRandom} instance to use. */
- private SecureRandom rnd = null;
-
- /** Our default source of randomness. */
- private PRNG prng = null;
-
- public FIPS186(int L, SecureRandom rnd)
- {
- super();
-
- this.L = L;
- this.rnd = rnd;
- }
-
- /**
- * This method generates the DSS <code>p</code>, <code>q</code>, and
- * <code>g</code> parameters only when <code>L</code> (the modulus length)
- * is not one of the following: <code>512</code>, <code>768</code> and
- * <code>1024</code>. For those values of <code>L</code>, this
- * implementation uses pre-computed values of <code>p</code>,
- * <code>q</code>, and <code>g</code> given in the document <i>CryptoSpec</i>
- * included in the security guide documentation of the standard JDK
- * distribution.
- * <p>
- * The DSS requires two primes , <code>p</code> and <code>q</code>,
- * satisfying the following three conditions:
- * <ul>
- * <li><code>2<sup>159</sup> &lt; q &lt; 2<sup>160</sup></code></li>
- * <li><code>2<sup>L-1</sup> &lt; p &lt; 2<sup>L</sup></code> for a
- * specified <code>L</code>, where <code>L = 512 + 64j</code> for some
- * <code>0 &lt;= j &lt;= 8</code></li>
- * <li>q divides p - 1.</li>
- * </ul>
- * The algorithm used to find these primes is as described in FIPS-186,
- * section 2.2: GENERATION OF PRIMES. This prime generation scheme starts by
- * using the {@link Sha160} and a user supplied <i>SEED</i> to construct a
- * prime, <code>q</code>, in the range 2<sup>159</sup> &lt; q &lt; 2<sup>160</sup>.
- * Once this is accomplished, the same <i>SEED</i> value is used to construct
- * an <code>X</code> in the range <code>2<sup>L-1
- * </sup> &lt; X &lt; 2<sup>L</sup>. The prime, <code>p</code>, is then
- * formed by rounding <code>X</code> to a number congruent to <code>1 mod
- * 2q</code>. In this implementation we use the same <i>SEED</i> value given
- * in FIPS-186, Appendix 5.
- */
- public BigInteger[] generateParameters()
- {
- int counter, offset;
- BigInteger SEED, alpha, U, q, OFFSET, SEED_PLUS_OFFSET, W, X, p, c, g;
- byte[] a, u;
- byte[] kb = new byte[20]; // to hold 160 bits of randomness
-
- // Let L-1 = n*160 + b, where b and n are integers and 0 <= b < 160.
- int b = (L - 1) % 160;
- int n = (L - 1 - b) / 160;
- BigInteger[] V = new BigInteger[n + 1];
- algorithm: while (true)
- {
- step1: while (true)
- {
- // 1. Choose an arbitrary sequence of at least 160 bits and
- // call it SEED.
- nextRandomBytes(kb);
- SEED = new BigInteger(1, kb).setBit(159).setBit(0);
- // Let g be the length of SEED in bits. here always 160
- // 2. Compute: U = SHA[SEED] XOR SHA[(SEED+1) mod 2**g]
- alpha = SEED.add(BigInteger.ONE).mod(TWO_POW_160);
- synchronized (sha)
- {
- a = SEED.toByteArray();
- sha.update(a, 0, a.length);
- a = sha.digest();
- u = alpha.toByteArray();
- sha.update(u, 0, u.length);
- u = sha.digest();
- }
- for (int i = 0; i < a.length; i++)
- a[i] ^= u[i];
-
- U = new BigInteger(1, a);
- // 3. Form q from U by setting the most significant bit (the
- // 2**159 bit) and the least significant bit to 1. In terms of
- // boolean operations, q = U OR 2**159 OR 1. Note that
- // 2**159 < q < 2**160.
- q = U.setBit(159).setBit(0);
- // 4. Use a robust primality testing algorithm to test whether
- // q is prime(1). A robust primality test is one where the
- // probability of a non-prime number passing the test is at
- // most 1/2**80.
- // 5. If q is not prime, go to step 1.
- if (q.isProbablePrime(80))
- break step1;
- } // step1
- // 6. Let counter = 0 and offset = 2.
- counter = 0;
- offset = 2;
- while (true)
- {
- OFFSET = BigInteger.valueOf(offset & 0xFFFFFFFFL);
- SEED_PLUS_OFFSET = SEED.add(OFFSET);
- // 7. For k = 0,...,n let V[k] = SHA[(SEED + offset + k) mod 2**g].
- synchronized (sha)
- {
- for (int k = 0; k <= n; k++)
- {
- a = SEED_PLUS_OFFSET
- .add(BigInteger.valueOf(k & 0xFFFFFFFFL))
- .mod(TWO_POW_160).toByteArray();
- sha.update(a, 0, a.length);
- V[k] = new BigInteger(1, sha.digest());
- }
- }
- // 8. Let W be the integer:
- // V[0]+V[1]*2**160+...+V[n-1]*2**((n-1)*160)+(V[n]mod2**b)*2**(n*160)
- // and let : X = W + 2**(L-1).
- // Note that 0 <= W < 2**(L-1) and hence 2**(L-1) <= X < 2**L.
- W = V[0];
- for (int k = 1; k < n; k++)
- W = W.add(V[k].multiply(TWO.pow(k * 160)));
-
- W = W.add(V[n].mod(TWO.pow(b)).multiply(TWO.pow(n * 160)));
- X = W.add(TWO.pow(L - 1));
- // 9. Let c = X mod 2q and set p = X - (c - 1).
- // Note that p is congruent to 1 mod 2q.
- c = X.mod(TWO.multiply(q));
- p = X.subtract(c.subtract(BigInteger.ONE));
- // 10. If p < 2**(L-1), then go to step 13.
- if (p.compareTo(TWO.pow(L - 1)) >= 0)
- {
- // 11. Perform a robust primality test on p.
- // 12. If p passes the test performed in step 11, go to step 15.
- if (p.isProbablePrime(80))
- break algorithm;
- }
- // 13. Let counter = counter + 1 and offset = offset + n + 1.
- counter++;
- offset += n + 1;
- // 14. If counter >= 4096 go to step 1, otherwise go to step 7.
- if (counter >= 4096)
- continue algorithm;
- } // step7
- } // algorithm
- // compute g. from FIPS-186, Appendix 4:
- // 1. Generate p and q as specified in Appendix 2.
- // 2. Let e = (p - 1) / q
- BigInteger e = p.subtract(BigInteger.ONE).divide(q);
- BigInteger h = TWO;
- BigInteger p_minus_1 = p.subtract(BigInteger.ONE);
- g = TWO;
- // 3. Set h = any integer, where 1 < h < p - 1 and
- // h differs from any value previously tried
- for (; h.compareTo(p_minus_1) < 0; h = h.add(BigInteger.ONE))
- {
- // 4. Set g = h**e mod p
- g = h.modPow(e, p);
- // 5. If g = 1, go to step 3
- if (! g.equals(BigInteger.ONE))
- break;
- }
- return new BigInteger[] { SEED, BigInteger.valueOf(counter), q, p, e, g };
- }
-
- /**
- * Fills the designated byte array with random data.
- *
- * @param buffer the byte array to fill with random data.
- */
- private void nextRandomBytes(byte[] buffer)
- {
- if (rnd != null)
- rnd.nextBytes(buffer);
- else
- getDefaultPRNG().nextBytes(buffer);
- }
-
- private PRNG getDefaultPRNG()
- {
- if (prng == null)
- prng = PRNG.getInstance();
-
- return prng;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java
deleted file mode 100644
index 38530ee..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/* GnuRSAKey.java --
- Copyright 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.key.rsa;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Registry;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.util.FormatUtil;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.Key;
-import java.security.interfaces.RSAKey;
-
-/**
- * A base asbtract class for both public and private RSA keys.
- */
-public abstract class GnuRSAKey
- implements Key, RSAKey
-{
- /** The public modulus of an RSA key pair. */
- private final BigInteger n;
-
- /** The public exponent of an RSA key pair. */
- private final BigInteger e;
-
- /**
- * Identifier of the default encoding format to use when externalizing the key
- * material.
- */
- protected final int defaultFormat;
-
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Trivial protected constructor.
- *
- * @param defaultFormat the identifier of the encoding format to use by
- * default when externalizing the key.
- * @param n the public modulus <code>n</code>.
- * @param e the public exponent <code>e</code>.
- */
- protected GnuRSAKey(int defaultFormat, BigInteger n, BigInteger e)
- {
- super();
-
- this.defaultFormat = defaultFormat <= 0 ? Registry.RAW_ENCODING_ID
- : defaultFormat;
- this.n = n;
- this.e = e;
- }
-
- public BigInteger getModulus()
- {
- return getN();
- }
-
- public String getAlgorithm()
- {
- return Registry.RSA_KPG;
- }
-
- /** @deprecated see getEncoded(int). */
- public byte[] getEncoded()
- {
- return getEncoded(defaultFormat);
- }
-
- public String getFormat()
- {
- return FormatUtil.getEncodingShortName(defaultFormat);
- }
-
- /**
- * Returns the modulus <code>n</code>.
- *
- * @return the modulus <code>n</code>.
- */
- public BigInteger getN()
- {
- return n;
- }
-
- /**
- * Returns the public exponent <code>e</code>.
- *
- * @return the public exponent <code>e</code>.
- */
- public BigInteger getPublicExponent()
- {
- return getE();
- }
-
- /**
- * Same as {@link #getPublicExponent()}.
- *
- * @return the public exponent <code>e</code>.
- */
- public BigInteger getE()
- {
- return e;
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of
- * {@link RSAKey} and has the same RSA parameter values as this one.
- *
- * @param obj the other non-null RSA key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(final Object obj)
- {
- if (obj == null)
- return false;
-
- if (! (obj instanceof RSAKey))
- return false;
-
- final RSAKey that = (RSAKey) obj;
- return n.equals(that.getModulus());
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged
- (new GetPropertyAction("line.separator"));
- str = new CPStringBuilder(ls)
- .append("defaultFormat=").append(defaultFormat).append(",").append(ls)
- .append("n=0x").append(n.toString(16)).append(",").append(ls)
- .append("e=0x").append(e.toString(16))
- .toString();
- }
- return str;
- }
-
- public abstract byte[] getEncoded(int format);
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java
deleted file mode 100644
index 39f91cb..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/* GnuRSAPrivateKey.java --
- Copyright 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.key.rsa;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.Registry;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.PrivateKey;
-import java.security.interfaces.RSAPrivateCrtKey;
-import java.security.interfaces.RSAPrivateKey;
-
-/**
- * An object that embodies an RSA private key.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class GnuRSAPrivateKey
- extends GnuRSAKey
- implements PrivateKey, RSAPrivateCrtKey
-{
- /** The first prime divisor of the modulus. */
- private final BigInteger p;
-
- /** The second prime divisor of the modulus. */
- private final BigInteger q;
-
- /** The private exponent of an RSA private key. */
- private final BigInteger d;
-
- /** The first factor's exponent. */
- private final BigInteger dP;
-
- /** The second factor's exponent. */
- private final BigInteger dQ;
-
- /** The CRT (Chinese Remainder Theorem) coefficient. */
- private final BigInteger qInv;
-
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Convenience constructor. Calls the constructor with 5 arguments passing
- * {@link Registry#RAW_ENCODING_ID} as the identifier of the preferred
- * encoding format.
- *
- * @param p the modulus first prime divisor.
- * @param q the modulus second prime divisor.
- * @param e the public exponent.
- * @param d the private exponent.
- */
- public GnuRSAPrivateKey(BigInteger p, BigInteger q, BigInteger e, BigInteger d)
- {
- this(Registry.RAW_ENCODING_ID, p, q, e, d);
- }
-
- /**
- * Constructs a new instance of a <code>GnuRSAPrivateKey</code> given the
- * designated arguments.
- *
- * @param preferredFormat the indetifier of the preferred encoding format to
- * use when externalizing this key.
- * @param p the modulus first prime divisor.
- * @param q the modulus second prime divisor.
- * @param e the public exponent.
- * @param d the private exponent.
- */
- public GnuRSAPrivateKey(int preferredFormat, BigInteger p, BigInteger q,
- BigInteger e, BigInteger d)
- {
- this(preferredFormat,
- p.multiply(q),
- e, d, p, q,
- e.modInverse(p.subtract(BigInteger.ONE)),
- e.modInverse(q.subtract(BigInteger.ONE)),
- q.modInverse(p));
- }
-
- /**
- * Constructs a new instance of a <code>GnuRSAPrivateKey</code> given the
- * designated arguments.
- *
- * @param preferredFormat the indetifier of the preferred encoding format to
- * use when externalizing this key.
- * @param n the public modulus, which is also the product of <code>p</code>
- * and <code>q</code>.
- * @param e the public exponent.
- * @param d the private exponent.
- * @param p the modulus first prime divisor.
- * @param q the modulus second prime divisor.
- * @param dP the first prime's exponen. A positive integer less than
- * <code>p</code> and <code>q</code>, satisfying
- * <code>e * dP = 1 (mod p-1)</code>.
- * @param dQ the second prime's exponent. A positive integer less than
- * <code>p</code> and <code>q</code>, satisfying
- * <code>e * dQ = 1 (mod p-1)</code>.
- * @param qInv the Chinese Remainder Theorem coefiicient. A positive integer
- * less than <code>p</code>, satisfying
- * <code>q * qInv = 1 (mod p)</code>.
- */
- public GnuRSAPrivateKey(int preferredFormat, BigInteger n, BigInteger e,
- BigInteger d, BigInteger p, BigInteger q,
- BigInteger dP, BigInteger dQ, BigInteger qInv)
- {
- super(preferredFormat == Registry.ASN1_ENCODING_ID ? Registry.PKCS8_ENCODING_ID
- : preferredFormat,
- n, e);
- this.d = d;
- this.p = p;
- this.q = q;
- // the exponents dP and dQ are positive integers less than p and q
- // respectively satisfying
- // e * dP = 1 (mod p-1);
- // e * dQ = 1 (mod q-1),
- this.dP = dP;
- this.dQ = dQ;
- // the CRT coefficient qInv is a positive integer less than p satisfying
- // q * qInv = 1 (mod p).
- this.qInv = qInv;
- }
-
- /**
- * A class method that takes the output of the <code>encodePrivateKey()</code>
- * method of an RSA keypair codec object (an instance implementing
- * {@link IKeyPairCodec} for RSA keys, and re-constructs an instance of this
- * object.
- *
- * @param k the contents of a previously encoded instance of this object.
- * @throws ArrayIndexOutOfBoundsException if there is not enough bytes, in
- * <code>k</code>, to represent a valid encoding of an instance
- * of this object.
- * @throws IllegalArgumentException if the byte sequence does not represent a
- * valid encoding of an instance of this object.
- */
- public static GnuRSAPrivateKey valueOf(final byte[] k)
- {
- // try RAW codec
- if (k[0] == Registry.MAGIC_RAW_RSA_PRIVATE_KEY[0])
- try
- {
- return (GnuRSAPrivateKey) new RSAKeyPairRawCodec().decodePrivateKey(k);
- }
- catch (IllegalArgumentException ignored)
- {
- }
- // try PKCS#8 codec
- return (GnuRSAPrivateKey) new RSAKeyPairPKCS8Codec().decodePrivateKey(k);
- }
-
- public BigInteger getPrimeP()
- {
- return p;
- }
-
- public BigInteger getPrimeQ()
- {
- return q;
- }
-
- public BigInteger getPrimeExponentP()
- {
- return dP;
- }
-
- public BigInteger getPrimeExponentQ()
- {
- return dQ;
- }
-
- public BigInteger getCrtCoefficient()
- {
- return qInv;
- }
-
- public BigInteger getPrivateExponent()
- {
- return d;
- }
-
- /**
- * Returns the encoded form of this private key according to the designated
- * format.
- *
- * @param format the desired format identifier of the resulting encoding.
- * @return the byte sequence encoding this key according to the designated
- * format.
- * @throws IllegalArgumentException if the format is not supported.
- * @see RSAKeyPairRawCodec
- * @see RSAKeyPairPKCS8Codec
- */
- public byte[] getEncoded(int format)
- {
- final byte[] result;
- switch (format)
- {
- case IKeyPairCodec.RAW_FORMAT:
- result = new RSAKeyPairRawCodec().encodePrivateKey(this);
- break;
- case IKeyPairCodec.PKCS8_FORMAT:
- result = new RSAKeyPairPKCS8Codec().encodePrivateKey(this);
- break;
- default:
- throw new IllegalArgumentException("Unsupported encoding format: "
- + format);
- }
- return result;
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of this
- * class and has the same RSA parameter values as this one.
- *
- * @param obj the other non-null RSA key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(final Object obj)
- {
- if (obj == null)
- return false;
-
- if (obj instanceof RSAPrivateKey)
- {
- final RSAPrivateKey that = (RSAPrivateKey) obj;
- return super.equals(that) && d.equals(that.getPrivateExponent());
- }
- if (obj instanceof RSAPrivateCrtKey)
- {
- final RSAPrivateCrtKey that = (RSAPrivateCrtKey) obj;
- return super.equals(that) && p.equals(that.getPrimeP())
- && q.equals(that.getPrimeQ())
- && dP.equals(that.getPrimeExponentP())
- && dQ.equals(that.getPrimeExponentQ())
- && qInv.equals(that.getCrtCoefficient());
- }
- return false;
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged
- (new GetPropertyAction("line.separator"));
- str = new CPStringBuilder(this.getClass().getName()).append("(")
- .append(super.toString()).append(",").append(ls)
- .append("d=0x").append(Configuration.DEBUG ? d.toString(16)
- : "**...*").append(ls)
- .append("p=0x").append(Configuration.DEBUG ? p.toString(16)
- : "**...*").append(ls)
- .append("q=0x").append(Configuration.DEBUG ? q.toString(16)
- : "**...*").append(ls)
- .append("dP=0x").append(Configuration.DEBUG ? dP.toString(16)
- : "**...*").append(ls)
- .append("dQ=0x").append(Configuration.DEBUG ? dQ.toString(16)
- : "**...*").append(ls)
- .append("qInv=0x").append(Configuration.DEBUG ? qInv.toString(16)
- : "**...*").append(ls)
- .append(")")
- .toString();
- }
- return str;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java
deleted file mode 100644
index 0bad928..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/* GnuRSAPublicKey.java --
- Copyright 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.key.rsa;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.Registry;
-import gnu.java.security.action.GetPropertyAction;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.math.BigInteger;
-import java.security.AccessController;
-import java.security.PublicKey;
-import java.security.interfaces.RSAPublicKey;
-
-/**
- * An object that encapsulates an RSA public key.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class GnuRSAPublicKey
- extends GnuRSAKey
- implements PublicKey, RSAPublicKey
-{
- /** String representation of this key. Cached for speed. */
- private transient String str;
-
- /**
- * Conveience constructor. Calls the constructor with 3 arguments passing
- * {@link Registry#RAW_ENCODING_ID} as the identifier of the preferred
- * encoding format.
- *
- * @param n the modulus.
- * @param e the public exponent.
- */
- public GnuRSAPublicKey(final BigInteger n, final BigInteger e)
- {
- this(Registry.RAW_ENCODING_ID, n, e);
- }
-
- /**
- * Constructs a new instance of <code>GnuRSAPublicKey</code> given the
- * designated arguments.
- *
- * @param preferredFormat the identifier of the preferred encoding format to
- * use when externalizing this key.
- * @param n the modulus.
- * @param e the public exponent.
- */
- public GnuRSAPublicKey(int preferredFormat, BigInteger n, BigInteger e)
- {
- super(preferredFormat == Registry.ASN1_ENCODING_ID ? Registry.X509_ENCODING_ID
- : preferredFormat,
- n, e);
- }
-
- /**
- * A class method that takes the output of the <code>encodePublicKey()</code>
- * method of an RSA keypair codec object (an instance implementing
- * {@link IKeyPairCodec} for RSA keys, and re-constructs an instance of this
- * object.
- *
- * @param k the contents of a previously encoded instance of this object.
- * @throws ArrayIndexOutOfBoundsException if there is not enough bytes, in
- * <code>k</code>, to represent a valid encoding of an instance
- * of this object.
- * @throws IllegalArgumentException if the byte sequence does not represent a
- * valid encoding of an instance of this object.
- */
- public static GnuRSAPublicKey valueOf(final byte[] k)
- {
- // try RAW codec
- if (k[0] == Registry.MAGIC_RAW_RSA_PUBLIC_KEY[0])
- try
- {
- return (GnuRSAPublicKey) new RSAKeyPairRawCodec().decodePublicKey(k);
- }
- catch (IllegalArgumentException ignored)
- {
- }
- // try X.509 codec
- return (GnuRSAPublicKey) new RSAKeyPairX509Codec().decodePublicKey(k);
- }
-
- /**
- * Returns the encoded form of this public key according to the designated
- * format.
- *
- * @param format the desired format identifier of the resulting encoding.
- * @return the byte sequence encoding this key according to the designated
- * format.
- * @throws IllegalArgumentException if the format is not supported.
- * @see RSAKeyPairRawCodec
- */
- public byte[] getEncoded(final int format)
- {
- final byte[] result;
- switch (format)
- {
- case IKeyPairCodec.RAW_FORMAT:
- result = new RSAKeyPairRawCodec().encodePublicKey(this);
- break;
- case IKeyPairCodec.X509_FORMAT:
- result = new RSAKeyPairX509Codec().encodePublicKey(this);
- break;
- default:
- throw new IllegalArgumentException("Unsupported encoding format: "
- + format);
- }
- return result;
- }
-
- /**
- * Returns <code>true</code> if the designated object is an instance of this
- * class and has the same RSA parameter values as this one.
- *
- * @param obj the other non-null RSA key to compare to.
- * @return <code>true</code> if the designated object is of the same type
- * and value as this one.
- */
- public boolean equals(final Object obj)
- {
- if (obj == null)
- return false;
-
- if (! (obj instanceof RSAPublicKey))
- return false;
-
- final RSAPublicKey that = (RSAPublicKey) obj;
- return super.equals(that)
- && getPublicExponent().equals(that.getPublicExponent());
- }
-
- public String toString()
- {
- if (str == null)
- {
- String ls = (String) AccessController.doPrivileged
- (new GetPropertyAction("line.separator"));
- str = new CPStringBuilder(this.getClass().getName()).append("(")
- .append(super.toString()).append(",").append(ls)
- .append(")")
- .toString();
- }
- return str;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java
deleted file mode 100644
index 99c31394..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/* RSAKeyPairGenerator.java --
- Copyright 2001, 2002, 2003, 2006, 2010 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.key.rsa;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.Registry;
-import gnu.java.security.key.IKeyPairGenerator;
-import gnu.java.security.util.PRNG;
-
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.spec.RSAKeyGenParameterSpec;
-import java.util.Map;
-import java.util.logging.Logger;
-
-/**
- * A key-pair generator for asymetric keys to use in conjunction with the RSA
- * scheme.
- * <p>
- * Reference:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix</a>, part B. Primitive specification
- * and supporting documentation. Jakob Jonsson and Burt Kaliski. </li>
- * <li><a href="http://www.cacr.math.uwaterloo.ca/hac/">Handbook of Applied
- * Cryptography</a>, Alfred J. Menezes, Paul C. van Oorschot and Scott A.
- * Vanstone. Section 11.3 RSA and related signature schemes.</li>
- * </ol>
- */
-public class RSAKeyPairGenerator
- implements IKeyPairGenerator
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(RSAKeyPairGenerator.class.getName()) : null;
-
- /** The BigInteger constant 1. */
- private static final BigInteger ONE = BigInteger.ONE;
-
- /** The BigInteger constant 2. */
- private static final BigInteger TWO = BigInteger.valueOf(2L);
-
- /** Property name of the length (Integer) of the modulus of an RSA key. */
- public static final String MODULUS_LENGTH = "gnu.crypto.rsa.L";
-
- /**
- * Property name of an optional {@link SecureRandom} instance to use. The
- * default is to use a classloader singleton from {@link PRNG}.
- */
- public static final String SOURCE_OF_RANDOMNESS = "gnu.crypto.rsa.prng";
-
- /**
- * Property name of an optional {@link RSAKeyGenParameterSpec} instance to use
- * for this generator's <code>n</code>, and <code>e</code> values. The
- * default is to generate <code>n</code> and use a fixed value for
- * <code>e</.code> (Fermat's F4 number).
- */
- public static final String RSA_PARAMETERS = "gnu.crypto.rsa.params";
-
- /**
- * Property name of the preferred encoding format to use when externalizing
- * generated instance of key-pairs from this generator. The property is taken
- * to be an {@link Integer} that encapsulates an encoding format identifier.
- */
- public static final String PREFERRED_ENCODING_FORMAT = "gnu.crypto.rsa.encoding";
-
- /** Default value for the modulus length. */
- private static final int DEFAULT_MODULUS_LENGTH = 1024;
-
- /** Default encoding format to use when none was specified. */
- private static final int DEFAULT_ENCODING_FORMAT = Registry.RAW_ENCODING_ID;
-
- /** The desired bit length of the modulus. */
- private int L;
-
- /**
- * This implementation uses, by default, Fermat's F4 number as the public
- * exponent.
- */
- private BigInteger e = BigInteger.valueOf(65537L);
-
- /** The optional {@link SecureRandom} instance to use. */
- private SecureRandom rnd = null;
-
- /** Our default source of randomness. */
- private PRNG prng = null;
-
- /** Preferred encoding format of generated keys. */
- private int preferredFormat;
-
- // implicit 0-arguments constructor
-
- public String name()
- {
- return Registry.RSA_KPG;
- }
-
- /**
- * Configures this instance.
- *
- * @param attributes the map of name/value pairs to use.
- * @exception IllegalArgumentException if the designated MODULUS_LENGTH value
- * is less than 1024.
- */
- public void setup(Map attributes)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "setup", attributes);
- // do we have a SecureRandom, or should we use our own?
- rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS);
- // are we given a set of RSA params or we shall use our own?
- RSAKeyGenParameterSpec params = (RSAKeyGenParameterSpec) attributes.get(RSA_PARAMETERS);
- // find out the modulus length
- if (params != null)
- {
- L = params.getKeysize();
- e = params.getPublicExponent();
- }
- else
- {
- Integer l = (Integer) attributes.get(MODULUS_LENGTH);
- L = (l == null ? DEFAULT_MODULUS_LENGTH : l.intValue());
- }
- if (L < 1024)
- throw new IllegalArgumentException(MODULUS_LENGTH);
-
- // what is the preferred encoding format
- Integer formatID = (Integer) attributes.get(PREFERRED_ENCODING_FORMAT);
- preferredFormat = formatID == null ? DEFAULT_ENCODING_FORMAT
- : formatID.intValue();
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "setup");
- }
-
- /**
- * <p>
- * The algorithm used here is described in <i>nessie-pss-B.pdf</i> document
- * which is part of the RSA-PSS submission to NESSIE.
- * </p>
- *
- * @return an RSA keypair.
- */
- public KeyPair generate()
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "generate");
- BigInteger p, q, n, d;
- // 1. Generate a prime p in the interval [2**(M-1), 2**M - 1], where
- // M = CEILING(L/2), and such that GCD(p, e) = 1
- int M = (L + 1) / 2;
- BigInteger lower = TWO.pow(M - 1);
- BigInteger upper = TWO.pow(M).subtract(ONE);
- byte[] kb = new byte[(M + 7) / 8]; // enough bytes to frame M bits
- step1: while (true)
- {
- nextRandomBytes(kb);
- p = new BigInteger(1, kb).setBit(0);
- if (p.compareTo(lower) >= 0 && p.compareTo(upper) <= 0
- && p.isProbablePrime(80) && p.gcd(e).equals(ONE))
- break step1;
- }
- // 2. Generate a prime q such that the product of p and q is an L-bit
- // number, and such that GCD(q, e) = 1
- step2: while (true)
- {
- nextRandomBytes(kb);
- q = new BigInteger(1, kb).setBit(0);
- n = p.multiply(q);
- if (n.bitLength() == L && q.isProbablePrime(80) && q.gcd(e).equals(ONE))
- break step2;
- // TODO: test for p != q
- }
- // TODO: ensure p < q
- // 3. Put n = pq. The public key is (n, e).
- // 4. Compute the parameters necessary for the private key K (see
- // Section 2.2).
- BigInteger phi = p.subtract(ONE).multiply(q.subtract(ONE));
- d = e.modInverse(phi);
- // 5. Output the public key and the private key.
- PublicKey pubK = new GnuRSAPublicKey(preferredFormat, n, e);
- PrivateKey secK = new GnuRSAPrivateKey(preferredFormat, p, q, e, d);
- KeyPair result = new KeyPair(pubK, secK);
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "generate", result);
- return result;
- }
-
- /**
- * Fills the designated byte array with random data.
- *
- * @param buffer the byte array to fill with random data.
- */
- private void nextRandomBytes(byte[] buffer)
- {
- if (rnd != null)
- rnd.nextBytes(buffer);
- else
- getDefaultPRNG().nextBytes(buffer);
- }
-
- private PRNG getDefaultPRNG()
- {
- if (prng == null)
- prng = PRNG.getInstance();
-
- return prng;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java
deleted file mode 100644
index b07ed66..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/* RSAKeyPairPKCS8Codec.java -- PKCS#8 Encoding/Decoding handler
- Copyright (C) 2006, 2010 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.key.rsa;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-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.key.IKeyPairCodec;
-import gnu.java.security.util.DerUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidParameterException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-/**
- * An implementation of an {@link IKeyPairCodec} that knows how to encode /
- * decode PKCS#8 ASN.1 external representation of RSA private keys.
- */
-public class RSAKeyPairPKCS8Codec
- implements IKeyPairCodec
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(RSAKeyPairPKCS8Codec.class.getName()) : null;
-
- private static final OID RSA_ALG_OID = new OID(Registry.RSA_OID_STRING);
-
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return PKCS8_FORMAT;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- throw new InvalidParameterException("Wrong format for public keys");
- }
-
- /**
- * Returns the PKCS#8 ASN.1 <i>PrivateKeyInfo</i> representation of an RSA
- * private key. The ASN.1 specification is as follows:
- * <pre>
- * PrivateKeyInfo ::= SEQUENCE {
- * version INTEGER, -- MUST be 0
- * privateKeyAlgorithm AlgorithmIdentifier,
- * privateKey OCTET STRING
- * }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- * </pre>
- * <p>
- * As indicated in RFC-2459: "The parameters field shall have ASN.1 type NULL
- * for this algorithm identifier.".
- * <p>
- * The <i>privateKey</i> field, which is an OCTET STRING, contains the
- * DER-encoded form of the RSA private key defined as:
- * <pre>
- * RSAPrivateKey ::= SEQUENCE {
- * version INTEGER, -- MUST be 0
- * modulus INTEGER, -- n
- * publicExponent INTEGER, -- e
- * privateExponent INTEGER, -- d
- * prime1 INTEGER, -- p
- * prime2 INTEGER, -- q
- * exponent1 INTEGER, -- d mod (p-1)
- * exponent2 INTEGER, -- d mod (q-1)
- * coefficient INTEGER, -- (inverse of q) mod p
- * }
- * </pre>
- *
- * @return the DER encoded form of the ASN.1 representation of the
- * <i>PrivateKeyInfo</i> field for an RSA {@link PrivateKey}..
- * @throw InvalidParameterException if an error occurs during the marshalling
- * process.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "encodePrivateKey()", key);
- if (! (key instanceof GnuRSAPrivateKey))
- throw new InvalidParameterException("Wrong key type");
-
- GnuRSAPrivateKey pk = (GnuRSAPrivateKey) key;
- BigInteger n = pk.getN();
- BigInteger e = pk.getE();
- BigInteger d = pk.getPrivateExponent();
- BigInteger p = pk.getPrimeP();
- BigInteger q = pk.getPrimeQ();
- BigInteger dP = pk.getPrimeExponentP();
- BigInteger dQ = pk.getPrimeExponentQ();
- BigInteger qInv = pk.getCrtCoefficient();
-
- DERValue derVersion = new DERValue(DER.INTEGER, BigInteger.ZERO);
-
- DERValue derOID = new DERValue(DER.OBJECT_IDENTIFIER, RSA_ALG_OID);
-
- ArrayList algorithmID = new ArrayList(2);
- algorithmID.add(derOID);
- algorithmID.add(new DERValue(DER.NULL, null));
- DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- algorithmID);
-
- DERValue derRSAVersion = new DERValue(DER.INTEGER, BigInteger.ZERO);
- DERValue derN = new DERValue(DER.INTEGER, n);
- DERValue derE = new DERValue(DER.INTEGER, e);
- DERValue derD = new DERValue(DER.INTEGER, d);
- DERValue derP = new DERValue(DER.INTEGER, p);
- DERValue derQ = new DERValue(DER.INTEGER, q);
- DERValue derDP = new DERValue(DER.INTEGER, dP);
- DERValue derDQ = new DERValue(DER.INTEGER, dQ);
- DERValue derQInv = new DERValue(DER.INTEGER, qInv);
-
- ArrayList rsaPrivateKey = new ArrayList();
- rsaPrivateKey.add(derRSAVersion);
- rsaPrivateKey.add(derN);
- rsaPrivateKey.add(derE);
- rsaPrivateKey.add(derD);
- rsaPrivateKey.add(derP);
- rsaPrivateKey.add(derQ);
- rsaPrivateKey.add(derDP);
- rsaPrivateKey.add(derDQ);
- rsaPrivateKey.add(derQInv);
- DERValue derRSAPrivateKey = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- rsaPrivateKey);
- byte[] pkBytes = derRSAPrivateKey.getEncoded();
- DERValue derPrivateKey = new DERValue(DER.OCTET_STRING, pkBytes);
-
- ArrayList pki = new ArrayList(3);
- pki.add(derVersion);
- pki.add(derAlgorithmID);
- pki.add(derPrivateKey);
- DERValue derPKI = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, pki);
-
- byte[] result;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try
- {
- DERWriter.write(baos, derPKI);
- result = baos.toByteArray();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException();
- y.initCause(x);
- throw y;
- }
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "encodePrivateKey()", result);
- return result;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public PublicKey decodePublicKey(byte[] input)
- {
- throw new InvalidParameterException("Wrong format for public keys");
- }
-
- /**
- * @param input the byte array to unmarshall into a valid RSA
- * {@link PrivateKey} instance. MUST NOT be null.
- * @return a new instance of a {@link GnuRSAPrivateKey} decoded from the
- * <i>PrivateKeyInfo</i> material fed as <code>input</code>.
- * @throw InvalidParameterException if an exception occurs during the
- * unmarshalling process.
- */
- public PrivateKey decodePrivateKey(byte[] input)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "decodePrivateKey()", input);
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- BigInteger version, n, e, d, p, q, dP, dQ, qInv;
- DERReader der = new DERReader(input);
- try
- {
- DERValue derPKI = der.read();
- DerUtil.checkIsConstructed(derPKI, "Wrong PrivateKeyInfo field");
-
- DERValue derVersion = der.read();
- DerUtil.checkIsBigInteger(derVersion, "Wrong Version field");
- version = (BigInteger) derVersion.getValue();
- if (version.compareTo(BigInteger.ZERO) != 0)
- throw new InvalidParameterException("Unexpected Version: " + version);
-
- DERValue derAlgoritmID = der.read();
- DerUtil.checkIsConstructed(derAlgoritmID, "Wrong AlgorithmIdentifier field");
-
- DERValue derOID = der.read();
- OID algOID = (OID) derOID.getValue();
- if (! algOID.equals(RSA_ALG_OID))
- throw new InvalidParameterException("Unexpected OID: " + algOID);
-
- // rfc-2459 states that this field is OPTIONAL but NULL if/when present
- DERValue val = der.read();
- if (val.getTag() == DER.NULL)
- val = der.read();
-
- byte[] pkBytes = (byte[]) val.getValue();
- der = new DERReader(pkBytes);
- DERValue derRSAPrivateKey = der.read();
- DerUtil.checkIsConstructed(derRSAPrivateKey, "Wrong RSAPrivateKey field");
-
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong RSAPrivateKey Version field");
- version = (BigInteger) val.getValue();
- if (version.compareTo(BigInteger.ZERO) != 0)
- throw new InvalidParameterException("Unexpected RSAPrivateKey Version: "
- + version);
-
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong modulus field");
- n = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong publicExponent field");
- e = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong privateExponent field");
- d = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong prime1 field");
- p = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong prime2 field");
- q = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong exponent1 field");
- dP = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong exponent2 field");
- dQ = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong coefficient field");
- qInv = (BigInteger) val.getValue();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException();
- y.initCause(x);
- throw y;
- }
- PrivateKey result = new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID,
- n, e, d, p, q, dP, dQ, qInv);
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "decodePrivateKey()", result);
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairRawCodec.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairRawCodec.java
deleted file mode 100644
index f088e79..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairRawCodec.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/* RSAKeyPairRawCodec.java --
- Copyright 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.key.rsa;
-
-import gnu.java.security.Registry;
-import gnu.java.security.key.IKeyPairCodec;
-
-import java.io.ByteArrayOutputStream;
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-
-/**
- * An object that implements the {@link IKeyPairCodec} interface for the <i>Raw</i>
- * format to use with RSA keypairs.
- */
-public class RSAKeyPairRawCodec
- implements IKeyPairCodec
-{
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return RAW_FORMAT;
- }
-
- /**
- * Returns the encoded form of the designated RSA public key according to the
- * <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for an RSA public key, in this implementation, is a
- * byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_RSA_PUBLIC_KEY},</li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>n</code> (the modulus) in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>n</code>,
- * </li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>e</code> (the public exponent) in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>e</code>.
- * </li>
- * </ol>
- *
- * @param key the key to encode.
- * @return the <i>Raw</i> format encoding of the designated key.
- * @exception IllegalArgumentException if the designated key is not an RSA
- * one.
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- if (! (key instanceof GnuRSAPublicKey))
- throw new IllegalArgumentException("key");
-
- GnuRSAPublicKey rsaKey = (GnuRSAPublicKey) key;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_RSA_PUBLIC_KEY[0]);
- baos.write(Registry.MAGIC_RAW_RSA_PUBLIC_KEY[1]);
- baos.write(Registry.MAGIC_RAW_RSA_PUBLIC_KEY[2]);
- baos.write(Registry.MAGIC_RAW_RSA_PUBLIC_KEY[3]);
- // version
- baos.write(0x01);
- // n
- byte[] buffer = rsaKey.getModulus().toByteArray();
- int length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // e
- buffer = rsaKey.getPublicExponent().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public PublicKey decodePublicKey(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_RSA_PUBLIC_KEY[0]
- || k[1] != Registry.MAGIC_RAW_RSA_PUBLIC_KEY[1]
- || k[2] != Registry.MAGIC_RAW_RSA_PUBLIC_KEY[2]
- || k[3] != Registry.MAGIC_RAW_RSA_PUBLIC_KEY[3])
- throw new IllegalArgumentException("magic");
-
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
-
- int i = 5;
- int l;
- byte[] buffer;
- // n
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger n = new BigInteger(1, buffer);
- // e
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger e = new BigInteger(1, buffer);
- return new GnuRSAPublicKey(n, e);
- }
-
- /**
- * Returns the encoded form of the designated RSA private key according to the
- * <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for an RSA private key, in this implementation, is a
- * byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_RSA_PRIVATE_KEY},</li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>p</code> (the first prime factor of the modulus) in internet order,
- * </li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>p</code>,
- * </li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>q</code> (the second prime factor of the modulus) in internet
- * order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>q</code>,
- * </li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>e</code> (the public exponent) in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>e</code>,
- * </li>
- * <li>4-byte count of following bytes representing the RSA parameter
- * <code>d</code> (the private exponent) in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the RSA parameter <code>d</code>,
- * </li>
- * </ol>
- *
- * @param key the key to encode.
- * @return the <i>Raw</i> format encoding of the designated key.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- if (! (key instanceof GnuRSAPrivateKey))
- throw new IllegalArgumentException("key");
-
- GnuRSAPrivateKey rsaKey = (GnuRSAPrivateKey) key;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_RSA_PRIVATE_KEY[0]);
- baos.write(Registry.MAGIC_RAW_RSA_PRIVATE_KEY[1]);
- baos.write(Registry.MAGIC_RAW_RSA_PRIVATE_KEY[2]);
- baos.write(Registry.MAGIC_RAW_RSA_PRIVATE_KEY[3]);
- // version
- baos.write(0x01);
- // p
- byte[] buffer = rsaKey.getPrimeP().toByteArray();
- int length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // q
- buffer = rsaKey.getPrimeQ().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // e
- buffer = rsaKey.getPublicExponent().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // d
- buffer = rsaKey.getPrivateExponent().toByteArray();
- length = buffer.length;
- baos.write(length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public PrivateKey decodePrivateKey(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_RSA_PRIVATE_KEY[0]
- || k[1] != Registry.MAGIC_RAW_RSA_PRIVATE_KEY[1]
- || k[2] != Registry.MAGIC_RAW_RSA_PRIVATE_KEY[2]
- || k[3] != Registry.MAGIC_RAW_RSA_PRIVATE_KEY[3])
- throw new IllegalArgumentException("magic");
-
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
-
- int i = 5;
- int l;
- byte[] buffer;
- // p
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger p = new BigInteger(1, buffer);
- // q
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger q = new BigInteger(1, buffer);
- // e
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger e = new BigInteger(1, buffer);
- // d
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger d = new BigInteger(1, buffer);
- return new GnuRSAPrivateKey(p, q, e, d);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
deleted file mode 100644
index 36fd75c..0000000
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/* RSAKeyPairX509Codec.java -- X.509 Encoding/Decoding handler
- Copyright (C) 2006, 2010 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.key.rsa;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.Registry;
-import gnu.java.security.der.BitString;
-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.key.IKeyPairCodec;
-import gnu.java.security.util.DerUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidParameterException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-/**
- * An implementation of an {@link IKeyPairCodec} that knows how to encode /
- * decode X.509 ASN.1 external representation of RSA public keys.
- */
-public class RSAKeyPairX509Codec
- implements IKeyPairCodec
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(RSAKeyPairX509Codec.class.getName()) : null;
-
- private static final OID RSA_ALG_OID = new OID(Registry.RSA_OID_STRING);
-
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return X509_FORMAT;
- }
-
- /**
- * Returns the X.509 ASN.1 <i>SubjectPublicKeyInfo</i> representation of an
- * RSA public key. The ASN.1 specification, as defined in RFC-3280, and
- * RFC-2459, is as follows:
- *
- * <pre>
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING
- * }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- * </pre>
- * <p>
- * As indicated in RFC-2459: "The parameters field shall have ASN.1 type NULL
- * for this algorithm identifier.".
- * <p>
- * The <i>subjectPublicKey</i> field, which is a BIT STRING, contains the
- * DER-encoded form of the RSA public key defined as:
- *
- * <pre>
- * RSAPublicKey ::= SEQUENCE {
- * modulus INTEGER, -- n
- * publicExponent INTEGER -- e
- * }
- * </pre>
- *
- * @param key the {@link PublicKey} instance to encode. MUST be an instance of
- * {@link GnuRSAPublicKey}.
- * @return the ASN.1 representation of the <i>SubjectPublicKeyInfo</i> in an
- * X.509 certificate.
- * @throw InvalidParameterException if <code>key</code> is not an instance
- * of {@link GnuRSAPublicKey} or if an exception occurs during the
- * marshalling process.
- */
- public byte[] encodePublicKey(PublicKey key)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "encodePublicKey()", key);
- if (! (key instanceof GnuRSAPublicKey))
- throw new InvalidParameterException("key");
-
- DERValue derOID = new DERValue(DER.OBJECT_IDENTIFIER, RSA_ALG_OID);
-
- GnuRSAPublicKey rsaKey = (GnuRSAPublicKey) key;
- BigInteger n = rsaKey.getN();
- BigInteger e = rsaKey.getE();
-
- DERValue derN = new DERValue(DER.INTEGER, n);
- DERValue derE = new DERValue(DER.INTEGER, e);
-
- ArrayList algorithmID = new ArrayList(2);
- algorithmID.add(derOID);
- algorithmID.add(new DERValue(DER.NULL, null));
- DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- algorithmID);
-
- ArrayList publicKey = new ArrayList(2);
- publicKey.add(derN);
- publicKey.add(derE);
- DERValue derPublicKey = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- publicKey);
- byte[] spkBytes = derPublicKey.getEncoded();
- DERValue derSPK = new DERValue(DER.BIT_STRING, new BitString(spkBytes));
-
- ArrayList spki = new ArrayList(2);
- spki.add(derAlgorithmID);
- spki.add(derSPK);
- DERValue derSPKI = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, spki);
-
- byte[] result;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try
- {
- DERWriter.write(baos, derSPKI);
- result = baos.toByteArray();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException(x.getMessage());
- y.initCause(x);
- throw y;
- }
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "encodePublicKey()", result);
- return result;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public byte[] encodePrivateKey(PrivateKey key)
- {
- throw new InvalidParameterException("Wrong format for private keys");
- }
-
- /**
- * @param input the byte array to unmarshall into a valid RSA
- * {@link PublicKey} instance. MUST NOT be null.
- * @return a new instance of a {@link GnuRSAPublicKey} decoded from the
- * <i>SubjectPublicKeyInfo</i> material in an X.509 certificate.
- * @throw InvalidParameterException if an exception occurs during the
- * unmarshalling process.
- */
- public PublicKey decodePublicKey(byte[] input)
- {
- if (Configuration.DEBUG)
- log.entering(this.getClass().getName(), "decodePublicKey()", input);
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- BigInteger n, e;
- DERReader der = new DERReader(input);
- try
- {
- DERValue derSPKI = der.read();
- DerUtil.checkIsConstructed(derSPKI, "Wrong SubjectPublicKeyInfo field");
-
- DERValue derAlgorithmID = der.read();
- DerUtil.checkIsConstructed(derAlgorithmID, "Wrong AlgorithmIdentifier field");
-
- DERValue derOID = der.read();
- if (! (derOID.getValue() instanceof OID))
- throw new InvalidParameterException("Wrong Algorithm field");
-
- OID algOID = (OID) derOID.getValue();
- if (! algOID.equals(RSA_ALG_OID))
- throw new InvalidParameterException("Unexpected OID: " + algOID);
-
- // rfc-2459 states that this field is OPTIONAL but NULL if/when present
- DERValue val = der.read();
- if (val.getTag() == DER.NULL)
- val = der.read();
-
- if (! (val.getValue() instanceof BitString))
- throw new InvalidParameterException("Wrong SubjectPublicKey field");
-
- byte[] spkBytes = ((BitString) val.getValue()).toByteArray();
-
- der = new DERReader(spkBytes);
- val = der.read();
- DerUtil.checkIsConstructed(derAlgorithmID, "Wrong subjectPublicKey field");
-
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong modulus field");
- n = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong publicExponent field");
- e = (BigInteger) val.getValue();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException(x.getMessage());
- y.initCause(x);
- throw y;
- }
- PublicKey result = new GnuRSAPublicKey(Registry.X509_ENCODING_ID, n, e);
- if (Configuration.DEBUG)
- log.exiting(this.getClass().getName(), "decodePublicKey()", result);
- return result;
- }
-
- /**
- * @throws InvalidParameterException ALWAYS.
- */
- public PrivateKey decodePrivateKey(byte[] input)
- {
- throw new InvalidParameterException("Wrong format for private keys");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/package.html b/libjava/classpath/gnu/java/security/package.html
deleted file mode 100644
index bb6e91d..0000000
--- a/libjava/classpath/gnu/java/security/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java b/libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java
deleted file mode 100644
index c6474f0..0000000
--- a/libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* PKCS7Data.java -- Reader/writer for PKCS#7 Data objects
- 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.pkcs;
-
-import gnu.java.security.OID;
-
-/**
- * A read/write helper class for PKCS#7 Data ASN.1 structures.
- */
-public class PKCS7Data
-{
- public static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
-
- private byte[] content;
-
- /**
- * Constructs a new instance of <code>PKCS7Data</code> with the possibly
- * null (implicetly referenced) content data.
- *
- * @param data the raw bytes of the data to use in a PKCS#7 framework.
- */
- public PKCS7Data(byte[] data)
- {
- super();
-
- this.content = data;
- }
-
- public byte[] getEncoded()
- {
- return content;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java b/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
deleted file mode 100644
index e479d2e..0000000
--- a/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/* PKCS7SignedData.java -- reader/writer for PKCS#7 signedData objects
- Copyright (C) 2004, 2005, 2006, 2010 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.pkcs;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.ber.BER;
-import gnu.java.security.ber.BEREncodingException;
-import gnu.java.security.ber.BERReader;
-import gnu.java.security.ber.BERValue;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.der.DERWriter;
-import gnu.java.security.util.Util;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.security.cert.CRL;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509CRL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * The SignedData object in PKCS #7. This is a read-only implementation of
- * this format, and is used to provide signed Jar file support.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class PKCS7SignedData
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(PKCS7SignedData.class.getName()) : null;
-
- public static final OID PKCS7_SIGNED_DATA = new OID("1.2.840.113549.1.7.2");
-
- private BigInteger version;
- private Set digestAlgorithms;
- private OID contentType;
- private byte[] content;
- private Certificate[] certificates;
- private CRL[] crls;
- private Set signerInfos;
-
- public PKCS7SignedData(InputStream in)
- throws CRLException, CertificateException, IOException
- {
- this(new BERReader(in));
- }
-
- /**
- * Parse an encoded PKCS#7 SignedData object. The ASN.1 format of this
- * object is:
- *
- * <pre>
- * SignedData ::= SEQUENCE {
- * version Version, -- always 1 for PKCS7 v1.5
- * digestAlgorithms DigestAlgorithmIdentifiers,
- * contentInfo ContentInfo,
- * certificates [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
- * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
- * signerInfos SignerInfos }
- *
- * Version ::= INTEGER
- *
- * DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
- *
- * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * ContentInfo ::= SEQUENCE {
- * contentType ContentType,
- * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
- *
- * ContentType ::= OBJECT IDENTIFIER
- *
- * ExtendedCertificatesAndCertificates ::=
- * SET OF ExtendedCertificatesAndCertificate
- *
- * ExtendedCertificatesAndCertificate ::= CHOICE {
- * certificate Certificate, -- from X.509
- * extendedCertificate [0] IMPLICIT ExtendedCertificate }
- *
- * CertificateRevocationLists ::= SET OF CertificateRevocationList
- * -- from X.509
- *
- * SignerInfos ::= SET OF SignerInfo
- *
- * SignerInfo ::= SEQUENCE {
- * version Version, -- always 1 for PKCS7 v1.5
- * issuerAndSerialNumber IssuerAndSerialNumber,
- * digestAlgorithm DigestAlgorithmIdentifier,
- * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
- * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
- * encryptedDigest EncryptedDigest,
- * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL }
- *
- * EncryptedDigest ::= OCTET STRING
- * </pre>
- *
- * <p>(Readers who are confused as to why it takes 40 levels of indirection
- * to specify "data with a signature", rest assured that the present author
- * is as confused as you are).</p>
- */
- public PKCS7SignedData(BERReader ber)
- throws CRLException, CertificateException, IOException
- {
- CertificateFactory x509 = CertificateFactory.getInstance("X509");
- DERValue val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed ContentInfo");
-
- val = ber.read();
- if (val.getTag() != BER.OBJECT_IDENTIFIER)
- throw new BEREncodingException("malformed ContentType");
-
- if (!PKCS7_SIGNED_DATA.equals(val.getValue()))
- throw new BEREncodingException("content is not SignedData");
-
- val = ber.read();
- if (val.getTag() != 0)
- throw new BEREncodingException("malformed Content");
-
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed SignedData");
-
- if (Configuration.DEBUG)
- log.fine("SignedData: " + val);
-
- val = ber.read();
- if (val.getTag() != BER.INTEGER)
- throw new BEREncodingException("expecting Version");
- version = (BigInteger) val.getValue();
- if (Configuration.DEBUG)
- log.fine(" Version: " + version);
-
- digestAlgorithms = new HashSet();
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed DigestAlgorithmIdentifiers");
- if (Configuration.DEBUG)
- log.fine(" DigestAlgorithmIdentifiers: " + val);
- int count = 0;
- DERValue val2 = ber.read();
- while (val2 != BER.END_OF_SEQUENCE &&
- (val.getLength() > 0 && val.getLength() > count))
- {
- if (!val2.isConstructed())
- throw new BEREncodingException("malformed AlgorithmIdentifier");
- if (Configuration.DEBUG)
- log.fine(" AlgorithmIdentifier: " + val2);
- count += val2.getEncodedLength();
- val2 = ber.read();
- if (val2.getTag() != BER.OBJECT_IDENTIFIER)
- throw new BEREncodingException("malformed AlgorithmIdentifier");
- if (Configuration.DEBUG)
- log.fine(" digestAlgorithmIdentifiers OID: " + val2.getValue());
- List algId = new ArrayList(2);
- algId.add(val2.getValue());
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- {
- count += val2.getEncodedLength();
- if (val2.getTag() == BER.NULL)
- algId.add(null);
- else
- algId.add(val2.getEncoded());
-
- if (val2.isConstructed())
- ber.skip(val2.getLength());
-
- if (BERValue.isIndefinite(val))
- val2 = ber.read();
- }
- else
- algId.add(null);
-
- if (Configuration.DEBUG)
- {
- log.fine(" digestAlgorithmIdentifiers params: ");
- log.fine(Util.dumpString((byte[]) algId.get(1),
- " digestAlgorithmIdentifiers params: "));
- }
- digestAlgorithms.add(algId);
- }
-
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed ContentInfo");
- if (Configuration.DEBUG)
- log.fine(" ContentInfo: " + val);
- val2 = ber.read();
- if (val2.getTag() != BER.OBJECT_IDENTIFIER)
- throw new BEREncodingException("malformed ContentType");
-
- contentType = (OID) val2.getValue();
- if (Configuration.DEBUG)
- log.fine(" ContentType OID: " + contentType);
- if (BERValue.isIndefinite(val)
- || (val.getLength() > 0 && val.getLength() > val2.getEncodedLength()))
- {
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- {
- content = val2.getEncoded();
- if (BERValue.isIndefinite(val))
- val2 = ber.read();
- }
- }
- if (Configuration.DEBUG)
- {
- log.fine(" Content: ");
- log.fine(Util.dumpString(content, " Content: "));
- }
- val = ber.read();
- if (val.getTag() == 0)
- {
- if (!val.isConstructed())
- throw new BEREncodingException("malformed ExtendedCertificatesAndCertificates");
- if (Configuration.DEBUG)
- log.fine(" ExtendedCertificatesAndCertificates: " + val);
- count = 0;
- val2 = ber.read();
- List certs = new LinkedList();
- while (val2 != BER.END_OF_SEQUENCE &&
- (val.getLength() > 0 && val.getLength() > count))
- {
- Certificate cert =
- x509.generateCertificate(new ByteArrayInputStream(val2.getEncoded()));
- if (Configuration.DEBUG)
- log.fine(" Certificate: " + cert);
- certs.add(cert);
- count += val2.getEncodedLength();
- ber.skip(val2.getLength());
- if (BERValue.isIndefinite(val) || val.getLength() > count)
- val2 = ber.read();
- }
- certificates = (Certificate[]) certs.toArray(new Certificate[certs.size()]);
- val = ber.read();
- }
-
- if (val.getTag() == 1)
- {
- if (!val.isConstructed())
- throw new BEREncodingException("malformed CertificateRevocationLists");
- if (Configuration.DEBUG)
- log.fine(" CertificateRevocationLists: " + val);
- count = 0;
- val2 = ber.read();
- List crls = new LinkedList();
- while (val2 != BER.END_OF_SEQUENCE &&
- (val.getLength() > 0 && val.getLength() > count))
- {
- CRL crl = x509.generateCRL(new ByteArrayInputStream(val2.getEncoded()));
- if (Configuration.DEBUG)
- log.fine(" CRL: " + crl);
- crls.add(crl);
- count += val2.getEncodedLength();
- ber.skip(val2.getLength());
- if (BERValue.isIndefinite(val) || val.getLength() > count)
- val2 = ber.read();
- }
- this.crls = (CRL[]) crls.toArray(new CRL[crls.size()]);
- val = ber.read();
- }
-
- signerInfos = new HashSet();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed SignerInfos");
- if (Configuration.DEBUG)
- log.fine(" SignerInfos: " + val);
-
- // FIXME read this more carefully.
- // Since we are just reading a file (probably) we just read until we
- // reach the end.
- while (true)
- {
- int i = ber.peek();
- if (i == 0 || i == -1)
- break;
- signerInfos.add(new SignerInfo(ber));
- }
- }
-
- /**
- * Constructs a new instance of <code>PKCS7SignedData</code> given a
- * designated set of fields.
- *
- * @param digestAlgorithms the collection of DigestAlgorithm elements. Each
- * DigestAlgorithm is a {@link List} of two elements, the first is an
- * OID while the second is dependent on the value of the OID element.
- * @param data an instance of a PKCS#7 (non-signed) data. In its simplest form
- * such an ASN.1 structure would consist of just the OID of a
- * non-signed PKCS#7 Data.
- * @param certificates the array of Certificates used to authenticate the
- * enclosed (or referenced, in case the content is null) data.
- * @param crls the array of certificate-revocation lists of the used
- * certificates.
- * @param signerInfos a set of {@link SignerInfo} elements, one per signer of
- * the data referenced by this <code>PKCS7SignedData</code>
- * instance.
- */
- public PKCS7SignedData(Set digestAlgorithms, PKCS7Data data,
- Certificate[] certificates, X509CRL[] crls,
- Set signerInfos)
- {
- super();
-
- this.version = BigInteger.ONE;
- this.digestAlgorithms = digestAlgorithms;
- this.contentType = PKCS7_SIGNED_DATA;
- this.content = data == null ? null : data.getEncoded();
- this.certificates = certificates;
- this.crls = crls;
- this.signerInfos = signerInfos;
- }
-
- public BigInteger getVersion()
- {
- return version;
- }
-
- public Certificate[] getCertificates()
- {
- return (certificates != null ? (Certificate[]) certificates.clone()
- : null);
- }
-
- public OID getContentType()
- {
- return contentType;
- }
-
- public byte[] getContent()
- {
- return (content != null ? (byte[]) content.clone() : null);
- }
-
- public Set getDigestAlgorithms()
- {
- // FIXME copy contents too, they are mutable!!!
- return Collections.unmodifiableSet(digestAlgorithms);
- }
-
- public Set getSignerInfos()
- {
- Set copy = new HashSet();
- for (Iterator it = signerInfos.iterator(); it.hasNext(); )
- copy.add(it.next());
- return Collections.unmodifiableSet(copy);
- }
-
- /**
- * Writes to the designated output stream the DER encoding of the current
- * contents of this instance.
- *
- * @param out the destination output stream.
- * @throws IOException if an I/O related exception occurs during the process.
- * @throws CRLException if an exception occurs while encoding the certificate
- * revocation lists associated with this instance.
- * @throws CertificateEncodingException if an exception occurs while encoding
- * the certificate chains associated with this instance.
- */
- public void encode(OutputStream out) throws IOException, CRLException,
- CertificateEncodingException
- {
- DERValue derVersion = new DERValue(DER.INTEGER, version);
-
- DERValue derDigestAlgorithms = new DERValue(DER.CONSTRUCTED | DER.SET,
- digestAlgorithms);
-
- DERValue derContentType = new DERValue(DER.OBJECT_IDENTIFIER,
- PKCS7Data.PKCS7_DATA);
- ArrayList contentInfo = new ArrayList(2);
- contentInfo.add(derContentType);
- if (content == null)
- contentInfo.add(new DERValue(DER.NULL, null));
- else
- contentInfo.add(content);
-
- DERValue derContentInfo = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- contentInfo);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
- for (int i = 0; i < certificates.length; i++)
- baos.write(certificates[i].getEncoded());
-
- baos.flush();
- byte[] b = baos.toByteArray();
- DERValue derExtendedCertificatesAndCertificates =
- new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 0, b.length, b, null);
-
- DERValue derCertificateRevocationLists = null;
- if (crls != null && crls.length > 0)
- {
- baos.reset();
- for (int i = 0; i < crls.length; i++)
- baos.write(((X509CRL) crls[i]).getEncoded());
-
- baos.flush();
- byte[] b2 = baos.toByteArray();
- derCertificateRevocationLists =
- new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 1, b2.length, b2, null);
- }
-
- baos.reset();
- for (Iterator it = signerInfos.iterator(); it.hasNext();)
- {
- SignerInfo signerInfo = (SignerInfo) it.next();
- signerInfo.encode(baos);
- }
- baos.flush();
- byte[] b3 = baos.toByteArray();
- DERValue derSignerInfos = new DERValue(DER.CONSTRUCTED | DER.SET,
- b3.length, b3, null);
-
- ArrayList signedData = new ArrayList(6);
- signedData.add(derVersion);
- signedData.add(derDigestAlgorithms);
- signedData.add(derContentInfo);
- signedData.add(derExtendedCertificatesAndCertificates);
- if (derCertificateRevocationLists != null)
- signedData.add(derCertificateRevocationLists);
-
- signedData.add(derSignerInfos);
- DERValue derSignedData = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- signedData);
- // now the outer contents
- ArrayList outer = new ArrayList(3);
- outer.add(new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_SIGNED_DATA));
- outer.add(new DERValue(DER.CONTEXT | 0, null));
- outer.add(derSignedData);
- DERValue derOuter = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, outer);
-
- DERWriter.write(out, derOuter);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java b/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
deleted file mode 100644
index 07ce4d7..0000000
--- a/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/* SignerInfo.java -- a SignerInfo object, from PKCS #7
- Copyright (C) 2004, 2005, 2010 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.pkcs;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.ber.BER;
-import gnu.java.security.ber.BEREncodingException;
-import gnu.java.security.ber.BERReader;
-import gnu.java.security.ber.BERValue;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.der.DERWriter;
-import gnu.java.security.util.Util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-import javax.security.auth.x500.X500Principal;
-
-public class SignerInfo
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(SignerInfo.class.getName()) : null;
-
- private final BigInteger version;
- private final BigInteger serialNumber;
- private final X500Principal issuer;
- private final OID digestAlgorithmId;
- private final byte[] digestAlgorithmParams;
- private final byte[] authenticatedAttributes;
- private final OID digestEncryptionAlgorithmId;
- private final byte[] digestEncryptionAlgorithmParams;
- private final byte[] encryptedDigest;
- private final byte[] unauthenticatedAttributes;
-
- /**
- * Parse a SignerInfo object.
- * <p>
- * A SignerInfo is a structure with the following ASN.1 syntax:
- * <pre>
- * SignerInfo ::= SEQUENCE {
- * version Version, -- always 1 for PKCS7 v1.5
- * issuerAndSerialNumber IssuerAndSerialNumber, -- an INTEGER
- * digestAlgorithm DigestAlgorithmIdentifier,
- * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
- * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
- * encryptedDigest EncryptedDigest,
- * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL }
- *
- * IssuerAndSerialNumber ::= SEQUENCE {
- * issuer Name,
- * serialNumber CertificateSerialNumber
- * }
- *
- * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * EncryptedDigest ::= OCTET STRING
- * </pre>
- */
- public SignerInfo(BERReader ber) throws IOException
- {
- DERValue val = ber.read();
- if (Configuration.DEBUG)
- log.fine("SignerInfo: " + val);
- if (!val.isConstructed())
- throw new BEREncodingException("malformed SignerInfo");
-
- val = ber.read();
- if (val.getTag() != BER.INTEGER)
- throw new BEREncodingException("malformed Version");
-
- version = (BigInteger) val.getValue();
- if (Configuration.DEBUG)
- log.fine(" Version: " + version);
-
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed IssuerAndSerialNumber");
- if (Configuration.DEBUG)
- log.fine(" IssuerAndSerialNumber: " + val);
-
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed Issuer");
-
- issuer = new X500Principal(val.getEncoded());
- ber.skip(val.getLength());
- if (Configuration.DEBUG)
- log.fine(" Issuer: " + issuer);
-
- val = ber.read();
- if (val.getTag() != BER.INTEGER)
- throw new BEREncodingException("malformed SerialNumber");
-
- serialNumber = (BigInteger) val.getValue();
- if (Configuration.DEBUG)
- log.fine(" SerialNumber: " + serialNumber);
-
- val = ber.read();
- if (!val.isConstructed())
- throw new BEREncodingException("malformed DigestAlgorithmIdentifier");
- if (Configuration.DEBUG)
- log.fine(" DigestAlgorithmIdentifier: " + val);
-
- int count = 0;
- DERValue val2 = ber.read();
- if (val2.getTag() != BER.OBJECT_IDENTIFIER)
- throw new BEREncodingException("malformed AlgorithmIdentifier");
-
- digestAlgorithmId = (OID) val2.getValue();
- if (Configuration.DEBUG)
- log.fine(" digestAlgorithm OID: " + digestAlgorithmId);
-
- if (BERValue.isIndefinite(val))
- {
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- {
- digestAlgorithmParams = val2.getEncoded();
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- throw new BEREncodingException("expecting BER end-of-sequence");
- }
- else
- digestAlgorithmParams = null;
- }
- else if (val2.getEncodedLength() < val.getLength())
- {
- val2 = ber.read();
- digestAlgorithmParams = val2.getEncoded();
- if (val2.isConstructed())
- ber.skip(val2.getLength());
- }
- else
- digestAlgorithmParams = null;
-
- if (Configuration.DEBUG)
- {
- log.fine(" digestAlgorithm params: ");
- log.fine(Util.dumpString(digestAlgorithmParams,
- " digestAlgorithm params: "));
- }
- val = ber.read();
- if (val.getTag() == 0)
- {
- authenticatedAttributes = val.getEncoded();
- val = ber.read();
- if (val.isConstructed())
- ber.skip(val.getLength());
-
- val = ber.read();
- }
- else
- authenticatedAttributes = null;
-
- if (Configuration.DEBUG)
- {
- log.fine(" AuthenticatedAttributes: ");
- log.fine(Util.dumpString(authenticatedAttributes,
- " AuthenticatedAttributes: "));
- }
- if (!val.isConstructed())
- throw new BEREncodingException("malformed DigestEncryptionAlgorithmIdentifier");
- if (Configuration.DEBUG)
- log.fine(" DigestEncryptionAlgorithmIdentifier: " + val);
- count = 0;
- val2 = ber.read();
- if (val2.getTag() != BER.OBJECT_IDENTIFIER)
- throw new BEREncodingException("malformed AlgorithmIdentifier");
-
- digestEncryptionAlgorithmId = (OID) val2.getValue();
- if (Configuration.DEBUG)
- log.fine(" digestEncryptionAlgorithm OID: " + digestEncryptionAlgorithmId);
-
- if (BERValue.isIndefinite(val))
- {
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- {
- digestEncryptionAlgorithmParams = val2.getEncoded();
- val2 = ber.read();
- if (val2 != BER.END_OF_SEQUENCE)
- throw new BEREncodingException("expecting BER end-of-sequence");
- }
- else
- digestEncryptionAlgorithmParams = null;
- }
- else if (val2.getEncodedLength() < val.getLength())
- {
- val2 = ber.read();
- digestEncryptionAlgorithmParams = val2.getEncoded();
- if (val2.isConstructed())
- ber.skip(val2.getLength());
- }
- else
- digestEncryptionAlgorithmParams = null;
-
- if (Configuration.DEBUG)
- {
- log.fine(" digestEncryptionAlgorithm params: ");
- log.fine(Util.dumpString(digestEncryptionAlgorithmParams,
- " digestEncryptionAlgorithm params: "));
- }
- val = ber.read();
- if (val.getTag() != BER.OCTET_STRING)
- throw new BEREncodingException("malformed EncryptedDigest");
-
- encryptedDigest = (byte[]) val.getValue();
- if (Configuration.DEBUG)
- {
- log.fine(" EncryptedDigest: ");
- log.fine(Util.dumpString(encryptedDigest, " EncryptedDigest: "));
- }
- if (ber.peek() == 1)
- unauthenticatedAttributes = ber.read().getEncoded();
- else
- unauthenticatedAttributes = null;
-
- if (Configuration.DEBUG)
- {
- log.fine(" UnauthenticatedAttributes: ");
- log.fine(Util.dumpString(unauthenticatedAttributes,
- " UnauthenticatedAttributes: "));
- }
- if (ber.peek() == 0)
- ber.read();
- }
-
- /**
- * Constructs a new instance of <code>SignerInfo</code> given a designated
- * set of fields.
- *
- * @param issuer the X.500 Principal name of the signer referenced by this
- * instance.
- * @param serialNumber the serial number of the certificate being used. Both
- * this and the previous arguments are gleaned from the signer's
- * certificate.
- * @param digestAlgorithmOID the OID of the digest algorithm. When
- * constructing the DigestAlgorithmIdentifier with this OID, the
- * parameters part will be NULL.
- * @param authenticatedAttributes the encoding of the set of authenticated
- * attributes to use.
- * @param digestEncryptionAlgorithmOID the OID of the digest encryption
- * algorithm. When constructing the
- * DigestEncryptionAlgorithmIdentifier with this OID, the parameters
- * part will be NULL.
- * @param encryptedDigest the encrypted hash generated with this signer's
- * private key.
- * @param unauthenticatedAttributes the encoding of the set of
- * unauthencticated attributes.
- */
- public SignerInfo(X500Principal issuer, BigInteger serialNumber,
- OID digestAlgorithmOID, byte[] authenticatedAttributes,
- OID digestEncryptionAlgorithmOID,
- byte[] encryptedDigest, byte[] unauthenticatedAttributes)
- {
- super();
-
- this.version = BigInteger.ONE;
- this.issuer = issuer;
- this.serialNumber = serialNumber;
- this.digestAlgorithmId = digestAlgorithmOID;
- this.digestAlgorithmParams = null;
- this.authenticatedAttributes = authenticatedAttributes;
- this.digestEncryptionAlgorithmId = digestEncryptionAlgorithmOID;
- this.digestEncryptionAlgorithmParams = null;
- this.encryptedDigest = encryptedDigest;
- this.unauthenticatedAttributes = unauthenticatedAttributes;
- }
-
- public BigInteger getVersion()
- {
- return version;
- }
-
- public BigInteger getSerialNumber()
- {
- return serialNumber;
- }
-
- public X500Principal getIssuer()
- {
- return issuer;
- }
-
- public OID getDigestAlgorithmId()
- {
- return digestAlgorithmId;
- }
-
- public byte[] getDigestAlgorithmParams()
- {
- return (digestAlgorithmParams != null
- ? (byte[]) digestAlgorithmParams.clone()
- : null);
- }
-
- public byte[] getAuthenticatedAttributes()
- {
- return (authenticatedAttributes != null
- ? (byte[]) authenticatedAttributes.clone()
- : null);
- }
-
- public OID getDigestEncryptionAlgorithmId()
- {
- return digestEncryptionAlgorithmId;
- }
-
- public byte[] getDigestEncryptionAlgorithmParams()
- {
- return (digestEncryptionAlgorithmParams != null
- ? (byte[]) digestEncryptionAlgorithmParams.clone()
- : null);
- }
-
- public byte[] getEncryptedDigest()
- {
- return (encryptedDigest != null ? (byte[]) encryptedDigest.clone() : null);
- }
-
- public byte[] getUnauthenticatedAttributes()
- {
- return (unauthenticatedAttributes != null
- ? (byte[]) unauthenticatedAttributes.clone()
- : null);
- }
-
- /**
- * Writes to the designated output stream the DER encoding of the current
- * contents of this instance.
- *
- * @param out the destination output stream.
- * @throws IOException if an I/O related exception occurs during the process.
- */
- public void encode(OutputStream out) throws IOException
- {
- DERValue derVersion = new DERValue(DER.INTEGER, version);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
- baos.write(issuer.getEncoded());
- DERValue derSerialNumber = new DERValue(DER.INTEGER, serialNumber);
- DERWriter.write(baos, derSerialNumber);
- baos.flush();
- byte[] b = baos.toByteArray();
- DERValue derIssuerAndSerialNumber =
- new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, b.length, b, null);
-
- DERValue derDigestAlgorithmOID = new DERValue(DER.OBJECT_IDENTIFIER,
- digestAlgorithmId);
- ArrayList digestAlgorithmIdentifier = new ArrayList(1);
- digestAlgorithmIdentifier.add(derDigestAlgorithmOID);
- DERValue derDigestAlgorithmIdentifier =
- new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, digestAlgorithmIdentifier);
-
- DERValue derAuthenticatedAttributes;
- if (authenticatedAttributes == null)
- derAuthenticatedAttributes = new DERValue(DER.NULL, null);
- else
- derAuthenticatedAttributes = new DERValue(DER.CONSTRUCTED | DER.SET,
- authenticatedAttributes);
-
- DERValue derDigestEncryptionAlgorithmOID =
- new DERValue(DER.OBJECT_IDENTIFIER, digestEncryptionAlgorithmId);
- ArrayList digestEncryptionAlgorithmIdentifier = new ArrayList(1);
- digestEncryptionAlgorithmIdentifier.add(derDigestEncryptionAlgorithmOID);
- DERValue derDigestEncryptionAlgorithmIdentifier =
- new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, digestEncryptionAlgorithmIdentifier);
-
- DERValue derEncryptedDigest = new DERValue(DER.OCTET_STRING, encryptedDigest);
-
- DERValue derUnauthenticatedAttributes;
- if (unauthenticatedAttributes == null)
- derUnauthenticatedAttributes = new DERValue(DER.NULL, null);
- else
- derUnauthenticatedAttributes = new DERValue(DER.CONSTRUCTED | DER.SET,
- unauthenticatedAttributes);
-
- ArrayList signerInfo = new ArrayList(5);
- signerInfo.add(derVersion);
- signerInfo.add(derIssuerAndSerialNumber);
- signerInfo.add(derDigestAlgorithmIdentifier);
- signerInfo.add(derDigestEncryptionAlgorithmIdentifier);
- signerInfo.add(derEncryptedDigest);
- DERValue derSignerInfo = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- signerInfo);
- DERWriter.write(out, derSignerInfo);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/pkcs/package.html b/libjava/classpath/gnu/java/security/pkcs/package.html
deleted file mode 100644
index 60d658f..0000000
--- a/libjava/classpath/gnu/java/security/pkcs/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.pkcs package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.pkcs</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/prng/BasePRNG.java b/libjava/classpath/gnu/java/security/prng/BasePRNG.java
deleted file mode 100644
index eb5ada7..0000000
--- a/libjava/classpath/gnu/java/security/prng/BasePRNG.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/* BasePRNG.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.prng;
-
-import java.util.Map;
-
-/**
- * An abstract class to facilitate implementing PRNG algorithms.
- */
-public abstract class BasePRNG
- implements IRandom
-{
- /** The canonical name prefix of the PRNG algorithm. */
- protected String name;
-
- /** Indicate if this instance has already been initialised or not. */
- protected boolean initialised;
-
- /** A temporary buffer to serve random bytes. */
- protected byte[] buffer;
-
- /** The index into buffer of where the next byte will come from. */
- protected int ndx;
-
- /**
- * Trivial constructor for use by concrete subclasses.
- *
- * @param name the canonical name of this instance.
- */
- protected BasePRNG(String name)
- {
- super();
-
- this.name = name;
- initialised = false;
- buffer = new byte[0];
- }
-
- public String name()
- {
- return name;
- }
-
- public void init(Map attributes)
- {
- this.setup(attributes);
-
- ndx = 0;
- initialised = true;
- }
-
- public byte nextByte() throws IllegalStateException, LimitReachedException
- {
- if (! initialised)
- throw new IllegalStateException();
-
- return nextByteInternal();
- }
-
- public void nextBytes(byte[] out) throws IllegalStateException,
- LimitReachedException
- {
- nextBytes(out, 0, out.length);
- }
-
- public void nextBytes(byte[] out, int offset, int length)
- throws IllegalStateException, LimitReachedException
- {
- if (! initialised)
- throw new IllegalStateException("not initialized");
-
- if (length == 0)
- return;
-
- if (offset < 0 || length < 0 || offset + length > out.length)
- throw new ArrayIndexOutOfBoundsException("offset=" + offset + " length="
- + length + " limit="
- + out.length);
- if (ndx >= buffer.length)
- {
- fillBlock();
- ndx = 0;
- }
- int count = 0;
- while (count < length)
- {
- int amount = Math.min(buffer.length - ndx, length - count);
- System.arraycopy(buffer, ndx, out, offset + count, amount);
- count += amount;
- ndx += amount;
- if (ndx >= buffer.length)
- {
- fillBlock();
- ndx = 0;
- }
- }
- }
-
- public void addRandomByte(byte b)
- {
- throw new UnsupportedOperationException("random state is non-modifiable");
- }
-
- public void addRandomBytes(byte[] buffer)
- {
- addRandomBytes(buffer, 0, buffer.length);
- }
-
- public void addRandomBytes(byte[] buffer, int offset, int length)
- {
- throw new UnsupportedOperationException("random state is non-modifiable");
- }
-
- public boolean isInitialised()
- {
- return initialised;
- }
-
- private byte nextByteInternal() throws LimitReachedException
- {
- if (ndx >= buffer.length)
- {
- this.fillBlock();
- ndx = 0;
- }
-
- return buffer[ndx++];
- }
-
- public Object clone() throws CloneNotSupportedException
- {
- BasePRNG result = (BasePRNG) super.clone();
- if (this.buffer != null)
- result.buffer = (byte[]) this.buffer.clone();
-
- return result;
- }
-
- public abstract void setup(Map attributes);
-
- public abstract void fillBlock() throws LimitReachedException;
-}
diff --git a/libjava/classpath/gnu/java/security/prng/EntropySource.java b/libjava/classpath/gnu/java/security/prng/EntropySource.java
deleted file mode 100644
index a7173d3..0000000
--- a/libjava/classpath/gnu/java/security/prng/EntropySource.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/* EntropySource.java --
- Copyright (C) 2004, 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.prng;
-
-/**
- * A generic interface for adding random bytes to an entropy pool.
- */
-public interface EntropySource
-{
- /**
- * Returns the estimated quality of this source. This value should be
- * between 0 and 100 (the running quality is computed as a percentage,
- * 100 percent being perfect-quality).
- *
- * @return The quality.
- */
- double quality();
-
- /**
- * Returns a new buffer with the next random bytes to add.
- *
- * @return The next random bytes.
- */
- byte[] nextBytes();
-}
diff --git a/libjava/classpath/gnu/java/security/prng/IRandom.java b/libjava/classpath/gnu/java/security/prng/IRandom.java
deleted file mode 100644
index eb1495d..0000000
--- a/libjava/classpath/gnu/java/security/prng/IRandom.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/* IRandom.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.prng;
-
-import java.util.Map;
-
-/**
- * The basic visible methods of any pseudo-random number generator.
- * <p>
- * The [HAC] defines a PRNG (as implemented in this library) as follows:
- * <ul>
- * <li>"5.6 Definition: A pseudorandom bit generator (PRBG) is said to pass the
- * <em>next-bit test</em> if there is no polynomial-time algorithm which, on
- * input of the first <code>L</code> bits of an output sequence <code>S</code>,
- * can predict the <code>(L+1)</code><sup>st</sup> bit of <code>S</code> with a
- * probability significantly greater than <code>1/2</code>."</li>
- * <li>"5.8 Definition: A PRBG that passes the <em>next-bit test</em>
- * (possibly under some plausible but unproved mathematical assumption such as
- * the intractability of factoring integers) is called a <em>cryptographically
- * secure pseudorandom bit generator</em> (CSPRBG)."</li>
- * </ul>
- * <p>
- * <b>IMPLEMENTATION NOTE</b>: Although all the concrete classes in this
- * package implement the {@link Cloneable} interface, it is important to note
- * here that such an operation, for those algorithms that use an underlying
- * symmetric key block cipher, <b>DOES NOT</b> clone any session key material
- * that may have been used in initialising the source PRNG (the instance to be
- * cloned). Instead a clone of an already initialised PRNG, that uses an
- * underlying symmetric key block cipher, is another instance with a clone of
- * the same cipher that operates with the <b>same block size</b> but without
- * any knowledge of neither key material nor key size.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.cacr.math.uwaterloo.ca/hac">[HAC]</a>: Handbook of
- * Applied Cryptography.<br>
- * CRC Press, Inc. ISBN 0-8493-8523-7, 1997<br>
- * Menezes, A., van Oorschot, P. and S. Vanstone.</li>
- * </ol>
- */
-public interface IRandom
- extends Cloneable
-{
- /**
- * Returns the canonical name of this instance.
- *
- * @return the canonical name of this instance.
- */
- String name();
-
- /**
- * Initialises the pseudo-random number generator scheme with the appropriate
- * attributes.
- *
- * @param attributes a set of name-value pairs that describe the desired
- * future instance behaviour.
- * @exception IllegalArgumentException if at least one of the defined name/
- * value pairs contains invalid data.
- */
- void init(Map attributes);
-
- /**
- * Returns the next 8 bits of random data generated from this instance.
- *
- * @return the next 8 bits of random data generated from this instance.
- * @exception IllegalStateException if the instance is not yet initialised.
- * @exception LimitReachedException if this instance has reached its
- * theoretical limit for generating non-repetitive pseudo-random
- * data.
- */
- byte nextByte() throws IllegalStateException, LimitReachedException;
-
- /**
- * Fills the designated byte array, starting from byte at index
- * <code>offset</code>, for a maximum of <code>length</code> bytes with
- * the output of this generator instance.
- *
- * @param out the placeholder to contain the generated random bytes.
- * @param offset the starting index in <i>out</i> to consider. This method
- * does nothing if this parameter is not within <code>0</code> and
- * <code>out.length</code>.
- * @param length the maximum number of required random bytes. This method does
- * nothing if this parameter is less than <code>1</code>.
- * @exception IllegalStateException if the instance is not yet initialised.
- * @exception LimitReachedException if this instance has reached its
- * theoretical limit for generating non-repetitive pseudo-random
- * data.
- */
- void nextBytes(byte[] out, int offset, int length)
- throws IllegalStateException, LimitReachedException;
-
- /**
- * Supplement, or possibly replace, the random state of this PRNG with a
- * random byte.
- * <p>
- * Implementations are not required to implement this method in any meaningful
- * way; this may be a no-operation, and implementations may throw an
- * {@link UnsupportedOperationException}.
- *
- * @param b The byte to add.
- */
- void addRandomByte(byte b);
-
- /**
- * Supplement, or possibly replace, the random state of this PRNG with a
- * sequence of new random bytes.
- * <p>
- * Implementations are not required to implement this method in any meaningful
- * way; this may be a no-operation, and implementations may throw an
- * {@link UnsupportedOperationException}.
- *
- * @param in The buffer of new random bytes to add.
- */
- void addRandomBytes(byte[] in);
-
- /**
- * Supplement, or possibly replace, the random state of this PRNG with a
- * sequence of new random bytes.
- * <p>
- * Implementations are not required to implement this method in any meaningful
- * way; this may be a no-operation, and implementations may throw an
- * {@link UnsupportedOperationException}.
- *
- * @param in The buffer of new random bytes to add.
- * @param offset The offset from whence to begin reading random bytes.
- * @param length The number of random bytes to add.
- * @exception IndexOutOfBoundsException If <i>offset</i>, <i>length</i>, or
- * <i>offset</i>+<i>length</i> is out of bounds.
- */
- void addRandomBytes(byte[] in, int offset, int length);
-
- /**
- * Returns a clone copy of this instance.
- *
- * @return a clone copy of this instance.
- */
- Object clone() throws CloneNotSupportedException;
-}
diff --git a/libjava/classpath/gnu/java/security/prng/LimitReachedException.java b/libjava/classpath/gnu/java/security/prng/LimitReachedException.java
deleted file mode 100644
index 028c745..0000000
--- a/libjava/classpath/gnu/java/security/prng/LimitReachedException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* LimitReachedException.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.prng;
-
-/**
- * A checked exception that indicates that a pseudo random number generated has
- * reached its theoretical limit in generating random bytes.
- */
-public class LimitReachedException
- extends Exception
-{
- public LimitReachedException()
- {
- super();
- }
-
- public LimitReachedException(String msg)
- {
- super(msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/prng/MDGenerator.java b/libjava/classpath/gnu/java/security/prng/MDGenerator.java
deleted file mode 100644
index b110486..0000000
--- a/libjava/classpath/gnu/java/security/prng/MDGenerator.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* MDGenerator.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.prng;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-
-import java.util.Map;
-
-/**
- * A simple pseudo-random number generator that relies on a hash algorithm, that
- * (a) starts its operation by hashing a <code>seed</code>, and then (b)
- * continuously re-hashing its output. If no hash algorithm name is specified in
- * the {@link Map} of attributes used to initialise the instance then the
- * SHA-160 algorithm is used as the underlying hash function. Also, if no
- * <code>seed</code> is given, an empty octet sequence is used.
- */
-public class MDGenerator
- extends BasePRNG
- implements Cloneable
-{
- /** Property name of underlying hash algorithm for this generator. */
- public static final String MD_NAME = "gnu.crypto.prng.md.hash.name";
-
- /** Property name of seed material. */
- public static final String SEEED = "gnu.crypto.prng.md.seed";
-
- /** The underlying hash instance. */
- private IMessageDigest md;
-
- /** Trivial 0-arguments constructor. */
- public MDGenerator()
- {
- super(Registry.MD_PRNG);
- }
-
- public void setup(Map attributes)
- {
- // find out which hash to use
- String underlyingMD = (String) attributes.get(MD_NAME);
- if (underlyingMD == null)
- {
- if (md == null)
- { // happy birthday
- // ensure we have a reliable implementation of this hash
- md = HashFactory.getInstance(Registry.SHA160_HASH);
- }
- else // a clone. reset it for reuse
- md.reset();
- }
- else // ensure we have a reliable implementation of this hash
- md = HashFactory.getInstance(underlyingMD);
- // get the seeed
- byte[] seed = (byte[]) attributes.get(SEEED);
- if (seed == null)
- seed = new byte[0];
-
- md.update(seed, 0, seed.length);
- }
-
- public void fillBlock() throws LimitReachedException
- {
- IMessageDigest mdc = (IMessageDigest) md.clone();
- buffer = mdc.digest();
- md.update(buffer, 0, buffer.length);
- }
-
- public void addRandomByte(final byte b)
- {
- if (md == null)
- throw new IllegalStateException("not initialized");
- md.update(b);
- }
-
- public void addRandomBytes(final byte[] buf, final int off, final int len)
- {
- if (md == null)
- throw new IllegalStateException("not initialized");
- md.update(buf, off, len);
- }
-
- public Object clone() throws CloneNotSupportedException
- {
- MDGenerator result = (MDGenerator) super.clone();
- if (this.md != null)
- result.md = (IMessageDigest) this.md.clone();
-
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/prng/PRNGFactory.java b/libjava/classpath/gnu/java/security/prng/PRNGFactory.java
deleted file mode 100644
index b57d7c7..0000000
--- a/libjava/classpath/gnu/java/security/prng/PRNGFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* PRNGFactory.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.prng;
-
-import gnu.java.security.Registry;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A Factory to instantiate pseudo random number generators.
- */
-public class PRNGFactory
- implements Registry
-{
- /** Trivial constructor to enforce <i>Singleton</i> pattern. */
- protected PRNGFactory()
- {
- }
-
- /**
- * Returns an instance of a padding algorithm given its name.
- *
- * @param prng the case-insensitive name of the PRNG.
- * @return an instance of the pseudo-random number generator.
- * @exception InternalError if the implementation does not pass its self-
- * test.
- */
- public static final IRandom getInstance(String prng)
- {
- if (prng == null)
- return null;
-
- prng = prng.trim();
- IRandom result = null;
- if (prng.equalsIgnoreCase(MD_PRNG))
- result = new MDGenerator();
-
- return result;
- }
-
- /**
- * Returns a {@link Set} of names of padding algorithms supported by this
- * <i>Factory</i>.
- *
- * @return a {@link Set} of pseudo-random number generator algorithm names
- * (Strings).
- */
- public static final Set getNames()
- {
- HashSet hs = new HashSet();
- hs.add(MD_PRNG);
- return Collections.unmodifiableSet(hs);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/prng/RandomEvent.java b/libjava/classpath/gnu/java/security/prng/RandomEvent.java
deleted file mode 100644
index fc4607a..0000000
--- a/libjava/classpath/gnu/java/security/prng/RandomEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* RandomEvent.java -- an event with random data.
- Copyright (C) 2004, 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.prng;
-
-import java.util.EventObject;
-
-/**
- * A type for entropy accumulators that will be notified of random events.
- */
-public class RandomEvent
- extends EventObject
-{
- private final byte sourceNumber;
-
- private final byte poolNumber;
-
- private final byte[] data;
-
- public RandomEvent(Object source, byte sourceNumber, byte poolNumber,
- byte[] data)
- {
- super(source);
- this.sourceNumber = sourceNumber;
- this.poolNumber = poolNumber;
- if (data.length == 0 || data.length > 32)
- throw new IllegalArgumentException(
- "random events take between 1 and 32 bytes of data");
- this.data = (byte[]) data.clone();
- }
-
- public byte getSourceNumber()
- {
- return sourceNumber;
- }
-
- public byte getPoolNumber()
- {
- return poolNumber;
- }
-
- public byte[] getData()
- {
- return data;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/prng/RandomEventListener.java b/libjava/classpath/gnu/java/security/prng/RandomEventListener.java
deleted file mode 100644
index 720f2af..0000000
--- a/libjava/classpath/gnu/java/security/prng/RandomEventListener.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* RandomEventListener.java --
- Copyright (C) 2004, 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.prng;
-
-import java.util.EventListener;
-
-/**
- * An interface for entropy accumulators that will be notified of random events.
- */
-public interface RandomEventListener
- extends EventListener
-{
- void addRandomEvent(RandomEvent event);
-}
diff --git a/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java b/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java
deleted file mode 100644
index 4bf3d54..0000000
--- a/libjava/classpath/gnu/java/security/provider/CollectionCertStoreImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/* CollectionCertStore.java -- Collection-based cert store.
- Copyright (C) 2004 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.provider;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CRL;
-import java.security.cert.CRLSelector;
-import java.security.cert.CertSelector;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertStoreParameters;
-import java.security.cert.CertStoreSpi;
-import java.security.cert.Certificate;
-import java.security.cert.CollectionCertStoreParameters;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-public final class CollectionCertStoreImpl extends CertStoreSpi
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private final Collection store;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public CollectionCertStoreImpl(CertStoreParameters params)
- throws InvalidAlgorithmParameterException
- {
- super(params);
- if (! (params instanceof CollectionCertStoreParameters))
- throw new InvalidAlgorithmParameterException("not a CollectionCertStoreParameters object");
- store = ((CollectionCertStoreParameters) params).getCollection();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public Collection engineGetCertificates(CertSelector selector)
- throws CertStoreException
- {
- LinkedList result = new LinkedList();
- for (Iterator it = store.iterator(); it.hasNext(); )
- {
- Object o = it.next();
- if ((o instanceof Certificate) && selector.match((Certificate) o))
- result.add(o);
- }
- return result;
- }
-
- public Collection engineGetCRLs(CRLSelector selector)
- throws CertStoreException
- {
- LinkedList result = new LinkedList();
- for (Iterator it = store.iterator(); it.hasNext(); )
- {
- Object o = it.next();
- if ((o instanceof CRL) && selector.match((CRL) o))
- result.add(o);
- }
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java b/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java
deleted file mode 100644
index 566c949..0000000
--- a/libjava/classpath/gnu/java/security/provider/DefaultPolicy.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* DefaultPolicy.java --
- Copyright (C) 2001, 2002 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.provider;
-
-import java.security.AllPermission;
-import java.security.CodeSource;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.Policy;
-
-/**
- * This is just a stub policy implementation which grants all permissions
- * to any code source. FIXME: This should be replaced with a real
- * implementation that reads the policy configuration from a file, like
- * $JAVA_HOME/jre/lib/security/java.security.
- */
-public class DefaultPolicy extends Policy
-{
- static Permission allPermission = new AllPermission();
-
- public PermissionCollection getPermissions(CodeSource codesource)
- {
- Permissions perms = new Permissions();
- perms.add(allPermission);
- return perms;
- }
-
- public void refresh()
- {
- // Nothing.
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/Gnu.java b/libjava/classpath/gnu/java/security/provider/Gnu.java
deleted file mode 100644
index 62bb0a2..0000000
--- a/libjava/classpath/gnu/java/security/provider/Gnu.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Gnu.java --- Gnu provider main class
- Copyright (C) 1999, 2002, 2003, 2005 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.provider;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.Provider;
-
-public final class Gnu
- extends Provider
-{
- public Gnu()
- {
- super("GNU", 1.0,
- "GNU provider v1.0 implementing SHA-1, MD5, DSA, RSA, X.509 "
- + "Certificates and CRLs, PKIX certificate path validators, "
- + "Collection cert stores, Diffie-Hellman key agreement and "
- + "key pair generator");
- AccessController.doPrivileged (new PrivilegedAction()
- {
- public Object run()
- {
- // Note that all implementation class names are referenced by using
- // Class.getName(). That way when we staticly link the Gnu provider
- // we automatically get all the implementation classes.
-
- // Signature
- put("Signature.SHA160withDSS",
- gnu.java.security.jce.sig.SHA160withDSS.class.getName());
- put("Alg.Alias.Signature.SHA1withDSA", "SHA160withDSS");
- put("Alg.Alias.Signature.DSS", "SHA160withDSS");
- put("Alg.Alias.Signature.DSA", "SHA160withDSS");
- put("Alg.Alias.Signature.SHAwithDSA", "SHA160withDSS");
- put("Alg.Alias.Signature.DSAwithSHA", "SHA160withDSS");
- put("Alg.Alias.Signature.DSAwithSHA1", "SHA160withDSS");
- put("Alg.Alias.Signature.SHA/DSA", "SHA160withDSS");
- put("Alg.Alias.Signature.SHA-1/DSA", "SHA160withDSS");
- put("Alg.Alias.Signature.SHA1/DSA", "SHA160withDSS");
- put("Alg.Alias.Signature.OID.1.2.840.10040.4.3", "SHA160withDSS");
- put("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA160withDSS");
- put("Alg.Alias.Signature.1.3.14.3.2.13", "SHA160withDSS");
- put("Alg.Alias.Signature.1.3.14.3.2.27", "SHA160withDSS");
-
- put("Signature.MD2withRSA",
- gnu.java.security.jce.sig.MD2withRSA.class.getName());
- put("Signature.MD2withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.md2WithRSAEncryption", "MD2withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.2", "MD2withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.2", "MD2withRSA");
-
- put("Signature.MD5withRSA",
- gnu.java.security.jce.sig.MD5withRSA.class.getName());
- put("Signature.MD5withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.md5WithRSAEncryption", "MD5withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.4", "MD5withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.4", "MD5withRSA");
- put("Alg.Alias.Signature.RSA", "MD5withRSA");
-
- put("Signature.SHA160withRSA",
- gnu.java.security.jce.sig.SHA160withRSA.class.getName());
- put("Signature.SHA160withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.sha-1WithRSAEncryption", "SHA160withRSA");
- put("Alg.Alias.Signature.sha-160WithRSAEncryption", "SHA160withRSA");
- put("Alg.Alias.Signature.sha1WithRSAEncryption", "SHA160withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.5", "SHA160withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.5", "SHA160withRSA");
- put("Alg.Alias.Signature.SHA1withRSA", "SHA160withRSA");
-
- put("Signature.SHA256withRSA",
- gnu.java.security.jce.sig.SHA256withRSA.class.getName());
- put("Signature.SHA160withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.sha256WithRSAEncryption", "SHA256withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.11", "SHA256withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.11", "SHA256withRSA");
-
- put("Signature.SHA384withRSA",
- gnu.java.security.jce.sig.SHA384withRSA.class.getName());
- put("Signature.SHA160withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.sha384WithRSAEncryption", "SHA384withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.12", "SHA384withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.12", "SHA384withRSA");
-
- put("Signature.SHA512withRSA",
- gnu.java.security.jce.sig.SHA512withRSA.class.getName());
- put("Signature.SHA160withRSA ImplementedIn", "Software");
- put("Alg.Alias.Signature.sha512WithRSAEncryption", "SHA512withRSA");
- put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.13", "SHA512withRSA");
- put("Alg.Alias.Signature.1.2.840.113549.1.1.13", "SHA512withRSA");
-
- put("Signature.DSS/RAW",
- gnu.java.security.jce.sig.DSSRawSignatureSpi.class.getName());
- put("Signature.DSS/RAW KeySize", "1024");
- put("Signature.DSS/RAW ImplementedIn", "Software");
-
- put("Signature.RSA-PSS/RAW",
- gnu.java.security.jce.sig.RSAPSSRawSignatureSpi.class.getName());
- put("Signature.RSA-PSS/RAW KeySize", "1024");
- put("Signature.RSA-PSS/RAW ImplementedIn", "Software");
-
- // Key Pair Generator
- put("KeyPairGenerator.DSS",
- gnu.java.security.jce.sig.DSSKeyPairGeneratorSpi.class.getName());
- put("KeyPairGenerator.DSS KeySize", "1024");
- put("KeyPairGenerator.DSS ImplementedIn", "Software");
- put("Alg.Alias.KeyPairGenerator.DSA", "DSS");
- put("Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1", "DSS");
- put("Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1", "DSS");
- put("Alg.Alias.KeyPairGenerator.1.3.14.3.2.12", "DSS");
-
- put("KeyPairGenerator.RSA",
- gnu.java.security.jce.sig.RSAKeyPairGeneratorSpi.class.getName());
- put("KeyPairGenerator.RSA KeySize", "1024");
- put("KeyPairGenerator.RSA ImplementedIn", "Software");
-
- // Key Factory
- put("KeyFactory.DSS",
- gnu.java.security.jce.sig.DSSKeyFactory.class.getName());
- put("Alg.Alias.KeyFactory.DSA", "DSS");
- put("Alg.Alias.KeyFactory.OID.1.2.840.10040.4.1", "DSS");
- put("Alg.Alias.KeyFactory.1.2.840.10040.4.1", "DSS");
- put("Alg.Alias.KeyFactory.1.3.14.3.2.12", "DSS");
-
- put("KeyFactory.RSA",
- gnu.java.security.jce.sig.RSAKeyFactory.class.getName());
-
- put("KeyFactory.Encoded",
- gnu.java.security.jce.sig.EncodedKeyFactory.class.getName());
- put("KeyFactory.Encoded ImplementedIn", "Software");
- put("Alg.Alias.KeyFactory.X.509", "Encoded");
- put("Alg.Alias.KeyFactory.X509", "Encoded");
- put("Alg.Alias.KeyFactory.PKCS#8", "Encoded");
- put("Alg.Alias.KeyFactory.PKCS8", "Encoded");
-
- put("MessageDigest.HAVAL",
- gnu.java.security.jce.hash.HavalSpi.class.getName());
- put("MessageDigest.HAVAL ImplementedIn", "Software");
- put("MessageDigest.MD2",
- gnu.java.security.jce.hash.MD2Spi.class.getName());
- put("MessageDigest.MD2 ImplementedIn", "Software");
- put("MessageDigest.MD4",
- gnu.java.security.jce.hash.MD4Spi.class.getName());
- put("MessageDigest.MD4 ImplementedIn", "Software");
- put("MessageDigest.MD5",
- gnu.java.security.jce.hash.MD5Spi.class.getName());
- put("MessageDigest.MD5 ImplementedIn", "Software");
- put("MessageDigest.RIPEMD128",
- gnu.java.security.jce.hash.RipeMD128Spi.class.getName());
- put("MessageDigest.RIPEMD128 ImplementedIn", "Software");
- put("MessageDigest.RIPEMD160",
- gnu.java.security.jce.hash.RipeMD160Spi.class.getName());
- put("MessageDigest.RIPEMD160 ImplementedIn", "Software");
- put("MessageDigest.SHA-160",
- gnu.java.security.jce.hash.Sha160Spi.class.getName());
- put("MessageDigest.SHA-160 ImplementedIn", "Software");
- put("MessageDigest.SHA-256",
- gnu.java.security.jce.hash.Sha256Spi.class.getName());
- put("MessageDigest.SHA-256 ImplementedIn", "Software");
- put("MessageDigest.SHA-384",
- gnu.java.security.jce.hash.Sha384Spi.class.getName());
- put("MessageDigest.SHA-384 ImplementedIn", "Software");
- put("MessageDigest.SHA-512",
- gnu.java.security.jce.hash.Sha512Spi.class.getName());
- put("MessageDigest.SHA-512 ImplementedIn", "Software");
- put("MessageDigest.TIGER",
- gnu.java.security.jce.hash.TigerSpi.class.getName());
- put("MessageDigest.TIGER ImplementedIn", "Software");
- put("MessageDigest.WHIRLPOOL",
- gnu.java.security.jce.hash.WhirlpoolSpi.class.getName());
- put("MessageDigest.WHIRLPOOL ImplementedIn", "Software");
-
- put("Alg.Alias.MessageDigest.SHS", "SHA-160");
- put("Alg.Alias.MessageDigest.SHA", "SHA-160");
- put("Alg.Alias.MessageDigest.SHA1", "SHA-160");
- put("Alg.Alias.MessageDigest.SHA-1", "SHA-160");
- put("Alg.Alias.MessageDigest.SHA2-256", "SHA-256");
- put("Alg.Alias.MessageDigest.SHA2-384", "SHA-384");
- put("Alg.Alias.MessageDigest.SHA2-512", "SHA-512");
- put("Alg.Alias.MessageDigest.SHA256", "SHA-256");
- put("Alg.Alias.MessageDigest.SHA384", "SHA-384");
- put("Alg.Alias.MessageDigest.SHA512", "SHA-512");
- put("Alg.Alias.MessageDigest.RIPEMD-160", "RIPEMD160");
- put("Alg.Alias.MessageDigest.RIPEMD-128", "RIPEMD128");
- put("Alg.Alias.MessageDigest.OID.1.2.840.11359.2.2", "MD2");
- put("Alg.Alias.MessageDigest.1.2.840.11359.2.2", "MD2");
- put("Alg.Alias.MessageDigest.OID.1.2.840.11359.2.5", "MD5");
- put("Alg.Alias.MessageDigest.1.2.840.11359.2.5", "MD5");
- put("Alg.Alias.MessageDigest.OID.1.3.14.3.2.26", "SHA1");
- put("Alg.Alias.MessageDigest.1.3.14.3.2.26", "SHA1");
-
- // Algorithm Parameters
- put("AlgorithmParameters.DSS",
- gnu.java.security.jce.sig.DSSParameters.class.getName());
- put("Alg.Alias.AlgorithmParameters.DSA", "DSS");
- put("Alg.Alias.AlgorithmParameters.SHAwithDSA", "DSS");
- put("Alg.Alias.AlgorithmParameters.OID.1.2.840.10040.4.3", "DSS");
- put("Alg.Alias.AlgorithmParameters.1.2.840.10040.4.3", "DSS");
-
- // Algorithm Parameter Generator
- put("AlgorithmParameterGenerator.DSA",
- gnu.java.security.jce.sig.DSSParametersGenerator.class.getName());
- put("Alg.Alias.AlgorithmParameterGenerator.DSA", "DSS");
-
- // SecureRandom
- put("SecureRandom.SHA1PRNG",
- gnu.java.security.jce.prng.Sha160RandomSpi.class.getName());
-
- put("SecureRandom.MD2PRNG",
- gnu.java.security.jce.prng.MD2RandomSpi.class.getName());
- put("SecureRandom.MD2PRNG ImplementedIn", "Software");
- put("SecureRandom.MD4PRNG",
- gnu.java.security.jce.prng.MD4RandomSpi.class.getName());
- put("SecureRandom.MD4PRNG ImplementedIn", "Software");
- put("SecureRandom.MD5PRNG",
- gnu.java.security.jce.prng.MD5RandomSpi.class.getName());
- put("SecureRandom.MD5PRNG ImplementedIn", "Software");
- put("SecureRandom.RIPEMD128PRNG",
- gnu.java.security.jce.prng.RipeMD128RandomSpi.class.getName());
- put("SecureRandom.RIPEMD128PRNG ImplementedIn", "Software");
- put("SecureRandom.RIPEMD160PRNG",
- gnu.java.security.jce.prng.RipeMD160RandomSpi.class.getName());
- put("SecureRandom.RIPEMD160PRNG ImplementedIn", "Software");
- put("SecureRandom.SHA-160PRNG",
- gnu.java.security.jce.prng.Sha160RandomSpi.class.getName());
- put("SecureRandom.SHA-160PRNG ImplementedIn", "Software");
- put("SecureRandom.SHA-256PRNG",
- gnu.java.security.jce.prng.Sha256RandomSpi.class.getName());
- put("SecureRandom.SHA-256PRNG ImplementedIn", "Software");
- put("SecureRandom.SHA-384PRNG",
- gnu.java.security.jce.prng.Sha384RandomSpi.class.getName());
- put("SecureRandom.SHA-384PRNG ImplementedIn", "Software");
- put("SecureRandom.SHA-512PRNG",
- gnu.java.security.jce.prng.Sha512RandomSpi.class.getName());
- put("SecureRandom.SHA-512PRNG ImplementedIn", "Software");
- put("SecureRandom.TIGERPRNG",
- gnu.java.security.jce.prng.TigerRandomSpi.class.getName());
- put("SecureRandom.TIGERPRNG ImplementedIn", "Software");
- put("SecureRandom.HAVALPRNG",
- gnu.java.security.jce.prng.HavalRandomSpi.class.getName());
- put("SecureRandom.HAVALPRNG ImplementedIn", "Software");
- put("SecureRandom.WHIRLPOOLPRNG",
- gnu.java.security.jce.prng.WhirlpoolRandomSpi.class.getName());
- put("SecureRandom.WHIRLPOOLPRNG ImplementedIn", "Software");
-
- put("Alg.Alias.SecureRandom.SHA-1PRNG", "SHA-160PRNG");
- put("Alg.Alias.SecureRandom.SHA1PRNG", "SHA-160PRNG");
- put("Alg.Alias.SecureRandom.SHAPRNG", "SHA-160PRNG");
- put("Alg.Alias.SecureRandom.SHA-256PRNG", "SHA-256PRNG");
- put("Alg.Alias.SecureRandom.SHA-2-1PRNG", "SHA-256PRNG");
- put("Alg.Alias.SecureRandom.SHA-384PRNG", "SHA-384PRNG");
- put("Alg.Alias.SecureRandom.SHA-2-2PRNG", "SHA-384PRNG");
- put("Alg.Alias.SecureRandom.SHA-512PRNG", "SHA-512PRNG");
- put("Alg.Alias.SecureRandom.SHA-2-3PRNG", "SHA-512PRNG");
-
- // CertificateFactory
- put("CertificateFactory.X509", X509CertificateFactory.class.getName());
- put("CertificateFactory.X509 ImplementedIn", "Software");
- put("Alg.Alias.CertificateFactory.X.509", "X509");
-
- // CertPathValidator
- put("CertPathValidator.PKIX", PKIXCertPathValidatorImpl.class.getName());
- put("CertPathValidator.PKIX ImplementedIn", "Software");
-
- // CertStore
- put("CertStore.Collection", CollectionCertStoreImpl.class.getName());
-
- return null;
- }
- });
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java b/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
deleted file mode 100644
index e0d3187..0000000
--- a/libjava/classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
+++ /dev/null
@@ -1,694 +0,0 @@
-/* PKIXCertPathValidatorImpl.java -- PKIX certificate path validator.
- Copyright (C) 2004, 2005, 2006, 2010 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.provider;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.Registry;
-import gnu.java.security.key.dss.DSSPublicKey;
-import gnu.java.security.x509.GnuPKIExtension;
-import gnu.java.security.x509.PolicyNodeImpl;
-import gnu.java.security.x509.X509CRLSelectorImpl;
-import gnu.java.security.x509.X509CertSelectorImpl;
-import gnu.java.security.x509.ext.BasicConstraints;
-import gnu.java.security.x509.ext.CertificatePolicies;
-import gnu.java.security.x509.ext.Extension;
-import gnu.java.security.x509.ext.KeyUsage;
-import gnu.java.security.x509.ext.PolicyConstraint;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.PublicKey;
-import java.security.cert.CRL;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathParameters;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorResult;
-import java.security.cert.CertPathValidatorSpi;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertificateException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXCertPathValidatorResult;
-import java.security.cert.PKIXParameters;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.DSAParams;
-import java.security.interfaces.DSAPublicKey;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * An implementation of the Public Key Infrastructure's X.509 certificate path
- * validation algorithm.
- * <p>
- * See <a href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280: Internet X.509
- * Public Key Infrastructure Certificate and Certificate Revocation List (CRL)
- * Profile</a>.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class PKIXCertPathValidatorImpl
- extends CertPathValidatorSpi
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(PKIXCertPathValidatorImpl.class.getName()) : null;
-
- public static final String ANY_POLICY = "2.5.29.32.0";
-
- public PKIXCertPathValidatorImpl()
- {
- super();
- }
-
- public CertPathValidatorResult engineValidate(CertPath path,
- CertPathParameters params)
- throws CertPathValidatorException, InvalidAlgorithmParameterException
- {
- if (! (params instanceof PKIXParameters))
- throw new InvalidAlgorithmParameterException("not a PKIXParameters object");
- // First check if the certificate path is valid.
- //
- // This means that:
- //
- // (a) for all x in {1, ..., n-1}, the subject of certificate x is
- // the issuer of certificate x+1;
- //
- // (b) for all x in {1, ..., n}, the certificate was valid at the
- // time in question.
- //
- // Because this is the X.509 algorithm, we also check if all
- // cerificates are of type X509Certificate.
- PolicyNodeImpl rootNode = new PolicyNodeImpl();
- Set initPolicies = ((PKIXParameters) params).getInitialPolicies();
- rootNode.setValidPolicy(ANY_POLICY);
- rootNode.setCritical(false);
- rootNode.setDepth(0);
- if (initPolicies != null)
- rootNode.addAllExpectedPolicies(initPolicies);
- else
- rootNode.addExpectedPolicy(ANY_POLICY);
- List checks = ((PKIXParameters) params).getCertPathCheckers();
- List l = path.getCertificates();
- if (l == null || l.size() == 0)
- throw new CertPathValidatorException();
- X509Certificate[] p = null;
- try
- {
- p = (X509Certificate[]) l.toArray(new X509Certificate[l.size()]);
- }
- catch (ClassCastException cce)
- {
- throw new CertPathValidatorException("invalid certificate path");
- }
- String sigProvider = ((PKIXParameters) params).getSigProvider();
- PublicKey prevKey = null;
- Date now = ((PKIXParameters) params).getDate();
- if (now == null)
- now = new Date();
- LinkedList policyConstraints = new LinkedList();
- for (int i = p.length - 1; i >= 0; i--)
- {
- try
- {
- p[i].checkValidity(now);
- }
- catch (CertificateException ce)
- {
- throw new CertPathValidatorException(ce.toString());
- }
- Set uce = getCritExts(p[i]);
- for (Iterator check = checks.iterator(); check.hasNext();)
- {
- try
- {
- ((PKIXCertPathChecker) check.next()).check(p[i], uce);
- }
- catch (Exception x)
- {
- }
- }
- PolicyConstraint constr = null;
- if (p[i] instanceof GnuPKIExtension)
- {
- Extension pcx = ((GnuPKIExtension) p[i]).getExtension(PolicyConstraint.ID);
- if (pcx != null)
- constr = (PolicyConstraint) pcx.getValue();
- }
- else
- {
- byte[] pcx = p[i].getExtensionValue(PolicyConstraint.ID.toString());
- if (pcx != null)
- {
- try
- {
- constr = new PolicyConstraint(pcx);
- }
- catch (Exception x)
- {
- }
- }
- }
- if (constr != null && constr.getRequireExplicitPolicy() >= 0)
- policyConstraints.add(new int[] { p.length - i,
- constr.getRequireExplicitPolicy() });
- updatePolicyTree(p[i], rootNode, p.length - i, (PKIXParameters) params,
- checkExplicitPolicy(p.length - i, policyConstraints));
- // The rest of the tests involve this cert's relationship with the
- // next in the path. If this cert is the end entity, we can stop.
- if (i == 0)
- break;
-
- basicSanity(p, i);
- PublicKey pubKey = null;
- try
- {
- pubKey = p[i].getPublicKey();
- if (pubKey instanceof DSAPublicKey)
- {
- DSAParams dsa = ((DSAPublicKey) pubKey).getParams();
- // If the DSA public key is missing its parameters, use those
- // from the previous cert's key.
- if (dsa == null || dsa.getP() == null || dsa.getG() == null
- || dsa.getQ() == null)
- {
- if (prevKey == null)
- throw new InvalidKeyException("DSA keys not chainable");
- if (! (prevKey instanceof DSAPublicKey))
- throw new InvalidKeyException("DSA keys not chainable");
- dsa = ((DSAPublicKey) prevKey).getParams();
- pubKey = new DSSPublicKey(Registry.X509_ENCODING_ID,
- dsa.getP(), dsa.getQ(),
- dsa.getG(),
- ((DSAPublicKey) pubKey).getY());
- }
- }
- if (sigProvider == null)
- p[i - 1].verify(pubKey);
- else
- p[i - 1].verify(pubKey, sigProvider);
- prevKey = pubKey;
- }
- catch (Exception e)
- {
- throw new CertPathValidatorException(e.toString());
- }
- if (! p[i].getSubjectDN().equals(p[i - 1].getIssuerDN()))
- throw new CertPathValidatorException("issuer DN mismatch");
- boolean[] issuerUid = p[i - 1].getIssuerUniqueID();
- boolean[] subjectUid = p[i].getSubjectUniqueID();
- if (issuerUid != null && subjectUid != null)
- if (! Arrays.equals(issuerUid, subjectUid))
- throw new CertPathValidatorException("UID mismatch");
-
- // Check the certificate against the revocation lists.
- if (((PKIXParameters) params).isRevocationEnabled())
- {
- X509CRLSelectorImpl selector = new X509CRLSelectorImpl();
- try
- {
- selector.addIssuerName(p[i].getSubjectDN());
- }
- catch (IOException ioe)
- {
- throw new CertPathValidatorException("error selecting CRLs");
- }
- List certStores = ((PKIXParameters) params).getCertStores();
- List crls = new LinkedList();
- for (Iterator it = certStores.iterator(); it.hasNext();)
- {
- CertStore cs = (CertStore) it.next();
- try
- {
- Collection c = cs.getCRLs(selector);
- crls.addAll(c);
- }
- catch (CertStoreException cse)
- {
- }
- }
- if (crls.isEmpty())
- throw new CertPathValidatorException("no CRLs for issuer");
- boolean certOk = false;
- for (Iterator it = crls.iterator(); it.hasNext();)
- {
- CRL crl = (CRL) it.next();
- if (! (crl instanceof X509CRL))
- continue;
- X509CRL xcrl = (X509CRL) crl;
- if (! checkCRL(xcrl, p, now, p[i], pubKey, certStores))
- continue;
- if (xcrl.isRevoked(p[i - 1]))
- throw new CertPathValidatorException("certificate is revoked");
- else
- certOk = true;
- }
- if (! certOk)
- throw new CertPathValidatorException(
- "certificate's validity could not be determined");
- }
- }
- rootNode.setReadOnly();
- // Now ensure that the first certificate in the chain was issued
- // by a trust anchor.
- Exception cause = null;
- Set anchors = ((PKIXParameters) params).getTrustAnchors();
- for (Iterator i = anchors.iterator(); i.hasNext();)
- {
- TrustAnchor anchor = (TrustAnchor) i.next();
- X509Certificate anchorCert = null;
- PublicKey anchorKey = null;
- if (anchor.getTrustedCert() != null)
- {
- anchorCert = anchor.getTrustedCert();
- anchorKey = anchorCert.getPublicKey();
- }
- else
- anchorKey = anchor.getCAPublicKey();
- if (anchorKey == null)
- continue;
- try
- {
- if (anchorCert != null)
- anchorCert.checkValidity(now);
- p[p.length - 1].verify(anchorKey);
- if (anchorCert != null && anchorCert.getBasicConstraints() >= 0
- && anchorCert.getBasicConstraints() < p.length)
- continue;
-
- if (((PKIXParameters) params).isRevocationEnabled())
- {
- X509CRLSelectorImpl selector = new X509CRLSelectorImpl();
- if (anchorCert != null)
- try
- {
- selector.addIssuerName(anchorCert.getSubjectDN());
- }
- catch (IOException ioe)
- {
- }
- else
- selector.addIssuerName(anchor.getCAName());
- List certStores = ((PKIXParameters) params).getCertStores();
- List crls = new LinkedList();
- for (Iterator it = certStores.iterator(); it.hasNext();)
- {
- CertStore cs = (CertStore) it.next();
- try
- {
- Collection c = cs.getCRLs(selector);
- crls.addAll(c);
- }
- catch (CertStoreException cse)
- {
- }
- }
- if (crls.isEmpty())
- continue;
- for (Iterator it = crls.iterator(); it.hasNext();)
- {
- CRL crl = (CRL) it.next();
- if (! (crl instanceof X509CRL))
- continue;
- X509CRL xcrl = (X509CRL) crl;
- try
- {
- xcrl.verify(anchorKey);
- }
- catch (Exception x)
- {
- continue;
- }
- Date nextUpdate = xcrl.getNextUpdate();
- if (nextUpdate != null && nextUpdate.compareTo(now) < 0)
- continue;
- if (xcrl.isRevoked(p[p.length - 1]))
- throw new CertPathValidatorException("certificate is revoked");
- }
- }
- // The chain is valid; return the result.
- return new PKIXCertPathValidatorResult(anchor, rootNode,
- p[0].getPublicKey());
- }
- catch (Exception ignored)
- {
- cause = ignored;
- continue;
- }
- }
- // The path is not valid.
- CertPathValidatorException cpve =
- new CertPathValidatorException("path validation failed");
- if (cause != null)
- cpve.initCause(cause);
- throw cpve;
- }
-
- /**
- * Check if a given CRL is acceptable for checking the revocation status of
- * certificates in the path being checked.
- * <p>
- * The CRL is accepted iff:
- * <ol>
- * <li>The <i>nextUpdate</i> field (if present) is in the future.</li>
- * <li>The CRL does not contain any unsupported critical extensions.</li>
- * <li>The CRL is signed by one of the certificates in the path, or,</li>
- * <li>The CRL is signed by the given public key and was issued by the public
- * key's subject, or,</li>
- * <li>The CRL is signed by a certificate in the given cert stores, and that
- * cert is signed by one of the certificates in the path.</li>
- * </ol>
- *
- * @param crl The CRL being checked.
- * @param path The path this CRL is being checked against.
- * @param now The value to use as 'now'.
- * @param pubKeyCert The certificate authenticating the public key.
- * @param pubKey The public key to check.
- * @return True if the CRL is acceptable.
- */
- private static boolean checkCRL(X509CRL crl, X509Certificate[] path,
- Date now, X509Certificate pubKeyCert,
- PublicKey pubKey, List certStores)
- {
- Date nextUpdate = crl.getNextUpdate();
- if (nextUpdate != null && nextUpdate.compareTo(now) < 0)
- return false;
- if (crl.hasUnsupportedCriticalExtension())
- return false;
- for (int i = 0; i < path.length; i++)
- {
- if (! path[i].getSubjectDN().equals(crl.getIssuerDN()))
- continue;
- boolean[] keyUsage = path[i].getKeyUsage();
- if (keyUsage != null)
- {
- if (! keyUsage[KeyUsage.CRL_SIGN])
- continue;
- }
- try
- {
- crl.verify(path[i].getPublicKey());
- return true;
- }
- catch (Exception x)
- {
- }
- }
- if (crl.getIssuerDN().equals(pubKeyCert.getSubjectDN()))
- {
- try
- {
- boolean[] keyUsage = pubKeyCert.getKeyUsage();
- if (keyUsage != null)
- {
- if (! keyUsage[KeyUsage.CRL_SIGN])
- throw new Exception();
- }
- crl.verify(pubKey);
- return true;
- }
- catch (Exception x)
- {
- }
- }
- try
- {
- X509CertSelectorImpl select = new X509CertSelectorImpl();
- select.addSubjectName(crl.getIssuerDN());
- List certs = new LinkedList();
- for (Iterator it = certStores.iterator(); it.hasNext();)
- {
- CertStore cs = (CertStore) it.next();
- try
- {
- certs.addAll(cs.getCertificates(select));
- }
- catch (CertStoreException cse)
- {
- }
- }
- for (Iterator it = certs.iterator(); it.hasNext();)
- {
- X509Certificate c = (X509Certificate) it.next();
- for (int i = 0; i < path.length; i++)
- {
- if (! c.getIssuerDN().equals(path[i].getSubjectDN()))
- continue;
- boolean[] keyUsage = c.getKeyUsage();
- if (keyUsage != null)
- {
- if (! keyUsage[KeyUsage.CRL_SIGN])
- continue;
- }
- try
- {
- c.verify(path[i].getPublicKey());
- crl.verify(c.getPublicKey());
- return true;
- }
- catch (Exception x)
- {
- }
- }
- if (c.getIssuerDN().equals(pubKeyCert.getSubjectDN()))
- {
- c.verify(pubKey);
- crl.verify(c.getPublicKey());
- }
- }
- }
- catch (Exception x)
- {
- }
- return false;
- }
-
- private static Set getCritExts(X509Certificate cert)
- {
- HashSet s = new HashSet();
- if (cert instanceof GnuPKIExtension)
- {
- Collection exts = ((GnuPKIExtension) cert).getExtensions();
- for (Iterator it = exts.iterator(); it.hasNext();)
- {
- Extension ext = (Extension) it.next();
- if (ext.isCritical() && ! ext.isSupported())
- s.add(ext.getOid().toString());
- }
- }
- else
- s.addAll(cert.getCriticalExtensionOIDs());
- return s;
- }
-
- /**
- * Perform a basic sanity check on the CA certificate at <code>index</code>.
- */
- private static void basicSanity(X509Certificate[] path, int index)
- throws CertPathValidatorException
- {
- X509Certificate cert = path[index];
- int pathLen = 0;
- for (int i = index - 1; i > 0; i--)
- {
- if (! path[i].getIssuerDN().equals(path[i].getSubjectDN()))
- pathLen++;
- }
- Extension e = null;
- if (cert instanceof GnuPKIExtension)
- {
- e = ((GnuPKIExtension) cert).getExtension(BasicConstraints.ID);
- }
- else
- {
- try
- {
- e = new Extension(cert.getExtensionValue(BasicConstraints.ID.toString()));
- }
- catch (Exception x)
- {
- }
- }
- if (e == null)
- throw new CertPathValidatorException("no basicConstraints");
- BasicConstraints bc = (BasicConstraints) e.getValue();
- if (! bc.isCA())
- throw new CertPathValidatorException(
- "certificate cannot be used to verify signatures");
- if (bc.getPathLengthConstraint() >= 0
- && bc.getPathLengthConstraint() < pathLen)
- throw new CertPathValidatorException("path is too long");
-
- boolean[] keyUsage = cert.getKeyUsage();
- if (keyUsage != null)
- {
- if (! keyUsage[KeyUsage.KEY_CERT_SIGN])
- throw new CertPathValidatorException(
- "certificate cannot be used to sign certificates");
- }
- }
-
- private static void updatePolicyTree(X509Certificate cert,
- PolicyNodeImpl root, int depth,
- PKIXParameters params,
- boolean explicitPolicy)
- throws CertPathValidatorException
- {
- if (Configuration.DEBUG)
- log.fine("updatePolicyTree depth == " + depth);
- Set nodes = new HashSet();
- LinkedList stack = new LinkedList();
- Iterator current = null;
- stack.addLast(Collections.singleton(root).iterator());
- do
- {
- current = (Iterator) stack.removeLast();
- while (current.hasNext())
- {
- PolicyNodeImpl p = (PolicyNodeImpl) current.next();
- if (Configuration.DEBUG)
- log.fine("visiting node == " + p);
- if (p.getDepth() == depth - 1)
- {
- if (Configuration.DEBUG)
- log.fine("added node");
- nodes.add(p);
- }
- else
- {
- if (Configuration.DEBUG)
- log.fine("skipped node");
- stack.addLast(current);
- current = p.getChildren();
- }
- }
- }
- while (! stack.isEmpty());
-
- Extension e = null;
- CertificatePolicies policies = null;
- List qualifierInfos = null;
- if (cert instanceof GnuPKIExtension)
- {
- e = ((GnuPKIExtension) cert).getExtension(CertificatePolicies.ID);
- if (e != null)
- policies = (CertificatePolicies) e.getValue();
- }
-
- List cp = null;
- if (policies != null)
- cp = policies.getPolicies();
- else
- cp = Collections.EMPTY_LIST;
- boolean match = false;
- if (Configuration.DEBUG)
- {
- log.fine("nodes are == " + nodes);
- log.fine("cert policies are == " + cp);
- }
- for (Iterator it = nodes.iterator(); it.hasNext();)
- {
- PolicyNodeImpl parent = (PolicyNodeImpl) it.next();
- if (Configuration.DEBUG)
- log.fine("adding policies to " + parent);
- for (Iterator it2 = cp.iterator(); it2.hasNext();)
- {
- OID policy = (OID) it2.next();
- if (Configuration.DEBUG)
- log.fine("trying to add policy == " + policy);
- if (policy.toString().equals(ANY_POLICY)
- && params.isAnyPolicyInhibited())
- continue;
- PolicyNodeImpl child = new PolicyNodeImpl();
- child.setValidPolicy(policy.toString());
- child.addExpectedPolicy(policy.toString());
- if (parent.getExpectedPolicies().contains(policy.toString()))
- {
- parent.addChild(child);
- match = true;
- }
- else if (parent.getExpectedPolicies().contains(ANY_POLICY))
- {
- parent.addChild(child);
- match = true;
- }
- else if (ANY_POLICY.equals(policy.toString()))
- {
- parent.addChild(child);
- match = true;
- }
- if (match && policies != null)
- {
- List qualifiers = policies.getPolicyQualifierInfos(policy);
- if (qualifiers != null)
- child.addAllPolicyQualifiers(qualifiers);
- }
- }
- }
- if (! match && (params.isExplicitPolicyRequired() || explicitPolicy))
- throw new CertPathValidatorException("policy tree building failed");
- }
-
- private boolean checkExplicitPolicy(int depth, List explicitPolicies)
- {
- if (Configuration.DEBUG)
- log.fine("checkExplicitPolicy depth=" + depth);
- for (Iterator it = explicitPolicies.iterator(); it.hasNext();)
- {
- int[] i = (int[]) it.next();
- int caDepth = i[0];
- int limit = i[1];
- if (Configuration.DEBUG)
- log.fine(" caDepth=" + caDepth + " limit=" + limit);
- if (depth - caDepth >= limit)
- return true;
- }
- return false;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java b/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java
deleted file mode 100644
index 6440331..0000000
--- a/libjava/classpath/gnu/java/security/provider/X509CertificateFactory.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/* X509CertificateFactory.java -- generates X.509 certificates.
- Copyright (C) 2003 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.provider;
-
-import gnu.java.io.Base64InputStream;
-import gnu.java.lang.CPStringBuilder;
-import gnu.java.security.x509.X509CRL;
-import gnu.java.security.x509.X509CertPath;
-import gnu.java.security.x509.X509Certificate;
-
-import java.io.BufferedInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.cert.CRL;
-import java.security.cert.CRLException;
-import java.security.cert.CertPath;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactorySpi;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-public class X509CertificateFactory
- extends CertificateFactorySpi
-{
- public static final String BEGIN_CERTIFICATE = "-----BEGIN CERTIFICATE-----";
-
- public static final String END_CERTIFICATE = "-----END CERTIFICATE-----";
-
- public static final String BEGIN_X509_CRL = "-----BEGIN X509 CRL-----";
-
- public static final String END_X509_CRL = "-----END X509 CRL-----";
-
- public X509CertificateFactory()
- {
- super();
- }
-
- public Certificate engineGenerateCertificate(InputStream inStream)
- throws CertificateException
- {
- try
- {
- return generateCert(inStream);
- }
- catch (IOException ioe)
- {
- CertificateException ce = new CertificateException(ioe.getMessage());
- ce.initCause(ioe);
- throw ce;
- }
- }
-
- public Collection engineGenerateCertificates(InputStream inStream)
- throws CertificateException
- {
- LinkedList certs = new LinkedList();
- while (true)
- {
- try
- {
- certs.add(generateCert(inStream));
- }
- catch (EOFException eof)
- {
- break;
- }
- catch (IOException ioe)
- {
- CertificateException ce = new CertificateException(ioe.getMessage());
- ce.initCause(ioe);
- throw ce;
- }
- }
- return certs;
- }
-
- public CRL engineGenerateCRL(InputStream inStream) throws CRLException
- {
- try
- {
- return generateCRL(inStream);
- }
- catch (IOException ioe)
- {
- CRLException crle = new CRLException(ioe.getMessage());
- crle.initCause(ioe);
- throw crle;
- }
- }
-
- public Collection engineGenerateCRLs(InputStream inStream)
- throws CRLException
- {
- LinkedList crls = new LinkedList();
- while (true)
- {
- try
- {
- crls.add(generateCRL(inStream));
- }
- catch (EOFException eof)
- {
- break;
- }
- catch (IOException ioe)
- {
- CRLException crle = new CRLException(ioe.getMessage());
- crle.initCause(ioe);
- throw crle;
- }
- }
- return crls;
- }
-
- public CertPath engineGenerateCertPath(List certs)
- {
- return new X509CertPath(certs);
- }
-
- public CertPath engineGenerateCertPath(InputStream in)
- throws CertificateEncodingException
- {
- return new X509CertPath(in);
- }
-
- public CertPath engineGenerateCertPath(InputStream in, String encoding)
- throws CertificateEncodingException
- {
- return new X509CertPath(in, encoding);
- }
-
- public Iterator engineGetCertPathEncodings()
- {
- return X509CertPath.ENCODINGS.iterator();
- }
-
- private X509Certificate generateCert(InputStream inStream)
- throws IOException, CertificateException
- {
- if (inStream == null)
- throw new CertificateException("missing input stream");
- if (! inStream.markSupported())
- inStream = new BufferedInputStream(inStream, 8192);
- inStream.mark(20);
- int i = inStream.read();
- if (i == -1)
- throw new EOFException();
- // If the input is in binary DER format, the first byte MUST be
- // 0x30, which stands for the ASN.1 [UNIVERSAL 16], which is the
- // UNIVERSAL SEQUENCE, with the CONSTRUCTED bit (0x20) set.
- //
- // So if we do not see 0x30 here we will assume it is in Base-64.
- if (i != 0x30)
- {
- inStream.reset();
- CPStringBuilder line = new CPStringBuilder(80);
- do
- {
- line.setLength(0);
- do
- {
- i = inStream.read();
- if (i == -1)
- throw new EOFException();
- if (i != '\n' && i != '\r')
- line.append((char) i);
- }
- while (i != '\n' && i != '\r');
- }
- while (! line.toString().equals(BEGIN_CERTIFICATE));
- X509Certificate ret = new X509Certificate(
- new BufferedInputStream(new Base64InputStream(inStream), 8192));
- line.setLength(0);
- line.append('-'); // Base64InputStream will eat this.
- do
- {
- i = inStream.read();
- if (i == -1)
- throw new EOFException();
- if (i != '\n' && i != '\r')
- line.append((char) i);
- }
- while (i != '\n' && i != '\r');
- // XXX ???
- if (! line.toString().equals(END_CERTIFICATE))
- throw new CertificateException("no end-of-certificate marker");
- return ret;
- }
- else
- {
- inStream.reset();
- return new X509Certificate(inStream);
- }
- }
-
- private X509CRL generateCRL(InputStream inStream) throws IOException,
- CRLException
- {
- if (inStream == null)
- throw new CRLException("missing input stream");
- if (! inStream.markSupported())
- inStream = new BufferedInputStream(inStream, 8192);
- inStream.mark(20);
- int i = inStream.read();
- if (i == -1)
- throw new EOFException();
- // If the input is in binary DER format, the first byte MUST be
- // 0x30, which stands for the ASN.1 [UNIVERSAL 16], which is the
- // UNIVERSAL SEQUENCE, with the CONSTRUCTED bit (0x20) set.
- //
- // So if we do not see 0x30 here we will assume it is in Base-64.
- if (i != 0x30)
- {
- inStream.reset();
- CPStringBuilder line = new CPStringBuilder(80);
- do
- {
- line.setLength(0);
- do
- {
- i = inStream.read();
- if (i == -1)
- throw new EOFException();
- if (i != '\n' && i != '\r')
- line.append((char) i);
- }
- while (i != '\n' && i != '\r');
- }
- while (! line.toString().startsWith(BEGIN_X509_CRL));
- X509CRL ret = new X509CRL(
- new BufferedInputStream(new Base64InputStream(inStream), 8192));
- line.setLength(0);
- line.append('-'); // Base64InputStream will eat this.
- do
- {
- i = inStream.read();
- if (i == -1)
- throw new EOFException();
- if (i != '\n' && i != '\r')
- line.append((char) i);
- }
- while (i != '\n' && i != '\r');
- // XXX ???
- if (! line.toString().startsWith(END_X509_CRL))
- throw new CRLException("no end-of-CRL marker");
- return ret;
- }
- else
- {
- inStream.reset();
- return new X509CRL(inStream);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/package.html b/libjava/classpath/gnu/java/security/provider/package.html
deleted file mode 100644
index 641a22a..0000000
--- a/libjava/classpath/gnu/java/security/provider/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.provider package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.provider</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/sig/BaseSignature.java b/libjava/classpath/gnu/java/security/sig/BaseSignature.java
deleted file mode 100644
index ef4d87f..0000000
--- a/libjava/classpath/gnu/java/security/sig/BaseSignature.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/* BaseSignature.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.sig;
-
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.prng.IRandom;
-import gnu.java.security.prng.LimitReachedException;
-import gnu.java.security.util.PRNG;
-
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.Map;
-import java.util.Random;
-
-/**
- * A base abstract class to facilitate implementations of concrete Signatures.
- */
-public abstract class BaseSignature
- implements ISignature
-{
- /** The canonical name of this signature scheme. */
- protected String schemeName;
-
- /** The underlying message digest instance for this signature scheme. */
- protected IMessageDigest md;
-
- /** The public key to use when verifying signatures. */
- protected PublicKey publicKey;
-
- /** The private key to use when generating signatures (signing). */
- protected PrivateKey privateKey;
-
- /** The optional {@link Random} instance to use. */
- private Random rnd;
-
- /** The optional {@link IRandom} instance to use. */
- private IRandom irnd;
-
- /** Our default source of randomness. */
- private PRNG prng = null;
-
- /**
- * Trivial constructor.
- *
- * @param schemeName the name of this signature scheme.
- * @param md the underlying instance of the message digest algorithm.
- * @throws IllegalArgumentException if the designated hash instance is
- * <code>null</code>.
- */
- protected BaseSignature(String schemeName, IMessageDigest md)
- {
- super();
-
- this.schemeName = schemeName;
- if (md == null)
- throw new IllegalArgumentException("Message digest MUST NOT be null");
-
- this.md = md;
- }
-
- public String name()
- {
- return schemeName + "-" + md.name();
- }
-
- public void setupVerify(Map attributes) throws IllegalArgumentException
- {
- setup(attributes);
- // do we have a public key?
- PublicKey key = (PublicKey) attributes.get(VERIFIER_KEY);
- if (key != null)
- setupForVerification(key);
- }
-
- public void setupSign(Map attributes) throws IllegalArgumentException
- {
- setup(attributes);
- // do we have a private key?
- PrivateKey key = (PrivateKey) attributes.get(SIGNER_KEY);
- if (key != null)
- setupForSigning(key);
- }
-
- public void update(byte b)
- {
- if (md == null)
- throw new IllegalStateException();
-
- md.update(b);
- }
-
- public void update(byte[] b, int off, int len)
- {
- if (md == null)
- throw new IllegalStateException();
-
- md.update(b, off, len);
- }
-
- public Object sign()
- {
- if (md == null || privateKey == null)
- throw new IllegalStateException();
-
- return generateSignature();
- }
-
- public boolean verify(Object sig)
- {
- if (md == null || publicKey == null)
- throw new IllegalStateException();
-
- return verifySignature(sig);
- }
-
- public abstract Object clone();
-
- protected abstract void setupForVerification(PublicKey key)
- throws IllegalArgumentException;
-
- protected abstract void setupForSigning(PrivateKey key)
- throws IllegalArgumentException;
-
- protected abstract Object generateSignature() throws IllegalStateException;
-
- protected abstract boolean verifySignature(Object signature)
- throws IllegalStateException;
-
- /** Initialises the internal fields of this instance. */
- protected void init()
- {
- md.reset();
- rnd = null;
- irnd = null;
- publicKey = null;
- privateKey = null;
- }
-
- /**
- * Fills the designated byte array with random data.
- *
- * @param buffer the byte array to fill with random data.
- */
- protected void nextRandomBytes(byte[] buffer)
- {
- if (rnd != null)
- rnd.nextBytes(buffer);
- else if (irnd != null)
- try
- {
- irnd.nextBytes(buffer, 0, buffer.length);
- }
- catch (IllegalStateException x)
- {
- throw new RuntimeException("nextRandomBytes(): " + x);
- }
- catch (LimitReachedException x)
- {
- throw new RuntimeException("nextRandomBytes(): " + x);
- }
- else
- getDefaultPRNG().nextBytes(buffer);
- }
-
- private void setup(Map attributes)
- {
- init();
- // do we have a Random or SecureRandom, or should we use our own?
- Object obj = attributes.get(SOURCE_OF_RANDOMNESS);
- if (obj instanceof Random)
- rnd = (Random) obj;
- else if (obj instanceof IRandom)
- irnd = (IRandom) obj;
- }
-
- private PRNG getDefaultPRNG()
- {
- if (prng == null)
- prng = PRNG.getInstance();
-
- return prng;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/ISignature.java b/libjava/classpath/gnu/java/security/sig/ISignature.java
deleted file mode 100644
index be98f9a..0000000
--- a/libjava/classpath/gnu/java/security/sig/ISignature.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/* ISignature.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.sig;
-
-import java.util.Map;
-
-/**
- * The visible methods of every signature-with-appendix scheme.
- * <p>
- * The Handbook of Applied Cryptography (HAC), by A. Menezes &amp; al. states:
- * "Digital signature schemes which require the message as input to the
- * verification algorithm are called <i>digital signature schemes with appendix</i>.
- * ... They rely on cryptographic hash functions rather than customised
- * redundancy functions, and are less prone to existential forgery attacks."
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.cacr.math.uwaterloo.ca/hac/">Handbook of Applied
- * Cryptography</a>, Alfred J. Menezes, Paul C. van Oorschot and Scott A.
- * Vanstone. Section 11.2.2 Digital signature schemes with appendix.</li>
- * </ol>
- */
-public interface ISignature
- extends Cloneable
-{
- /** Property name of the verifier's public key. */
- public static final String VERIFIER_KEY = "gnu.crypto.sig.public.key";
-
- /** Property name of the signer's private key. */
- public static final String SIGNER_KEY = "gnu.crypto.sig.private.key";
-
- /**
- * Property name of an optional {@link java.security.SecureRandom},
- * {@link java.util.Random}, or {@link gnu.java.security.prng.IRandom}
- * instance to use. The default is to use a classloader singleton from
- * {@link gnu.java.security.util.PRNG}.
- */
- public static final String SOURCE_OF_RANDOMNESS = "gnu.crypto.sig.prng";
-
- /**
- * Returns the canonical name of this signature scheme.
- *
- * @return the canonical name of this instance.
- */
- String name();
-
- /**
- * Initialises this instance for signature verification.
- *
- * @param attributes the attributes to use for setting up this instance.
- * @throws IllegalArgumentException if the designated public key is not
- * appropriate for this signature scheme.
- * @see #SOURCE_OF_RANDOMNESS
- * @see #VERIFIER_KEY
- */
- void setupVerify(Map attributes) throws IllegalArgumentException;
-
- /**
- * Initialises this instance for signature generation.
- *
- * @param attributes the attributes to use for setting up this instance.
- * @throws IllegalArgumentException if the designated private key is not
- * appropriate for this signature scheme.
- * @see #SOURCE_OF_RANDOMNESS
- * @see #SIGNER_KEY
- */
- void setupSign(Map attributes) throws IllegalArgumentException;
-
- /**
- * Digests one byte of a message for signing or verification purposes.
- *
- * @param b the message byte to digest.
- * @throws IllegalStateException if this instance was not setup for signature
- * generation/verification.
- */
- void update(byte b) throws IllegalStateException;
-
- /**
- * Digests a sequence of bytes from a message for signing or verification
- * purposes.
- *
- * @param buffer the byte sequence to consider.
- * @param offset the byte poisition in <code>buffer</code> of the first byte
- * to consider.
- * @param length the number of bytes in <code>buffer</code> starting from
- * the byte at index <code>offset</code> to digest.
- * @throws IllegalStateException if this instance was not setup for signature
- * generation/verification.
- */
- void update(byte[] buffer, int offset, int length)
- throws IllegalStateException;
-
- /**
- * Terminates a signature generation phase by digesting and processing the
- * context of the underlying message digest algorithm instance.
- *
- * @return a {@link Object} representing the native output of the signature
- * scheme implementation.
- * @throws IllegalStateException if this instance was not setup for signature
- * generation.
- */
- Object sign() throws IllegalStateException;
-
- /**
- * Terminates a signature verification phase by digesting and processing the
- * context of the underlying message digest algorithm instance.
- *
- * @param signature a native signature object previously generated by an
- * invocation of the <code>sign()</code> method.
- * @return <code>true</code> iff the outpout of the verification phase
- * confirms that the designated signature object has been generated
- * using the corresponding public key of the recepient.
- * @throws IllegalStateException if this instance was not setup for signature
- * verification.
- */
- boolean verify(Object signature) throws IllegalStateException;
-
- /**
- * Returns a clone copy of this instance.
- *
- * @return a clone copy of this instance.
- */
- Object clone();
-}
diff --git a/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java b/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java
deleted file mode 100644
index f8b1473..0000000
--- a/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ISignatureCodec.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.sig;
-
-import gnu.java.security.Registry;
-
-/**
- * The visible methods of an object that knows how to encode and decode
- * cryptographic signatures. Codecs are useful for (a) externalising signature
- * output data for storage and on-the-wire transmission, as well as (b) re-
- * creating their internal Java representation from external sources.
- */
-public interface ISignatureCodec
-{
- /** Constant identifying the <i>Raw</i> encoding format. */
- int RAW_FORMAT = Registry.RAW_ENCODING_ID;
-
- int getFormatID();
-
- byte[] encodeSignature(Object signature);
-
- Object decodeSignature(byte[] input);
-}
diff --git a/libjava/classpath/gnu/java/security/sig/SignatureCodecFactory.java b/libjava/classpath/gnu/java/security/sig/SignatureCodecFactory.java
deleted file mode 100644
index 0026ad1..0000000
--- a/libjava/classpath/gnu/java/security/sig/SignatureCodecFactory.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/* SignatureCodecFactory.java -- Factory to instantiate Signature codecs
- 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.sig;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.sig.dss.DSSSignatureRawCodec;
-import gnu.java.security.sig.dss.DSSSignatureX509Codec;
-import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureRawCodec;
-import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
-import gnu.java.security.sig.rsa.RSAPSSSignatureRawCodec;
-import gnu.java.security.util.FormatUtil;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * A <i>Factory</i> class to instantiate Signature codecs.
- */
-public class SignatureCodecFactory
-{
- private static Set names;
-
- /** Trivial constructor to enforce Singleton pattern. */
- private SignatureCodecFactory()
- {
- super();
- }
-
- /**
- * Returns the appropriate codec given a composed signature algorithm and an
- * encoding format. A composed name is formed by the concatenation of the
- * canonical signature algorithm name, the forward slash character
- * <code>/</code> and the canonical name of the encoding format.
- * <p>
- * When the encoding format name is missing, the Raw encoding format is
- * assumed. When this is the case the trailing forward slash is discarded from
- * the name.
- *
- * @param name the case-insensitive, possibly composed, signature codec name.
- * @return an instance of the signaturecodec, or <code>null</code> if none
- * found.
- */
- public static ISignatureCodec getInstance(String name)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- if (name.length() == 0)
- return null;
-
- if (name.startsWith("/"))
- return null;
-
- if (name.endsWith("/"))
- return getInstance(name.substring(0, name.length() - 1),
- Registry.RAW_ENCODING_ID);
-
- int i = name.indexOf("/");
- if (i == - 1)
- return getInstance(name, Registry.RAW_ENCODING_ID);
-
- String sigName = name.substring(0, i);
- String formatName = name.substring(i + 1);
- return getInstance(sigName, formatName);
- }
-
- /**
- * Returns an instance of a signature codec given the canonical name of the
- * signature algorithm, and that of the encoding format.
- *
- * @param name the case-insensitive signature algorithm name.
- * @param format the name of the format to use when encodigng/decoding
- * signatures generated by the named algorithm.
- * @return an instance of the signature codec, or <code>null</code> if none
- * found.
- */
- public static ISignatureCodec getInstance(String name, String format)
- {
- int formatID = FormatUtil.getFormatID(format);
- if (formatID == 0)
- return null;
-
- return getInstance(name, formatID);
- }
-
- /**
- * Returns an instance of a signature codec given the canonical name of the
- * signature algorithm, and the identifier of the format to use when
- * encoding/decoding signatures generated by that algorithm.
- *
- * @param name the case-insensitive signature algorithm name.
- * @param formatID the identifier of the format to use when encoding /
- * decoding signatures generated by the designated algorithm.
- * @return an instance of the signature codec, or <code>null</code> if none
- * found.
- */
- public static ISignatureCodec getInstance(String name, int formatID)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- switch (formatID)
- {
- case Registry.RAW_ENCODING_ID:
- return getRawCodec(name);
- case Registry.X509_ENCODING_ID:
- return getX509Codec(name);
- }
-
- return null;
- }
-
- /**
- * Returns a {@link Set} of supported signature codec names.
- *
- * @return a {@link Set} of the names of supported signature codec (Strings).
- */
- public static synchronized final Set getNames()
- {
- if (names == null)
- {
- HashSet hs = new HashSet();
- hs.add(Registry.DSS_SIG + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- hs.add(Registry.DSS_SIG + "/" + Registry.X509_ENCODING_SORT_NAME);
- Set hashNames = HashFactory.getNames();
- for (Iterator it = hashNames.iterator(); it.hasNext();)
- {
- String mdName = (String) it.next();
- String name = Registry.RSA_PKCS1_V1_5_SIG + "-" + mdName;
- hs.add(name + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- hs.add(name + "/" + Registry.X509_ENCODING_SORT_NAME);
- name = Registry.RSA_PSS_SIG + "-" + mdName;
- hs.add(name + "/" + Registry.RAW_ENCODING_SHORT_NAME);
- }
-
- names = Collections.unmodifiableSet(hs);
- }
-
- return names;
- }
-
- /**
- * @param name the trimmed name of a signature algorithm.
- * @return a Raw format codec for the designated signature algorithm, or
- * <code>null</code> if none exists.
- */
- private static ISignatureCodec getRawCodec(String name)
- {
- ISignatureCodec result = null;
- if (name.equalsIgnoreCase(Registry.DSA_SIG)
- || name.equalsIgnoreCase(Registry.DSS_SIG))
- result = new DSSSignatureRawCodec();
- else
- {
- name = name.toLowerCase();
- if (name.startsWith(Registry.RSA_PKCS1_V1_5_SIG))
- result = new RSAPKCS1V1_5SignatureRawCodec();
- else if (name.startsWith(Registry.RSA_PSS_SIG))
- result = new RSAPSSSignatureRawCodec();
- }
-
- return result;
- }
-
- /**
- * @param name the trimmed name of a signature algorithm.
- * @return a X.509 format codec for the designated signature algorithm, or
- * <code>null</code> if none exists.
- */
- private static ISignatureCodec getX509Codec(String name)
- {
- ISignatureCodec result = null;
- if (name.equalsIgnoreCase(Registry.DSA_SIG)
- || name.equalsIgnoreCase(Registry.DSS_SIG))
- result = new DSSSignatureX509Codec();
- else
- {
- name = name.toLowerCase();
- if (name.startsWith(Registry.RSA_PKCS1_V1_5_SIG))
- result = new RSAPKCS1V1_5SignatureX509Codec();
- }
-
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/SignatureFactory.java b/libjava/classpath/gnu/java/security/sig/SignatureFactory.java
deleted file mode 100644
index 6cdaf65..0000000
--- a/libjava/classpath/gnu/java/security/sig/SignatureFactory.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* SignatureFactory.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.sig;
-
-import gnu.java.security.Registry;
-import gnu.java.security.sig.dss.DSSSignature;
-import gnu.java.security.sig.rsa.RSASignatureFactory;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A Factory to instantiate signature-with-appendix handlers.
- */
-public class SignatureFactory
-{
- private static Set names;
-
- /** Trivial constructor to enforce Singleton pattern. */
- private SignatureFactory()
- {
- super();
- }
-
- /**
- * Returns an instance of a signature-with-appendix scheme given its name.
- *
- * @param ssa the case-insensitive signature-with-appendix scheme name.
- * @return an instance of the scheme, or <code>null</code> if none found.
- */
- public static final ISignature getInstance(String ssa)
- {
- if (ssa == null)
- return null;
-
- ssa = ssa.trim();
- ssa = ssa.toLowerCase();
- ISignature result = null;
- if (ssa.equalsIgnoreCase(Registry.DSA_SIG) || ssa.equals(Registry.DSS_SIG))
- result = new DSSSignature();
- else if (ssa.startsWith(Registry.RSA_SIG_PREFIX))
- result = RSASignatureFactory.getInstance(ssa);
-
- return result;
- }
-
- /**
- * Returns a {@link Set} of signature-with-appendix scheme names supported by
- * this <i>Factory</i>.
- *
- * @return a {@link Set} of signature-with-appendix scheme names (Strings).
- */
- public static synchronized final Set getNames()
- {
- if (names == null)
- {
- HashSet hs = new HashSet();
- hs.add(Registry.DSS_SIG);
- hs.addAll(RSASignatureFactory.getNames());
- names = Collections.unmodifiableSet(hs);
- }
- return names;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java b/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java
deleted file mode 100644
index 024521b..0000000
--- a/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/* DSSSignature.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.sig.dss;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.hash.Sha160;
-import gnu.java.security.prng.IRandom;
-import gnu.java.security.sig.BaseSignature;
-import gnu.java.security.sig.ISignature;
-
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.interfaces.DSAPrivateKey;
-import java.security.interfaces.DSAPublicKey;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-/**
- * The DSS (Digital Signature Standard) algorithm makes use of the following
- * parameters:
- * <ol>
- * <li>p: 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>.</li>
- * <li>q: A prime divisor of <code>p - 1</code>, where <code>2<sup>159</sup>
- * &lt; q &lt; 2<sup>160</sup></code>.</li>
- * <li>g: Where <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>).</li>
- * <li>x: A randomly or pseudorandomly generated integer with <code>0 &lt; x
- * &lt; q</code>.</li>
- * <li>y: <code>y = g<sup>x</sup> mod p</code>.</li>
- * <li>k: A randomly or pseudorandomly generated integer with <code>0 &lt; k
- * &lt; q</code>.</li>
- * </ol>
- * <p>
- * The integers <code>p</code>, <code>q</code>, and <code>g</code> can be
- * public and can be common to a group of users. A user's private and public
- * keys are <code>x</code> and <code>y</code>, respectively. They are
- * normally fixed for a period of time. Parameters <code>x</code> and
- * <code>k</code> are used for signature generation only, and must be kept
- * secret. Parameter <code>k</code> must be regenerated for each signature.
- * <p>
- * The signature of a message <code>M</code> is the pair of numbers
- * <code>r</code> and <code>s</code> computed according to the equations below:
- * <ul>
- * <li><code>r = (g<sup>k</sup> mod p) mod q</code> and</li>
- * <li><code>s = (k<sup>-1</sup>(SHA(M) + xr)) mod q</code>.</li>
- * </ul>
- * <p>
- * In the above, <code>k<sup>-1</sup></code> is the multiplicative inverse of
- * <code>k</code>, <code>mod q</code>; i.e., <code>(k<sup>-1</sup> k) mod q =
- * 1</code> and <code>0 &lt; k-1 &lt; q</code>. The value of <code>SHA(M)</code>
- * is a 160-bit string output by the Secure Hash Algorithm specified in FIPS
- * 180. For use in computing <code>s</code>, this string must be converted to
- * an integer.
- * <p>
- * As an option, one may wish to check if <code>r == 0</code> or <code>s == 0
- * </code>.
- * If either <code>r == 0</code> or <code>s == 0</code>, a new value of
- * <code>k</code> should be generated and the signature should be recalculated
- * (it is extremely unlikely that <code>r == 0</code> or <code>s == 0</code> if
- * signatures are generated properly).
- * <p>
- * The signature is transmitted along with the message to the verifier.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.itl.nist.gov/fipspubs/fip186.htm">Digital Signature
- * Standard (DSS)</a>, Federal Information Processing Standards Publication
- * 186. National Institute of Standards and Technology.</li>
- * </ol>
- */
-public class DSSSignature
- extends BaseSignature
-{
- /** Trivial 0-arguments constructor. */
- public DSSSignature()
- {
- super(Registry.DSS_SIG, new Sha160());
- }
-
- /** Private constructor for cloning purposes. */
- private DSSSignature(DSSSignature that)
- {
- this();
-
- this.publicKey = that.publicKey;
- this.privateKey = that.privateKey;
- this.md = (IMessageDigest) that.md.clone();
- }
-
- public static final BigInteger[] sign(final DSAPrivateKey k, final byte[] h)
- {
- final DSSSignature sig = new DSSSignature();
- final Map attributes = new HashMap();
- attributes.put(ISignature.SIGNER_KEY, k);
- sig.setupSign(attributes);
- return sig.computeRS(h);
- }
-
- public static final BigInteger[] sign(final DSAPrivateKey k, final byte[] h,
- Random rnd)
- {
- final DSSSignature sig = new DSSSignature();
- final Map attributes = new HashMap();
- attributes.put(ISignature.SIGNER_KEY, k);
- if (rnd != null)
- attributes.put(ISignature.SOURCE_OF_RANDOMNESS, rnd);
-
- sig.setupSign(attributes);
- return sig.computeRS(h);
- }
-
- public static final BigInteger[] sign(final DSAPrivateKey k, final byte[] h,
- IRandom irnd)
- {
- final DSSSignature sig = new DSSSignature();
- final Map attributes = new HashMap();
- attributes.put(ISignature.SIGNER_KEY, k);
- if (irnd != null)
- attributes.put(ISignature.SOURCE_OF_RANDOMNESS, irnd);
-
- sig.setupSign(attributes);
- return sig.computeRS(h);
- }
-
- public static final boolean verify(final DSAPublicKey k, final byte[] h,
- final BigInteger[] rs)
- {
- final DSSSignature sig = new DSSSignature();
- final Map attributes = new HashMap();
- attributes.put(ISignature.VERIFIER_KEY, k);
- sig.setupVerify(attributes);
- return sig.checkRS(rs, h);
- }
-
- public Object clone()
- {
- return new DSSSignature(this);
- }
-
- protected void setupForVerification(PublicKey k)
- throws IllegalArgumentException
- {
- if (! (k instanceof DSAPublicKey))
- throw new IllegalArgumentException();
-
- this.publicKey = k;
- }
-
- protected void setupForSigning(PrivateKey k) throws IllegalArgumentException
- {
- if (! (k instanceof DSAPrivateKey))
- throw new IllegalArgumentException();
-
- this.privateKey = k;
- }
-
- protected Object generateSignature() throws IllegalStateException
- {
- final BigInteger[] rs = computeRS(md.digest());
- return encodeSignature(rs[0], rs[1]);
- }
-
- protected boolean verifySignature(Object sig) throws IllegalStateException
- {
- final BigInteger[] rs = decodeSignature(sig);
- return checkRS(rs, md.digest());
- }
-
- /**
- * Returns the output of a signature generation phase.
- *
- * @return an object encapsulating the DSS signature pair <code>r</code> and
- * <code>s</code>.
- */
- private Object encodeSignature(BigInteger r, BigInteger s)
- {
- return new BigInteger[] { r, s };
- }
-
- /**
- * Returns the output of a previously generated signature object as a pair of
- * {@link java.math.BigInteger}.
- *
- * @return the DSS signature pair <code>r</code> and <code>s</code>.
- */
- private BigInteger[] decodeSignature(Object signature)
- {
- return (BigInteger[]) signature;
- }
-
- private BigInteger[] computeRS(final byte[] digestBytes)
- {
- final BigInteger p = ((DSAPrivateKey) privateKey).getParams().getP();
- final BigInteger q = ((DSAPrivateKey) privateKey).getParams().getQ();
- final BigInteger g = ((DSAPrivateKey) privateKey).getParams().getG();
- final BigInteger x = ((DSAPrivateKey) privateKey).getX();
- final BigInteger m = new BigInteger(1, digestBytes);
- BigInteger k, r, s;
- final byte[] kb = new byte[20]; // we'll use 159 bits only
- while (true)
- {
- this.nextRandomBytes(kb);
- k = new BigInteger(1, kb);
- k.clearBit(159);
- r = g.modPow(k, p).mod(q);
- if (r.equals(BigInteger.ZERO))
- continue;
-
- s = m.add(x.multiply(r)).multiply(k.modInverse(q)).mod(q);
- if (s.equals(BigInteger.ZERO))
- continue;
-
- break;
- }
- return new BigInteger[] { r, s };
- }
-
- private boolean checkRS(final BigInteger[] rs, final byte[] digestBytes)
- {
- final BigInteger r = rs[0];
- final BigInteger s = rs[1];
- final BigInteger g = ((DSAPublicKey) publicKey).getParams().getG();
- final BigInteger p = ((DSAPublicKey) publicKey).getParams().getP();
- final BigInteger q = ((DSAPublicKey) publicKey).getParams().getQ();
- final BigInteger y = ((DSAPublicKey) publicKey).getY();
- final BigInteger w = s.modInverse(q);
- final BigInteger u1 = w.multiply(new BigInteger(1, digestBytes)).mod(q);
- final BigInteger u2 = r.multiply(w).mod(q);
- final BigInteger v = g.modPow(u1, p).multiply(y.modPow(u2, p)).mod(p).mod(q);
- return v.equals(r);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java b/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java
deleted file mode 100644
index 169f84b..0000000
--- a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/* DSSSignatureRawCodec.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.sig.dss;
-
-import gnu.java.security.Registry;
-import gnu.java.security.sig.ISignatureCodec;
-
-import java.io.ByteArrayOutputStream;
-import java.math.BigInteger;
-
-/**
- * An object that implements the {@link ISignatureCodec} operations for the
- * <i>Raw</i> format to use with DSS signatures.
- */
-public class DSSSignatureRawCodec
- implements ISignatureCodec
-{
- public int getFormatID()
- {
- return RAW_FORMAT;
- }
-
- /**
- * Returns the encoded form of the designated DSS (Digital Signature Standard)
- * signature object according to the <i>Raw</i> format supported by this
- * library.
- * <p>
- * The <i>Raw</i> format for a DSA signature, in this implementation, is a
- * byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_DSS_SIGNATURE},</li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the DSS parameter
- * <code>r</code> in internet order,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSS parameter <code>r</code>,
- * </li>
- * <li>4-byte count of following bytes representing the DSS parameter
- * <code>s</code>,</li>
- * <li>n-bytes representation of a {@link BigInteger} obtained by invoking
- * the <code>toByteArray()</code> method on the DSS parameter <code>s</code>.
- * </li>
- * </ol>
- *
- * @param signature the signature to encode, consisting of the two DSS
- * parameters <code>r</code> and <code>s</code> as a
- * {@link BigInteger} array.
- * @return the <i>Raw</i> format encoding of the designated signature.
- * @exception IllegalArgumentException if the designated signature is not a
- * DSS (Digital Signature Standard) one.
- */
- public byte[] encodeSignature(Object signature)
- {
- BigInteger r, s;
- try
- {
- BigInteger[] sig = (BigInteger[]) signature;
- r = sig[0];
- s = sig[1];
- }
- catch (Exception x)
- {
- throw new IllegalArgumentException("signature");
- }
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_DSS_SIGNATURE[0]);
- baos.write(Registry.MAGIC_RAW_DSS_SIGNATURE[1]);
- baos.write(Registry.MAGIC_RAW_DSS_SIGNATURE[2]);
- baos.write(Registry.MAGIC_RAW_DSS_SIGNATURE[3]);
- // version
- baos.write(0x01);
- // r
- byte[] buffer = r.toByteArray();
- int length = buffer.length;
- baos.write( length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- // s
- buffer = s.toByteArray();
- length = buffer.length;
- baos.write( length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public Object decodeSignature(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_DSS_SIGNATURE[0]
- || k[1] != Registry.MAGIC_RAW_DSS_SIGNATURE[1]
- || k[2] != Registry.MAGIC_RAW_DSS_SIGNATURE[2]
- || k[3] != Registry.MAGIC_RAW_DSS_SIGNATURE[3])
- throw new IllegalArgumentException("magic");
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
-
- int i = 5;
- int l;
- byte[] buffer;
- // r
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger r = new BigInteger(1, buffer);
- // s
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- buffer = new byte[l];
- System.arraycopy(k, i, buffer, 0, l);
- i += l;
- BigInteger s = new BigInteger(1, buffer);
- return new BigInteger[] { r, s };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureX509Codec.java b/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureX509Codec.java
deleted file mode 100644
index d0a0188..0000000
--- a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureX509Codec.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/* DSSSignatureX509Codec.java -- X.509 encoder/decoder for DSS 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.sig.dss;
-
-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.sig.ISignatureCodec;
-import gnu.java.security.util.DerUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidParameterException;
-import java.util.ArrayList;
-
-/**
- * An implementation of an {@link ISignatureCodec} that knows to encode and
- * decode DSS signatures into the raw bytes which would constitute a DER-encoded
- * form of the ASN.1 structure defined in RFC-2459, and RFC-2313 as described in
- * the next paragraphs.
- * <p>
- * Digital signatures when transmitted in an X.509 certificates are encoded
- * in DER (Distinguished Encoding Rules) as a BIT STRING; i.e.
- *
- * <pre>
- * Certificate ::= SEQUENCE {
- * tbsCertificate TBSCertificate,
- * signatureAlgorithm AlgorithmIdentifier,
- * signature BIT STRING
- * }
- * </pre>
- * <p>
- * The output of the encoder, and the input of the decoder, of this codec are
- * then the <i>raw</i> bytes of such a BIT STRING; i.e. not the DER-encoded
- * form itself.
- * <p>
- * RFC-2459 states that, for the Digital Signature Standard (DSS), which
- * generates two MPIs, commonly called <code>r</code> and <code>s</code>, as the
- * result of digitally signing a message, these two numbers will be transferred
- * as the following ASN.1 structure:
- *
- * <pre>
- * Dss-Sig-Value ::= SEQUENCE {
- * r INTEGER,
- * s INTEGER
- * }
- * </pre>
- * <p>
- * Client code that needs to build a DER BIT STRING <b>MUST</b> construct such
- * an ASN.1 value. The following is an example of how to do this:
- * <p>
- * <pre>
- * ...
- * import gnu.java.security.der.BitString;
- * import gnu.java.security.der.DER;
- * import gnu.java.security.der.DERValue;
- * ...
- * DERValue bitString = new DERValue(DER.BIT_STRING, new BitString(sigBytes));
- * ...
- * </pre>
- */
-public class DSSSignatureX509Codec
- implements ISignatureCodec
-{
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return Registry.X509_ENCODING_ID;
- }
-
- /**
- * Encodes a DSS Signature output as the <i>signature</i> raw bytes which can
- * be used to construct an ASN.1 DER-encoded BIT STRING as defined in the
- * documentation of this class.
- *
- * @param signature the output of the DSS signature algorithm; i.e. the value
- * returned by the invocation of
- * {@link gnu.java.security.sig.ISignature#sign()} method. In the
- * case of a DSS signature this is an array of two MPIs called
- * <code>r</code> and <code>s</code>.
- * @return the raw bytes of a DSS signature which could be then used as the
- * contents of a BIT STRING as per rfc-2459.
- * @throws InvalidParameterException if an exception occurs during the
- * marshalling process.
- */
- public byte[] encodeSignature(Object signature)
- {
- BigInteger[] rs = (BigInteger[]) signature;
-
- DERValue derR = new DERValue(DER.INTEGER, rs[0]);
- DERValue derS = new DERValue(DER.INTEGER, rs[1]);
-
- ArrayList dssSigValue = new ArrayList(2);
- dssSigValue.add(derR);
- dssSigValue.add(derS);
- DERValue derDssSigValue = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- dssSigValue);
- byte[] result;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try
- {
- DERWriter.write(baos, derDssSigValue);
- result = baos.toByteArray();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException();
- y.initCause(x);
- throw y;
- }
-
- return result;
- }
-
- /**
- * Decodes a <i>signature</i> as defined in the documentation of this class.
- *
- * @param input the byte array to unmarshall into a valid DSS signature
- * instance; i.e. an array of two MPIs. MUST NOT be null.
- * @return an array of two MPIs, <code>r</code> and <code>s</code> in this
- * order, decoded from the designated <code>input</code>.
- * @throw InvalidParameterException if an exception occurs during the
- * unmarshalling process.
- */
- public Object decodeSignature(byte[] input)
- {
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- BigInteger r, s;
- DERReader der = new DERReader(input);
- try
- {
- DERValue derDssSigValue = der.read();
- DerUtil.checkIsConstructed(derDssSigValue, "Wrong Dss-Sig-Value field");
-
- DERValue val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong R field");
- r = (BigInteger) val.getValue();
- val = der.read();
- DerUtil.checkIsBigInteger(val, "Wrong S field");
- s = (BigInteger) val.getValue();
- }
- catch (IOException x)
- {
- InvalidParameterException y = new InvalidParameterException();
- y.initCause(x);
- throw y;
- }
-
- return new BigInteger[] { r, s };
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/EME_PKCS1_V1_5.java b/libjava/classpath/gnu/java/security/sig/rsa/EME_PKCS1_V1_5.java
deleted file mode 100644
index 329ca8e..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/EME_PKCS1_V1_5.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/* EME_PKCS1_V1_5.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.sig.rsa;
-
-import gnu.java.security.prng.IRandom;
-import gnu.java.security.prng.LimitReachedException;
-import gnu.java.security.util.PRNG;
-
-import java.io.ByteArrayOutputStream;
-import java.security.interfaces.RSAKey;
-import java.util.Random;
-
-/**
- * An implementation of the EME-PKCS1-V1.5 encoding and decoding methods.
- * <p>
- * EME-PKCS1-V1.5 is parameterised by the entity <code>k</code> which is the
- * byte count of an RSA public shared modulus.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.ietf.org/rfc/rfc3447.txt">Public-Key Cryptography
- * Standards (PKCS) #1:</a><br>
- * RSA Cryptography Specifications Version 2.1.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class EME_PKCS1_V1_5
-{
- private int k;
-
- private ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- /** Our default source of randomness. */
- private PRNG prng = PRNG.getInstance();
-
- private EME_PKCS1_V1_5(final int k)
- {
- super();
-
- this.k = k;
- }
-
- public static final EME_PKCS1_V1_5 getInstance(final int k)
- {
- if (k < 0)
- throw new IllegalArgumentException("k must be a positive integer");
-
- return new EME_PKCS1_V1_5(k);
- }
-
- public static final EME_PKCS1_V1_5 getInstance(final RSAKey key)
- {
- final int modBits = key.getModulus().bitLength();
- final int k = (modBits + 7) / 8;
- return EME_PKCS1_V1_5.getInstance(k);
- }
-
- /**
- * Generates an octet string <code>PS</code> of length <code>k - mLen -
- * 3</code> consisting of pseudo-randomly generated nonzero octets. The length
- * of <code>PS</code> will be at least eight octets.
- * <p>
- * The method then concatenates <code>PS</code>, the message <code>M</code>,
- * and other padding to form an encoded message <code>EM</code> of length
- * <code>k</code> octets as:
- * <pre>
- * EM = 0x00 || 0x02 || PS || 0x00 || M.
- * </pre>
- * <p>
- * This method uses a default PRNG to obtain the padding bytes.
- *
- * @param M the message to encode.
- * @return the encoded message <code>EM</code>.
- */
- public byte[] encode(final byte[] M)
- {
- // a. Generate an octet string PS of length k - mLen - 3 consisting
- // of pseudo-randomly generated nonzero octets. The length of PS
- // will be at least eight octets.
- final byte[] PS = new byte[k - M.length - 3];
- // FIXME. This should be configurable, somehow.
- prng.nextBytes(PS);
- int i = 0;
- for (; i < PS.length; i++)
- {
- if (PS[i] == 0)
- PS[i] = 1;
- }
- // b. Concatenate PS, the message M, and other padding to form an
- // encoded message EM of length k octets as
- //
- // EM = 0x00 || 0x02 || PS || 0x00 || M.
- return assembleEM(PS, M);
- }
-
- /**
- * Similar to {@link #encode(byte[])} method, except that the source of
- * randomness to use for obtaining the padding bytes (an instance of
- * {@link IRandom}) is given as a parameter.
- *
- * @param M the message to encode.
- * @param irnd the {@link IRandom} instance to use as a source of randomness.
- * @return the encoded message <code>EM</code>.
- */
- public byte[] encode(final byte[] M, final IRandom irnd)
- {
- final byte[] PS = new byte[k - M.length - 3];
- try
- {
- irnd.nextBytes(PS, 0, PS.length);
- int i = 0;
- outer: while (true)
- {
- for (; i < PS.length; i++)
- {
- if (PS[i] == 0x00)
- {
- System.arraycopy(PS, i + 1, PS, i, PS.length - i - 1);
- irnd.nextBytes(PS, PS.length - 1, 1);
- continue outer;
- }
- }
- break;
- }
- }
- catch (IllegalStateException x)
- {
- throw new RuntimeException("encode(): " + String.valueOf(x));
- }
- catch (LimitReachedException x)
- {
- throw new RuntimeException("encode(): " + String.valueOf(x));
- }
- return assembleEM(PS, M);
- }
-
- /**
- * Similar to the {@link #encode(byte[], IRandom)} method, except that the
- * source of randmoness is an instance of {@link Random}.
- *
- * @param M the message to encode.
- * @param rnd the {@link Random} instance to use as a source of randomness.
- * @return the encoded message <code>EM</code>.
- */
- public byte[] encode(final byte[] M, final Random rnd)
- {
- final byte[] PS = new byte[k - M.length - 3];
- rnd.nextBytes(PS);
- int i = 0;
- outer: while (true)
- {
- for (; i < PS.length; i++)
- {
- if (PS[i] == 0x00)
- {
- System.arraycopy(PS, i + 1, PS, i, PS.length - i - 1);
- PS[PS.length - 1] = (byte) rnd.nextInt();
- continue outer;
- }
- }
- break;
- }
- return assembleEM(PS, M);
- }
-
- /**
- * Separate the encoded message <code>EM</code> into an octet string
- * <code>PS</code> consisting of nonzero octets and a message <code>M</code>
- * as:
- * <pre>
- * EM = 0x00 || 0x02 || PS || 0x00 || M.
- * </pre>
- * <p>
- * If the first octet of <code>EM</code> does not have hexadecimal value
- * <code>0x00</code>, if the second octet of <code>EM</code> does not
- * have hexadecimal value <code>0x02</code>, if there is no octet with
- * hexadecimal value <code>0x00</code> to separate <code>PS</code> from
- * <code>M</code>, or if the length of <code>PS</code> is less than
- * <code>8</code> octets, output "decryption error" and stop.
- *
- * @param EM the designated encoded message.
- * @return the decoded message <code>M</code> framed in the designated
- * <code>EM</code> value.
- * @throws IllegalArgumentException if the length of the designated entity
- * <code>EM</code> is different than <code>k</code> (the length
- * in bytes of the public shared modulus), or if any of the
- * conditions described above is detected.
- */
- public byte[] decode(final byte[] EM)
- {
- // Separate the encoded message EM into an
- // octet string PS consisting of nonzero octets and a message M as
- //
- // EM = 0x00 || 0x02 || PS || 0x00 || M.
- //
- // If the first octet of EM does not have hexadecimal value 0x00, if
- // the second octet of EM does not have hexadecimal value 0x02, if
- // there is no octet with hexadecimal value 0x00 to separate PS from
- // M, or if the length of PS is less than 8 octets, output
- // "decryption error" and stop. (See the note below.)
- final int emLen = EM.length;
- if (emLen != k)
- throw new IllegalArgumentException("decryption error");
- if (EM[0] != 0x00)
- throw new IllegalArgumentException("decryption error");
- if (EM[1] != 0x02)
- throw new IllegalArgumentException("decryption error");
- int i = 2;
- for (; i < emLen; i++)
- {
- if (EM[i] == 0x00)
- break;
- }
- if (i >= emLen || i < 11)
- throw new IllegalArgumentException("decryption error");
- i++;
- final byte[] result = new byte[emLen - i];
- System.arraycopy(EM, i, result, 0, result.length);
- return result;
- }
-
- private byte[] assembleEM(final byte[] PS, final byte[] M)
- {
- // b. Concatenate PS, the message M, and other padding to form an
- // encoded message EM of length k octets as
- //
- // EM = 0x00 || 0x02 || PS || 0x00 || M.
- baos.reset();
- baos.write(0x00);
- baos.write(0x02);
- baos.write(PS, 0, PS.length);
- baos.write(0x00);
- baos.write(M, 0, M.length);
- final byte[] result = baos.toByteArray();
- baos.reset();
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java
deleted file mode 100644
index 3cddab4..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/* EMSA_PKCS1_V1_5.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.sig.rsa;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-
-import java.io.ByteArrayOutputStream;
-
-/**
- * An implementation of the EMSA-PKCS1-V1.5 encoding scheme.
- * <p>
- * EMSA-PKCS1-V1.5 is parameterised by the choice of hash function Hash and
- * hLen which denotes the length in octets of the hash function output.
- * <p>
- * References:
- * <ol>
- * <li><a href="http://www.ietf.org/rfc/rfc3447.txt">Public-Key Cryptography
- * Standards (PKCS) #1:</a><br>
- * RSA Cryptography Specifications Version 2.1.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class EMSA_PKCS1_V1_5
- implements Cloneable
-{
- /* Notes.
- 1. For the six hash functions mentioned in Appendix B.1, the DER encoding
- T of the DigestInfo value is equal to the following:
-
- MD2: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04 10 || H
- MD5: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04 10 || H
- SHA-1: (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H
- SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H
- SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00 04 30 || H
- SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H
- */
- private static final byte[] MD2_PREFIX = {
- (byte) 0x30, (byte) 0x20, (byte) 0x30, (byte) 0x0c, (byte) 0x06,
- (byte) 0x08, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86,
- (byte) 0xf7, (byte) 0x0d, (byte) 0x02, (byte) 0x02, (byte) 0x05,
- (byte) 0x00, (byte) 0x04, (byte) 0x10
- };
-
- private static final byte[] MD5_PREFIX = {
- (byte) 0x30, (byte) 0x20, (byte) 0x30, (byte) 0x0c, (byte) 0x06,
- (byte) 0x08, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86,
- (byte) 0xf7, (byte) 0x0d, (byte) 0x02, (byte) 0x05, (byte) 0x05,
- (byte) 0x00, (byte) 0x04, (byte) 0x10
- };
-
- private static final byte[] SHA160_PREFIX = {
- (byte) 0x30, (byte) 0x21, (byte) 0x30, (byte) 0x09, (byte) 0x06,
- (byte) 0x05, (byte) 0x2b, (byte) 0x0e, (byte) 0x03, (byte) 0x02,
- (byte) 0x1a, (byte) 0x05, (byte) 0x00, (byte) 0x04, (byte) 0x14
- };
-
- private static final byte[] SHA256_PREFIX = {
- (byte) 0x30, (byte) 0x31, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
- (byte) 0x09, (byte) 0x60, (byte) 0x86, (byte) 0x48, (byte) 0x01,
- (byte) 0x65, (byte) 0x03, (byte) 0x04, (byte) 0x02, (byte) 0x01,
- (byte) 0x05, (byte) 0x00, (byte) 0x04, (byte) 0x20
- };
-
- private static final byte[] SHA384_PREFIX = {
- (byte) 0x30, (byte) 0x41, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
- (byte) 0x09, (byte) 0x60, (byte) 0x86, (byte) 0x48, (byte) 0x01,
- (byte) 0x65, (byte) 0x03, (byte) 0x04, (byte) 0x02, (byte) 0x02,
- (byte) 0x05, (byte) 0x00, (byte) 0x04, (byte) 0x30
- };
-
- private static final byte[] SHA512_PREFIX = {
- (byte) 0x30, (byte) 0x51, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
- (byte) 0x09, (byte) 0x60, (byte) 0x86, (byte) 0x48, (byte) 0x01,
- (byte) 0x65, (byte) 0x03, (byte) 0x04, (byte) 0x02, (byte) 0x03,
- (byte) 0x05, (byte) 0x00, (byte) 0x04, (byte) 0x40
- };
-
- /** The underlying hash function to use with this instance. */
- private IMessageDigest hash;
-
- /** The output size of the hash function in octets. */
- private int hLen; // TODO: field not used!!! investigate
-
- /** The DER part of DigestInfo not containing the hash value itself. */
- private byte[] prefix;
-
- /**
- * Trivial private constructor to enforce use through Factory method.
- *
- * @param hash the message digest instance to use with this scheme instance.
- */
- private EMSA_PKCS1_V1_5(final IMessageDigest hash)
- {
- super();
-
- this.hash = hash;
- hLen = hash.hashSize();
- final String name = hash.name();
- if (name.equals(Registry.MD2_HASH))
- prefix = MD2_PREFIX;
- else if (name.equals(Registry.MD5_HASH))
- prefix = MD5_PREFIX;
- else if (name.equals(Registry.SHA160_HASH))
- prefix = SHA160_PREFIX;
- else if (name.equals(Registry.SHA256_HASH))
- prefix = SHA256_PREFIX;
- else if (name.equals(Registry.SHA384_HASH))
- prefix = SHA384_PREFIX;
- else if (name.equals(Registry.SHA512_HASH))
- prefix = SHA512_PREFIX;
- else
- throw new UnsupportedOperationException(); // should not happen
- }
-
- /**
- * Returns an instance of this object given a designated name of a hash
- * function.
- *
- * @param mdName the canonical name of a hash function.
- * @return an instance of this object configured for use with the designated
- * options.
- * @throws UnsupportedOperationException if the hash function is not
- * implemented or does not have an ID listed in RFC-3447.
- */
- public static final EMSA_PKCS1_V1_5 getInstance(final String mdName)
- {
- final IMessageDigest hash = HashFactory.getInstance(mdName);
- final String name = hash.name();
- if (! (name.equals(Registry.MD2_HASH)
- || name.equals(Registry.MD5_HASH)
- || name.equals(Registry.SHA160_HASH)
- || name.equals(Registry.SHA256_HASH)
- || name.equals(Registry.SHA384_HASH)
- || name.equals(Registry.SHA512_HASH)))
- throw new UnsupportedOperationException("hash with no OID: " + name);
-
- return new EMSA_PKCS1_V1_5(hash);
- }
-
- public Object clone()
- {
- return getInstance(hash.name());
- }
-
- /**
- * Frames the hash of a message, along with an ID of the hash function in
- * a DER sequence according to the specifications of EMSA-PKCS1-V1.5 as
- * described in RFC-3447 (see class documentation).
- *
- * @param mHash the byte sequence resulting from applying the message digest
- * algorithm Hash to the message <i>M</i>.
- * @param emLen intended length in octets of the encoded message, at least
- * <code>tLen + 11</code>, where <code>tLen</code> is the octet length of the
- * DER encoding <code>T</code> of a certain value computed during the
- * encoding operation.
- * @return encoded message, an octet string of length <code>emLen</code>.
- * @throws IllegalArgumentException if the message is too long, or if the
- * intended encoded message length is too short.
- */
- public byte[] encode(final byte[] mHash, final int emLen)
- {
- // 1. Apply the hash function to the message M to produce a hash value
- // H: H = Hash(M).
- // If the hash function outputs "message too long," output "message
- // too long" and stop.
- // 2. Encode the algorithm ID for the hash function and the hash value
- // into an ASN.1 value of type DigestInfo (see Appendix A.2.4) with
- // the Distinguished Encoding Rules (DER), where the type DigestInfo
- // has the syntax
- // DigestInfo ::= SEQUENCE {
- // digestAlgorithm AlgorithmIdentifier,
- // digest OCTET STRING
- // }
- // The first field identifies the hash function and the second contains
- // the hash value. Let T be the DER encoding of the DigestInfo value
- // (see the notes below) and let tLen be the length in octets of T.
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- baos.write(prefix, 0, prefix.length);
- baos.write(mHash, 0, mHash.length);
- final byte[] T = baos.toByteArray();
- final int tLen = T.length;
- // 3. If emLen < tLen + 11, output "intended encoded message length too
- // short" and stop.
- if (emLen < tLen + 11)
- throw new IllegalArgumentException("emLen too short");
- // 4. Generate an octet string PS consisting of emLen - tLen - 3 octets
- // with hexadecimal value 0xff. The length of PS will be at least 8
- // octets.
- final byte[] PS = new byte[emLen - tLen - 3];
- for (int i = 0; i < PS.length; i++)
- PS[i] = (byte) 0xFF;
- // 5. Concatenate PS, the DER encoding T, and other padding to form the
- // encoded message EM as: EM = 0x00 || 0x01 || PS || 0x00 || T.
- baos.reset();
- baos.write(0x00);
- baos.write(0x01);
- baos.write(PS, 0, PS.length);
- baos.write(0x00);
- baos.write(T, 0, tLen);
- final byte[] result = baos.toByteArray();
- baos.reset();
- // 6. Output EM.
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java
deleted file mode 100644
index 7a8e591..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/* EMSA_PSS.java --
- Copyright (C) 2001, 2002, 2003, 2006, 2010 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.sig.rsa;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.util.Util;
-
-import java.util.Arrays;
-import java.util.logging.Logger;
-
-/**
- * An implementation of the EMSA-PSS encoding/decoding scheme.
- * <p>
- * EMSA-PSS coincides with EMSA4 in IEEE P1363a D5 except that EMSA-PSS acts on
- * octet strings and not on bit strings. In particular, the bit lengths of the
- * hash and the salt must be multiples of 8 in EMSA-PSS. Moreover, EMSA4 outputs
- * an integer of a desired bit length rather than an octet string.
- * <p>
- * EMSA-PSS is parameterized by the choice of hash function Hash and mask
- * generation function MGF. In this submission, MGF is based on a Hash
- * definition that coincides with the corresponding definitions in IEEE Std
- * 1363-2000, PKCS #1 v2.0, and the draft ANSI X9.44. In PKCS #1 v2.0 and the
- * draft ANSI X9.44, the recommended hash function is SHA-1, while IEEE Std
- * 1363-2000 recommends SHA-1 and RIPEMD-160.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class EMSA_PSS
- implements Cloneable
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(EMSA_PSS.class.getName()) : null;
-
- /** The underlying hash function to use with this instance. */
- private IMessageDigest hash;
-
- /** The output size of the hash function in octets. */
- private int hLen;
-
- /**
- * Trivial private constructor to enforce use through Factory method.
- *
- * @param hash the message digest instance to use with this scheme instance.
- */
- private EMSA_PSS(IMessageDigest hash)
- {
- super();
-
- this.hash = hash;
- hLen = hash.hashSize();
- }
-
- /**
- * Returns an instance of this object given a designated name of a hash
- * function.
- *
- * @param mdName the canonical name of a hash function.
- * @return an instance of this object configured for use with the designated
- * options.
- */
- public static EMSA_PSS getInstance(String mdName)
- {
- IMessageDigest hash = HashFactory.getInstance(mdName);
- return new EMSA_PSS(hash);
- }
-
- public Object clone()
- {
- return getInstance(hash.name());
- }
-
- /**
- * The encoding operation EMSA-PSS-Encode computes the hash of a message
- * <code>M</code> using a hash function and maps the result to an encoded
- * message <code>EM</code> of a specified length using a mask generation
- * function.
- *
- * @param mHash the byte sequence resulting from applying the message digest
- * algorithm Hash to the message <i>M</i>.
- * @param emBits the maximal bit length of the integer OS2IP(EM), at least
- * <code>8.hLen + 8.sLen + 9</code>.
- * @param salt the salt to use when encoding the output.
- * @return the encoded message <code>EM</code>, an octet string of length
- * <code>emLen = CEILING(emBits / 8)</code>.
- * @exception IllegalArgumentException if an exception occurs.
- */
- public byte[] encode(byte[] mHash, int emBits, byte[] salt)
- {
- int sLen = salt.length;
- // 1. If the length of M is greater than the input limitation for the hash
- // function (2**61 - 1 octets for SHA-1) then output "message too long"
- // and stop.
- // 2. Let mHash = Hash(M), an octet string of length hLen.
- if (hLen != mHash.length)
- throw new IllegalArgumentException("wrong hash");
- // 3. If emBits < 8.hLen + 8.sLen + 9, output 'encoding error' and stop.
- if (emBits < (8 * hLen + 8 * sLen + 9))
- throw new IllegalArgumentException("encoding error");
- int emLen = (emBits + 7) / 8;
- // 4. Generate a random octet string salt of length sLen; if sLen = 0,
- // then salt is the empty string.
- // ...passed as argument to accomodate JCE
- // 5. Let M0 = 00 00 00 00 00 00 00 00 || mHash || salt;
- // M0 is an octet string of length 8 + hLen + sLen with eight initial zero
- // octets.
- // 6. Let H = Hash(M0), an octet string of length hLen.
- byte[] H;
- int i;
- synchronized (hash)
- {
- for (i = 0; i < 8; i++)
- hash.update((byte) 0x00);
-
- hash.update(mHash, 0, hLen);
- hash.update(salt, 0, sLen);
- H = hash.digest();
- }
- // 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2
- // zero octets. The length of PS may be 0.
- // 8. Let DB = PS || 01 || salt.
- byte[] DB = new byte[emLen - sLen - hLen - 2 + 1 + sLen];
- DB[emLen - sLen - hLen - 2] = 0x01;
- System.arraycopy(salt, 0, DB, emLen - sLen - hLen - 1, sLen);
- // 9. Let dbMask = MGF(H, emLen - hLen - 1).
- byte[] dbMask = MGF(H, emLen - hLen - 1);
- if (Configuration.DEBUG)
- {
- log.fine("dbMask (encode): " + Util.toString(dbMask));
- log.fine("DB (encode): " + Util.toString(DB));
- }
- // 10. Let maskedDB = DB XOR dbMask.
- for (i = 0; i < DB.length; i++)
- DB[i] = (byte)(DB[i] ^ dbMask[i]);
- // 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in
- // maskedDB to zero.
- DB[0] &= (0xFF >>> (8 * emLen - emBits));
- // 12. Let EM = maskedDB || H || bc, where bc is the single octet with
- // hexadecimal value 0xBC.
- byte[] result = new byte[emLen];
- System.arraycopy(DB, 0, result, 0, emLen - hLen - 1);
- System.arraycopy(H, 0, result, emLen - hLen - 1, hLen);
- result[emLen - 1] = (byte) 0xBC;
- // 13. Output EM.
- return result;
- }
-
- /**
- * The decoding operation EMSA-PSS-Decode recovers the message hash from an
- * encoded message <code>EM</code> and compares it to the hash of
- * <code>M</code>.
- *
- * @param mHash the byte sequence resulting from applying the message digest
- * algorithm Hash to the message <i>M</i>.
- * @param EM the <i>encoded message</i>, an octet string of length
- * <code>emLen = CEILING(emBits/8).
- * @param emBits the maximal bit length of the integer OS2IP(EM), at least
- * <code>8.hLen + 8.sLen + 9</code>.
- * @param sLen the length, in octets, of the expected salt.
- * @return <code>true</code> if the result of the verification was
- * <i>consistent</i> with the expected reseult; and <code>false</code> if the
- * result was <i>inconsistent</i>.
- * @exception IllegalArgumentException if an exception occurs.
- */
- public boolean decode(byte[] mHash, byte[] EM, int emBits, int sLen)
- {
- if (Configuration.DEBUG)
- {
- log.fine("mHash: " + Util.toString(mHash));
- log.fine("EM: " + Util.toString(EM));
- log.fine("emBits: " + String.valueOf(emBits));
- log.fine("sLen: " + String.valueOf(sLen));
- }
- if (sLen < 0)
- throw new IllegalArgumentException("sLen");
- // 1. If the length of M is greater than the input limitation for the hash
- // function (2**61 ? 1 octets for SHA-1) then output 'inconsistent' and
- // stop.
- // 2. Let mHash = Hash(M), an octet string of length hLen.
- if (hLen != mHash.length)
- {
- if (Configuration.DEBUG)
- log.fine("hLen != mHash.length; hLen: " + String.valueOf(hLen));
- throw new IllegalArgumentException("wrong hash");
- }
- // 3. If emBits < 8.hLen + 8.sLen + 9, output 'decoding error' and stop.
- if (emBits < (8 * hLen + 8 * sLen + 9))
- {
- if (Configuration.DEBUG)
- log.fine("emBits < (8hLen + 8sLen + 9); sLen: "
- + String.valueOf(sLen));
- throw new IllegalArgumentException("decoding error");
- }
- int emLen = (emBits + 7) / 8;
- // 4. If the rightmost octet of EM does not have hexadecimal value bc,
- // output 'inconsistent' and stop.
- if ((EM[EM.length - 1] & 0xFF) != 0xBC)
- {
- if (Configuration.DEBUG)
- log.fine("EM does not end with 0xBC");
- return false;
- }
- // 5. Let maskedDB be the leftmost emLen ? hLen ? 1 octets of EM, and let
- // H be the next hLen octets.
- // 6. If the leftmost 8.emLen ? emBits bits of the leftmost octet in
- // maskedDB are not all equal to zero, output 'inconsistent' and stop.
- if ((EM[0] & (0xFF << (8 - (8 * emLen - emBits)))) != 0)
- {
- if (Configuration.DEBUG)
- log.fine("Leftmost 8emLen - emBits bits of EM are not 0s");
- return false;
- }
- byte[] DB = new byte[emLen - hLen - 1];
- byte[] H = new byte[hLen];
- System.arraycopy(EM, 0, DB, 0, emLen - hLen - 1);
- System.arraycopy(EM, emLen - hLen - 1, H, 0, hLen);
- // 7. Let dbMask = MGF(H, emLen ? hLen ? 1).
- byte[] dbMask = MGF(H, emLen - hLen - 1);
- // 8. Let DB = maskedDB XOR dbMask.
- int i;
- for (i = 0; i < DB.length; i++)
- DB[i] = (byte)(DB[i] ^ dbMask[i]);
- // 9. Set the leftmost 8.emLen ? emBits bits of DB to zero.
- DB[0] &= (0xFF >>> (8 * emLen - emBits));
- if (Configuration.DEBUG)
- {
- log.fine("dbMask (decode): " + Util.toString(dbMask));
- log.fine("DB (decode): " + Util.toString(DB));
- }
- // 10. If the emLen -hLen -sLen -2 leftmost octets of DB are not zero or
- // if the octet at position emLen -hLen -sLen -1 is not equal to 0x01,
- // output 'inconsistent' and stop.
- // IMPORTANT (rsn): this is an error in the specs, the index of the 0x01
- // byte should be emLen -hLen -sLen -2 and not -1! authors have been advised
- for (i = 0; i < (emLen - hLen - sLen - 2); i++)
- {
- if (DB[i] != 0)
- {
- if (Configuration.DEBUG)
- log.fine("DB[" + String.valueOf(i) + "] != 0x00");
- return false;
- }
- }
- if (DB[i] != 0x01)
- { // i == emLen -hLen -sLen -2
- if (Configuration.DEBUG)
- log.fine("DB's byte at position (emLen -hLen -sLen -2); i.e. "
- + String.valueOf(i) + " is not 0x01");
- return false;
- }
- // 11. Let salt be the last sLen octets of DB.
- byte[] salt = new byte[sLen];
- System.arraycopy(DB, DB.length - sLen, salt, 0, sLen);
- // 12. Let M0 = 00 00 00 00 00 00 00 00 || mHash || salt;
- // M0 is an octet string of length 8 + hLen + sLen with eight initial
- // zero octets.
- // 13. Let H0 = Hash(M0), an octet string of length hLen.
- byte[] H0;
- synchronized (hash)
- {
- for (i = 0; i < 8; i++)
- hash.update((byte) 0x00);
-
- hash.update(mHash, 0, hLen);
- hash.update(salt, 0, sLen);
- H0 = hash.digest();
- }
- // 14. If H = H0, output 'consistent.' Otherwise, output 'inconsistent.'
- return Arrays.equals(H, H0);
- }
-
- /**
- * A mask generation function takes an octet string of variable length and a
- * desired output length as input, and outputs an octet string of the desired
- * length. There may be restrictions on the length of the input and output
- * octet strings, but such bounds are generally very large. Mask generation
- * functions are deterministic; the octet string output is completely
- * determined by the input octet string. The output of a mask generation
- * function should be pseudorandom, that is, it should be infeasible to
- * predict, given one part of the output but not the input, another part of
- * the output. The provable security of RSA-PSS relies on the random nature of
- * the output of the mask generation function, which in turn relies on the
- * random nature of the underlying hash function.
- *
- * @param Z a seed.
- * @param l the desired output length in octets.
- * @return the mask.
- * @exception IllegalArgumentException if the desired output length is too
- * long.
- */
- private byte[] MGF(byte[] Z, int l)
- {
- // 1. If l > (2**32).hLen, output 'mask too long' and stop.
- if (l < 1 || (l & 0xFFFFFFFFL) > ((hLen & 0xFFFFFFFFL) << 32L))
- throw new IllegalArgumentException("mask too long");
- // 2. Let T be the empty octet string.
- byte[] result = new byte[l];
- // 3. For i = 0 to CEILING(l/hLen) ? 1, do
- int limit = ((l + hLen - 1) / hLen) - 1;
- IMessageDigest hashZ = null;
- hashZ = (IMessageDigest) hash.clone();
- hashZ.digest();
- hashZ.update(Z, 0, Z.length);
- IMessageDigest hashZC = null;
- byte[] t;
- int sofar = 0;
- int length;
- for (int i = 0; i < limit; i++)
- {
- // 3.1 Convert i to an octet string C of length 4 with the primitive
- // I2OSP: C = I2OSP(i, 4).
- // 3.2 Concatenate the hash of the seed Z and C to the octet string T:
- // T = T || Hash(Z || C)
- hashZC = (IMessageDigest) hashZ.clone();
- hashZC.update((byte)(i >>> 24));
- hashZC.update((byte)(i >>> 16));
- hashZC.update((byte)(i >>> 8));
- hashZC.update((byte) i);
- t = hashZC.digest();
- length = l - sofar;
- length = (length > hLen ? hLen : length);
- System.arraycopy(t, 0, result, sofar, length);
- sofar += length;
- }
- // 4. Output the leading l octets of T as the octet string mask.
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSA.java b/libjava/classpath/gnu/java/security/sig/rsa/RSA.java
deleted file mode 100644
index 343b2cf..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSA.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/* RSA.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.sig.rsa;
-
-import gnu.java.security.Properties;
-import gnu.java.security.util.PRNG;
-
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.interfaces.RSAPrivateCrtKey;
-import java.security.interfaces.RSAPrivateKey;
-import java.security.interfaces.RSAPublicKey;
-
-/**
- * Utility methods related to the RSA algorithm.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * <li><a href="http://www.ietf.org/rfc/rfc3447.txt">Public-Key Cryptography
- * Standards (PKCS) #1:</a><br>
- * RSA Cryptography Specifications Version 2.1.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * <li><a href="http://crypto.stanford.edu/~dabo/abstracts/ssl-timing.html">
- * Remote timing attacks are practical</a><br>
- * D. Boneh and D. Brumley.</li>
- * </ol>
- */
-public class RSA
-{
- private static final BigInteger ZERO = BigInteger.ZERO;
-
- private static final BigInteger ONE = BigInteger.ONE;
-
- /** Our default source of randomness. */
- private static final PRNG prng = PRNG.getInstance();
-
- /** Trivial private constructor to enforce Singleton pattern. */
- private RSA()
- {
- super();
- }
-
- /**
- * An implementation of the <b>RSASP</b> method: Assuming that the designated
- * RSA private key is a valid one, this method computes a <i>signature
- * representative</i> for a designated <i>message representative</i> signed
- * by the holder of the designated RSA private key.
- *
- * @param K the RSA private key.
- * @param m the <i>message representative</i>: an integer between
- * <code>0</code> and <code>n - 1</code>, where <code>n</code>
- * is the RSA <i>modulus</i>.
- * @return the <i>signature representative</i>, an integer between
- * <code>0</code> and <code>n - 1</code>, where <code>n</code>
- * is the RSA <i>modulus</i>.
- * @throws ClassCastException if <code>K</code> is not an RSA one.
- * @throws IllegalArgumentException if <code>m</code> (the <i>message
- * representative</i>) is out of range.
- */
- public static final BigInteger sign(final PrivateKey K, final BigInteger m)
- {
- try
- {
- return RSADP((RSAPrivateKey) K, m);
- }
- catch (IllegalArgumentException x)
- {
- throw new IllegalArgumentException("message representative out of range");
- }
- }
-
- /**
- * An implementation of the <b>RSAVP</b> method: Assuming that the designated
- * RSA public key is a valid one, this method computes a <i>message
- * representative</i> for the designated <i>signature representative</i>
- * generated by an RSA private key, for a message intended for the holder of
- * the designated RSA public key.
- *
- * @param K the RSA public key.
- * @param s the <i>signature representative</i>, an integer between
- * <code>0</code> and <code>n - 1</code>, where <code>n</code>
- * is the RSA <i>modulus</i>.
- * @return a <i>message representative</i>: an integer between <code>0</code>
- * and <code>n - 1</code>, where <code>n</code> is the RSA
- * <i>modulus</i>.
- * @throws ClassCastException if <code>K</code> is not an RSA one.
- * @throws IllegalArgumentException if <code>s</code> (the <i>signature
- * representative</i>) is out of range.
- */
- public static final BigInteger verify(final PublicKey K, final BigInteger s)
- {
- try
- {
- return RSAEP((RSAPublicKey) K, s);
- }
- catch (IllegalArgumentException x)
- {
- throw new IllegalArgumentException("signature representative out of range");
- }
- }
-
- /**
- * An implementation of the <code>RSAEP</code> algorithm.
- *
- * @param K the recipient's RSA public key.
- * @param m the message representative as an MPI.
- * @return the resulting MPI --an MPI between <code>0</code> and
- * <code>n - 1</code> (<code>n</code> being the public shared
- * modulus)-- that will eventually be padded with an appropriate
- * framing/padding scheme.
- * @throws ClassCastException if <code>K</code> is not an RSA one.
- * @throws IllegalArgumentException if <code>m</code>, the message
- * representative is not between <code>0</code> and
- * <code>n - 1</code> (<code>n</code> being the public shared
- * modulus).
- */
- public static final BigInteger encrypt(final PublicKey K, final BigInteger m)
- {
- try
- {
- return RSAEP((RSAPublicKey) K, m);
- }
- catch (IllegalArgumentException x)
- {
- throw new IllegalArgumentException("message representative out of range");
- }
- }
-
- /**
- * An implementation of the <code>RSADP</code> algorithm.
- *
- * @param K the recipient's RSA private key.
- * @param c the ciphertext representative as an MPI.
- * @return the message representative, an MPI between <code>0</code> and
- * <code>n - 1</code> (<code>n</code> being the shared public
- * modulus).
- * @throws ClassCastException if <code>K</code> is not an RSA one.
- * @throws IllegalArgumentException if <code>c</code>, the ciphertext
- * representative is not between <code>0</code> and
- * <code>n - 1</code> (<code>n</code> being the shared public
- * modulus).
- */
- public static final BigInteger decrypt(final PrivateKey K, final BigInteger c)
- {
- try
- {
- return RSADP((RSAPrivateKey) K, c);
- }
- catch (IllegalArgumentException x)
- {
- throw new IllegalArgumentException("ciphertext representative out of range");
- }
- }
-
- /**
- * Converts a <i>multi-precision integer</i> (MPI) <code>s</code> into an
- * octet sequence of length <code>k</code>.
- *
- * @param s the multi-precision integer to convert.
- * @param k the length of the output.
- * @return the result of the transform.
- * @exception IllegalArgumentException if the length in octets of meaningful
- * bytes of <code>s</code> is greater than <code>k</code>.
- */
- public static final byte[] I2OSP(final BigInteger s, final int k)
- {
- byte[] result = s.toByteArray();
- if (result.length < k)
- {
- final byte[] newResult = new byte[k];
- System.arraycopy(result, 0, newResult, k - result.length, result.length);
- result = newResult;
- }
- else if (result.length > k)
- { // leftmost extra bytes should all be 0
- final int limit = result.length - k;
- for (int i = 0; i < limit; i++)
- {
- if (result[i] != 0x00)
- throw new IllegalArgumentException("integer too large");
- }
- final byte[] newResult = new byte[k];
- System.arraycopy(result, limit, newResult, 0, k);
- result = newResult;
- }
- return result;
- }
-
- private static final BigInteger RSAEP(final RSAPublicKey K, final BigInteger m)
- {
- // 1. If the representative m is not between 0 and n - 1, output
- // "representative out of range" and stop.
- final BigInteger n = K.getModulus();
- if (m.compareTo(ZERO) < 0 || m.compareTo(n.subtract(ONE)) > 0)
- throw new IllegalArgumentException();
- // 2. Let c = m^e mod n.
- final BigInteger e = K.getPublicExponent();
- final BigInteger result = m.modPow(e, n);
- // 3. Output c.
- return result;
- }
-
- private static final BigInteger RSADP(final RSAPrivateKey K, BigInteger c)
- {
- // 1. If the representative c is not between 0 and n - 1, output
- // "representative out of range" and stop.
- final BigInteger n = K.getModulus();
- if (c.compareTo(ZERO) < 0 || c.compareTo(n.subtract(ONE)) > 0)
- throw new IllegalArgumentException();
- // 2. The representative m is computed as follows.
- BigInteger result;
- if (! (K instanceof RSAPrivateCrtKey))
- {
- // a. If the first form (n, d) of K is used, let m = c^d mod n.
- final BigInteger d = K.getPrivateExponent();
- result = c.modPow(d, n);
- }
- else
- {
- // from [3] p.13 --see class docs:
- // The RSA blinding operation calculates x = (r^e) * g mod n before
- // decryption, where r is random, e is the RSA encryption exponent, and
- // g is the ciphertext to be decrypted. x is then decrypted as normal,
- // followed by division by r, i.e. (x^e) / r mod n. Since r is random,
- // x is random and timing the decryption should not reveal information
- // about the key. Note that r should be a new random number for every
- // decryption.
- final boolean rsaBlinding = Properties.doRSABlinding();
- BigInteger r = null;
- BigInteger e = null;
- if (rsaBlinding)
- { // pre-decryption
- r = newR(n);
- e = ((RSAPrivateCrtKey) K).getPublicExponent();
- final BigInteger x = r.modPow(e, n).multiply(c).mod(n);
- c = x;
- }
- // b. If the second form (p, q, dP, dQ, qInv) and (r_i, d_i, t_i)
- // of K is used, proceed as follows:
- final BigInteger p = ((RSAPrivateCrtKey) K).getPrimeP();
- final BigInteger q = ((RSAPrivateCrtKey) K).getPrimeQ();
- final BigInteger dP = ((RSAPrivateCrtKey) K).getPrimeExponentP();
- final BigInteger dQ = ((RSAPrivateCrtKey) K).getPrimeExponentQ();
- final BigInteger qInv = ((RSAPrivateCrtKey) K).getCrtCoefficient();
- // i. Let m_1 = c^dP mod p and m_2 = c^dQ mod q.
- final BigInteger m_1 = c.modPow(dP, p);
- final BigInteger m_2 = c.modPow(dQ, q);
- // ii. If u > 2, let m_i = c^(d_i) mod r_i, i = 3, ..., u.
- // iii. Let h = (m_1 - m_2) * qInv mod p.
- final BigInteger h = m_1.subtract(m_2).multiply(qInv).mod(p);
- // iv. Let m = m_2 + q * h.
- result = m_2.add(q.multiply(h));
- if (rsaBlinding) // post-decryption
- result = result.multiply(r.modInverse(n)).mod(n);
- }
- // 3. Output m
- return result;
- }
-
- /**
- * Returns a random MPI with a random bit-length of the form <code>8b</code>,
- * where <code>b</code> is in the range <code>[32..64]</code>.
- *
- * @return a random MPI whose length in bytes is between 32 and 64 inclusive.
- */
- private static final BigInteger newR(final BigInteger N)
- {
- final int upper = (N.bitLength() + 7) / 8;
- final int lower = upper / 2;
- final byte[] bl = new byte[1];
- int b;
- do
- {
- prng.nextBytes(bl);
- b = bl[0] & 0xFF;
- }
- while (b < lower || b > upper);
- final byte[] buffer = new byte[b]; // 256-bit MPI
- prng.nextBytes(buffer);
- return new BigInteger(1, buffer);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java
deleted file mode 100644
index 1420331..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/* RSAPKCS1V1_5Signature.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.sig.rsa;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.sig.BaseSignature;
-
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.interfaces.RSAPrivateKey;
-import java.security.interfaces.RSAPublicKey;
-import java.util.Arrays;
-
-/**
- * The RSA-PKCS1-V1.5 signature scheme is a digital signature scheme with
- * appendix (SSA) combining the RSA algorithm with the EMSA-PKCS1-v1_5 encoding
- * method.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * <li><a href="http://www.ietf.org/rfc/rfc3447.txt">Public-Key Cryptography
- * Standards (PKCS) #1:</a><br>
- * RSA Cryptography Specifications Version 2.1.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class RSAPKCS1V1_5Signature
- extends BaseSignature
-{
- /** The underlying EMSA-PKCS1-v1.5 instance for this object. */
- private EMSA_PKCS1_V1_5 pkcs1;
-
- /**
- * Default 0-arguments constructor. Uses SHA-1 as the default hash.
- */
- public RSAPKCS1V1_5Signature()
- {
- this(Registry.SHA160_HASH);
- }
-
- /**
- * Constructs an instance of this object using the designated message digest
- * algorithm as its underlying hash function.
- *
- * @param mdName the canonical name of the underlying hash function.
- */
- public RSAPKCS1V1_5Signature(final String mdName)
- {
- this(HashFactory.getInstance(mdName));
- }
-
- public RSAPKCS1V1_5Signature(IMessageDigest md)
- {
- super(Registry.RSA_PKCS1_V1_5_SIG, md);
-
- pkcs1 = EMSA_PKCS1_V1_5.getInstance(md.name());
- }
-
- /** Private constructor for cloning purposes. */
- private RSAPKCS1V1_5Signature(final RSAPKCS1V1_5Signature that)
- {
- this(that.md.name());
-
- this.publicKey = that.publicKey;
- this.privateKey = that.privateKey;
- this.md = (IMessageDigest) that.md.clone();
- this.pkcs1 = (EMSA_PKCS1_V1_5) that.pkcs1.clone();
- }
-
- public Object clone()
- {
- return new RSAPKCS1V1_5Signature(this);
- }
-
- protected void setupForVerification(final PublicKey k)
- throws IllegalArgumentException
- {
- if (! (k instanceof RSAPublicKey))
- throw new IllegalArgumentException();
-
- publicKey = k;
- }
-
- protected void setupForSigning(final PrivateKey k)
- throws IllegalArgumentException
- {
- if (! (k instanceof RSAPrivateKey))
- throw new IllegalArgumentException();
-
- privateKey = k;
- }
-
- protected Object generateSignature() throws IllegalStateException
- {
- // 1. EMSA-PKCS1-v1_5 encoding: Apply the EMSA-PKCS1-v1_5 encoding
- // operation (Section 9.2) to the message M to produce an encoded
- // message EM of length k octets:
- //
- // EM = EMSA-PKCS1-V1_5-ENCODE (M, k).
- //
- // If the encoding operation outputs "message too long," output
- // "message too long" and stop. If the encoding operation outputs
- // "intended encoded message length too short," output "RSA modulus
- // too short" and stop.
- final int modBits = ((RSAPrivateKey) privateKey).getModulus().bitLength();
- final int k = (modBits + 7) / 8;
- final byte[] EM = pkcs1.encode(md.digest(), k);
- // 2. RSA signature:
- // a. Convert the encoded message EM to an integer message epresentative
- // m (see Section 4.2): m = OS2IP (EM).
- final BigInteger m = new BigInteger(1, EM);
- // b. Apply the RSASP1 signature primitive (Section 5.2.1) to the RSA
- // private key K and the message representative m to produce an
- // integer signature representative s: s = RSASP1 (K, m).
- final BigInteger s = RSA.sign(privateKey, m);
- // c. Convert the signature representative s to a signature S of length
- // k octets (see Section 4.1): S = I2OSP (s, k).
- // 3. Output the signature S.
- return RSA.I2OSP(s, k);
- }
-
- protected boolean verifySignature(final Object sig)
- throws IllegalStateException
- {
- if (publicKey == null)
- throw new IllegalStateException();
- final byte[] S = (byte[]) sig;
- // 1. Length checking: If the length of the signature S is not k octets,
- // output "invalid signature" and stop.
- final int modBits = ((RSAPublicKey) publicKey).getModulus().bitLength();
- final int k = (modBits + 7) / 8;
- if (S.length != k)
- return false;
- // 2. RSA verification:
- // a. Convert the signature S to an integer signature representative
- // s (see Section 4.2): s = OS2IP (S).
- final BigInteger s = new BigInteger(1, S);
- // b. Apply the RSAVP1 verification primitive (Section 5.2.2) to the
- // RSA public key (n, e) and the signature representative s to
- // produce an integer message representative m:
- // m = RSAVP1 ((n, e), s).
- // If RSAVP1 outputs "signature representative out of range,"
- // output "invalid signature" and stop.
- final BigInteger m;
- try
- {
- m = RSA.verify(publicKey, s);
- }
- catch (IllegalArgumentException x)
- {
- return false;
- }
- // c. Convert the message representative m to an encoded message EM
- // of length k octets (see Section 4.1): EM = I2OSP (m, k).
- // If I2OSP outputs "integer too large," output "invalid signature"
- // and stop.
- final byte[] EM;
- try
- {
- EM = RSA.I2OSP(m, k);
- }
- catch (IllegalArgumentException x)
- {
- return false;
- }
- // 3. EMSA-PKCS1-v1_5 encoding: Apply the EMSA-PKCS1-v1_5 encoding
- // operation (Section 9.2) to the message M to produce a second
- // encoded message EM' of length k octets:
- // EM' = EMSA-PKCS1-V1_5-ENCODE (M, k).
- // If the encoding operation outputs "message too long," output
- // "message too long" and stop. If the encoding operation outputs
- // "intended encoded message length too short," output "RSA modulus
- // too short" and stop.
- final byte[] EMp = pkcs1.encode(md.digest(), k);
- // 4. Compare the encoded message EM and the second encoded message EM'.
- // If they are the same, output "valid signature"; otherwise, output
- // "invalid signature."
- return Arrays.equals(EM, EMp);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureRawCodec.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureRawCodec.java
deleted file mode 100644
index 548dc3d..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureRawCodec.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/* RSAPKCS1V1_5SignatureRawCodec.java -- Raw RSA PKCS1 v1.5 signature codeec
- 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.sig.rsa;
-
-import java.io.ByteArrayOutputStream;
-
-import gnu.java.security.Registry;
-import gnu.java.security.sig.ISignatureCodec;
-
-/**
- * An object that implements the {@link ISignatureCodec} operations for the
- * <i>Raw</i> format to use with RSA-PKCS#1 v1.5 signatures.
- */
-public class RSAPKCS1V1_5SignatureRawCodec
- implements ISignatureCodec
-{
- public int getFormatID()
- {
- return RAW_FORMAT;
- }
-
- /**
- * Returns the encoded form of the designated RSA-PKCS#1 (v1.5) signature
- * object according to the <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for such a signature, in this implementation, is a
- * byte sequence consisting of the following:
- * <p>
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE},
- * <li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the RSA-PKCS#1 (v1.5)
- * signature bytes in internet order,</li>
- * <li>the RSA-PKCS#1 (v1.5) signature bytes in internet order.</li>
- * </ol>
- *
- * @param signature the signature to encode, consisting of the output of the
- * <code>sign()</code> method of a {@link RSAPKCS1V1_5Signature}
- * instance --a byte array.
- * @return the <i>Raw</i> format encoding of the designated signature.
- * @exception IllegalArgumentException if the designated signature is not an
- * RSA-PKCS#1 (v1.5) one.
- */
- public byte[] encodeSignature(Object signature)
- {
- byte[] buffer;
- try
- {
- buffer = (byte[]) signature;
- }
- catch (Exception x)
- {
- throw new IllegalArgumentException("Signature/codec mismatch");
- }
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- // magic
- baos.write(Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[0]);
- baos.write(Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[1]);
- baos.write(Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[2]);
- baos.write(Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[3]);
-
- // version
- baos.write(0x01);
-
- // signature bytes
- int length = buffer.length;
- baos.write( length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write( length & 0xFF);
- baos.write(buffer, 0, length);
-
- return baos.toByteArray();
- }
-
- /**
- * Returns the decoded object from a designated input assumed to have been
- * generated by the {@link #encodeSignature(Object)} method.
- *
- * @param input the input bytes of a previously Raw-encoded RSA PKCS1 (v1.5)
- * signature.
- * @return the signature object.
- * @throws IllegalArgumentException if the designated input does not start
- * with the right <i>magic</i> characters, or if the <i>version</i>
- * is not supported.
- */
- public Object decodeSignature(byte[] input)
- {
- // magic
- if (input[0] != Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[0]
- || input[1] != Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[1]
- || input[2] != Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[2]
- || input[3] != Registry.MAGIC_RAW_RSA_PKCS1V1_5_SIGNATURE[3])
- throw new IllegalArgumentException("Signature/codec mismatch");
-
- // version
- if (input[4] != 0x01)
- throw new IllegalArgumentException("Wrong or unsupported format version");
-
- int i = 5;
- int l;
-
- // signature bytes
- l = input[i++] << 24
- | (input[i++] & 0xFF) << 16
- | (input[i++] & 0xFF) << 8
- | (input[i++] & 0xFF);
- byte[] result = new byte[l];
- System.arraycopy(input, i, result, 0, l);
-
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureX509Codec.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureX509Codec.java
deleted file mode 100644
index ee8586f..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5SignatureX509Codec.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/* RSAPSSSignatureX509Codec.java -- X.509 encoder/decoder for RSA 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.sig.rsa;
-
-import gnu.java.security.Registry;
-import gnu.java.security.sig.ISignatureCodec;
-
-import java.security.InvalidParameterException;
-
-/**
- * An implementation of an {@link ISignatureCodec} that knows to encode and
- * decode RSA PKCS1 (v1.5) signatures into the raw bytes which would constitute
- * a DER-encoded form of the ASN.1 structure defined in RFC-2459, and RFC-2313
- * as described in the next paragraphs.
- * <p>
- * Digital signatures when transmitted in an X.509 certificates are encoded
- * in DER (Distinguished Encoding Rules) as a BIT STRING; i.e.
- *
- * <pre>
- * Certificate ::= SEQUENCE {
- * tbsCertificate TBSCertificate,
- * signatureAlgorithm AlgorithmIdentifier,
- * signature BIT STRING
- * }
- * </pre>
- * <p>
- * The output of the encoder, and the input of the decoder, of this codec are
- * then the <i>raw</i> bytes of such a BIT STRING; i.e. not the DER-encoded
- * form itself.
- * <p>
- * Our implementation of the RSA PKCS1 signature algorithm outputs a byte array
- * as the result of generating a digital signature, in accordance with RFC-2313.
- * As a consequence, the encoder and decoder of this codec, simply pass through
- * such a byte array.
- * <p>
- * Client code that needs to build a DER BIT STRING <b>MUST</b> construct such
- * an ASN.1 value. The following is an example of how to do this:
- * <p>
- * <pre>
- * ...
- * import gnu.java.security.der.BitString;
- * import gnu.java.security.der.DER;
- * import gnu.java.security.der.DERValue;
- * ...
- * DERValue bitString = new DERValue(DER.BIT_STRING, new BitString(sigBytes));
- * ...
- * </pre>
- */
-public class RSAPKCS1V1_5SignatureX509Codec
- implements ISignatureCodec
-{
- // default 0-arguments constructor
-
- public int getFormatID()
- {
- return Registry.X509_ENCODING_ID;
- }
-
- /**
- * Encodes an RSA Signature output as a <i>signature</i> BIT STRING as
- * defined in the documentation of this class.
- *
- * @param signature the output of the RSA PKCS1 (v1.5) signature algorithm;
- * i.e. the value returned by the invocation of
- * {@link gnu.java.security.sig.ISignature#sign()} method. In the
- * case of the RSA PKCS1 (v1.5) signature this is an array of bytes.
- * @return the raw bytes of an RSA signature which could be then used as the
- * contents of a BIT STRING as per rfc-2459.
- */
- public byte[] encodeSignature(Object signature)
- {
- byte[] result = (byte[]) signature;
- return result;
- }
-
- /**
- * Decodes a <i>signature</i> as defined in the documentation of this class.
- *
- * @param input the byte array to unmarshall into a valid RSA PKCS1 (v1.5)
- * signature instance; i.e. a byte array. MUST NOT be null.
- * @return an array of raw bytes decoded from the designated input. In the
- * case of RSA PKCS1 (v1.5) this is the same as the input.
- * @throw InvalidParameterException if the <code>input</code> array is null.
- */
- public Object decodeSignature(byte[] input)
- {
- if (input == null)
- throw new InvalidParameterException("Input bytes MUST NOT be null");
-
- return input;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java
deleted file mode 100644
index 7b042f7..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/* RSAPSSSignature.java --
- Copyright (C) 2001, 2002, 2003, 2006, 2010 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.sig.rsa;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.sig.BaseSignature;
-import gnu.java.security.util.Util;
-
-import java.math.BigInteger;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.interfaces.RSAPrivateKey;
-import java.security.interfaces.RSAPublicKey;
-import java.util.logging.Logger;
-
-/**
- * The RSA-PSS signature scheme is a public-key encryption scheme combining the
- * RSA algorithm with the Probabilistic Signature Scheme (PSS) encoding method.
- * <p>
- * The inventors of RSA are Ronald L. Rivest, Adi Shamir, and Leonard Adleman,
- * while the inventors of the PSS encoding method are Mihir Bellare and Phillip
- * Rogaway. During efforts to adopt RSA-PSS into the P1363a standards effort,
- * certain adaptations to the original version of RSA-PSS were made by Mihir
- * Bellare and Phillip Rogaway and also by Burt Kaliski (the editor of IEEE
- * P1363a) to facilitate implementation and integration into existing protocols.
- * <p>
- * References:
- * <ol>
- * <li><a
- * href="http://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/rsa-pss.zip">
- * RSA-PSS Signature Scheme with Appendix, part B.</a><br>
- * Primitive specification and supporting documentation.<br>
- * Jakob Jonsson and Burt Kaliski.</li>
- * </ol>
- */
-public class RSAPSSSignature
- extends BaseSignature
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(RSAPSSSignature.class.getName()) : null;
-
- /** The underlying EMSA-PSS instance for this object. */
- private EMSA_PSS pss;
-
- /** The desired length in octets of the EMSA-PSS salt. */
- private int sLen;
-
- /**
- * Default 0-arguments constructor. Uses SHA-1 as the default hash and a
- * 0-octet <i>salt</i>.
- */
- public RSAPSSSignature()
- {
- this(Registry.SHA160_HASH, 0);
- }
-
- /**
- * Constructs an instance of this object using the designated message digest
- * algorithm as its underlying hash function, and having 0-octet <i>salt</i>.
- *
- * @param mdName the canonical name of the underlying hash function.
- */
- public RSAPSSSignature(String mdName)
- {
- this(mdName, 0);
- }
-
- /**
- * Constructs an instance of this object using the designated message digest
- * algorithm as its underlying hash function.
- *
- * @param mdName the canonical name of the underlying hash function.
- * @param sLen the desired length in octets of the salt to use for encoding /
- * decoding signatures.
- */
- public RSAPSSSignature(String mdName, int sLen)
- {
- this(HashFactory.getInstance(mdName), sLen);
- }
-
- public RSAPSSSignature(IMessageDigest md, int sLen)
- {
- super(Registry.RSA_PSS_SIG, md);
-
- pss = EMSA_PSS.getInstance(md.name());
- this.sLen = sLen;
- }
-
- /** Private constructor for cloning purposes. */
- private RSAPSSSignature(RSAPSSSignature that)
- {
- this(that.md.name(), that.sLen);
-
- this.publicKey = that.publicKey;
- this.privateKey = that.privateKey;
- this.md = (IMessageDigest) that.md.clone();
- this.pss = (EMSA_PSS) that.pss.clone();
- }
-
- public Object clone()
- {
- return new RSAPSSSignature(this);
- }
-
- protected void setupForVerification(PublicKey k)
- throws IllegalArgumentException
- {
- if (! (k instanceof RSAPublicKey))
- throw new IllegalArgumentException();
-
- publicKey = (RSAPublicKey) k;
- }
-
- protected void setupForSigning(PrivateKey k) throws IllegalArgumentException
- {
- if (! (k instanceof RSAPrivateKey))
- throw new IllegalArgumentException();
-
- privateKey = (RSAPrivateKey) k;
- }
-
- protected Object generateSignature() throws IllegalStateException
- {
- // 1. Apply the EMSA-PSS encoding operation to the message M to produce an
- // encoded message EM of length CEILING((modBits ? 1)/8) octets such
- // that the bit length of the integer OS2IP(EM) is at most modBits ? 1:
- // EM = EMSA-PSS-Encode(M,modBits ? 1).
- // Note that the octet length of EM will be one less than k if
- // modBits ? 1 is divisible by 8. If the encoding operation outputs
- // 'message too long' or 'encoding error,' then output 'message too
- // long' or 'encoding error' and stop.
- int modBits = ((RSAPrivateKey) privateKey).getModulus().bitLength();
- byte[] salt = new byte[sLen];
- this.nextRandomBytes(salt);
- byte[] EM = pss.encode(md.digest(), modBits - 1, salt);
- if (Configuration.DEBUG)
- log.fine("EM (sign): " + Util.toString(EM));
- // 2. Convert the encoded message EM to an integer message representative
- // m (see Section 1.2.2): m = OS2IP(EM).
- BigInteger m = new BigInteger(1, EM);
- // 3. Apply the RSASP signature primitive to the public key K and the
- // message representative m to produce an integer signature
- // representative s: s = RSASP(K,m).
- BigInteger s = RSA.sign(privateKey, m);
- // 4. Convert the signature representative s to a signature S of length k
- // octets (see Section 1.2.1): S = I2OSP(s, k).
- // 5. Output the signature S.
- int k = (modBits + 7) / 8;
- // return encodeSignature(s, k);
- return RSA.I2OSP(s, k);
- }
-
- protected boolean verifySignature(Object sig) throws IllegalStateException
- {
- if (publicKey == null)
- throw new IllegalStateException();
- // byte[] S = decodeSignature(sig);
- byte[] S = (byte[]) sig;
- // 1. If the length of the signature S is not k octets, output 'signature
- // invalid' and stop.
- int modBits = ((RSAPublicKey) publicKey).getModulus().bitLength();
- int k = (modBits + 7) / 8;
- if (S.length != k)
- return false;
- // 2. Convert the signature S to an integer signature representative s:
- // s = OS2IP(S).
- BigInteger s = new BigInteger(1, S);
- // 3. Apply the RSAVP verification primitive to the public key (n, e) and
- // the signature representative s to produce an integer message
- // representative m: m = RSAVP((n, e), s).
- // If RSAVP outputs 'signature representative out of range,' then
- // output 'signature invalid' and stop.
- BigInteger m = null;
- try
- {
- m = RSA.verify(publicKey, s);
- }
- catch (IllegalArgumentException x)
- {
- return false;
- }
- // 4. Convert the message representative m to an encoded message EM of
- // length emLen = CEILING((modBits - 1)/8) octets, where modBits is
- // equal to the bit length of the modulus: EM = I2OSP(m, emLen).
- // Note that emLen will be one less than k if modBits - 1 is divisible
- // by 8. If I2OSP outputs 'integer too large,' then output 'signature
- // invalid' and stop.
- int emBits = modBits - 1;
- int emLen = (emBits + 7) / 8;
- byte[] EM = m.toByteArray();
- if (Configuration.DEBUG)
- log.fine("EM (verify): " + Util.toString(EM));
- if (EM.length > emLen)
- return false;
- else if (EM.length < emLen)
- {
- byte[] newEM = new byte[emLen];
- System.arraycopy(EM, 0, newEM, emLen - EM.length, EM.length);
- EM = newEM;
- }
- // 5. Apply the EMSA-PSS decoding operation to the message M and the
- // encoded message EM: Result = EMSA-PSS-Decode(M, EM, emBits). If
- // Result = 'consistent,' output 'signature verified.' Otherwise,
- // output 'signature invalid.'
- byte[] mHash = md.digest();
- boolean result = false;
- try
- {
- result = pss.decode(mHash, EM, emBits, sLen);
- }
- catch (IllegalArgumentException x)
- {
- result = false;
- }
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java
deleted file mode 100644
index b147ea3..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/* RSAPSSSignatureRawCodec.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.sig.rsa;
-
-import gnu.java.security.Registry;
-import gnu.java.security.sig.ISignatureCodec;
-
-import java.io.ByteArrayOutputStream;
-
-/**
- * An object that implements the {@link ISignatureCodec} operations for the
- * <i>Raw</i> format to use with RSA-PSS signatures.
- */
-public class RSAPSSSignatureRawCodec
- implements ISignatureCodec
-{
- // implicit 0-arguments constructor
-
- public int getFormatID()
- {
- return RAW_FORMAT;
- }
-
- /**
- * Returns the encoded form of the designated RSA-PSS signature object
- * according to the <i>Raw</i> format supported by this library.
- * <p>
- * The <i>Raw</i> format for an RSA-PSS signature, in this implementation, is
- * a byte sequence consisting of the following:
- * <ol>
- * <li>4-byte magic consisting of the value of the literal
- * {@link Registry#MAGIC_RAW_RSA_PSS_SIGNATURE},
- * <li>
- * <li>1-byte version consisting of the constant: 0x01,</li>
- * <li>4-byte count of following bytes representing the RSA-PSS signature
- * bytes in internet order,</li>
- * <li>the RSA-PSS signature bytes in internet order.</li>
- * </ol>
- *
- * @param signature the signature to encode, consisting of the output of the
- * <code>sign()</code> method of a {@link RSAPSSSignature} instance
- * --a byte array.
- * @return the <i>Raw</i> format encoding of the designated signature.
- * @exception IllegalArgumentException if the designated signature is not an
- * RSA-PSS one.
- */
- public byte[] encodeSignature(Object signature)
- {
- byte[] buffer;
- try
- {
- buffer = (byte[]) signature;
- }
- catch (Exception x)
- {
- throw new IllegalArgumentException("signature");
- }
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // magic
- baos.write(Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[0]);
- baos.write(Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[1]);
- baos.write(Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[2]);
- baos.write(Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[3]);
- // version
- baos.write(0x01);
- // signature bytes
- int length = buffer.length;
- baos.write( length >>> 24);
- baos.write((length >>> 16) & 0xFF);
- baos.write((length >>> 8) & 0xFF);
- baos.write(length & 0xFF);
- baos.write(buffer, 0, length);
- return baos.toByteArray();
- }
-
- public Object decodeSignature(byte[] k)
- {
- // magic
- if (k[0] != Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[0]
- || k[1] != Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[1]
- || k[2] != Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[2]
- || k[3] != Registry.MAGIC_RAW_RSA_PSS_SIGNATURE[3])
- throw new IllegalArgumentException("magic");
- // version
- if (k[4] != 0x01)
- throw new IllegalArgumentException("version");
- int i = 5;
- int l;
- // signature bytes
- l = k[i++] << 24
- | (k[i++] & 0xFF) << 16
- | (k[i++] & 0xFF) << 8
- | (k[i++] & 0xFF);
- byte[] result = new byte[l];
- System.arraycopy(k, i, result, 0, l);
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSASignatureFactory.java b/libjava/classpath/gnu/java/security/sig/rsa/RSASignatureFactory.java
deleted file mode 100644
index ba5121b..0000000
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSASignatureFactory.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/* RSASignatureFactory.java -- A Factory class to instantiate RSA 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.sig.rsa;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import gnu.java.security.Registry;
-import gnu.java.security.hash.HashFactory;
-import gnu.java.security.hash.IMessageDigest;
-import gnu.java.security.sig.ISignature;
-
-/**
- * A Factory class to instantiate RSA Signature classes.
- */
-public class RSASignatureFactory
-{
- private static Set names;
-
- /**
- * Private constructor to enforce usage through Factory (class) methods.
- */
- private RSASignatureFactory()
- {
- super();
- }
-
- /**
- * Returns a new instance of an RSA Signature given its name. The name of an
- * RSA Signature always starts with <code>rsa-</code>, followed by either
- * <code>pss</code> or <code>pkcs1_v1.5</code>. An optional message digest
- * name, to be used with the RSA signature may be specified by appending the
- * hyphen chanaracter <code>-</code> followed by the canonical message digest
- * algorithm name. When no message digest algorithm name is given, SHA-160 is
- * used.
- *
- * @param name the composite RSA signature name.
- * @return a new instance of an RSA Signature algorithm implementation.
- * Returns <code>null</code> if the given name does not correspond to any
- * supported RSA Signature encoding and message digest combination.
- */
- public static final ISignature getInstance(String name)
- {
- if (name == null)
- return null;
-
- name = name.trim();
- if (name.length() == 0)
- return null;
-
- name = name.toLowerCase();
- if (! name.startsWith(Registry.RSA_SIG_PREFIX))
- return null;
-
- name = name.substring(Registry.RSA_SIG_PREFIX.length()).trim();
- if (name.startsWith(Registry.RSA_PSS_ENCODING))
- return getPSSSignature(name);
- else if (name.startsWith(Registry.RSA_PKCS1_V1_5_ENCODING))
- return getPKCS1Signature(name);
- else
- return null;
- }
-
- /**
- * Returns a {@link Set} of names of <i>RSA</i> signatures supported by this
- * <i>Factory</i>.
- *
- * @return a {@link Set} of RSA Signature algorithm names (Strings).
- */
- public static synchronized final Set getNames()
- {
- if (names == null)
- {
- Set hashNames = HashFactory.getNames();
- HashSet hs = new HashSet();
- for (Iterator it = hashNames.iterator(); it.hasNext();)
- {
- String mdName = (String) it.next();
- hs.add(Registry.RSA_PSS_SIG + "-" + mdName);
- }
-
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.MD2_HASH);
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.MD5_HASH);
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA160_HASH);
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA256_HASH);
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA384_HASH);
- hs.add(Registry.RSA_PKCS1_V1_5_SIG + "-" + Registry.SHA512_HASH);
-
- names = Collections.unmodifiableSet(hs);
- }
-
- return names;
- }
-
- private static final ISignature getPSSSignature(String name)
- {
- name = name.substring(Registry.RSA_PSS_ENCODING.length()).trim();
- // remove the hyphen if found at the beginning
- if (name.startsWith("-"))
- name = name.substring(1).trim();
-
- IMessageDigest md;
- if (name.length() == 0)
- md = HashFactory.getInstance(Registry.SHA160_HASH);
- else
- {
- // check if there is such a hash
- md = HashFactory.getInstance(name);
- if (md == null)
- return null;
- }
-
- ISignature result = new RSAPSSSignature(md, 0);
- return result;
- }
-
- private static final ISignature getPKCS1Signature(String name)
- {
- name = name.substring(Registry.RSA_PKCS1_V1_5_ENCODING.length()).trim();
- // remove the hyphen if found at the beginning
- if (name.startsWith("-"))
- name = name.substring(1).trim();
-
- IMessageDigest md;
- if (name.length() == 0)
- md = HashFactory.getInstance(Registry.SHA160_HASH);
- else
- {
- // check if there is such a hash
- md = HashFactory.getInstance(name);
- if (md == null)
- return null;
- }
-
- ISignature result = new RSAPKCS1V1_5Signature(md);
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/ByteArray.java b/libjava/classpath/gnu/java/security/util/ByteArray.java
deleted file mode 100644
index a9b9e5d..0000000
--- a/libjava/classpath/gnu/java/security/util/ByteArray.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ByteArray.java -- wrapper around a byte array, with nice toString output.
- Copyright (C) 2005 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.util;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-public final class ByteArray
-{
- private final byte[] value;
-
- public ByteArray (final byte[] value)
- {
- this.value = value;
- }
-
- public byte[] getValue ()
- {
- return value;
- }
-
- public String toString ()
- {
- StringWriter str = new StringWriter ();
- PrintWriter out = new PrintWriter (str);
- int i = 0;
- int len = value.length;
- while (i < len)
- {
- out.print (formatInt (i, 16, 8));
- out.print (" ");
- int l = Math.min (16, len - i);
- String s = toHexString (value, i, l, ' ');
- out.print (s);
- for (int j = 56 - (56 - s.length ()); j < 56; j++)
- out.print (" ");
- for (int j = 0; j < l; j++)
- {
- byte b = value[i+j];
- if ((b & 0xFF) < 0x20 || (b & 0xFF) > 0x7E)
- out.print (".");
- else
- out.print ((char) (b & 0xFF));
- }
- out.println ();
- i += 16;
- }
- return str.toString ();
- }
-
- public static String toHexString (byte[] buf, int off, int len, char sep)
- {
- CPStringBuilder str = new CPStringBuilder();
- for (int i = 0; i < len; i++)
- {
- str.append (Character.forDigit (buf[i+off] >>> 4 & 0x0F, 16));
- str.append (Character.forDigit (buf[i+off] & 0x0F, 16));
- if (i < len - 1)
- str.append(sep);
- }
- return str.toString();
- }
-
- public static String formatInt (int value, int radix, int len)
- {
- String s = Integer.toString (value, radix);
- CPStringBuilder buf = new CPStringBuilder ();
- for (int j = 0; j < len - s.length(); j++)
- buf.append ("0");
- buf.append (s);
- return buf.toString();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/ByteBufferOutputStream.java b/libjava/classpath/gnu/java/security/util/ByteBufferOutputStream.java
deleted file mode 100644
index 642ccdf..0000000
--- a/libjava/classpath/gnu/java/security/util/ByteBufferOutputStream.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/* ByteBufferOutputStream.java -- output stream with a growable underlying
- byte buffer.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.nio.ByteBuffer;
-
-/**
- * An output stream that writes bytes to a ByteBuffer, which will be resized
- * if more space is needed.
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class ByteBufferOutputStream extends OutputStream
-{
- private ByteBuffer buffer;
-
- public ByteBufferOutputStream()
- {
- this(256);
- }
-
- public ByteBufferOutputStream(int initialCapacity)
- {
- buffer = ByteBuffer.allocate(initialCapacity);
- }
-
- /* (non-Javadoc)
- * @see java.io.OutputStream#write(int)
- */
- public @Override synchronized void write(int b) throws IOException
- {
- if (!buffer.hasRemaining())
- growBuffer();
- buffer.put((byte) b);
- }
-
- public @Override synchronized void write(byte[] b, int offset, int length)
- {
- if (buffer.remaining() < length)
- growBuffer();
- buffer.put(b, offset, length);
- }
-
- public @Override void write(byte[] b)
- {
- write(b, 0, b.length);
- }
-
- /**
- * Get the current state of the buffer. The returned buffer will have
- * its position set to zero, its capacity set to the current limit,
- * and its limit set to its capacity.
- *
- * @return The buffer.
- */
- public ByteBuffer buffer()
- {
- return ((ByteBuffer) buffer.duplicate().flip()).slice();
- }
-
- public String toString()
- {
- return super.toString() + " [ buffer: " + buffer + " ]";
- }
-
- private void growBuffer()
- {
- int newCapacity = buffer.capacity();
- if (newCapacity < 16384) // If the buffer isn't huge yet, double its size
- newCapacity = newCapacity << 1;
- else // Otherwize, increment by a bit.
- newCapacity += 4096;
- ByteBuffer newBuffer = ByteBuffer.allocate(newCapacity);
- buffer.flip();
- newBuffer.put(buffer);
- buffer = newBuffer;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/DerUtil.java b/libjava/classpath/gnu/java/security/util/DerUtil.java
deleted file mode 100644
index 26232ba..0000000
--- a/libjava/classpath/gnu/java/security/util/DerUtil.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* DerUtil.java -- Utility methods for DER read/write operations
- 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.util;
-
-import gnu.java.security.der.DEREncodingException;
-import gnu.java.security.der.DERValue;
-
-import java.math.BigInteger;
-
-/**
- * Utility methods for DER encoding handling.
- */
-public abstract class DerUtil
-{
- public static final void checkIsConstructed(DERValue v, String msg)
- throws DEREncodingException
- {
- if (! v.isConstructed())
- throw new DEREncodingException(msg);
- }
-
- public static final void checkIsBigInteger(DERValue v, String msg)
- throws DEREncodingException
- {
- if (! (v.getValue() instanceof BigInteger))
- throw new DEREncodingException(msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/ExpirableObject.java b/libjava/classpath/gnu/java/security/util/ExpirableObject.java
deleted file mode 100644
index e24af24..0000000
--- a/libjava/classpath/gnu/java/security/util/ExpirableObject.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/* ExpirableObject.java -- an object that is automatically destroyed.
- Copyright (C) 2004, 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.util;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.security.auth.DestroyFailedException;
-import javax.security.auth.Destroyable;
-
-/**
- * The base class for objects with sensitive data that are automatically
- * destroyed after a timeout elapses. On creation, an object that extends this
- * class will automatically be added to a {@link Timer} object that, once a
- * timeout elapses, will automatically call the {@link Destroyable#destroy()}
- * method.
- * <p>
- * Concrete subclasses must implement the {@link #doDestroy()} method instead of
- * {@link Destroyable#destroy()}; the behavior of that method should match
- * exactly the behavior desired of <code>destroy()</code>.
- * <p>
- * Note that if a {@link DestroyFailedException} occurs when the timeout
- * expires, it will not be reported.
- *
- * @see Destroyable
- */
-public abstract class ExpirableObject
- implements Destroyable
-{
- /**
- * The default timeout, used in the default constructor.
- */
- public static final long DEFAULT_TIMEOUT = 3600000L;
-
- /**
- * The timer that expires instances.
- */
- private static final Timer EXPIRER = new Timer(true);
-
- /**
- * A reference to the task that will destroy this object when the timeout
- * expires.
- */
- private final Destroyer destroyer;
-
- /**
- * Create a new expirable object that will expire after one hour.
- */
- protected ExpirableObject()
- {
- this(DEFAULT_TIMEOUT);
- }
-
- /**
- * Create a new expirable object that will expire after the specified timeout.
- *
- * @param delay The delay before expiration.
- * @throws IllegalArgumentException If <i>delay</i> is negative, or if
- * <code>delay + System.currentTimeMillis()</code> is negative.
- */
- protected ExpirableObject(final long delay)
- {
- destroyer = new Destroyer(this);
- EXPIRER.schedule(destroyer, delay);
- }
-
- /**
- * Destroys this object. This method calls {@link #doDestroy}, then, if no
- * exception is thrown, cancels the task that would destroy this object when
- * the timeout is reached.
- *
- * @throws DestroyFailedException If this operation fails.
- */
- public final void destroy() throws DestroyFailedException
- {
- doDestroy();
- destroyer.cancel();
- }
-
- /**
- * Subclasses must implement this method instead of the {@link
- * Destroyable#destroy()} method.
- *
- * @throws DestroyFailedException If this operation fails.
- */
- protected abstract void doDestroy() throws DestroyFailedException;
-
- /**
- * The task that destroys the target when the timeout elapses.
- */
- private final class Destroyer
- extends TimerTask
- {
- private final ExpirableObject target;
-
- Destroyer(final ExpirableObject target)
- {
- super();
- this.target = target;
- }
-
- public void run()
- {
- try
- {
- if (! target.isDestroyed())
- target.doDestroy();
- }
- catch (DestroyFailedException dfe)
- {
- }
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/FormatUtil.java b/libjava/classpath/gnu/java/security/util/FormatUtil.java
deleted file mode 100644
index 35da322..0000000
--- a/libjava/classpath/gnu/java/security/util/FormatUtil.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/* FormatUtil.java -- Encoding and decoding format utility methods
- 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.util;
-
-import gnu.java.security.Registry;
-
-/**
- * Encoding and decoding format utility methods.
- */
-public class FormatUtil
-{
- /** Trivial constructor to enforce Singleton pattern. */
- private FormatUtil()
- {
- super();
- }
-
- /**
- * Returns the fully qualified name of the designated encoding ID.
- *
- * @param formatID the unique identifier of the encoding format.
- * @return the fully qualified name of the designated format. Returns
- * <code>null</code> if no such encoding format is known.
- */
- public static final String getEncodingName(int formatID)
- {
- String result = null;
- switch (formatID)
- {
- case Registry.RAW_ENCODING_ID:
- result = Registry.RAW_ENCODING;
- break;
- case Registry.X509_ENCODING_ID:
- result = Registry.X509_ENCODING;
- break;
- case Registry.PKCS8_ENCODING_ID:
- result = Registry.PKCS8_ENCODING;
- break;
- case Registry.ASN1_ENCODING_ID:
- result = Registry.ASN1_ENCODING;
- break;
- }
-
- return result;
- }
-
- /**
- * Returns the short name of the designated encoding ID. This is used by the
- * JCE Adapters.
- *
- * @param formatID the unique identifier of the encoding format.
- * @return the short name of the designated format. Returns <code>null</code>
- * if no such encoding format is known.
- */
- public static final String getEncodingShortName(int formatID)
- {
- String result = null;
- switch (formatID)
- {
- case Registry.RAW_ENCODING_ID:
- result = Registry.RAW_ENCODING_SHORT_NAME;
- break;
- case Registry.X509_ENCODING_ID:
- result = Registry.X509_ENCODING_SORT_NAME;
- break;
- case Registry.PKCS8_ENCODING_ID:
- result = Registry.PKCS8_ENCODING_SHORT_NAME;
- break;
- case Registry.ASN1_ENCODING_ID:
- result = Registry.ASN1_ENCODING_SHORT_NAME;
- break;
- }
-
- return result;
- }
-
- /**
- * Returns the identifier of the encoding format given its short name.
- *
- * @param name the case-insensitive canonical short name of an encoding
- * format.
- * @return the identifier of the designated encoding format, or <code>0</code>
- * if the name does not correspond to any known format.
- */
- public static final int getFormatID(String name)
- {
- if (name == null)
- return 0;
-
- name = name.trim();
- if (name.length() == 0)
- return 0;
-
- int result = 0;
- if (name.equalsIgnoreCase(Registry.RAW_ENCODING_SHORT_NAME))
- result = Registry.RAW_ENCODING_ID;
- else if (name.equalsIgnoreCase(Registry.X509_ENCODING_SORT_NAME))
- result = Registry.X509_ENCODING_ID;
- else if (name.equalsIgnoreCase(Registry.PKCS8_ENCODING_SHORT_NAME))
- result = Registry.PKCS8_ENCODING_ID;
-
- return result;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/IntegerUtil.java b/libjava/classpath/gnu/java/security/util/IntegerUtil.java
deleted file mode 100644
index 106dc4d..0000000
--- a/libjava/classpath/gnu/java/security/util/IntegerUtil.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/* IntegerUtil.java -- JDK 5 Integer methods with 1.4 API
- 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.util;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Utility class which offers Integer related methods found in RI's version 5
- * but written with RI's 1.4 API.
- */
-public abstract class IntegerUtil
-{
- /** Maximum size of our cache of constructed Integers. */
- private static final int CACHE_SIZE = 100;
- /** LRU (Least Recently Used) cache, of the last accessed 100 Integers. */
- private static final Map cache = new LinkedHashMap(CACHE_SIZE + 1, 0.75F, true)
- {
- public boolean removeEldestEntry(Map.Entry entry)
- {
- return size() > CACHE_SIZE;
- }
- };
-
- /** Trivial private constructor to enforce Singleton usage. */
- private IntegerUtil()
- {
- super();
- }
-
- /**
- * Similar to {@link Integer#valueOf(String)} except it caches the result in
- * a local LRU cache of 100 elements, organized by access order.
- * <p>
- * This method MUST be used in the gnu.java.security and gnu.javax.crypto
- * packages to ensure they would work with a version 1.4 only of the Java
- * class library API.
- *
- * @param aString a string representation of an integer.
- * @return the {@link Integer} object representing the designated string.
- */
- public static final Integer valueOf(String aString)
- {
- Integer result;
- synchronized (cache)
- {
- result = (Integer) cache.get(aString);
- if (result == null)
- {
- result = Integer.valueOf(aString);
- cache.put(aString, result);
- }
- }
- return result;
- }
-
- /**
- * Simulates the <code>valueOf(int)</code> method found in {@link Integer} of
- * the RI's version 1.5 using a local LRU cache of 100 elements, organized by
- * access order.
- * <p>
- * This method MUST be used in the gnu.java.security and gnu.javax.crypto
- * packages to ensure they would work with a version 1.4 only of the Java
- * class library API.
- *
- * @param anInt a decimal integer.
- * @return the {@link Integer} object representing the designated primitive.
- */
- public static final Integer valueOf(int anInt)
- {
- return valueOf(Integer.toString(anInt, 10));
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/PRNG.java b/libjava/classpath/gnu/java/security/util/PRNG.java
deleted file mode 100644
index 1bed04d..0000000
--- a/libjava/classpath/gnu/java/security/util/PRNG.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/* PRNG.java -- A Utility methods for default source of randomness
- 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.util;
-
-import java.util.HashMap;
-
-import gnu.java.security.prng.IRandom;
-import gnu.java.security.prng.LimitReachedException;
-import gnu.java.security.prng.MDGenerator;
-
-/**
- * A useful hash-based (SHA) pseudo-random number generator used throughout this
- * library.
- *
- * @see MDGenerator
- */
-public class PRNG
-{
- /** The underlying {@link IRandom}. */
- private IRandom delegate;
-
- /**
- * Private constructor to enforce using the Factory method.
- *
- * @param delegate the undelying {@link IRandom} object used.
- */
- private PRNG(IRandom delegate)
- {
- super();
-
- this.delegate = delegate;
- }
-
- public static final PRNG getInstance()
- {
- IRandom delegate = new MDGenerator();
- try
- {
- HashMap map = new HashMap();
- // initialise it with a seed
- long t = System.currentTimeMillis();
- byte[] seed = new byte[] {
- (byte)(t >>> 56), (byte)(t >>> 48),
- (byte)(t >>> 40), (byte)(t >>> 32),
- (byte)(t >>> 24), (byte)(t >>> 16),
- (byte)(t >>> 8), (byte) t };
- map.put(MDGenerator.SEEED, seed);
- delegate.init(map); // default is to use SHA-1 hash
- }
- catch (Exception x)
- {
- throw new ExceptionInInitializerError(x);
- }
- return new PRNG(delegate);
- }
-
- /**
- * Completely fills the designated <code>buffer</code> with random data
- * generated by the underlying delegate.
- *
- * @param buffer the place holder of random bytes generated by the underlying
- * delegate. On output, the contents of <code>buffer</code> are
- * replaced with pseudo-random data, iff the <code>buffer</code>
- * size is not zero.
- */
- public void nextBytes(byte[] buffer)
- {
- nextBytes(buffer, 0, buffer.length);
- }
-
- /**
- * Fills the designated <code>buffer</code>, starting from byte at position
- * <code>offset</code> with, at most, <code>length</code> bytes of random
- * data generated by the underlying delegate.
- *
- * @see IRandom#nextBytes
- */
- public void nextBytes(byte[] buffer, int offset, int length)
- {
- try
- {
- delegate.nextBytes(buffer, offset, length);
- }
- catch (LimitReachedException x) // re-initialise with a seed
- {
- try
- {
- HashMap map = new HashMap();
- long t = System.currentTimeMillis();
- byte[] seed = new byte[] {
- (byte)(t >>> 56), (byte)(t >>> 48),
- (byte)(t >>> 40), (byte)(t >>> 32),
- (byte)(t >>> 24), (byte)(t >>> 16),
- (byte)(t >>> 8), (byte) t };
- map.put(MDGenerator.SEEED, seed);
- delegate.init(map); // default is to use SHA-1 hash
- delegate.nextBytes(buffer, offset, length);
- }
- catch (Exception y)
- {
- throw new ExceptionInInitializerError(y);
- }
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/Prime.java b/libjava/classpath/gnu/java/security/util/Prime.java
deleted file mode 100644
index 82c584f..0000000
--- a/libjava/classpath/gnu/java/security/util/Prime.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Prime.java --- Prime number generation utilities
- Copyright (C) 1999, 2004 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.util;
-import java.math.BigInteger;
-import java.util.Random;
-//import java.security.SecureRandom;
-
-public final class Prime
-{
-
- /*
- See IEEE P1363 A.15.4 (10/05/98 Draft)
- */
- public static BigInteger generateRandomPrime( int pmin, int pmax, BigInteger f )
- {
- BigInteger d;
-
- //Step 1 - generate prime
- BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );
- if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmin ) ) <= 0 )
- {
- p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin ).subtract( p ) );
- }
-
- //Step 2 - test for even
- if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
- p = p.add( BigInteger.valueOf( 1 ) );
-
- for(;;)
- {
- //Step 3
- if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmax)) > 0)
- {
- //Step 3.1
- p = p.subtract( BigInteger.valueOf( 1 ).shiftLeft( pmax) );
- p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin) );
- p = p.subtract( BigInteger.valueOf( 1 ) );
-
- //Step 3.2
- // put step 2 code here so looping code is cleaner
- //Step 2 - test for even
- if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
- p = p.add( BigInteger.valueOf( 1 ) );
- continue;
- }
-
- //Step 4 - compute GCD
- d = p.subtract( BigInteger.valueOf(1) );
- d = d.gcd( f );
-
- //Step 5 - test d
- if( d.compareTo( BigInteger.valueOf( 1 ) ) == 0)
- {
- //Step 5.1 - test primality
- if( p.isProbablePrime( 1 ) == true )
- {
- //Step 5.2;
- return p;
- }
- }
- //Step 6
- p = p.add( BigInteger.valueOf( 2 ) );
-
- //Step 7
- }
- }
-
-
- /*
- See IEEE P1363 A.15.5 (10/05/98 Draft)
- */
- public static BigInteger generateRandomPrime( BigInteger r, BigInteger a, int pmin, int pmax, BigInteger f )
- {
- BigInteger d, w;
-
- //Step 1 - generate prime
- BigInteger p = new BigInteger( (pmax + pmin)/2, new Random() );
-
- steptwo:{ //Step 2
- w = p.mod( r.multiply( BigInteger.valueOf(2) ));
-
- //Step 3
- p = p.add( r.multiply( BigInteger.valueOf(2) ) );
- p = p.subtract( w );
- p = p.add(a);
-
- //Step 4 - test for even
- if( p.mod( BigInteger.valueOf(2) ).compareTo( BigInteger.valueOf( 0 )) == 0)
- p = p.add( r );
-
- for(;;)
- {
- //Step 5
- if( p.compareTo( BigInteger.valueOf( 1 ).shiftLeft( pmax)) > 0)
- {
- //Step 5.1
- p = p.subtract( BigInteger.valueOf( 1 ).shiftLeft( pmax) );
- p = p.add( BigInteger.valueOf( 1 ).shiftLeft( pmin) );
- p = p.subtract( BigInteger.valueOf( 1 ) );
-
- //Step 5.2 - goto to Step 2
- break steptwo;
- }
-
- //Step 6
- d = p.subtract( BigInteger.valueOf(1) );
- d = d.gcd( f );
-
- //Step 7 - test d
- if( d.compareTo( BigInteger.valueOf( 1 ) ) == 0)
- {
- //Step 7.1 - test primality
- if( p.isProbablePrime( 1 ) == true )
- {
- //Step 7.2;
- return p;
- }
- }
- //Step 8
- p = p.add( r.multiply( BigInteger.valueOf(2) ) );
-
- //Step 9
- }
- }
- //Should never reach here but makes the compiler happy
- return BigInteger.valueOf(0);
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/Sequence.java b/libjava/classpath/gnu/java/security/util/Sequence.java
deleted file mode 100644
index 63086d2..0000000
--- a/libjava/classpath/gnu/java/security/util/Sequence.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Sequence.java -- a sequence of integers.
- Copyright (C) 2004, 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.util;
-
-import java.util.AbstractList;
-import java.util.LinkedList;
-
-/**
- * A monotonic sequence of integers in the finite field 2<sup>32</sup>.
- */
-public final class Sequence
- extends AbstractList
-{
- private final Integer[] sequence;
-
- /**
- * Create a sequence of integers from 0 to <i>end</i>, with an increment of
- * 1. If <i>end</i> is less than 0, then the sequence will wrap around
- * through all positive integers then negative integers until the end value is
- * reached. Naturally, this will result in an enormous object, so don't do
- * this.
- *
- * @param end The ending value.
- */
- public Sequence(int end)
- {
- this(0, end, 1);
- }
-
- /**
- * Create a sequence of integers from <i>start</i> to <i>end</i>, with an
- * increment of 1. If <i>end</i> is less than <i>start</i>, then the
- * sequence will wrap around until the end value is reached. Naturally, this
- * will result in an enormous object, so don't do this.
- *
- * @param start The starting value.
- * @param end The ending value.
- */
- public Sequence(int start, int end)
- {
- this(start, end, 1);
- }
-
- /**
- * Create a sequence of integers from <i>start</i> to <i>end</i>, with an
- * increment of <i>span</i>. If <i>end</i> is less than <i>start</i>, then
- * the sequence will wrap around until the end value is reached. Naturally,
- * this will result in an enormous object, so don't do this.
- * <p>
- * <i>span</i> can be negative, resulting in a decresing sequence.
- * <p>
- * If <i>span</i> is 0, then the sequence will contain {<i>start</i>,
- * <i>end</i>} if <i>start</i> != <i>end</i>, or just the singleton
- * <i>start</i> if <i>start</i> == <i>end</i>.
- *
- * @param start The starting value.
- * @param end The ending value.
- * @param span The increment value.
- */
- public Sequence(int start, int end, int span)
- {
- if (span == 0)
- {
- if (start != end)
- sequence = new Integer[] { Integer.valueOf(start),
- Integer.valueOf(end) };
- else
- sequence = new Integer[] { Integer.valueOf(start) };
- }
- else
- {
- LinkedList l = new LinkedList();
- for (int i = start; i != end; i += span)
- l.add(Integer.valueOf(i));
-
- l.add(Integer.valueOf(end));
- sequence = (Integer[]) l.toArray(new Integer[l.size()]);
- }
- }
-
- public Object get(int index)
- {
- if (index < 0 || index >= size())
- throw new IndexOutOfBoundsException("index=" + index + ", size=" + size());
- return sequence[index];
- }
-
- public int size()
- {
- return sequence.length;
- }
-
- public Object[] toArray()
- {
- return (Object[]) sequence.clone();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/SimpleList.java b/libjava/classpath/gnu/java/security/util/SimpleList.java
deleted file mode 100644
index 15d54c9..0000000
--- a/libjava/classpath/gnu/java/security/util/SimpleList.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/* SimpleList.java -- simple way to make tuples.
- Copyright (C) 2004, 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.util;
-
-import java.util.AbstractList;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * A simple way to create immutable n-tuples. This class can be created with up
- * to four elements specified via one of the constructors, or with a collection
- * of arbitrary size.
- */
-public final class SimpleList
- extends AbstractList
-{
- private final Object[] elements;
-
- /**
- * Create a singleton list.
- *
- * @param element The first element.
- */
- public SimpleList(final Object element)
- {
- elements = new Object[1];
- elements[0] = element;
- }
-
- /**
- * Create an ordered pair (2-tuple).
- *
- * @param e1 The first element.
- * @param e2 The second element.
- */
- public SimpleList(final Object e1, final Object e2)
- {
- elements = new Object[2];
- elements[0] = e1;
- elements[1] = e2;
- }
-
- /**
- * Create a 3-tuple.
- *
- * @param e1 The first element.
- * @param e2 The second element.
- * @param e3 The third element.
- */
- public SimpleList(final Object e1, final Object e2, final Object e3)
- {
- elements = new Object[3];
- elements[0] = e1;
- elements[1] = e2;
- elements[2] = e3;
- }
-
- /**
- * Create a 4-tuple.
- *
- * @param e1 The first element.
- * @param e2 The second element.
- * @param e3 The third element.
- * @param e4 The fourth element.
- */
- public SimpleList(final Object e1, final Object e2, final Object e3,
- final Object e4)
- {
- elements = new Object[4];
- elements[0] = e1;
- elements[1] = e2;
- elements[2] = e3;
- elements[3] = e4;
- }
-
- /**
- * Create the empty list.
- */
- public SimpleList()
- {
- elements = null;
- }
-
- /**
- * Create an n-tuple of arbitrary size. Even if the supplied collection has no
- * natural order, the created n-tuple will have the order that the elements
- * are returned by the collection's iterator.
- *
- * @param c The collection.
- */
- public SimpleList(Collection c)
- {
- elements = new Object[c.size()];
- int i = 0;
- for (Iterator it = c.iterator(); it.hasNext() && i < elements.length;)
- elements[i++] = it.next();
- }
-
- public int size()
- {
- if (elements == null)
- return 0;
- return elements.length;
- }
-
- public Object get(int index)
- {
- if (elements == null)
- throw new IndexOutOfBoundsException("list is empty");
- if (index < 0 || index >= elements.length)
- throw new IndexOutOfBoundsException("index=" + index + ", size=" + size());
- return elements[index];
- }
-
- public String toString()
- {
- return SimpleList.class.getName() + "(" + size() + ") " + super.toString();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/Util.java b/libjava/classpath/gnu/java/security/util/Util.java
deleted file mode 100644
index ef3d480..0000000
--- a/libjava/classpath/gnu/java/security/util/Util.java
+++ /dev/null
@@ -1,629 +0,0 @@
-/* Util.java -- various utility routines.
- 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.util;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.math.BigInteger;
-
-/**
- * A collection of utility methods used throughout this project.
- */
-public class Util
-{
- // Hex charset
- private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
-
- // Base-64 charset
- private static final String BASE64_CHARS =
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
-
- private static final char[] BASE64_CHARSET = BASE64_CHARS.toCharArray();
-
- /** Trivial constructor to enforce Singleton pattern. */
- private Util()
- {
- super();
- }
-
- /**
- * Returns a string of hexadecimal digits from a byte array. Each byte is
- * converted to 2 hex symbols; zero(es) included.
- * <p>
- * This method calls the method with same name and three arguments as:
- * <pre>
- * toString(ba, 0, ba.length);
- * </pre>
- *
- * @param ba the byte array to convert.
- * @return a string of hexadecimal characters (two for each byte) representing
- * the designated input byte array.
- */
- public static String toString(byte[] ba)
- {
- return toString(ba, 0, ba.length);
- }
-
- /**
- * Returns a string of hexadecimal digits from a byte array, starting at
- * <code>offset</code> and consisting of <code>length</code> bytes. Each
- * byte is converted to 2 hex symbols; zero(es) included.
- *
- * @param ba the byte array to convert.
- * @param offset the index from which to start considering the bytes to
- * convert.
- * @param length the count of bytes, starting from the designated offset to
- * convert.
- * @return a string of hexadecimal characters (two for each byte) representing
- * the designated input byte sub-array.
- */
- public static final String toString(byte[] ba, int offset, int length)
- {
- char[] buf = new char[length * 2];
- for (int i = 0, j = 0, k; i < length;)
- {
- k = ba[offset + i++];
- buf[j++] = HEX_DIGITS[(k >>> 4) & 0x0F];
- buf[j++] = HEX_DIGITS[ k & 0x0F];
- }
- return new String(buf);
- }
-
- /**
- * Returns a string of hexadecimal digits from a byte array. Each byte is
- * converted to 2 hex symbols; zero(es) included. The argument is treated as a
- * large little-endian integer and is returned as a large big-endian integer.
- * <p>
- * This method calls the method with same name and three arguments as:
- * <pre>
- * toReversedString(ba, 0, ba.length);
- * </pre>
- *
- * @param ba the byte array to convert.
- * @return a string of hexadecimal characters (two for each byte) representing
- * the designated input byte array.
- */
- public static String toReversedString(byte[] ba)
- {
- return toReversedString(ba, 0, ba.length);
- }
-
- /**
- * Returns a string of hexadecimal digits from a byte array, starting at
- * <code>offset</code> and consisting of <code>length</code> bytes. Each
- * byte is converted to 2 hex symbols; zero(es) included.
- * <p>
- * The byte array is treated as a large little-endian integer, and is returned
- * as a large big-endian integer.
- *
- * @param ba the byte array to convert.
- * @param offset the index from which to start considering the bytes to
- * convert.
- * @param length the count of bytes, starting from the designated offset to
- * convert.
- * @return a string of hexadecimal characters (two for each byte) representing
- * the designated input byte sub-array.
- */
- public static final String toReversedString(byte[] ba, int offset, int length)
- {
- char[] buf = new char[length * 2];
- for (int i = offset + length - 1, j = 0, k; i >= offset;)
- {
- k = ba[offset + i--];
- buf[j++] = HEX_DIGITS[(k >>> 4) & 0x0F];
- buf[j++] = HEX_DIGITS[ k & 0x0F];
- }
- return new String(buf);
- }
-
- /**
- * <p>
- * Returns a byte array from a string of hexadecimal digits.
- * </p>
- *
- * @param s a string of hexadecimal ASCII characters
- * @return the decoded byte array from the input hexadecimal string.
- */
- public static byte[] toBytesFromString(String s)
- {
- int limit = s.length();
- byte[] result = new byte[((limit + 1) / 2)];
- int i = 0, j = 0;
- if ((limit % 2) == 1)
- result[j++] = (byte) fromDigit(s.charAt(i++));
- while (i < limit)
- {
- result[j ] = (byte) (fromDigit(s.charAt(i++)) << 4);
- result[j++] |= (byte) fromDigit(s.charAt(i++));
- }
- return result;
- }
-
- /**
- * Returns a byte array from a string of hexadecimal digits, interpreting them
- * as a large big-endian integer and returning it as a large little-endian
- * integer.
- *
- * @param s a string of hexadecimal ASCII characters
- * @return the decoded byte array from the input hexadecimal string.
- */
- public static byte[] toReversedBytesFromString(String s)
- {
- int limit = s.length();
- byte[] result = new byte[((limit + 1) / 2)];
- int i = 0;
- if ((limit % 2) == 1)
- result[i++] = (byte) fromDigit(s.charAt(--limit));
- while (limit > 0)
- {
- result[i ] = (byte) fromDigit(s.charAt(--limit));
- result[i++] |= (byte) (fromDigit(s.charAt(--limit)) << 4);
- }
- return result;
- }
-
- /**
- * Returns a number from <code>0</code> to <code>15</code> corresponding
- * to the designated hexadecimal digit.
- *
- * @param c a hexadecimal ASCII symbol.
- */
- public static int fromDigit(char c)
- {
- if (c >= '0' && c <= '9')
- return c - '0';
- else if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- else if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- else
- throw new IllegalArgumentException("Invalid hexadecimal digit: " + c);
- }
-
- /**
- * Returns a string of 8 hexadecimal digits (most significant digit first)
- * corresponding to the unsigned integer <code>n</code>.
- *
- * @param n the unsigned integer to convert.
- * @return a hexadecimal string 8-character long.
- */
- public static String toString(int n)
- {
- char[] buf = new char[8];
- for (int i = 7; i >= 0; i--)
- {
- buf[i] = HEX_DIGITS[n & 0x0F];
- n >>>= 4;
- }
- return new String(buf);
- }
-
- /**
- * Returns a string of hexadecimal digits from an integer array. Each int is
- * converted to 4 hex symbols.
- */
- public static String toString(int[] ia)
- {
- int length = ia.length;
- char[] buf = new char[length * 8];
- for (int i = 0, j = 0, k; i < length; i++)
- {
- k = ia[i];
- buf[j++] = HEX_DIGITS[(k >>> 28) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 24) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 20) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 16) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 12) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 8) & 0x0F];
- buf[j++] = HEX_DIGITS[(k >>> 4) & 0x0F];
- buf[j++] = HEX_DIGITS[ k & 0x0F];
- }
- return new String(buf);
- }
-
- /**
- * Returns a string of 16 hexadecimal digits (most significant digit first)
- * corresponding to the unsigned long <code>n</code>.
- *
- * @param n the unsigned long to convert.
- * @return a hexadecimal string 16-character long.
- */
- public static String toString(long n)
- {
- char[] b = new char[16];
- for (int i = 15; i >= 0; i--)
- {
- b[i] = HEX_DIGITS[(int)(n & 0x0FL)];
- n >>>= 4;
- }
- return new String(b);
- }
-
- /**
- * Similar to the <code>toString()</code> method except that the Unicode
- * escape character is inserted before every pair of bytes. Useful to
- * externalise byte arrays that will be constructed later from such strings;
- * eg. s-box values.
- *
- * @throws ArrayIndexOutOfBoundsException if the length is odd.
- */
- public static String toUnicodeString(byte[] ba)
- {
- return toUnicodeString(ba, 0, ba.length);
- }
-
- /**
- * Similar to the <code>toString()</code> method except that the Unicode
- * escape character is inserted before every pair of bytes. Useful to
- * externalise byte arrays that will be constructed later from such strings;
- * eg. s-box values.
- *
- * @throws ArrayIndexOutOfBoundsException if the length is odd.
- */
- public static final String toUnicodeString(byte[] ba, int offset, int length)
- {
- CPStringBuilder sb = new CPStringBuilder();
- int i = 0;
- int j = 0;
- int k;
- sb.append('\n').append("\"");
- while (i < length)
- {
- sb.append("\\u");
- k = ba[offset + i++];
- sb.append(HEX_DIGITS[(k >>> 4) & 0x0F]);
- sb.append(HEX_DIGITS[ k & 0x0F]);
- k = ba[offset + i++];
- sb.append(HEX_DIGITS[(k >>> 4) & 0x0F]);
- sb.append(HEX_DIGITS[ k & 0x0F]);
- if ((++j % 8) == 0)
- sb.append("\"+").append('\n').append("\"");
- }
- sb.append("\"").append('\n');
- return sb.toString();
- }
-
- /**
- * Similar to the <code>toString()</code> method except that the Unicode
- * escape character is inserted before every pair of bytes. Useful to
- * externalise integer arrays that will be constructed later from such
- * strings; eg. s-box values.
- *
- * @throws ArrayIndexOutOfBoundsException if the length is not a multiple of
- * 4.
- */
- public static String toUnicodeString(int[] ia)
- {
- CPStringBuilder sb = new CPStringBuilder();
- int i = 0;
- int j = 0;
- int k;
- sb.append('\n').append("\"");
- while (i < ia.length)
- {
- k = ia[i++];
- sb.append("\\u");
- sb.append(HEX_DIGITS[(k >>> 28) & 0x0F]);
- sb.append(HEX_DIGITS[(k >>> 24) & 0x0F]);
- sb.append(HEX_DIGITS[(k >>> 20) & 0x0F]);
- sb.append(HEX_DIGITS[(k >>> 16) & 0x0F]);
- sb.append("\\u");
- sb.append(HEX_DIGITS[(k >>> 12) & 0x0F]);
- sb.append(HEX_DIGITS[(k >>> 8) & 0x0F]);
- sb.append(HEX_DIGITS[(k >>> 4) & 0x0F]);
- sb.append(HEX_DIGITS[ k & 0x0F]);
- if ((++j % 4) == 0)
- sb.append("\"+").append('\n').append("\"");
- }
- sb.append("\"").append('\n');
- return sb.toString();
- }
-
- public static byte[] toBytesFromUnicode(String s)
- {
- int limit = s.length() * 2;
- byte[] result = new byte[limit];
- char c;
- for (int i = 0; i < limit; i++)
- {
- c = s.charAt(i >>> 1);
- result[i] = (byte)(((i & 1) == 0) ? c >>> 8 : c);
- }
- return result;
- }
-
- /**
- * Dumps a byte array as a string, in a format that is easy to read for
- * debugging. The string <code>m</code> is prepended to the start of each
- * line.
- * <p>
- * If <code>offset</code> and <code>length</code> are omitted, the whole
- * array is used. If <code>m</code> is omitted, nothing is prepended to each
- * line.
- *
- * @param data the byte array to be dumped.
- * @param offset the offset within <i>data</i> to start from.
- * @param length the number of bytes to dump.
- * @param m a string to be prepended to each line.
- * @return a string containing the result.
- */
- public static String dumpString(byte[] data, int offset, int length, String m)
- {
- if (data == null)
- return m + "null\n";
- CPStringBuilder sb = new CPStringBuilder(length * 3);
- if (length > 32)
- sb.append(m).append("Hexadecimal dump of ")
- .append(length).append(" bytes...\n");
- // each line will list 32 bytes in 4 groups of 8 each
- int end = offset + length;
- String s;
- int l = Integer.toString(length).length();
- if (l < 4)
- l = 4;
- for (; offset < end; offset += 32)
- {
- if (length > 32)
- {
- s = " " + offset;
- sb.append(m).append(s.substring(s.length() - l)).append(": ");
- }
- int i = 0;
- for (; i < 32 && offset + i + 7 < end; i += 8)
- sb.append(toString(data, offset + i, 8)).append(' ');
- if (i < 32)
- for (; i < 32 && offset + i < end; i++)
- sb.append(byteToString(data[offset + i]));
- sb.append('\n');
- }
- return sb.toString();
- }
-
- public static String dumpString(byte[] data)
- {
- return (data == null) ? "null\n" : dumpString(data, 0, data.length, "");
- }
-
- public static String dumpString(byte[] data, String m)
- {
- return (data == null) ? "null\n" : dumpString(data, 0, data.length, m);
- }
-
- public static String dumpString(byte[] data, int offset, int length)
- {
- return dumpString(data, offset, length, "");
- }
-
- /**
- * Returns a string of 2 hexadecimal digits (most significant digit first)
- * corresponding to the lowest 8 bits of <code>n</code>.
- *
- * @param n the byte value to convert.
- * @return a string of 2 hex characters representing the input.
- */
- public static String byteToString(int n)
- {
- char[] buf = { HEX_DIGITS[(n >>> 4) & 0x0F], HEX_DIGITS[n & 0x0F] };
- return new String(buf);
- }
-
- /**
- * Converts a designated byte array to a Base-64 representation, with the
- * exceptions that (a) leading 0-byte(s) are ignored, and (b) the character
- * '.' (dot) shall be used instead of "+' (plus).
- * <p>
- * Used by SASL password file manipulation primitives.
- *
- * @param buffer an arbitrary sequence of bytes to represent in Base-64.
- * @return unpadded (without the '=' character(s)) Base-64 representation of
- * the input.
- */
- public static final String toBase64(byte[] buffer)
- {
- int len = buffer.length, pos = len % 3;
- byte b0 = 0, b1 = 0, b2 = 0;
- switch (pos)
- {
- case 1:
- b2 = buffer[0];
- break;
- case 2:
- b1 = buffer[0];
- b2 = buffer[1];
- break;
- }
- CPStringBuilder sb = new CPStringBuilder();
- int c;
- boolean notleading = false;
- do
- {
- c = (b0 & 0xFC) >>> 2;
- if (notleading || c != 0)
- {
- sb.append(BASE64_CHARSET[c]);
- notleading = true;
- }
- c = ((b0 & 0x03) << 4) | ((b1 & 0xF0) >>> 4);
- if (notleading || c != 0)
- {
- sb.append(BASE64_CHARSET[c]);
- notleading = true;
- }
- c = ((b1 & 0x0F) << 2) | ((b2 & 0xC0) >>> 6);
- if (notleading || c != 0)
- {
- sb.append(BASE64_CHARSET[c]);
- notleading = true;
- }
- c = b2 & 0x3F;
- if (notleading || c != 0)
- {
- sb.append(BASE64_CHARSET[c]);
- notleading = true;
- }
- if (pos >= len)
- break;
- else
- {
- try
- {
- b0 = buffer[pos++];
- b1 = buffer[pos++];
- b2 = buffer[pos++];
- }
- catch (ArrayIndexOutOfBoundsException x)
- {
- break;
- }
- }
- }
- while (true);
-
- if (notleading)
- return sb.toString();
- return "0";
- }
-
- /**
- * The inverse function of the above.
- * <p>
- * Converts a string representing the encoding of some bytes in Base-64 to
- * their original form.
- *
- * @param str the Base-64 encoded representation of some byte(s).
- * @return the bytes represented by the <code>str</code>.
- * @throws NumberFormatException if <code>str</code> is <code>null</code>,
- * or <code>str</code> contains an illegal Base-64 character.
- * @see #toBase64(byte[])
- */
- public static final byte[] fromBase64(String str)
- {
- int len = str.length();
- if (len == 0)
- throw new NumberFormatException("Empty string");
- byte[] a = new byte[len + 1];
- int i, j;
- for (i = 0; i < len; i++)
- try
- {
- a[i] = (byte) BASE64_CHARS.indexOf(str.charAt(i));
- }
- catch (ArrayIndexOutOfBoundsException x)
- {
- throw new NumberFormatException("Illegal character at #" + i);
- }
- i = len - 1;
- j = len;
- try
- {
- while (true)
- {
- a[j] = a[i];
- if (--i < 0)
- break;
- a[j] |= (a[i] & 0x03) << 6;
- j--;
- a[j] = (byte)((a[i] & 0x3C) >>> 2);
- if (--i < 0)
- break;
- a[j] |= (a[i] & 0x0F) << 4;
- j--;
- a[j] = (byte)((a[i] & 0x30) >>> 4);
- if (--i < 0)
- break;
- a[j] |= (a[i] << 2);
- j--;
- a[j] = 0;
- if (--i < 0)
- break;
- }
- }
- catch (Exception ignored)
- {
- }
- try
- { // ignore leading 0-bytes
- while (a[j] == 0)
- j++;
- }
- catch (Exception x)
- {
- return new byte[1]; // one 0-byte
- }
- byte[] result = new byte[len - j + 1];
- System.arraycopy(a, j, result, 0, len - j + 1);
- return result;
- }
-
- // BigInteger utilities ----------------------------------------------------
-
- /**
- * Treats the input as the MSB representation of a number, and discards
- * leading zero elements. For efficiency, the input is simply returned if no
- * leading zeroes are found.
- *
- * @param n the {@link BigInteger} to trim.
- * @return the byte array representation of the designated {@link BigInteger}
- * with no leading 0-bytes.
- */
- public static final byte[] trim(BigInteger n)
- {
- byte[] in = n.toByteArray();
- if (in.length == 0 || in[0] != 0)
- return in;
- int len = in.length;
- int i = 1;
- while (in[i] == 0 && i < len)
- ++i;
- byte[] result = new byte[len - i];
- System.arraycopy(in, i, result, 0, len - i);
- return result;
- }
-
- /**
- * Returns a hexadecimal dump of the trimmed bytes of a {@link BigInteger}.
- *
- * @param x the {@link BigInteger} to display.
- * @return the string representation of the designated {@link BigInteger}.
- */
- public static final String dump(BigInteger x)
- {
- return dumpString(trim(x));
- }
-}
diff --git a/libjava/classpath/gnu/java/security/util/package.html b/libjava/classpath/gnu/java/security/util/package.html
deleted file mode 100644
index 36dd33b..0000000
--- a/libjava/classpath/gnu/java/security/util/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.util package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.util</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java b/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java
deleted file mode 100644
index 8e74b8b..0000000
--- a/libjava/classpath/gnu/java/security/x509/GnuPKIExtension.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GnuPKIExtension.java -- interface for GNU PKI extensions.
- Copyright (C) 2004 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.x509;
-
-import gnu.java.security.OID;
-import gnu.java.security.x509.ext.Extension;
-
-import java.security.cert.X509Extension;
-import java.util.Collection;
-
-public interface GnuPKIExtension extends X509Extension
-{
-
- /**
- * Returns the extension object for the given object identifier.
- *
- * @param oid The OID of the extension to get.
- * @return The extension, or null if there is no such extension.
- */
- Extension getExtension(OID oid);
-
- Collection getExtensions();
-}
diff --git a/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java b/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java
deleted file mode 100644
index 60d3557..0000000
--- a/libjava/classpath/gnu/java/security/x509/PolicyNodeImpl.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/* PolicyNodeImpl.java -- An implementation of a policy tree node.
- Copyright (C) 2004 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.x509;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.security.cert.PolicyNode;
-import java.security.cert.PolicyQualifierInfo;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-public final class PolicyNodeImpl implements PolicyNode
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private String policy;
- private final Set expectedPolicies;
- private final Set qualifiers;
- private final Set children;
- private PolicyNodeImpl parent;
- private int depth;
- private boolean critical;
- private boolean readOnly;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public PolicyNodeImpl()
- {
- expectedPolicies = new HashSet();
- qualifiers = new HashSet();
- children = new HashSet();
- readOnly = false;
- critical = false;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void addChild(PolicyNodeImpl node)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- if (node.getParent() != null)
- throw new IllegalStateException("already a child node");
- node.parent = this;
- node.setDepth(depth + 1);
- children.add(node);
- }
-
- public Iterator getChildren()
- {
- return Collections.unmodifiableSet(children).iterator();
- }
-
- public int getDepth()
- {
- return depth;
- }
-
- public void setDepth(int depth)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- this.depth = depth;
- }
-
- public void addAllExpectedPolicies(Set policies)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- expectedPolicies.addAll(policies);
- }
-
- public void addExpectedPolicy(String policy)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- expectedPolicies.add(policy);
- }
-
- public Set getExpectedPolicies()
- {
- return Collections.unmodifiableSet(expectedPolicies);
- }
-
- public PolicyNode getParent()
- {
- return parent;
- }
-
- public void addAllPolicyQualifiers (Collection qualifiers)
- {
- for (Iterator it = qualifiers.iterator(); it.hasNext(); )
- {
- if (!(it.next() instanceof PolicyQualifierInfo))
- throw new IllegalArgumentException ("can only add PolicyQualifierInfos");
- }
- qualifiers.addAll (qualifiers);
- }
-
- public void addPolicyQualifier (PolicyQualifierInfo qualifier)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- qualifiers.add(qualifier);
- }
-
- public Set getPolicyQualifiers()
- {
- return Collections.unmodifiableSet(qualifiers);
- }
-
- public String getValidPolicy()
- {
- return policy;
- }
-
- public void setValidPolicy(String policy)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- this.policy = policy;
- }
-
- public boolean isCritical()
- {
- return critical;
- }
-
- public void setCritical(boolean critical)
- {
- if (readOnly)
- throw new IllegalStateException("read only");
- this.critical = critical;
- }
-
- public void setReadOnly()
- {
- if (readOnly)
- return;
- readOnly = true;
- for (Iterator it = getChildren(); it.hasNext(); )
- ((PolicyNodeImpl) it.next()).setReadOnly();
- }
-
- public String toString()
- {
- CPStringBuilder buf = new CPStringBuilder();
- for (int i = 0; i < depth; i++)
- buf.append(" ");
- buf.append("(");
- buf.append(PolicyNodeImpl.class.getName());
- buf.append(" (oid ");
- buf.append(policy);
- buf.append(") (depth ");
- buf.append(depth);
- buf.append(") (qualifiers ");
- buf.append(qualifiers);
- buf.append(") (critical ");
- buf.append(critical);
- buf.append(") (expectedPolicies ");
- buf.append(expectedPolicies);
- buf.append(") (children (");
- final String nl = System.getProperty("line.separator");
- for (Iterator it = getChildren(); it.hasNext(); )
- {
- buf.append(nl);
- buf.append(it.next().toString());
- }
- buf.append(")))");
- return buf.toString();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/Util.java b/libjava/classpath/gnu/java/security/x509/Util.java
deleted file mode 100644
index 7b6c89f..0000000
--- a/libjava/classpath/gnu/java/security/x509/Util.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/* Util.java -- Miscellaneous utility methods.
- Copyright (C) 2004, 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.x509;
-
-import gnu.java.lang.CPStringBuilder;
-
-/**
- * A collection of useful class methods.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public final class Util
-{
-
- // Constants.
- // -------------------------------------------------------------------------
-
- public static final String HEX = "0123456789abcdef";
-
- // Class methods.
- // -------------------------------------------------------------------------
-
- /**
- * Convert a byte array to a hexadecimal string, as though it were a
- * big-endian arbitrarily-sized integer.
- *
- * @param buf The bytes to format.
- * @param off The offset to start at.
- * @param len The number of bytes to format.
- * @return A hexadecimal representation of the specified bytes.
- */
- public static String toHexString(byte[] buf, int off, int len)
- {
- CPStringBuilder str = new CPStringBuilder();
- for (int i = 0; i < len; i++)
- {
- str.append(HEX.charAt(buf[i+off] >>> 4 & 0x0F));
- str.append(HEX.charAt(buf[i+off] & 0x0F));
- }
- return str.toString();
- }
-
- /**
- * See {@link #toHexString(byte[],int,int)}.
- */
- public static String toHexString(byte[] buf)
- {
- return Util.toHexString(buf, 0, buf.length);
- }
-
- /**
- * Convert a byte array to a hexadecimal string, separating octets
- * with the given character.
- *
- * @param buf The bytes to format.
- * @param off The offset to start at.
- * @param len The number of bytes to format.
- * @param sep The character to insert between octets.
- * @return A hexadecimal representation of the specified bytes.
- */
- public static String toHexString(byte[] buf, int off, int len, char sep)
- {
- CPStringBuilder str = new CPStringBuilder();
- for (int i = 0; i < len; i++)
- {
- str.append(HEX.charAt(buf[i+off] >>> 4 & 0x0F));
- str.append(HEX.charAt(buf[i+off] & 0x0F));
- if (i < len - 1)
- str.append(sep);
- }
- return str.toString();
- }
-
- /**
- * See {@link #toHexString(byte[],int,int,char)}.
- */
- public static String toHexString(byte[] buf, char sep)
- {
- return Util.toHexString(buf, 0, buf.length, sep);
- }
-
- /**
- * Create a representation of the given byte array similar to the
- * output of `hexdump -C', which is
- *
- * <p><pre>OFFSET SIXTEEN-BYTES-IN-HEX PRINTABLE-BYTES</pre>
- *
- * <p>The printable bytes show up as-is if they are printable and
- * not a newline character, otherwise showing as '.'.
- *
- * @param buf The bytes to format.
- * @param off The offset to start at.
- * @param len The number of bytes to encode.
- * @return The formatted string.
- */
- public static String hexDump(byte[] buf, int off, int len, String prefix)
- {
- String nl = System.getProperty("line.separator");
- CPStringBuilder str = new CPStringBuilder();
- int i = 0;
- while (i < len)
- {
- str.append(prefix);
- str.append(Util.formatInt(i+off, 16, 8));
- str.append(" ");
- String s = Util.toHexString(buf, i+off, Math.min(16, len-i), ' ');
- str.append(s);
- for (int j = 56 - (56 - s.length()); j < 56; j++)
- str.append(" ");
- for (int j = 0; j < Math.min(16, len - i); j++)
- {
- if ((buf[i+off+j] & 0xFF) < 0x20 || (buf[i+off+j] & 0xFF) > 0x7E)
- str.append('.');
- else
- str.append((char) (buf[i+off+j] & 0xFF));
- }
- str.append(nl);
- i += 16;
- }
- return str.toString();
- }
-
- /**
- * See {@link #hexDump(byte[],int,int,String)}.
- */
- public static String hexDump(byte[] buf, String prefix)
- {
- return hexDump(buf, 0, buf.length, prefix);
- }
-
- /**
- * Format an integer into the specified radix, zero-filled.
- *
- * @param i The integer to format.
- * @param radix The radix to encode to.
- * @param len The target length of the string. The string is
- * zero-padded to this length, but may be longer.
- * @return The formatted integer.
- */
- public static String formatInt(int i, int radix, int len)
- {
- String s = Integer.toString(i, radix);
- CPStringBuilder buf = new CPStringBuilder();
- for (int j = 0; j < len - s.length(); j++)
- buf.append("0");
- buf.append(s);
- return buf.toString();
- }
-
- /**
- * Convert a hexadecimal string into its byte representation.
- *
- * @param hex The hexadecimal string.
- * @return The converted bytes.
- */
- public static byte[] toByteArray(String hex)
- {
- hex = hex.toLowerCase();
- byte[] buf = new byte[hex.length() / 2];
- int j = 0;
- for (int i = 0; i < buf.length; i++)
- {
- buf[i] = (byte) ((Character.digit(hex.charAt(j++), 16) << 4) |
- Character.digit(hex.charAt(j++), 16));
- }
- return buf;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java b/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
deleted file mode 100644
index e2e05c5..0000000
--- a/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/* X500DistinguishedName.java -- X.500 distinguished name.
- Copyright (C) 2004, 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.x509;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class X500DistinguishedName implements Principal
-{
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID CN = new OID("2.5.4.3");
- public static final OID C = new OID("2.5.4.6");
- public static final OID L = new OID("2.5.4.7");
- public static final OID ST = new OID("2.5.4.8");
- public static final OID STREET = new OID("2.5.4.9");
- public static final OID O = new OID("2.5.4.10");
- public static final OID OU = new OID("2.5.4.11");
- public static final OID T = new OID("2.5.4.12");
- public static final OID DNQ = new OID("2.5.4.46");
- public static final OID NAME = new OID("2.5.4.41");
- public static final OID GIVENNAME = new OID("2.5.4.42");
- public static final OID INITIALS = new OID("2.5.4.43");
- public static final OID GENERATION = new OID("2.5.4.44");
- public static final OID EMAIL = new OID("1.2.840.113549.1.9.1");
- public static final OID DC = new OID("0.9.2342.19200300.100.1.25");
- public static final OID UID = new OID("0.9.2342.19200300.100.1.1");
-
- private List components;
- private Map currentRdn;
- private boolean fixed;
- private String stringRep;
- private byte[] encoded;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public X500DistinguishedName()
- {
- components = new LinkedList();
- currentRdn = new LinkedHashMap();
- components.add(currentRdn);
- }
-
- public X500DistinguishedName(String name)
- {
- this();
- try
- {
- parseString(name);
- }
- catch (IOException ioe)
- {
- throw new IllegalArgumentException(ioe.toString());
- }
- }
-
- public X500DistinguishedName(byte[] encoded) throws IOException
- {
- this();
- parseDer(new DERReader(encoded));
- }
-
- public X500DistinguishedName(InputStream encoded) throws IOException
- {
- this();
- parseDer(new DERReader(encoded));
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public String getName()
- {
- return toString();
- }
-
- public void newRelativeDistinguishedName()
- {
- if (fixed || currentRdn.isEmpty()) return;
- currentRdn = new LinkedHashMap();
- components.add(currentRdn);
- }
-
- public int size()
- {
- return components.size();
- }
-
- public int countComponents()
- {
- int count = 0;
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- count += ((Map) it.next()).size();
- }
- return count;
- }
-
- public boolean containsComponent(OID oid, String value)
- {
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map rdn = (Map) it.next();
- String s = (String) rdn.get(oid);
- if (s == null)
- continue;
- if (compressWS(value).equalsIgnoreCase(compressWS(s)))
- return true;
- }
- return false;
- }
-
- public String getComponent(OID oid)
- {
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map rdn = (Map) it.next();
- if (rdn.containsKey(oid))
- return (String) rdn.get(oid);
- }
- return null;
- }
-
- public String getComponent(OID oid, int rdn)
- {
- if (rdn >= size())
- return null;
- return (String) ((Map) components.get(rdn)).get(oid);
- }
-
- public void putComponent(OID oid, String value)
- {
- currentRdn.put(oid, value);
- }
-
- public void putComponent(String name, String value)
- {
- name = name.trim().toLowerCase();
- if (name.equals("cn"))
- putComponent(CN, value);
- else if (name.equals("c"))
- putComponent(C, value);
- else if (name.equals("l"))
- putComponent(L, value);
- else if (name.equals("street"))
- putComponent(STREET, value);
- else if (name.equals("st"))
- putComponent(ST, value);
- else if (name.equals("t"))
- putComponent(T, value);
- else if (name.equals("dnq"))
- putComponent(DNQ, value);
- else if (name.equals("name"))
- putComponent(NAME, value);
- else if (name.equals("givenname"))
- putComponent(GIVENNAME, value);
- else if (name.equals("initials"))
- putComponent(INITIALS, value);
- else if (name.equals("generation"))
- putComponent(GENERATION, value);
- else if (name.equals("email"))
- putComponent(EMAIL, value);
- else if (name.equals("dc"))
- putComponent(DC, value);
- else if (name.equals("uid"))
- putComponent(UID, value);
- else if (name.equals("o"))
- putComponent(O, value);
- else if (name.equals("ou"))
- putComponent(OU, value);
- else
- putComponent(new OID(name), value);
- }
-
- public void setUnmodifiable()
- {
- if (fixed) return;
- fixed = true;
- List newComps = new ArrayList(components.size());
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map rdn = (Map) it.next();
- rdn = Collections.unmodifiableMap(rdn);
- newComps.add(rdn);
- }
- components = Collections.unmodifiableList(newComps);
- currentRdn = Collections.EMPTY_MAP;
- }
-
- public int hashCode()
- {
- int sum = 0;
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map m = (Map) it.next();
- for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
- {
- Map.Entry e = (Map.Entry) it2.next();
- sum += e.getKey().hashCode();
- sum += e.getValue().hashCode();
- }
- }
- return sum;
- }
-
- public boolean equals(Object o)
- {
- if (!(o instanceof X500DistinguishedName))
- return false;
- if (size() != ((X500DistinguishedName) o).size())
- return false;
- for (int i = 0; i < size(); i++)
- {
- Map m = (Map) components.get(i);
- for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
- {
- Map.Entry e = (Map.Entry) it2.next();
- OID oid = (OID) e.getKey();
- String v1 = (String) e.getValue();
- String v2 = ((X500DistinguishedName) o).getComponent(oid, i);
- if (!compressWS(v1).equalsIgnoreCase(compressWS(v2)))
- return false;
- }
- }
- return true;
- }
-
- public String toString()
- {
- if (fixed && stringRep != null)
- return stringRep;
- CPStringBuilder str = new CPStringBuilder();
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map m = (Map) it.next();
- for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
- {
- Map.Entry entry = (Map.Entry) it2.next();
- OID oid = (OID) entry.getKey();
- String value = (String) entry.getValue();
- if (oid.equals(CN))
- str.append("CN");
- else if (oid.equals(C))
- str.append("C");
- else if (oid.equals(L))
- str.append("L");
- else if (oid.equals(ST))
- str.append("ST");
- else if (oid.equals(STREET))
- str.append("STREET");
- else if (oid.equals(O))
- str.append("O");
- else if (oid.equals(OU))
- str.append("OU");
- else if (oid.equals(T))
- str.append("T");
- else if (oid.equals(DNQ))
- str.append("DNQ");
- else if (oid.equals(NAME))
- str.append("NAME");
- else
- str.append(oid.toString());
- str.append('=');
- str.append(value);
- if (it2.hasNext())
- str.append("+");
- }
- if (it.hasNext())
- str.append(',');
- }
- return (stringRep = str.toString());
- }
-
- public byte[] getDer()
- {
- if (fixed && encoded != null)
- return (byte[]) encoded.clone();
-
- ArrayList name = new ArrayList(components.size());
- for (Iterator it = components.iterator(); it.hasNext(); )
- {
- Map m = (Map) it.next();
- if (m.isEmpty())
- continue;
-
- Set rdn = new HashSet();
- for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
- {
- Map.Entry e = (Map.Entry) it2.next();
- ArrayList atav = new ArrayList(2);
- atav.add(new DERValue(DER.OBJECT_IDENTIFIER, e.getKey()));
- atav.add(new DERValue(DER.UTF8_STRING, e.getValue()));
- rdn.add(new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, atav));
- }
- name.add(new DERValue(DER.SET|DER.CONSTRUCTED, rdn));
- }
- DERValue val = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, name);
- return (byte[]) (encoded = val.getEncoded()).clone();
- }
-
- // Own methods.
- // -------------------------------------------------------------------------
-
- private int sep;
-
- private void parseString(String str) throws IOException
- {
- Reader in = new StringReader(str);
- while (true)
- {
- String key = readAttributeType(in);
- if (key == null)
- break;
- String value = readAttributeValue(in);
- putComponent(key, value);
- if (sep == ',')
- newRelativeDistinguishedName();
- }
- setUnmodifiable();
- }
-
- private String readAttributeType(Reader in) throws IOException
- {
- CPStringBuilder buf = new CPStringBuilder();
- int ch;
- while ((ch = in.read()) != '=')
- {
- if (ch == -1)
- {
- if (buf.length() > 0)
- throw new EOFException();
- return null;
- }
- if (ch > 127)
- throw new IOException("Invalid char: " + (char) ch);
- if (Character.isLetterOrDigit((char) ch) || ch == '-' || ch == '.')
- buf.append((char) ch);
- else
- throw new IOException("Invalid char: " + (char) ch);
- }
- return buf.toString();
- }
-
- private String readAttributeValue(Reader in) throws IOException
- {
- CPStringBuilder buf = new CPStringBuilder();
- int ch = in.read();
- if (ch == '#')
- {
- while (true)
- {
- ch = in.read();
- if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
- || Character.isDigit((char) ch))
- buf.append((char) ch);
- else if (ch == '+' || ch == ',')
- {
- sep = ch;
- String hex = buf.toString();
- return new String(Util.toByteArray(hex));
- }
- else
- throw new IOException("illegal character: " + (char) ch);
- }
- }
- else if (ch == '"')
- {
- while (true)
- {
- ch = in.read();
- if (ch == '"')
- break;
- else if (ch == '\\')
- {
- ch = in.read();
- if (ch == -1)
- throw new EOFException();
- if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
- || Character.isDigit((char) ch))
- {
- int i = Character.digit((char) ch, 16) << 4;
- ch = in.read();
- if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
- || Character.isDigit((char) ch)))
- throw new IOException("illegal hex char");
- i |= Character.digit((char) ch, 16);
- buf.append((char) i);
- }
- else
- buf.append((char) ch);
- }
- else
- buf.append((char) ch);
- }
- sep = in.read();
- if (sep != '+' || sep != ',')
- throw new IOException("illegal character: " + (char) ch);
- return buf.toString();
- }
- else
- {
- while (true)
- {
- switch (ch)
- {
- case '+':
- case ',':
- sep = ch;
- return buf.toString();
- case '\\':
- ch = in.read();
- if (ch == -1)
- throw new EOFException();
- if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
- || Character.isDigit((char) ch))
- {
- int i = Character.digit((char) ch, 16) << 4;
- ch = in.read();
- if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')
- || Character.isDigit((char) ch)))
- throw new IOException("illegal hex char");
- i |= Character.digit((char) ch, 16);
- buf.append((char) i);
- }
- else
- buf.append((char) ch);
- break;
- case '=':
- case '<':
- case '>':
- case '#':
- case ';':
- throw new IOException("illegal character: " + (char) ch);
- case -1:
- throw new EOFException();
- default:
- buf.append((char) ch);
- ch = in.read();
- if (ch == -1)
- return buf.toString();
- }
- }
- }
- }
-
- private void parseDer(DERReader der) throws IOException
- {
- DERValue name = der.read();
- if (!name.isConstructed())
- throw new IOException("malformed Name");
- encoded = name.getEncoded();
- int len = 0;
- while (len < name.getLength())
- {
- DERValue rdn = der.read();
- if (!rdn.isConstructed())
- throw new IOException("badly formed RDNSequence");
- int len2 = 0;
- while (len2 < rdn.getLength())
- {
- DERValue atav = der.read();
- if (!atav.isConstructed())
- throw new IOException("badly formed AttributeTypeAndValue");
- DERValue val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("badly formed AttributeTypeAndValue");
- OID oid = (OID) val.getValue();
- val = der.read();
- if (!(val.getValue() instanceof String))
- throw new IOException("badly formed AttributeTypeAndValue");
- String value = (String) val.getValue();
- putComponent(oid, value);
- len2 += atav.getEncodedLength();
- }
- len += rdn.getEncodedLength();
- if (len < name.getLength())
- newRelativeDistinguishedName();
- }
- setUnmodifiable();
- }
-
- private static String compressWS(String str)
- {
- CPStringBuilder buf = new CPStringBuilder();
- char lastChar = 0;
- for (int i = 0; i < str.length(); i++)
- {
- char c = str.charAt(i);
- if (Character.isWhitespace(c))
- {
- if (!Character.isWhitespace(lastChar))
- buf.append(' ');
- }
- else
- buf.append(c);
- lastChar = c;
- }
- return buf.toString().trim();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509CRL.java b/libjava/classpath/gnu/java/security/x509/X509CRL.java
deleted file mode 100644
index 518edaa..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509CRL.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/* X509CRL.java -- X.509 certificate revocation list.
- Copyright (C) 2003, 2004, 2010 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.x509;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.der.BitString;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.ext.Extension;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.logging.Logger;
-
-import javax.security.auth.x500.X500Principal;
-
-/**
- * X.509 certificate revocation lists.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class X509CRL extends java.security.cert.X509CRL
- implements GnuPKIExtension
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(X509CRL.class.getName()) : null;
-
- private static final OID ID_DSA = new OID("1.2.840.10040.4.1");
- private static final OID ID_DSA_WITH_SHA1 = new OID("1.2.840.10040.4.3");
- private static final OID ID_RSA = new OID("1.2.840.113549.1.1.1");
- private static final OID ID_RSA_WITH_MD2 = new OID("1.2.840.113549.1.1.2");
- private static final OID ID_RSA_WITH_MD5 = new OID("1.2.840.113549.1.1.4");
- private static final OID ID_RSA_WITH_SHA1 = new OID("1.2.840.113549.1.1.5");
-
- private byte[] encoded;
-
- private byte[] tbsCRLBytes;
- private int version;
- private OID algId;
- private byte[] algParams;
- private Date thisUpdate;
- private Date nextUpdate;
- private X500DistinguishedName issuerDN;
- private HashMap revokedCerts;
- private HashMap extensions;
-
- private OID sigAlg;
- private byte[] sigAlgParams;
- private byte[] rawSig;
- private byte[] signature;
-
- // Constructors.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new X.509 CRL.
- *
- * @param encoded The DER encoded CRL.
- * @throws CRLException If the input bytes are incorrect.
- * @throws IOException If the input bytes cannot be read.
- */
- public X509CRL(InputStream encoded) throws CRLException, IOException
- {
- super();
- revokedCerts = new HashMap();
- extensions = new HashMap();
- try
- {
- parse(encoded);
- }
- catch (IOException ioe)
- {
- ioe.printStackTrace();
- throw ioe;
- }
- catch (Exception x)
- {
- x.printStackTrace();
- throw new CRLException(x.toString());
- }
- }
-
- // X509CRL methods.
- // ------------------------------------------------------------------------
-
- public boolean equals(Object o)
- {
- if (!(o instanceof X509CRL))
- return false;
- return ((X509CRL) o).getRevokedCertificates().equals(revokedCerts.values());
- }
-
- public int hashCode()
- {
- return revokedCerts.hashCode();
- }
-
- public byte[] getEncoded() throws CRLException
- {
- return (byte[]) encoded.clone();
- }
-
- public void verify(PublicKey key)
- throws CRLException, NoSuchAlgorithmException, InvalidKeyException,
- NoSuchProviderException, SignatureException
- {
- Signature sig = Signature.getInstance(sigAlg.toString());
- doVerify(sig, key);
- }
-
- public void verify(PublicKey key, String provider)
- throws CRLException, NoSuchAlgorithmException, InvalidKeyException,
- NoSuchProviderException, SignatureException
- {
- Signature sig = Signature.getInstance(sigAlg.toString(), provider);
- doVerify(sig, key);
- }
-
- public int getVersion()
- {
- return version;
- }
-
- public Principal getIssuerDN()
- {
- return issuerDN;
- }
-
- public X500Principal getIssuerX500Principal()
- {
- return new X500Principal(issuerDN.getDer());
- }
-
- public Date getThisUpdate()
- {
- return (Date) thisUpdate.clone();
- }
-
- public Date getNextUpdate()
- {
- if (nextUpdate != null)
- return (Date) nextUpdate.clone();
- return null;
- }
-
- public java.security.cert.X509CRLEntry getRevokedCertificate(BigInteger serialNo)
- {
- return (java.security.cert.X509CRLEntry) revokedCerts.get(serialNo);
- }
-
- public Set getRevokedCertificates()
- {
- return Collections.unmodifiableSet(new HashSet(revokedCerts.values()));
- }
-
- public byte[] getTBSCertList() throws CRLException
- {
- return (byte[]) tbsCRLBytes.clone();
- }
-
- public byte[] getSignature()
- {
- return (byte[]) rawSig.clone();
- }
-
- public String getSigAlgName()
- {
- if (sigAlg.equals(ID_DSA_WITH_SHA1))
- return "SHA1withDSA";
- if (sigAlg.equals(ID_RSA_WITH_MD2))
- return "MD2withRSA";
- if (sigAlg.equals(ID_RSA_WITH_MD5))
- return "MD5withRSA";
- if (sigAlg.equals(ID_RSA_WITH_SHA1))
- return "SHA1withRSA";
- return "unknown";
- }
-
- public String getSigAlgOID()
- {
- return sigAlg.toString();
- }
-
- public byte[] getSigAlgParams()
- {
- if (sigAlgParams != null)
- return (byte[]) sigAlgParams.clone();
- return null;
- }
-
- // X509Extension methods.
- // ------------------------------------------------------------------------
-
- public boolean hasUnsupportedCriticalExtension()
- {
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (e.isCritical() && !e.isSupported())
- return true;
- }
- return false;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- HashSet s = new HashSet();
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- HashSet s = new HashSet();
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (!e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extension e = getExtension(new OID(oid));
- if (e != null)
- {
- return e.getValue().getEncoded();
- }
- return null;
- }
-
- // GnuPKIExtension method.
- // -------------------------------------------------------------------------
-
- public Extension getExtension(OID oid)
- {
- return (Extension) extensions.get(oid);
- }
-
- public Collection getExtensions()
- {
- return extensions.values();
- }
-
- // CRL methods.
- // -------------------------------------------------------------------------
-
- public String toString()
- {
- return X509CRL.class.getName();
- }
-
- public boolean isRevoked(Certificate cert)
- {
- if (!(cert instanceof java.security.cert.X509Certificate))
- throw new IllegalArgumentException("not a X.509 certificate");
- BigInteger certSerial =
- ((java.security.cert.X509Certificate) cert).getSerialNumber();
- X509CRLEntry ent = (X509CRLEntry) revokedCerts.get(certSerial);
- if (ent == null)
- return false;
- return ent.getRevocationDate().compareTo(new Date()) < 0;
- }
-
- // Own methods.
- // ------------------------------------------------------------------------
-
- private void doVerify(Signature sig, PublicKey key)
- throws CRLException, InvalidKeyException, SignatureException
- {
- sig.initVerify(key);
- sig.update(tbsCRLBytes);
- if (!sig.verify(signature))
- throw new CRLException("signature not verified");
- }
-
- private void parse(InputStream in) throws Exception
- {
- // CertificateList ::= SEQUENCE {
- DERReader der = new DERReader(in);
- DERValue val = der.read();
- if (Configuration.DEBUG)
- log.fine("start CertificateList len == " + val.getLength());
- if (!val.isConstructed())
- throw new IOException("malformed CertificateList");
- encoded = val.getEncoded();
-
- // tbsCertList ::= SEQUENCE { -- TBSCertList
- val = der.read();
- if (!val.isConstructed())
- throw new IOException("malformed TBSCertList");
- if (Configuration.DEBUG)
- log.fine("start tbsCertList len == " + val.getLength());
- tbsCRLBytes = val.getEncoded();
-
- // version Version OPTIONAL,
- // -- If present must be v2
- val = der.read();
- if (val.getValue() instanceof BigInteger)
- {
- version = ((BigInteger) val.getValue()).intValue() + 1;
- val = der.read();
- }
- else
- version = 1;
- if (Configuration.DEBUG)
- log.fine("read version == " + version);
-
- // signature AlgorithmIdentifier,
- if (Configuration.DEBUG)
- log.fine("start AlgorithmIdentifier len == " + val.getLength());
- if (!val.isConstructed())
- throw new IOException("malformed AlgorithmIdentifier");
- DERValue algIdVal = der.read();
- algId = (OID) algIdVal.getValue();
- if (Configuration.DEBUG)
- log.fine("read object identifier == " + algId);
- if (val.getLength() > algIdVal.getEncodedLength())
- {
- val = der.read();
- if (Configuration.DEBUG)
- log.fine("read parameters len == " + val.getEncodedLength());
- algParams = val.getEncoded();
- if (val.isConstructed())
- in.skip(val.getLength());
- }
-
- // issuer Name,
- val = der.read();
- issuerDN = new X500DistinguishedName(val.getEncoded());
- der.skip(val.getLength());
- if (Configuration.DEBUG)
- log.fine("read issuer == " + issuerDN);
-
- // thisUpdate Time,
- thisUpdate = (Date) der.read().getValue();
- if (Configuration.DEBUG)
- log.fine("read thisUpdate == " + thisUpdate);
-
- // nextUpdate Time OPTIONAL,
- val = der.read();
- if (val.getValue() instanceof Date)
- {
- nextUpdate = (Date) val.getValue();
- if (Configuration.DEBUG)
- log.fine("read nextUpdate == " + nextUpdate);
- val = der.read();
- }
-
- // revokedCertificates SEQUENCE OF SEQUENCE {
- // -- X509CRLEntry objects...
- // } OPTIONAL,
- if (val.getTag() != 0)
- {
- int len = 0;
- while (len < val.getLength())
- {
- X509CRLEntry entry = new X509CRLEntry(version, der);
- revokedCerts.put(entry.getSerialNumber(), entry);
- len += entry.getEncoded().length;
- }
- val = der.read();
- }
-
- // crlExtensions [0] EXPLICIT Extensions OPTIONAL
- // -- if present MUST be v2
- if (val.getTagClass() != DER.UNIVERSAL && val.getTag() == 0)
- {
- if (version < 2)
- throw new IOException("extra data in CRL");
- DERValue exts = der.read();
- if (!exts.isConstructed())
- throw new IOException("malformed Extensions");
- if (Configuration.DEBUG)
- log.fine("start Extensions len == " + exts.getLength());
- int len = 0;
- while (len < exts.getLength())
- {
- DERValue ext = der.read();
- if (!ext.isConstructed())
- throw new IOException("malformed Extension");
- Extension e = new Extension(ext.getEncoded());
- extensions.put(e.getOid(), e);
- der.skip(ext.getLength());
- len += ext.getEncodedLength();
- if (Configuration.DEBUG)
- log.fine("current count == " + len);
- }
- val = der.read();
- }
-
- if (Configuration.DEBUG)
- log.fine("read tag == " + val.getTag());
- if (!val.isConstructed())
- throw new IOException("malformed AlgorithmIdentifier");
- if (Configuration.DEBUG)
- log.fine("start AlgorithmIdentifier len == " + val.getLength());
- DERValue sigAlgVal = der.read();
- if (Configuration.DEBUG)
- log.fine("read tag == " + sigAlgVal.getTag());
- if (sigAlgVal.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("malformed AlgorithmIdentifier");
- sigAlg = (OID) sigAlgVal.getValue();
- if (Configuration.DEBUG)
- {
- log.fine("signature id == " + sigAlg);
- log.fine("sigAlgVal length == " + sigAlgVal.getEncodedLength());
- }
- if (val.getLength() > sigAlgVal.getEncodedLength())
- {
- val = der.read();
- if (Configuration.DEBUG)
- log.fine("sig params tag = " + val.getTag() + " len == "
- + val.getEncodedLength());
- sigAlgParams = (byte[]) val.getEncoded();
- if (val.isConstructed())
- in.skip(val.getLength());
- }
- val = der.read();
- if (Configuration.DEBUG)
- log.fine("read tag = " + val.getTag());
- rawSig = val.getEncoded();
- signature = ((BitString) val.getValue()).toByteArray();
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java b/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java
deleted file mode 100644
index 64adf7f..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509CRLEntry.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/* X509CRLEntry.java -- an entry in a X.509 CRL.
- Copyright (C) 2003, 2004, 2010 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.x509;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.ext.Extension;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRLException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * A single entry in a X.509 certificate revocation list.
- *
- * @see X509CRL
- * @author Casey Marshall
- */
-class X509CRLEntry extends java.security.cert.X509CRLEntry
- implements GnuPKIExtension
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(X509CRLEntry.class.getName()) : null;
-
- /** The DER encoded form of this CRL entry. */
- private byte[] encoded;
-
- /** The revoked certificate's serial number. */
- private BigInteger serialNo;
-
- /** The date the certificate was revoked. */
- private Date revocationDate;
-
- /** The CRL entry extensions. */
- private HashMap extensions;
-
- // Constructor.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new X.509 certificate revocation list entry from the given
- * input stream and CRL version number.
- *
- * @param version The CRL version.
- * @param encoded The stream of DER bytes.
- * @throws CRLException If the ASN.1 structure is invalid.
- * @throws IOException If the bytes cannot be read.
- */
- X509CRLEntry(int version, DERReader encoded)
- throws CRLException, IOException
- {
- super();
- extensions = new HashMap();
- try
- {
- parse(version, encoded);
- }
- catch (IOException ioe)
- {
- throw ioe;
- }
- catch (Exception x)
- {
- throw new CRLException(x.toString());
- }
- }
-
- // X509CRLEntry methods.
- // ------------------------------------------------------------------------
-
- public boolean equals(Object o)
- {
- if (!(o instanceof X509CRLEntry))
- return false;
- return ((X509CRLEntry) o).getSerialNumber().equals(serialNo) &&
- ((X509CRLEntry) o).getRevocationDate().equals(revocationDate);
- }
-
- public int hashCode()
- {
- return serialNo.hashCode();
- }
-
- public byte[] getEncoded() throws CRLException
- {
- return (byte[]) encoded.clone();
- }
-
- public BigInteger getSerialNumber()
- {
- return serialNo;
- }
-
- public Date getRevocationDate()
- {
- return (Date) revocationDate.clone();
- }
-
- public boolean hasExtensions()
- {
- return ! extensions.isEmpty();
- }
-
- public String toString()
- {
- return "X509CRLEntry serial=" + serialNo + " revocation date="
- + revocationDate + " ext=" + extensions;
- }
-
- // X509Extension methods.
- // -------------------------------------------------------------------------
-
- public boolean hasUnsupportedCriticalExtension()
- {
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (e.isCritical() && !e.isSupported())
- return true;
- }
- return false;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- HashSet s = new HashSet();
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- HashSet s = new HashSet();
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (!e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extension e = getExtension(new OID(oid));
- if (e != null)
- {
- return e.getValue().getEncoded();
- }
- return null;
- }
-
- // GnuPKIExtension method.
- // -------------------------------------------------------------------------
-
- public Extension getExtension(OID oid)
- {
- return (Extension) extensions.get(oid);
- }
-
- public Collection getExtensions()
- {
- return extensions.values();
- }
-
- // Own methods.
- // -------------------------------------------------------------------------
-
- private void parse(int version, DERReader der) throws Exception
- {
- // RevokedCertificate ::= SEQUENCE {
- DERValue entry = der.read();
- if (Configuration.DEBUG)
- log.fine("start CRL entry len == " + entry.getLength());
- if (!entry.isConstructed())
- throw new IOException("malformed revokedCertificate");
- encoded = entry.getEncoded();
- int len = 0;
- if (Configuration.DEBUG)
- log.fine("encoded entry:\n" + Util.hexDump(encoded, ">>>> "));
-
- // userCertificate CertificateSerialNumber,
- DERValue val = der.read();
- serialNo = (BigInteger) val.getValue();
- len += val.getEncodedLength();
- if (Configuration.DEBUG)
- log.fine("userCertificate == " + serialNo + " current count == " + len);
-
- // revocationDate Time,
- val = der.read();
- revocationDate = (Date) val.getValue();
- len += val.getEncodedLength();
- if (Configuration.DEBUG)
- log.fine("revocationDate == " + revocationDate + " current count == "
- + len);
- // crlEntryExtensions Extensions OPTIONAL
- // -- if present MUST be v2
- if (len < entry.getLength())
- {
- if (version < 2)
- throw new IOException("extra data in CRL entry");
- DERValue exts = der.read();
- if (!exts.isConstructed())
- throw new IOException("malformed Extensions");
- if (Configuration.DEBUG)
- log.fine("start Extensions len == " + exts.getLength());
- len = 0;
- while (len < exts.getLength())
- {
- val = der.read();
- if (!val.isConstructed())
- throw new IOException("malformed Extension");
- if (Configuration.DEBUG)
- log.fine("start Extension len == " + val.getLength());
- Extension e = new Extension(val.getEncoded());
- extensions.put(e.getOid(), e);
- der.skip(val.getLength());
- len += val.getEncodedLength();
- if (Configuration.DEBUG)
- log.fine("current count == " + len);
- }
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java b/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java
deleted file mode 100644
index 582d185..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509CRLSelectorImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/* X509CRLSelectorImpl.java -- implementation of an X509CRLSelector.
- Copyright (C) 2004 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.x509;
-
-import java.io.IOException;
-
-import java.security.Principal;
-import java.security.cert.CRL;
-import java.security.cert.CRLSelector;
-import java.security.cert.X509CRL;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.security.auth.x500.X500Principal;
-
-/**
- * Sun's implementation of X509CRLSelector sucks. This one tries to work
- * better.
- */
-public class X509CRLSelectorImpl implements CRLSelector
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private Set issuerNames;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public X509CRLSelectorImpl()
- {
- issuerNames = new HashSet();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void addIssuerName(byte[] issuerName) throws IOException
- {
- issuerNames.add(new X500DistinguishedName(issuerName));
- }
-
- public void addIssuerName(String issuerName)
- {
- issuerNames.add(new X500DistinguishedName(issuerName));
- }
-
- public void addIssuerName(Principal issuerName) throws IOException
- {
- if (issuerName instanceof X500DistinguishedName)
- issuerNames.add(issuerName);
- else if (issuerName instanceof X500Principal)
- issuerNames.add(new X500DistinguishedName(((X500Principal) issuerName).getEncoded()));
- else
- issuerNames.add(new X500DistinguishedName(issuerName.getName()));
- }
-
- public Collection getIssuerNames()
- {
- return Collections.unmodifiableSet(issuerNames);
- }
-
- public Object clone()
- {
- X509CRLSelectorImpl copy = new X509CRLSelectorImpl();
- copy.issuerNames.addAll(issuerNames);
- return copy;
- }
-
- public boolean match(CRL crl)
- {
- if (!(crl instanceof X509CRL))
- return false;
- try
- {
- Principal p = ((X509CRL) crl).getIssuerDN();
- X500DistinguishedName thisName = null;
- if (p instanceof X500DistinguishedName)
- thisName = (X500DistinguishedName) p;
- else if (p instanceof X500Principal)
- thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
- else
- thisName = new X500DistinguishedName(p.getName());
- for (Iterator it = issuerNames.iterator(); it.hasNext(); )
- {
- X500DistinguishedName name = (X500DistinguishedName) it.next();
- if (thisName.equals(name))
- return true;
- }
- }
- catch (Exception x)
- {
- }
- return false;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509CertPath.java b/libjava/classpath/gnu/java/security/x509/X509CertPath.java
deleted file mode 100644
index e8ed6bf..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509CertPath.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/* X509CertPath.java -- an X.509 certificate path.
- Copyright (C) 2004 Free Software Fonudation, 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.x509;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DEREncodingException;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.cert.CertPath;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A certificate path (or certificate chain) of X509Certificates.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class X509CertPath extends CertPath
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- public static final List ENCODINGS = Collections.unmodifiableList(
- Arrays.asList(new String[] { "PkiPath", "PKCS7" }));
-
- private static final OID PKCS7_SIGNED_DATA = new OID("1.2.840.113549.1.7.2");
- private static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
-
- /** The certificate path. */
- private List path;
-
- /** The cached PKCS #7 encoded bytes. */
- private byte[] pkcs_encoded;
-
- /** The cached PkiPath encoded bytes. */
- private byte[] pki_encoded;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public X509CertPath(List path)
- {
- super("X.509");
- this.path = Collections.unmodifiableList(path);
- }
-
- public X509CertPath(InputStream in) throws CertificateEncodingException
- {
- this(in, (String) ENCODINGS.get(0));
- }
-
- public X509CertPath(InputStream in, String encoding)
- throws CertificateEncodingException
- {
- super("X.509");
- try
- {
- parse(in, encoding);
- }
- catch (IOException ioe)
- {
- throw new CertificateEncodingException();
- }
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public List getCertificates()
- {
- return path; // already unmodifiable
- }
-
- public byte[] getEncoded() throws CertificateEncodingException
- {
- return getEncoded((String) ENCODINGS.get(0));
- }
-
- public byte[] getEncoded(String encoding) throws CertificateEncodingException
- {
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- if (pki_encoded == null)
- {
- try
- {
- pki_encoded = encodePki();
- }
- catch (IOException ioe)
- {
- throw new CertificateEncodingException();
- }
- }
- return (byte[]) pki_encoded.clone();
- }
- else if (encoding.equalsIgnoreCase("PKCS7"))
- {
- if (pkcs_encoded == null)
- {
- try
- {
- pkcs_encoded = encodePKCS();
- }
- catch (IOException ioe)
- {
- throw new CertificateEncodingException();
- }
- }
- return (byte[]) pkcs_encoded.clone();
- }
- else
- throw new CertificateEncodingException("unknown encoding: " + encoding);
- }
-
- public Iterator getEncodings()
- {
- return ENCODINGS.iterator(); // already unmodifiable
- }
-
- // Own methods.
- // -------------------------------------------------------------------------
-
- private void parse(InputStream in, String encoding)
- throws CertificateEncodingException, IOException
- {
- DERReader der = new DERReader(in);
- DERValue path = null;
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- // PKI encoding is just a SEQUENCE of X.509 certificates.
- path = der.read();
- if (!path.isConstructed())
- throw new DEREncodingException("malformed PkiPath");
- }
- else if (encoding.equalsIgnoreCase("PKCS7"))
- {
- // PKCS #7 encoding means that the certificates are contained in a
- // SignedData PKCS #7 type.
- //
- // ContentInfo ::= SEQUENCE {
- // contentType ::= ContentType,
- // content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
- //
- // ContentType ::= OBJECT IDENTIFIER
- //
- // SignedData ::= SEQUENCE {
- // version Version,
- // digestAlgorithms DigestAlgorithmIdentifiers,
- // contentInfo ContentInfo,
- // certificates [0] IMPLICIT ExtendedCertificatesAndCertificates
- // OPTIONAL,
- // crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
- // signerInfos SignerInfos }
- //
- // Version ::= INTEGER
- //
- DERValue value = der.read();
- if (!value.isConstructed())
- throw new DEREncodingException("malformed ContentInfo");
- value = der.read();
- if (!(value.getValue() instanceof OID) ||
- ((OID) value.getValue()).equals(PKCS7_SIGNED_DATA))
- throw new DEREncodingException("not a SignedData");
- value = der.read();
- if (!value.isConstructed() || value.getTag() != 0)
- throw new DEREncodingException("malformed content");
- value = der.read();
- if (value.getTag() != DER.INTEGER)
- throw new DEREncodingException("malformed Version");
- value = der.read();
- if (!value.isConstructed() || value.getTag() != DER.SET)
- throw new DEREncodingException("malformed DigestAlgorithmIdentifiers");
- der.skip(value.getLength());
- value = der.read();
- if (!value.isConstructed())
- throw new DEREncodingException("malformed ContentInfo");
- der.skip(value.getLength());
- path = der.read();
- if (!path.isConstructed() || path.getTag() != 0)
- throw new DEREncodingException("no certificates");
- }
- else
- throw new CertificateEncodingException("unknown encoding: " + encoding);
-
- LinkedList certs = new LinkedList();
- int len = 0;
- while (len < path.getLength())
- {
- DERValue cert = der.read();
- try
- {
- certs.add(new X509Certificate(new ByteArrayInputStream(cert.getEncoded())));
- }
- catch (CertificateException ce)
- {
- throw new CertificateEncodingException(ce.getMessage());
- }
- len += cert.getEncodedLength();
- der.skip(cert.getLength());
- }
-
- this.path = Collections.unmodifiableList(certs);
- }
-
- private byte[] encodePki()
- throws CertificateEncodingException, IOException
- {
- synchronized (path)
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- for (Iterator i = path.iterator(); i.hasNext(); )
- {
- out.write(((Certificate) i.next()).getEncoded());
- }
- byte[] b = out.toByteArray();
- DERValue val = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- b.length, b, null);
- return val.getEncoded();
- }
- }
-
- private byte[] encodePKCS()
- throws CertificateEncodingException, IOException
- {
- synchronized (path)
- {
- ArrayList signedData = new ArrayList(5);
- signedData.add(new DERValue(DER.INTEGER, BigInteger.ONE));
- signedData.add(new DERValue(DER.CONSTRUCTED | DER.SET,
- Collections.EMPTY_SET));
- signedData.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- Collections.singletonList(
- new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_DATA))));
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- for (Iterator i = path.iterator(); i.hasNext(); )
- {
- out.write(((Certificate) i.next()).getEncoded());
- }
- byte[] b = out.toByteArray();
- signedData.add(new DERValue(DER.CONSTRUCTED | DER.CONTEXT,
- b.length, b, null));
- DERValue sdValue = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- signedData);
-
- ArrayList contentInfo = new ArrayList(2);
- contentInfo.add(new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_SIGNED_DATA));
- contentInfo.add(new DERValue(DER.CONSTRUCTED | DER.CONTEXT, sdValue));
- return new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
- contentInfo).getEncoded();
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java b/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java
deleted file mode 100644
index 5201a76..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509CertSelectorImpl.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/* X509CertSelectorImpl.java -- implementation of an X509CertSelector.
- Copyright (C) 2004 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.x509;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.security.cert.CertSelector;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.security.auth.x500.X500Principal;
-
-/**
- * Sun's implementation of X509CertSelector sucks. This one tries to work
- * better.
- */
-public class X509CertSelectorImpl implements CertSelector
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private Set issuerNames;
- private Set subjectNames;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public X509CertSelectorImpl()
- {
- issuerNames = new HashSet();
- subjectNames = new HashSet();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void addIssuerName(byte[] issuerName) throws IOException
- {
- issuerNames.add(new X500DistinguishedName(issuerName));
- }
-
- public void addIssuerName(String issuerName)
- {
- issuerNames.add(new X500DistinguishedName(issuerName));
- }
-
- public void addIssuerName(Principal issuerName) throws IOException
- {
- if (issuerName instanceof X500DistinguishedName)
- issuerNames.add(issuerName);
- else if (issuerName instanceof X500Principal)
- issuerNames.add(new X500DistinguishedName(((X500Principal) issuerName).getEncoded()));
- else
- issuerNames.add(new X500DistinguishedName(issuerName.getName()));
- }
-
- public Collection getIssuerNames()
- {
- return Collections.unmodifiableSet(issuerNames);
- }
-
- public void addSubjectName(byte[] subjectName) throws IOException
- {
- subjectNames.add(new X500DistinguishedName(subjectName));
- }
-
- public void addSubjectName(String subjectName) throws IOException
- {
- subjectNames.add(new X500DistinguishedName(subjectName));
- }
-
- public void addSubjectName(Principal subjectName) throws IOException
- {
- if (subjectName instanceof X500DistinguishedName)
- subjectNames.add(subjectName);
- else if (subjectName instanceof X500Principal)
- subjectNames.add(new X500DistinguishedName(((X500Principal) subjectName).getEncoded()));
- else
- subjectNames.add(new X500DistinguishedName(subjectName.getName()));
- }
-
- public Collection getSubjectNames()
- {
- return Collections.unmodifiableSet(subjectNames);
- }
-
- public Object clone()
- {
- X509CertSelectorImpl copy = new X509CertSelectorImpl();
- copy.issuerNames.addAll(issuerNames);
- copy.subjectNames.addAll(subjectNames);
- return copy;
- }
-
- public boolean match(Certificate cert)
- {
- if (!(cert instanceof X509Certificate))
- return false;
- boolean matchIssuer = false;
- boolean matchSubject = false;
- try
- {
- Principal p = ((X509Certificate) cert).getIssuerDN();
- X500DistinguishedName thisName = null;
- if (p instanceof X500DistinguishedName)
- thisName = (X500DistinguishedName) p;
- else if (p instanceof X500Principal)
- thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
- else
- thisName = new X500DistinguishedName(p.getName());
- if (issuerNames.isEmpty())
- matchIssuer = true;
- else
- {
- for (Iterator it = issuerNames.iterator(); it.hasNext(); )
- {
- X500DistinguishedName name = (X500DistinguishedName) it.next();
- if (thisName.equals(name))
- {
- matchIssuer = true;
- break;
- }
- }
- }
-
- p = ((X509Certificate) cert).getSubjectDN();
- thisName = null;
- if (p instanceof X500DistinguishedName)
- thisName = (X500DistinguishedName) p;
- else if (p instanceof X500Principal)
- thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
- else
- thisName = new X500DistinguishedName(p.getName());
- if (subjectNames.isEmpty())
- matchSubject = true;
- else
- {
- for (Iterator it = subjectNames.iterator(); it.hasNext(); )
- {
- X500DistinguishedName name = (X500DistinguishedName) it.next();
- if (thisName.equals(name))
- {
- matchSubject = true;
- break;
- }
- }
- }
- }
- catch (Exception x)
- {
- }
- return matchIssuer && matchSubject;
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/X509Certificate.java b/libjava/classpath/gnu/java/security/x509/X509Certificate.java
deleted file mode 100644
index 14c5652..0000000
--- a/libjava/classpath/gnu/java/security/x509/X509Certificate.java
+++ /dev/null
@@ -1,757 +0,0 @@
-/* X509Certificate.java -- X.509 certificate.
- Copyright (C) 2003, 2004, 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.x509;
-
-import gnu.classpath.debug.Component;
-import gnu.classpath.debug.SystemLogger;
-import gnu.java.security.OID;
-import gnu.java.security.der.BitString;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.ext.BasicConstraints;
-import gnu.java.security.x509.ext.ExtendedKeyUsage;
-import gnu.java.security.x509.ext.Extension;
-import gnu.java.security.x509.ext.GeneralName;
-import gnu.java.security.x509.ext.IssuerAlternativeNames;
-import gnu.java.security.x509.ext.KeyUsage;
-import gnu.java.security.x509.ext.SubjectAlternativeNames;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.io.StringWriter;
-import java.math.BigInteger;
-import java.security.AlgorithmParameters;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateParsingException;
-import java.security.interfaces.DSAParams;
-import java.security.interfaces.DSAPublicKey;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-
-import javax.security.auth.x500.X500Principal;
-
-/**
- * An implementation of X.509 certificates.
- *
- * @author Casey Marshall (rsdio@metastatic.org)
- */
-public class X509Certificate extends java.security.cert.X509Certificate
- implements Serializable, GnuPKIExtension
-{
-
- // Constants and fields.
- // ------------------------------------------------------------------------
-
- private static final long serialVersionUID = -2491127588187038216L;
- private static final Logger logger = SystemLogger.SYSTEM;
-
- protected static final OID ID_DSA = new OID ("1.2.840.10040.4.1");
- protected static final OID ID_DSA_WITH_SHA1 = new OID ("1.2.840.10040.4.3");
- protected static final OID ID_RSA = new OID ("1.2.840.113549.1.1.1");
- protected static final OID ID_RSA_WITH_MD2 = new OID ("1.2.840.113549.1.1.2");
- protected static final OID ID_RSA_WITH_MD5 = new OID ("1.2.840.113549.1.1.4");
- protected static final OID ID_RSA_WITH_SHA1 = new OID ("1.2.840.113549.1.1.5");
- protected static final OID ID_ECDSA_WITH_SHA1 = new OID ("1.2.840.10045.4.1");
-
- // This object SHOULD be serialized with an instance of
- // java.security.cert.Certificate.CertificateRep, thus all fields are
- // transient.
-
- // The encoded certificate.
- protected transient byte[] encoded;
-
- // TBSCertificate part.
- protected transient byte[] tbsCertBytes;
- protected transient int version;
- protected transient BigInteger serialNo;
- protected transient OID algId;
- protected transient byte[] algVal;
- protected transient X500DistinguishedName issuer;
- protected transient Date notBefore;
- protected transient Date notAfter;
- protected transient X500DistinguishedName subject;
- protected transient PublicKey subjectKey;
- protected transient BitString issuerUniqueId;
- protected transient BitString subjectUniqueId;
- protected transient Map<OID, Extension> extensions;
-
- // Signature.
- protected transient OID sigAlgId;
- protected transient byte[] sigAlgVal;
- protected transient byte[] signature;
-
- // Constructors.
- // ------------------------------------------------------------------------
-
- /**
- * Create a new X.509 certificate from the encoded data. The input
- * data are expected to be the ASN.1 DER encoding of the certificate.
- *
- * @param encoded The encoded certificate data.
- * @throws IOException If the certificate cannot be read, possibly
- * from a formatting error.
- * @throws CertificateException If the data read is not an X.509
- * certificate.
- */
- public X509Certificate(InputStream encoded)
- throws CertificateException, IOException
- {
- super();
- extensions = new HashMap<OID, Extension>();
- try
- {
- parse(encoded);
- }
- catch (IOException ioe)
- {
- logger.log (Component.X509, "", ioe);
- throw ioe;
- }
- catch (Exception e)
- {
- logger.log (Component.X509, "", e);
- CertificateException ce = new CertificateException(e.getMessage());
- ce.initCause (e);
- throw ce;
- }
- }
-
- protected X509Certificate()
- {
- extensions = new HashMap<OID, Extension>();
- }
-
- // X509Certificate methods.
- // ------------------------------------------------------------------------
-
- public void checkValidity()
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- checkValidity(new Date());
- }
-
- public void checkValidity(Date date)
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- if (date.compareTo(notBefore) < 0)
- {
- throw new CertificateNotYetValidException();
- }
- if (date.compareTo(notAfter) > 0)
- {
- throw new CertificateExpiredException();
- }
- }
-
- public int getVersion()
- {
- return version;
- }
-
- public BigInteger getSerialNumber()
- {
- return serialNo;
- }
-
- public Principal getIssuerDN()
- {
- return issuer;
- }
-
- public X500Principal getIssuerX500Principal()
- {
- return new X500Principal(issuer.getDer());
- }
-
- public Principal getSubjectDN()
- {
- return subject;
- }
-
- public X500Principal getSubjectX500Principal()
- {
- return new X500Principal(subject.getDer());
- }
-
- public Date getNotBefore()
- {
- return (Date) notBefore.clone();
- }
-
- public Date getNotAfter()
- {
- return (Date) notAfter.clone();
- }
-
- public byte[] getTBSCertificate() throws CertificateEncodingException
- {
- return (byte[]) tbsCertBytes.clone();
- }
-
- public byte[] getSignature()
- {
- return (byte[]) signature.clone();
- }
-
- public String getSigAlgName()
- {
- if (sigAlgId.equals(ID_DSA_WITH_SHA1))
- {
- return "SHA1withDSA";
- }
- if (sigAlgId.equals(ID_RSA_WITH_MD2))
- {
- return "MD2withRSA";
- }
- if (sigAlgId.equals(ID_RSA_WITH_MD5))
- {
- return "MD5withRSA";
- }
- if (sigAlgId.equals(ID_RSA_WITH_SHA1))
- {
- return "SHA1withRSA";
- }
- return "unknown";
- }
-
- public String getSigAlgOID()
- {
- return sigAlgId.toString();
- }
-
- public byte[] getSigAlgParams()
- {
- return (byte[]) sigAlgVal.clone();
- }
-
- public boolean[] getIssuerUniqueID()
- {
- if (issuerUniqueId != null)
- {
- return issuerUniqueId.toBooleanArray();
- }
- return null;
- }
-
- public boolean[] getSubjectUniqueID()
- {
- if (subjectUniqueId != null)
- {
- return subjectUniqueId.toBooleanArray();
- }
- return null;
- }
-
- public boolean[] getKeyUsage()
- {
- Extension e = getExtension(KeyUsage.ID);
- if (e != null)
- {
- KeyUsage ku = (KeyUsage) e.getValue();
- boolean[] result = new boolean[9];
- boolean[] b = ku.getKeyUsage().toBooleanArray();
- System.arraycopy(b, 0, result, 0, b.length);
- return result;
- }
- return null;
- }
-
- public List<String> getExtendedKeyUsage() throws CertificateParsingException
- {
- Extension e = getExtension(ExtendedKeyUsage.ID);
- if (e != null)
- {
- List<OID> a = ((ExtendedKeyUsage) e.getValue()).getPurposeIds();
- List<String> b = new ArrayList<String>(a.size());
- for (OID oid : a)
- b.add(oid.toString());
- return Collections.unmodifiableList(b);
- }
- return null;
- }
-
- public int getBasicConstraints()
- {
- Extension e = getExtension(BasicConstraints.ID);
- if (e != null)
- {
- return ((BasicConstraints) e.getValue()).getPathLengthConstraint();
- }
- return -1;
- }
-
- public Collection<List<?>> getSubjectAlternativeNames()
- throws CertificateParsingException
- {
- Extension e = getExtension(SubjectAlternativeNames.ID);
- if (e != null)
- {
- List<GeneralName> names
- = ((SubjectAlternativeNames) e.getValue()).getNames();
- List<List<?>> list = new ArrayList<List<?>>(names.size());
- for (GeneralName name : names)
- {
- List<Object> n = new ArrayList<Object>(2);
- n.add(name.kind().tag());
- n.add(name.name());
- list.add(n);
- }
- return list;
- }
- return null;
- }
-
- public Collection<List<?>> getIssuerAlternativeNames()
- throws CertificateParsingException
- {
- Extension e = getExtension(IssuerAlternativeNames.ID);
- if (e != null)
- {
- List<GeneralName> names
- = ((IssuerAlternativeNames) e.getValue()).getNames();
- List<List<?>> list = new ArrayList<List<?>>(names.size());
- for (GeneralName name : names)
- {
- List<Object> n = new ArrayList<Object>(2);
- n.add(name.kind().tag());
- n.add(name.name());
- list.add(n);
- }
- return list;
- }
- return null;
- }
-
- // X509Extension methods.
- // ------------------------------------------------------------------------
-
- public boolean hasUnsupportedCriticalExtension()
- {
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- Extension e = (Extension) it.next();
- if (e.isCritical() && !e.isSupported())
- return true;
- }
- return false;
- }
-
- public Set<String> getCriticalExtensionOIDs()
- {
- HashSet<String> s = new HashSet<String>();
- for (Extension e : extensions.values())
- {
- if (e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public Set<String> getNonCriticalExtensionOIDs()
- {
- HashSet<String> s = new HashSet<String>();
- for (Extension e : extensions.values())
- {
- if (!e.isCritical())
- s.add(e.getOid().toString());
- }
- return Collections.unmodifiableSet(s);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extension e = getExtension(new OID(oid));
- if (e != null)
- {
- return e.getValue().getEncoded();
- }
- return null;
- }
-
- // GnuPKIExtension method.
- // -------------------------------------------------------------------------
-
- public Extension getExtension(OID oid)
- {
- return (Extension) extensions.get(oid);
- }
-
- public Collection getExtensions()
- {
- return extensions.values();
- }
-
- // Certificate methods.
- // -------------------------------------------------------------------------
-
- public byte[] getEncoded() throws CertificateEncodingException
- {
- return (byte[]) encoded.clone();
- }
-
- public void verify(PublicKey key)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- Signature sig = Signature.getInstance(sigAlgId.toString());
- doVerify(sig, key);
- }
-
- public void verify(PublicKey key, String provider)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- Signature sig = Signature.getInstance(sigAlgId.toString(), provider);
- doVerify(sig, key);
- }
-
- public String toString()
- {
- StringWriter str = new StringWriter();
- PrintWriter out = new PrintWriter(str);
- out.println(X509Certificate.class.getName() + " {");
- out.println(" TBSCertificate {");
- out.println(" version = " + version + ";");
- out.println(" serialNo = " + serialNo + ";");
- out.println(" signature = {");
- out.println(" algorithm = " + getSigAlgName() + ";");
- out.print(" parameters =");
- if (sigAlgVal != null)
- {
- out.println();
- out.print(Util.hexDump(sigAlgVal, " "));
- }
- else
- {
- out.println(" null;");
- }
- out.println(" }");
- out.println(" issuer = " + issuer.getName() + ";");
- out.println(" validity = {");
- out.println(" notBefore = " + notBefore + ";");
- out.println(" notAfter = " + notAfter + ";");
- out.println(" }");
- out.println(" subject = " + subject.getName() + ";");
- out.println(" subjectPublicKeyInfo = {");
- out.println(" algorithm = " + subjectKey.getAlgorithm());
- out.println(" key =");
- out.print(Util.hexDump(subjectKey.getEncoded(), " "));
- out.println(" };");
- out.println(" issuerUniqueId = " + issuerUniqueId + ";");
- out.println(" subjectUniqueId = " + subjectUniqueId + ";");
- out.println(" extensions = {");
- for (Iterator it = extensions.values().iterator(); it.hasNext(); )
- {
- out.println(" " + it.next());
- }
- out.println(" }");
- out.println(" }");
- out.println(" signatureAlgorithm = " + getSigAlgName() + ";");
- out.println(" signatureValue =");
- out.print(Util.hexDump(signature, " "));
- out.println("}");
- return str.toString();
- }
-
- public PublicKey getPublicKey()
- {
- return subjectKey;
- }
-
- public boolean equals(Object other)
- {
- if (!(other instanceof X509Certificate))
- return false;
- try
- {
- if (other instanceof X509Certificate)
- return Arrays.equals(encoded, ((X509Certificate) other).encoded);
- byte[] enc = ((X509Certificate) other).getEncoded();
- if (enc == null)
- return false;
- return Arrays.equals(encoded, enc);
- }
- catch (CertificateEncodingException cee)
- {
- return false;
- }
- }
-
- // Own methods.
- // ------------------------------------------------------------------------
-
- /**
- * Verify this certificate's signature.
- */
- private void doVerify(Signature sig, PublicKey key)
- throws CertificateException, InvalidKeyException, SignatureException
- {
- logger.log (Component.X509, "verifying sig={0} key={1}",
- new Object[] { sig, key });
- sig.initVerify(key);
- sig.update(tbsCertBytes);
- if (!sig.verify(signature))
- {
- throw new CertificateException("signature not validated");
- }
- }
-
- /**
- * Parse a DER stream into an X.509 certificate.
- *
- * @param encoded The encoded bytes.
- */
- private void parse(InputStream encoded) throws Exception
- {
- DERReader der = new DERReader(encoded);
-
- // Certificate ::= SEQUENCE {
- DERValue cert = der.read();
- logger.log (Component.X509, "start Certificate len == {0}",
- Integer.valueOf(cert.getLength()));
-
- this.encoded = cert.getEncoded();
- if (!cert.isConstructed())
- {
- throw new IOException("malformed Certificate");
- }
-
- // TBSCertificate ::= SEQUENCE {
- DERValue tbsCert = der.read();
- if (tbsCert.getValue() != DER.CONSTRUCTED_VALUE)
- {
- throw new IOException("malformed TBSCertificate");
- }
- tbsCertBytes = tbsCert.getEncoded();
- logger.log (Component.X509, "start TBSCertificate len == {0}",
- Integer.valueOf(tbsCert.getLength()));
-
- // Version ::= INTEGER [0] { v1(0), v2(1), v3(2) }
- DERValue val = der.read();
- if (val.getTagClass() == DER.CONTEXT && val.getTag() == 0)
- {
- version = ((BigInteger) der.read().getValue()).intValue() + 1;
- val = der.read();
- }
- else
- {
- version = 1;
- }
- logger.log (Component.X509, "read version == {0}",
- Integer.valueOf(version));
-
- // SerialNumber ::= INTEGER
- serialNo = (BigInteger) val.getValue();
- logger.log (Component.X509, "read serial number == {0}", serialNo);
-
- // AlgorithmIdentifier ::= SEQUENCE {
- val = der.read();
- if (!val.isConstructed())
- {
- throw new IOException("malformed AlgorithmIdentifier");
- }
- int certAlgLen = val.getLength();
- logger.log (Component.X509, "start AlgorithmIdentifier len == {0}",
- Integer.valueOf(certAlgLen));
- val = der.read();
-
- // algorithm OBJECT IDENTIFIER,
- algId = (OID) val.getValue();
- logger.log (Component.X509, "read algorithm ID == {0}", algId);
-
- // parameters ANY DEFINED BY algorithm OPTIONAL }
- if (certAlgLen > val.getEncodedLength())
- {
- val = der.read();
- if (val == null)
- {
- algVal = null;
- }
- else
- {
- algVal = val.getEncoded();
-
- if (val.isConstructed())
- encoded.skip(val.getLength());
- }
- logger.log (Component.X509, "read algorithm parameters == {0}", algVal);
- }
-
- // issuer Name,
- val = der.read();
- issuer = new X500DistinguishedName(val.getEncoded());
- der.skip(val.getLength());
- logger.log (Component.X509, "read issuer == {0}", issuer);
-
- // Validity ::= SEQUENCE {
- // notBefore Time,
- // notAfter Time }
- if (!der.read().isConstructed())
- {
- throw new IOException("malformed Validity");
- }
- notBefore = (Date) der.read().getValue();
- logger.log (Component.X509, "read notBefore == {0}", notBefore);
- notAfter = (Date) der.read().getValue();
- logger.log (Component.X509, "read notAfter == {0}", notAfter);
-
- // subject Name,
- val = der.read();
- subject = new X500DistinguishedName(val.getEncoded());
- der.skip(val.getLength());
- logger.log (Component.X509, "read subject == {0}", subject);
-
- // SubjectPublicKeyInfo ::= SEQUENCE {
- // algorithm AlgorithmIdentifier,
- // subjectPublicKey BIT STRING }
- DERValue spki = der.read();
- if (!spki.isConstructed())
- {
- throw new IOException("malformed SubjectPublicKeyInfo");
- }
- KeyFactory spkFac = KeyFactory.getInstance("X.509");
- subjectKey = spkFac.generatePublic(new X509EncodedKeySpec(spki.getEncoded()));
- der.skip(spki.getLength());
- logger.log (Component.X509, "read subjectPublicKey == {0}", subjectKey);
-
- val = der.read();
- if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 1)
- {
- byte[] b = (byte[]) val.getValue();
- issuerUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);
- logger.log (Component.X509, "read issuerUniqueId == {0}", issuerUniqueId);
- val = der.read();
- }
- if (version >= 2 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 2)
- {
- byte[] b = (byte[]) val.getValue();
- subjectUniqueId = new BitString(b, 1, b.length-1, b[0] & 0xFF);
- logger.log (Component.X509, "read subjectUniqueId == {0}", subjectUniqueId);
- val = der.read();
- }
- if (version >= 3 && val.getTagClass() != DER.UNIVERSAL && val.getTag() == 3)
- {
- val = der.read();
- logger.log (Component.X509, "start Extensions len == {0}",
- Integer.valueOf(val.getLength()));
- int len = 0;
- while (len < val.getLength())
- {
- DERValue ext = der.read();
- logger.log (Component.X509, "start extension len == {0}",
- Integer.valueOf(ext.getLength()));
- Extension e = new Extension(ext.getEncoded());
- extensions.put(e.getOid(), e);
- der.skip(ext.getLength());
- len += ext.getEncodedLength();
- logger.log (Component.X509, "read extension {0} == {1}",
- new Object[] { e.getOid (), e });
- logger.log (Component.X509, "count == {0}", Integer.valueOf(len));
- }
-
- val = der.read ();
- }
-
- logger.log (Component.X509, "read value {0}", val);
- if (!val.isConstructed())
- {
- throw new CertificateException ("malformed AlgorithmIdentifier");
- }
- int sigAlgLen = val.getLength();
- logger.log (Component.X509, "start AlgorithmIdentifier len == {0}",
- Integer.valueOf(sigAlgLen));
- val = der.read();
- sigAlgId = (OID) val.getValue();
- logger.log (Component.X509, "read algorithm id == {0}", sigAlgId);
- if (sigAlgLen > val.getEncodedLength())
- {
- val = der.read();
- if (val.getValue() == null)
- {
- if (subjectKey instanceof DSAPublicKey)
- {
- AlgorithmParameters params =
- AlgorithmParameters.getInstance("DSA");
- DSAParams dsap = ((DSAPublicKey) subjectKey).getParams();
- DSAParameterSpec spec =
- new DSAParameterSpec(dsap.getP(), dsap.getQ(), dsap.getG());
- params.init(spec);
- sigAlgVal = params.getEncoded();
- }
- }
- else
- {
- sigAlgVal = (byte[]) val.getEncoded();
- }
- if (val.isConstructed())
- {
- encoded.skip(val.getLength());
- }
- logger.log (Component.X509, "read parameters == {0}", sigAlgVal);
- }
- signature = ((BitString) der.read().getValue()).toByteArray();
- logger.log (Component.X509, "read signature ==\n{0}", Util.hexDump(signature, ">>>> "));
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java b/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
deleted file mode 100644
index a94b76f..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/* AuthorityKeyIdentifier.java -- Authority key identifier extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.Util;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-public class AuthorityKeyIdentifier extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.35");
-
- private final byte[] keyIdentifier;
- private final GeneralNames authorityCertIssuer;
- private final BigInteger authorityCertSerialNumber;
-
- // Contstructor.
- // -------------------------------------------------------------------------
-
- public AuthorityKeyIdentifier(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
-
- // AuthorityKeyIdentifier ::= SEQUENCE {
- DERValue val = der.read();
- if (!val.isConstructed())
- throw new IOException("malformed AuthorityKeyIdentifier");
- if (val.getLength() > 0)
- val = der.read();
-
- // keyIdentifier [0] KeyIdentifier OPTIONAL,
- // KeyIdentifier ::= OCTET STRING
- if (val.getTagClass() == DER.APPLICATION && val.getTag() == 0)
- {
- keyIdentifier = (byte[]) val.getValue();
- val = der.read();
- }
- else
- keyIdentifier = null;
-
- // authorityCertIssuer [1] GeneralNames OPTIONAL,
- if (val.getTagClass() == DER.APPLICATION && val.getTag() == 1)
- {
- byte[] b = val.getEncoded();
- b[0] = (byte) (DER.CONSTRUCTED|DER.SEQUENCE);
- authorityCertIssuer = new GeneralNames(b);
- der.skip(val.getLength());
- val = der.read();
- }
- else
- authorityCertIssuer = null;
-
- // authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
- if (val.getTagClass() == DER.APPLICATION && val.getTag() == 2)
- {
- authorityCertSerialNumber = new BigInteger((byte[]) val.getValue());
- }
- else
- authorityCertSerialNumber = null;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public byte[] getKeyIdentifier()
- {
- return keyIdentifier != null ? (byte[]) keyIdentifier.clone() : null;
- }
-
- public GeneralNames getAuthorityCertIssuer()
- {
- return authorityCertIssuer;
- }
-
- public BigInteger getAuthorityCertSerialNumber()
- {
- return authorityCertSerialNumber;
- }
-
- public String toString()
- {
- return AuthorityKeyIdentifier.class.getName() + " [ keyId=" +
- (keyIdentifier != null ? Util.toHexString (keyIdentifier, ':') : "nil") +
- " authorityCertIssuer=" + authorityCertIssuer +
- " authorityCertSerialNumbe=" + authorityCertSerialNumber + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java b/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java
deleted file mode 100644
index d8f5c61..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/BasicConstraints.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/* BasicConstraints.java -- the basic constraints extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-public class BasicConstraints extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.19");
-
- private final boolean ca;
- private final int pathLenConstraint;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public BasicConstraints(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
- DERValue bc = der.read();
- if (!bc.isConstructed())
- throw new IOException("malformed BasicConstraints");
- DERValue val = bc;
- if (bc.getLength() > 0)
- val = der.read();
- if (val.getTag() == DER.BOOLEAN)
- {
- ca = ((Boolean) val.getValue()).booleanValue();
- if (val.getEncodedLength() < bc.getLength())
- val = der.read();
- }
- else
- ca = false;
- if (val.getTag() == DER.INTEGER)
- {
- pathLenConstraint = ((BigInteger) val.getValue()).intValue();
- }
- else
- pathLenConstraint = -1;
- }
-
- public BasicConstraints (final boolean ca, final int pathLenConstraint)
- {
- this.ca = ca;
- this.pathLenConstraint = pathLenConstraint;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public boolean isCA()
- {
- return ca;
- }
-
- public int getPathLengthConstraint()
- {
- return pathLenConstraint;
- }
-
- public byte[] getEncoded()
- {
- if (encoded == null)
- {
- List bc = new ArrayList (2);
- bc.add (new DERValue (DER.BOOLEAN, Boolean.valueOf (ca)));
- if (pathLenConstraint >= 0)
- bc.add (new DERValue (DER.INTEGER,
- BigInteger.valueOf ((long) pathLenConstraint)));
- encoded = new DERValue (DER.CONSTRUCTED|DER.SEQUENCE, bc).getEncoded();
- }
- return (byte[]) encoded.clone();
- }
-
- public String toString()
- {
- return BasicConstraints.class.getName() + " [ isCA=" + ca +
- " pathLen=" + pathLenConstraint + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java b/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java
deleted file mode 100644
index 36b1c7b..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/CRLNumber.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* CRLNumber.java -- CRL number extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-public class CRLNumber extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.20");
-
- private final BigInteger number;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public CRLNumber(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERValue val = DERReader.read(encoded);
- if (val.getTag() != DER.INTEGER)
- throw new IOException("malformed CRLNumber");
- number = (BigInteger) val.getValue();
- }
-
- public CRLNumber (final BigInteger number)
- {
- this.number = number;
- }
-
- // Instance method.
- // -------------------------------------------------------------------------
-
- public BigInteger getNumber()
- {
- return number;
- }
-
- public byte[] getEncoded()
- {
- if (encoded == null)
- {
- encoded = new DERValue (DER.INTEGER, number).getEncoded();
- }
- return (byte[]) encoded.clone();
- }
-
- public String toString()
- {
- return CRLNumber.class.getName() + " [ " + number + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java b/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java
deleted file mode 100644
index 874b8ee..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/CertificatePolicies.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/* CertificatePolicies.java -- certificate policy extension.
- Copyright (C) 2004, 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.security.cert.PolicyQualifierInfo;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-public class CertificatePolicies extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.32");
-
- private final List<OID> policies;
- private final Map<OID, List<PolicyQualifierInfo>> policyQualifierInfos;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public CertificatePolicies(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
- DERValue pol = der.read();
- if (!pol.isConstructed())
- throw new IOException("malformed CertificatePolicies");
-
- int len = 0;
- LinkedList<OID> policyList = new LinkedList<OID>();
- HashMap<OID, List<PolicyQualifierInfo>> qualifierMap
- = new HashMap<OID, List<PolicyQualifierInfo>>();
- while (len < pol.getLength())
- {
- DERValue policyInfo = der.read();
- if (!policyInfo.isConstructed())
- throw new IOException("malformed PolicyInformation");
- DERValue val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("malformed CertPolicyId");
- OID policyId = (OID) val.getValue();
- policyList.add(policyId);
- if (val.getEncodedLength() < policyInfo.getLength())
- {
- DERValue qual = der.read();
- int len2 = 0;
- LinkedList<PolicyQualifierInfo> quals = new LinkedList<PolicyQualifierInfo>();
- while (len2 < qual.getLength())
- {
- val = der.read();
- quals.add(new PolicyQualifierInfo(val.getEncoded()));
- der.skip(val.getLength());
- len2 += val.getEncodedLength();
- }
- qualifierMap.put(policyId, quals);
- }
- len += policyInfo.getEncodedLength();
- }
-
- policies = Collections.unmodifiableList(policyList);
- policyQualifierInfos = Collections.unmodifiableMap(qualifierMap);
- }
-
- public CertificatePolicies (final List<OID> policies,
- final Map<OID, List<PolicyQualifierInfo>> policyQualifierInfos)
- {
- for (Iterator it = policies.iterator(); it.hasNext(); )
- if (!(it.next() instanceof OID))
- throw new IllegalArgumentException ("policies must be OIDs");
- for (Iterator it = policyQualifierInfos.entrySet().iterator(); it.hasNext();)
- {
- Map.Entry e = (Map.Entry) it.next();
- if (!(e.getKey() instanceof OID) || !policies.contains (e.getKey()))
- throw new IllegalArgumentException
- ("policyQualifierInfos keys must be OIDs");
- if (!(e.getValue() instanceof List))
- throw new IllegalArgumentException
- ("policyQualifierInfos values must be Lists of PolicyQualifierInfos");
- for (Iterator it2 = ((List) e.getValue()).iterator(); it.hasNext(); )
- if (!(it2.next() instanceof PolicyQualifierInfo))
- throw new IllegalArgumentException
- ("policyQualifierInfos values must be Lists of PolicyQualifierInfos");
- }
- this.policies = Collections.unmodifiableList (new ArrayList<OID>(policies));
- this.policyQualifierInfos = Collections.unmodifiableMap
- (new HashMap<OID, List<PolicyQualifierInfo>>(policyQualifierInfos));
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public List<OID> getPolicies()
- {
- return policies;
- }
-
- /**
- * Returns the list of policy OIDs, formatted as dotted-decimal strings.
- *
- * @return
- */
- public List<String> getPolicyStrings()
- {
- List<String> l = new ArrayList<String>(policies.size());
- for (OID oid : policies)
- {
- l.add(oid.toString());
- }
- return l;
- }
-
- public List<PolicyQualifierInfo> getPolicyQualifierInfos(OID oid)
- {
- return policyQualifierInfos.get(oid);
- }
-
- public byte[] getEncoded()
- {
- if (encoded == null)
- {
- List<DERValue> pol = new ArrayList<DERValue>(policies.size());
- for (Iterator<OID> it = policies.iterator(); it.hasNext(); )
- {
- OID policy = it.next();
- List<PolicyQualifierInfo> qualifiers = getPolicyQualifierInfos(policy);
- List<DERValue> l = new ArrayList<DERValue>(qualifiers == null ? 1 : 2);
- l.add(new DERValue(DER.OBJECT_IDENTIFIER, policy));
- if (qualifiers != null)
- {
- List<DERValue> ll = new ArrayList<DERValue>(qualifiers.size());
- for (Iterator<PolicyQualifierInfo> it2 = qualifiers.iterator(); it.hasNext(); )
- {
- PolicyQualifierInfo info = it2.next();
- try
- {
- ll.add(DERReader.read(info.getEncoded()));
- }
- catch (IOException ioe)
- {
- }
- }
- l.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, ll));
- }
- pol.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, l));
- }
- encoded = new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, pol).getEncoded();
- }
- return (byte[]) encoded.clone();
- }
-
- public String toString()
- {
- return CertificatePolicies.class.getName() + " [ policies=" + policies +
- " policyQualifierInfos=" + policyQualifierInfos + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java b/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java
deleted file mode 100644
index 428013d..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/ExtendedKeyUsage.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* ExtendedKeyUsage.java -- the extended key usage extension.
- Copyright (C) 2004, 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-public class ExtendedKeyUsage extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.37");
-
- private final List<OID> purposeIds;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public ExtendedKeyUsage(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
- DERValue usageList = der.read();
- if (!usageList.isConstructed())
- throw new IOException("malformed ExtKeyUsageSyntax");
- int len = 0;
- purposeIds = new LinkedList<OID>();
- while (len < usageList.getLength())
- {
- DERValue val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("malformed KeyPurposeId");
- purposeIds.add((OID) val.getValue());
- len += val.getEncodedLength();
- }
- }
-
- // Instance method.
- // -------------------------------------------------------------------------
-
- public List<OID> getPurposeIds()
- {
- return Collections.unmodifiableList(purposeIds);
- }
-
- public String toString()
- {
- return ExtendedKeyUsage.class.getName() + " [ " + purposeIds + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/Extension.java b/libjava/classpath/gnu/java/security/x509/ext/Extension.java
deleted file mode 100644
index b740c8a..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/Extension.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/* Extension.java -- an X.509 certificate or CRL extension.
- Copyright (C) 2004, 2006, 2010 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.x509.ext;
-
-import gnu.java.security.Configuration;
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.Util;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.logging.Logger;
-
-public class Extension
-{
- private static final Logger log = Configuration.DEBUG ?
- Logger.getLogger(Extension.class.getName()) : null;
- /**
- * This extension's object identifier.
- */
- protected final OID oid;
-
- /**
- * The criticality flag.
- */
- protected final boolean critical;
-
- /**
- * Whether or not this extension is locally supported.
- */
- protected boolean isSupported;
-
- /**
- * The extension value.
- */
- protected final Value value;
-
- /**
- * The DER encoded form.
- */
- protected byte[] encoded;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public Extension(byte[] encoded) throws IOException
- {
- this.encoded = (byte[]) encoded.clone();
- DERReader der = new DERReader(encoded);
-
- // Extension ::= SEQUENCE {
- DERValue val = der.read();
- if (Configuration.DEBUG)
- log.fine("read val tag == " + val.getTag() + " len == " + val.getLength());
- if (!val.isConstructed())
- throw new IOException("malformed Extension");
-
- // extnID OBJECT IDENTIFIER,
- val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("expecting OBJECT IDENTIFIER");
- oid = (OID) val.getValue();
- if (Configuration.DEBUG)
- log.fine("read oid == " + oid);
-
- // critical BOOLEAN DEFAULT FALSE,
- val = der.read();
- if (val.getTag() == DER.BOOLEAN)
- {
- critical = ((Boolean) val.getValue()).booleanValue();
- val = der.read();
- }
- else
- critical = false;
- if (Configuration.DEBUG)
- log.fine("is critical == " + critical);
-
- // extnValue OCTET STRING }
- if (val.getTag() != DER.OCTET_STRING)
- throw new IOException("expecting OCTET STRING");
- byte[] encval = (byte[]) val.getValue();
- isSupported = true;
- if (oid.equals(AuthorityKeyIdentifier.ID))
- {
- value = new AuthorityKeyIdentifier(encval);
- }
- else if (oid.equals(SubjectKeyIdentifier.ID))
- {
- value = new SubjectKeyIdentifier(encval);
- }
- else if (oid.equals(KeyUsage.ID))
- {
- value = new KeyUsage(encval);
- }
- else if (oid.equals(PrivateKeyUsagePeriod.ID))
- {
- value = new PrivateKeyUsagePeriod(encval);
- }
- else if (oid.equals(CertificatePolicies.ID))
- {
- value = new CertificatePolicies(encval);
- }
- else if (oid.equals (PolicyConstraint.ID))
- {
- value = new PolicyConstraint (encval);
- }
- else if (oid.equals(PolicyMappings.ID))
- {
- value = new PolicyMappings(encval);
- }
- else if (oid.equals(SubjectAlternativeNames.ID))
- {
- value = new SubjectAlternativeNames(encval);
- }
- else if (oid.equals(IssuerAlternativeNames.ID))
- {
- value = new IssuerAlternativeNames(encval);
- }
- else if (oid.equals(BasicConstraints.ID))
- {
- value = new BasicConstraints(encval);
- }
- else if (oid.equals(ExtendedKeyUsage.ID))
- {
- value = new ExtendedKeyUsage(encval);
- }
- else if (oid.equals(CRLNumber.ID))
- {
- value = new CRLNumber(encval);
- }
- else if (oid.equals(ReasonCode.ID))
- {
- value = new ReasonCode(encval);
- }
- else if (oid.equals(NameConstraints.ID))
- {
- value = new NameConstraints(encval);
- }
- else
- {
- value = new Value(encval);
- isSupported = false;
- }
- if (Configuration.DEBUG)
- log.fine("read value == " + value);
- }
-
- public Extension (final OID oid, final Value value, final boolean critical)
- {
- this.oid = oid;
- this.value = value;
- this.critical = critical;
- isSupported = true;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public OID getOid()
- {
- return oid;
- }
-
- public boolean isCritical()
- {
- return critical;
- }
-
- public boolean isSupported()
- {
- return isSupported;
- }
-
- public Value getValue()
- {
- return value;
- }
-
- public byte[] getEncoded()
- {
- if (encoded == null)
- encode();
- return (byte[]) encoded.clone();
- }
-
- public String toString()
- {
- return Extension.class.getName() + " [ id=" + oid + " critical=" +
- critical + " value=" + value + " ]";
- }
-
- public DERValue getDerValue()
- {
- List<DERValue> ext = new ArrayList<DERValue>(3);
- ext.add(new DERValue(DER.OBJECT_IDENTIFIER, oid));
- ext.add(new DERValue(DER.BOOLEAN, Boolean.valueOf(critical)));
- ext.add(new DERValue(DER.OCTET_STRING, value.getEncoded()));
- return new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, ext);
- }
-
- // Own methods.
- // -------------------------------------------------------------------------
-
- private void encode()
- {
- encoded = getDerValue().getEncoded();
- }
-
- // Inner class.
- // -------------------------------------------------------------------------
-
- public static class Value
- {
-
- // Fields.
- // -----------------------------------------------------------------------
-
- protected byte[] encoded;
-
- // Constructor.
- // -----------------------------------------------------------------------
-
- public Value(byte[] encoded)
- {
- this.encoded = (byte[]) encoded.clone();
- }
-
- protected Value() { }
-
- // Instance methods.
- // -----------------------------------------------------------------------
-
- public byte[] getEncoded()
- {
- return (byte[]) encoded;
- }
-
- public int hashCode()
- {
- int result = 0;
- for (int i = 0; i < encoded.length; ++i)
- result = result * 31 + encoded[i];
- return result;
- }
-
- public boolean equals(Object o)
- {
- if (!(o instanceof Value))
- return false;
- return Arrays.equals(encoded, ((Value) o).encoded);
- }
-
- public String toString()
- {
- return Util.toHexString(encoded, ':');
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/GeneralName.java b/libjava/classpath/gnu/java/security/x509/ext/GeneralName.java
deleted file mode 100644
index f399de1..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/GeneralName.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/* GeneralName.java -- a GeneralName.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security.x509.ext;
-
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.Util;
-
-import java.io.IOException;
-import java.util.Arrays;
-
-/**
- * The GeneralName structure from X.509.
- *
- * <pre>
- GeneralName ::= CHOICE {
- otherName [0] OtherName,
- rfc822Name [1] IA5String,
- dNSName [2] IA5String,
- x400Address [3] ORAddress,
- directoryName [4] Name,
- ediPartyName [5] EDIPartyName,
- uniformResourceIdentifier [6] IA5String,
- iPAddress [7] OCTET STRING,
- registeredID [8] OBJECT IDENTIFIER }
-
- OtherName ::= SEQUENCE {
- type-id OBJECT IDENTIFIER,
- value [0] EXPLICIT ANY DEFINED BY type-id }
-
- EDIPartyName ::= SEQUENCE {
- nameAssigner [0] DirectoryString OPTIONAL,
- partyName [1] DirectoryString }
-</pre>
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class GeneralName
-{
- public static enum Kind
- {
- otherName (0),
- rfc822Name (1),
- dNSName (2),
- x400Address (3),
- directoryName (4),
- ediPartyName (5),
- uniformResourceIdentifier (6),
- iPAddress (7),
- registeredId (8);
-
- private int tag;
-
- private Kind(int tag)
- {
- this.tag = tag;
- }
-
- public static Kind forTag(final int tag)
- {
- switch (tag)
- {
- case 0: return otherName;
- case 1: return rfc822Name;
- case 2: return dNSName;
- case 3: return x400Address;
- case 4: return directoryName;
- case 5: return ediPartyName;
- case 6: return uniformResourceIdentifier;
- case 7: return iPAddress;
- case 8: return registeredId;
- }
-
- throw new IllegalArgumentException("invalid tag: " + tag);
- }
-
- public int tag()
- {
- return tag;
- }
- };
-
- private final Kind kind;
- private final byte[] name;
- private final byte[] encoded;
-
- public GeneralName(byte[] encoded) throws IOException
- {
- DERReader reader = new DERReader(encoded);
- DERValue value = reader.read();
-
- if (value.getTagClass() != DER.CONTEXT)
- throw new IOException("malformed GeneralName");
-
- this.encoded = value.getEncoded();
-
- kind = Kind.forTag(value.getTag());
- switch (kind)
- {
- case otherName:
- name = value.getEncoded();
- name[0] = (byte) (DER.CONSTRUCTED | DER.SEQUENCE);
- // Skip the two fields of the name.
- reader.read(); // OID
- reader.read(); // Octet string
- break;
-
- case rfc822Name:
- name = (byte[]) value.getValue();
- break;
-
- case dNSName:
- name = (byte[]) value.getValue();
- break;
-
- case x400Address:
- name = (byte[]) value.getValue();
- break;
-
- case directoryName:
- name = value.getEncoded();
- name[0] = (byte) (DER.CONSTRUCTED | DER.SEQUENCE);
- break;
-
- case ediPartyName:
- name = value.getEncoded();
- name[0] = (byte) (DER.CONSTRUCTED | DER.SEQUENCE);
- break;
-
- case uniformResourceIdentifier:
- name = (byte[]) value.getValue();
- break;
-
- case iPAddress:
- name = (byte[]) value.getValue();
- break;
-
- case registeredId:
- name = value.getEncoded();
- name[0] = DER.OBJECT_IDENTIFIER;
- break;
-
- default:
- name = null; // Not reached.
- }
- }
-
- public GeneralName(Kind kind, byte[] name)
- {
- this.kind = kind;
- this.name = (byte[]) name.clone();
- this.encoded = null;
- }
-
- public Kind kind()
- {
- return kind;
- }
-
- public byte[] name()
- {
- return (byte[]) name.clone();
- }
-
- public byte[] encoded()
- {
- try
- {
- return (byte[]) encoded.clone();
- }
- catch (NullPointerException npe)
- {
- return null;
- }
- }
-
- public boolean equals(Object o)
- {
- try
- {
- GeneralName that = (GeneralName) o;
- return (that.kind() == kind() && Arrays.equals(name, that.name));
- }
- catch (ClassCastException cce)
- {
- return false;
- }
- }
-
- public String toString()
- {
- return (super.toString() + " [ kind=" + kind + "; name=" +
- Util.hexDump(name, "") + " ]");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java b/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java
deleted file mode 100644
index f56ee96..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/GeneralNames.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* GeneralNames.java -- the GeneralNames object
- Copyright (C) 2004, 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.x509.ext;
-
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-public class GeneralNames
-{
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- private List<GeneralName> names;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public GeneralNames(final byte[] encoded) throws IOException
- {
- names = new LinkedList<GeneralName>();
- DERReader der = new DERReader(encoded);
- DERValue nameList = der.read();
- if (!nameList.isConstructed())
- throw new IOException("malformed GeneralNames");
- int len = 0;
- while (len < nameList.getLength())
- {
- DERValue name = der.read();
- GeneralName generalName = new GeneralName(name.getEncoded());
- names.add(generalName);
- len += name.getEncodedLength();
- }
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public List<GeneralName> getNames()
- {
- return Collections.unmodifiableList(names);
- }
-
- public String toString()
- {
- return GeneralNames.class.getName() + " [ " + names + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/GeneralSubtree.java b/libjava/classpath/gnu/java/security/x509/ext/GeneralSubtree.java
deleted file mode 100644
index 5d688de..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/GeneralSubtree.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/* GeneralSubtree.java --
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security.x509.ext;
-
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-/**
- * The GeneralSubtree structure, a part of the {@link NameConstraints}
- * extension.
- *
- * <pre>
- GeneralSubtree ::= SEQUENCE {
- base GeneralName,
- minimum [0] BaseDistance DEFAULT 0,
- maximum [1] BaseDistance OPTIONAL }
-
- BaseDistance ::= INTEGER (0..MAX)</pre>
- *
- * @author Casey Marshall (csm@gnu.org)
- */
-public class GeneralSubtree
-{
- private final GeneralName base;
- private final int minimum;
- private final int maximum;
-
- public GeneralSubtree(byte[] encoded) throws IOException
- {
- DERReader reader = new DERReader(encoded);
- DERValue generalSubtree = reader.read();
-
- if (!generalSubtree.isConstructed())
- throw new IOException("malformed GeneralSubtree");
-
- DERValue generalName = reader.read();
- base = new GeneralName(generalName.getEncoded());
- if (generalName.isConstructed())
- reader.skip(generalName.getLength());
-
- int len = generalName.getEncodedLength();
- if (len < generalSubtree.getLength())
- {
- DERValue distance = reader.read();
- if (distance.getTag() == 0)
- {
- minimum = ((BigInteger) distance.getValue()).intValue();
- len += distance.getEncodedLength();
- if (len < generalSubtree.getLength())
- {
- distance = reader.read();
- if (distance.getTag() != 1)
- throw new IOException("unexpected tag "
- + distance.getTag() +
- " (expected 1 for GeneralSubtree maximum distance)");
- maximum = ((BigInteger) distance.getValue()).intValue();
- }
- else
- {
- maximum = -1;
- }
- }
- else if (distance.getTag() == 1)
- {
- minimum = 1;
- maximum = ((BigInteger) distance.getValue()).intValue();
- }
- else
- {
- throw new IOException("unexpected tag " + distance.getTag()
- + " (expected 0 or 1 for GeneralSubtree distance)");
- }
- }
- else
- {
- minimum = 0;
- maximum = -1;
- }
- }
-
- /**
- * Returns the base name.
- *
- * @return The base name.
- */
- public GeneralName base()
- {
- return base;
- }
-
- /**
- * Returns the minimum base distance, possibly zero.
- *
- * @return The minimum base distance.
- */
- public int minimum()
- {
- return minimum;
- }
-
- /**
- * Returns the maximum base distance, or -1 if this value was not specified.
- *
- * @return The maximum base distance.
- */
- public int maximum()
- {
- return maximum;
- }
-
- public String toString()
- {
- return (GeneralSubtree.class.getName() + " [ base=" + base
- + "; minimum=" + minimum + "; maximim=" + maximum
- + " ]");
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java b/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java
deleted file mode 100644
index 080070b..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/IssuerAlternativeNames.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/* IssuerAlternatuveNames.java -- issuer alternative names extension.
- Copyright (C) 2004, 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.x509.ext;
-
-import gnu.java.security.OID;
-
-import java.io.IOException;
-import java.util.List;
-
-public class IssuerAlternativeNames extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.18");
-
- private final GeneralNames names;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public IssuerAlternativeNames(final byte[] encoded) throws IOException
- {
- super(encoded);
- names = new GeneralNames(encoded);
- }
-
- // Instance method.
- // -------------------------------------------------------------------------
-
- public List<GeneralName> getNames()
- {
- return names.getNames();
- }
-
- public String toString()
- {
- return IssuerAlternativeNames.class.getName() + " [ " + names + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java b/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java
deleted file mode 100644
index dcd9818..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/KeyUsage.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* KeyUsage.java -- the key usage extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.BitString;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-
-public class KeyUsage extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.15");
- public static final int DIGITAL_SIGNATURE = 0;
- public static final int NON_REPUDIATION = 1;
- public static final int KEY_ENCIPHERMENT = 2;
- public static final int DATA_ENCIPHERMENT = 3;
- public static final int KEY_AGREEMENT = 4;
- public static final int KEY_CERT_SIGN = 5;
- public static final int CRL_SIGN = 6;
- public static final int ENCIPHER_ONLY = 7;
- public static final int DECIPHER_ONLY = 8;
-
- private final BitString keyUsage;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public KeyUsage(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERValue val = DERReader.read(encoded);
- if (val.getTag() != DER.BIT_STRING)
- throw new IOException("malformed KeyUsage");
- keyUsage = (BitString) val.getValue();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public BitString getKeyUsage()
- {
- return keyUsage;
- }
-
- public String toString()
- {
- return KeyUsage.class.getName() + " [ " + keyUsage + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/NameConstraints.java b/libjava/classpath/gnu/java/security/x509/ext/NameConstraints.java
deleted file mode 100644
index 8f374d5..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/NameConstraints.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/* NameConstraints.java -- the NameConstraints X.509 extension.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.ext.Extension.Value;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * The NameConstraints extension. From RFC 3280, section 4.2.1.11, this
- * extension is defined as:
- *
- * <pre>
- id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
-
- NameConstraints ::= SEQUENCE {
- permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- excludedSubtrees [1] GeneralSubtrees OPTIONAL }
-
- GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
-
- GeneralSubtree ::= SEQUENCE {
- base GeneralName,
- minimum [0] BaseDistance DEFAULT 0,
- maximum [1] BaseDistance OPTIONAL }
-
- BaseDistance ::= INTEGER (0..MAX)
- </pre>
- *
- * See also the classes {@link GeneralNames} and {@link GeneralSubtree}.
- *
- * @author csm
- */
-public class NameConstraints extends Value
-{
- public static final OID ID = new OID("2.5.29.30");
-
- private List<GeneralSubtree> permittedSubtrees;
- private List<GeneralSubtree> excludedSubtrees;
-
- public NameConstraints(byte[] encoded) throws IOException
- {
- super(encoded);
-
- DERReader der = new DERReader(encoded);
- DERValue value = der.read();
- if (!value.isConstructed())
- {
- throw new IOException("malformed NameConstraints");
- }
-
- permittedSubtrees = new LinkedList<GeneralSubtree>();
- excludedSubtrees = new LinkedList<GeneralSubtree>();
- int len = 0;
- if (len < value.getLength())
- {
- DERValue subtrees = der.read();
- if (subtrees.getTag() == 0)
- {
- int len2 = 0;
- while (len2 < subtrees.getLength())
- {
- DERValue subtree = der.read();
- permittedSubtrees.add(new GeneralSubtree(subtree.getEncoded()));
- der.skip(subtree.getLength());
- len2 += subtree.getEncodedLength();
- }
- len += subtrees.getEncodedLength();
-
- if (len < value.getLength())
- {
- subtrees = der.read();
- if (subtrees.getTag() != 1)
- throw new IOException("unexpected tag " + subtrees.getTag()
- + " (expecting 1 for excludedSubtrees)");
- len2 = 0;
- while (len2 < subtrees.getLength())
- {
- DERValue subtree = der.read();
- excludedSubtrees.add(new GeneralSubtree(subtree.getEncoded()));
- der.skip(subtree.getLength());
- len2 += subtree.getEncodedLength();
- }
- }
- }
- else if (subtrees.getTag() == 1)
- {
- int len2 = 0;
- while (len2 < subtrees.getLength())
- {
- DERValue subtree = der.read();
- excludedSubtrees.add(new GeneralSubtree(subtree.getEncoded()));
- der.skip(subtree.getLength());
- len2 += subtree.getEncodedLength();
- }
- }
- else
- throw new IOException("unexpected tag " + subtrees.getTag()
- + " (expecting 0 or 1)");
- }
- }
-
- public List<GeneralSubtree> permittedSubtrees()
- {
- return Collections.unmodifiableList(permittedSubtrees);
- }
-
- public List<GeneralSubtree> excludedSubtrees()
- {
- return Collections.unmodifiableList(excludedSubtrees);
- }
-
- public String toString()
- {
- return NameConstraints.class.getName() + " [ permittedSubtrees="
- + permittedSubtrees + "; excludedSubtrees=" + excludedSubtrees
- + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java b/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java
deleted file mode 100644
index 20cf552..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/PolicyConstraint.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/* PolicyConstraint.java -- policyConstraint extension
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-public class PolicyConstraint extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID ("2.5.29.36");
-
- private final int requireExplicitPolicy;
- private final int inhibitPolicyMapping;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public PolicyConstraint (final byte[] encoded) throws IOException
- {
- super (encoded);
- int rpc = -1, ipm = -1;
- DERReader der = new DERReader(encoded);
- DERValue pc = der.read();
- if (!pc.isConstructed())
- throw new IOException("malformed PolicyConstraints");
- DERValue val;
- int len = pc.getLength();
- while (len > 0)
- {
- val = der.read();
- if (val.getTag() == 0)
- rpc = new BigInteger ((byte[]) val.getValue()).intValue();
- else if (val.getTag() == 1)
- ipm = new BigInteger ((byte[]) val.getValue()).intValue();
- else
- throw new IOException ("invalid policy constraint");
- len -= val.getEncodedLength();
- }
-
- requireExplicitPolicy = rpc;
- inhibitPolicyMapping = ipm;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public int getRequireExplicitPolicy()
- {
- return requireExplicitPolicy;
- }
-
- public int getInhibitPolicyMapping()
- {
- return inhibitPolicyMapping;
- }
-
- public String toString()
- {
- return PolicyConstraint.class.getName() + " [ requireExplicitPolicy=" +
- requireExplicitPolicy + " inhibitPolicyMapping=" + inhibitPolicyMapping
- + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java b/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java
deleted file mode 100644
index 0493ed8..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/PolicyMappings.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/* PolicyMappings.java -- policy mappings extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-public class PolicyMappings extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.33");
-
- private final Map mappings;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public PolicyMappings(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
- DERValue maps = der.read();
- if (!maps.isConstructed())
- throw new IOException("malformed PolicyMappings");
- int len = 0;
- HashMap _mappings = new HashMap();
- while (len < maps.getLength())
- {
- DERValue map = der.read();
- if (!map.isConstructed())
- throw new IOException("malformed PolicyMapping");
- DERValue val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("malformed PolicyMapping");
- OID issuerPolicy = (OID) val.getValue();
- val = der.read();
- if (val.getTag() != DER.OBJECT_IDENTIFIER)
- throw new IOException("malformed PolicyMapping");
- OID subjectPolicy = (OID) val.getValue();
- _mappings.put(issuerPolicy, subjectPolicy);
- len += map.getEncodedLength();
- }
- mappings = Collections.unmodifiableMap(_mappings);
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public OID getSubjectDomainPolicy(OID issuerDomainPolicy)
- {
- return (OID) mappings.get(issuerDomainPolicy);
- }
-
- public String toString()
- {
- return PolicyMappings.class.getName() + " [ " + mappings + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java b/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
deleted file mode 100644
index 3b531c0..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/PrivateKeyUsagePeriod.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/* PrivateKeyUsagePeriod.java -- private key usage period extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.util.Date;
-
-public class PrivateKeyUsagePeriod extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.16");
-
- private final Date notBefore;
- private final Date notAfter;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public PrivateKeyUsagePeriod(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERReader der = new DERReader(encoded);
- DERValue val = der.read();
- if (!val.isConstructed())
- throw new IOException("malformed PrivateKeyUsagePeriod");
- if (val.getLength() > 0)
- val = der.read();
- if (val.getTagClass() == DER.APPLICATION || val.getTag() == 0)
- {
- notBefore = (Date) val.getValueAs (DER.GENERALIZED_TIME);
- val = der.read();
- }
- else
- notBefore = null;
- if (val.getTagClass() == DER.APPLICATION || val.getTag() == 1)
- {
- notAfter = (Date) val.getValueAs (DER.GENERALIZED_TIME);
- }
- else
- notAfter = null;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public Date getNotBefore()
- {
- return notBefore != null ? (Date) notBefore.clone() : null;
- }
-
- public Date getNotAfter()
- {
- return notAfter != null ? (Date) notAfter.clone() : null;
- }
-
- public String toString()
- {
- return PrivateKeyUsagePeriod.class.getName() + " [ notBefore=" + notBefore
- + " notAfter=" + notAfter + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java b/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java
deleted file mode 100644
index a6d59e4..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/ReasonCode.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ReasonCode.java -- a reason code for a certificate revocation.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-public class ReasonCode extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.21");
-
- public final int reason;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public ReasonCode(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERValue val = DERReader.read(encoded);
- if (val.getTag() != DER.ENUMERATED)
- throw new IOException("malformed CRLReason");
- reason = ((BigInteger) val.getValue()).intValue();
- if (reason < 0 || reason == 7 || reason > 10)
- throw new IOException("illegal reason: " + reason);
- }
-
- // Instance method.
- // -------------------------------------------------------------------------
-
- public int getReasonCode()
- {
- return reason;
- }
-
- public String toString()
- {
- return ReasonCode.class.getName() + " [ " + reason + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java b/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java
deleted file mode 100644
index 8b6347d..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/SubjectAlternativeNames.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/* SubjectAlternatuveNames.java -- subject alternative names extension.
- Copyright (C) 2004, 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.x509.ext;
-
-import gnu.java.security.OID;
-
-import java.io.IOException;
-import java.util.List;
-
-public class SubjectAlternativeNames extends Extension.Value
-{
-
- // Constants and fields.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.17");
-
- private final GeneralNames names;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public SubjectAlternativeNames(final byte[] encoded) throws IOException
- {
- super(encoded);
- names = new GeneralNames(encoded);
- }
-
- // Instance method.
- // -------------------------------------------------------------------------
-
- public List<GeneralName> getNames()
- {
- return names.getNames();
- }
-
- public String toString()
- {
- return SubjectAlternativeNames.class.getName() + " [ " + names + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java b/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
deleted file mode 100644
index fc65abe..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/SubjectKeyIdentifier.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* SubjectKeyIdentifier.java -- subject key identifier extension.
- Copyright (C) 2004 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.x509.ext;
-
-import gnu.java.security.OID;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.Util;
-
-import java.io.IOException;
-
-public class SubjectKeyIdentifier extends Extension.Value
-{
-
- // Constant.
- // -------------------------------------------------------------------------
-
- public static final OID ID = new OID("2.5.29.14");
-
- private final byte[] keyIdentifier;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- public SubjectKeyIdentifier(final byte[] encoded) throws IOException
- {
- super(encoded);
- DERValue val = DERReader.read(encoded);
- if (val.getTag() != DER.OCTET_STRING)
- throw new IOException("malformed SubjectKeyIdentifier");
- keyIdentifier = (byte[]) val.getValue();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public byte[] getKeyIdentifier()
- {
- return (byte[]) keyIdentifier.clone();
- }
-
- public String toString()
- {
- return SubjectKeyIdentifier.class.getName() + " [ " +
- Util.toHexString (keyIdentifier, ':') + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/security/x509/ext/package.html b/libjava/classpath/gnu/java/security/x509/ext/package.html
deleted file mode 100644
index cc44e55c..0000000
--- a/libjava/classpath/gnu/java/security/x509/ext/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.x509.ext package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.x509.ext</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/security/x509/package.html b/libjava/classpath/gnu/java/security/x509/package.html
deleted file mode 100644
index 8b0ba00..0000000
--- a/libjava/classpath/gnu/java/security/x509/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.security.x509 package.
- Copyright (C) 2005 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. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.security.x509</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>