diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2006-05-18 17:29:21 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2006-05-18 17:29:21 +0000 |
commit | 4f9533c7722fa07511a94d005227961f4a4dec23 (patch) | |
tree | 9f9c470de62ee62fba1331a396450d728d2b1fad /libjava/classpath/javax/crypto | |
parent | eaec4980e139903ae9b274d1abcf3a13946603a8 (diff) | |
download | gcc-4f9533c7722fa07511a94d005227961f4a4dec23.zip gcc-4f9533c7722fa07511a94d005227961f4a4dec23.tar.gz gcc-4f9533c7722fa07511a94d005227961f4a4dec23.tar.bz2 |
Imported GNU Classpath 0.90
Imported GNU Classpath 0.90
* scripts/makemake.tcl: LocaleData.java moved to gnu/java/locale.
* sources.am: Regenerated.
* gcj/javaprims.h: Regenerated.
* Makefile.in: Regenerated.
* gcj/Makefile.in: Regenerated.
* include/Makefile.in: Regenerated.
* testsuite/Makefile.in: Regenerated.
* gnu/java/lang/VMInstrumentationImpl.java: New override.
* gnu/java/net/local/LocalSocketImpl.java: Likewise.
* gnu/classpath/jdwp/VMMethod.java: Likewise.
* gnu/classpath/jdwp/VMVirtualMachine.java: Update to latest
interface.
* java/lang/Thread.java: Add UncaughtExceptionHandler.
* java/lang/reflect/Method.java: Implements GenericDeclaration and
isSynthetic(),
* java/lang/reflect/Field.java: Likewise.
* java/lang/reflect/Constructor.java
* java/lang/Class.java: Implements Type, GenericDeclaration,
getSimpleName() and getEnclosing*() methods.
* java/lang/Class.h: Add new public methods.
* java/lang/Math.java: Add signum(), ulp() and log10().
* java/lang/natMath.cc (log10): New function.
* java/security/VMSecureRandom.java: New override.
* java/util/logging/Logger.java: Updated to latest classpath
version.
* java/util/logging/LogManager.java: New override.
From-SVN: r113887
Diffstat (limited to 'libjava/classpath/javax/crypto')
-rw-r--r-- | libjava/classpath/javax/crypto/Cipher.java | 82 | ||||
-rw-r--r-- | libjava/classpath/javax/crypto/CipherSpi.java | 49 | ||||
-rw-r--r-- | libjava/classpath/javax/crypto/KeyGenerator.java | 4 |
3 files changed, 125 insertions, 10 deletions
diff --git a/libjava/classpath/javax/crypto/Cipher.java b/libjava/classpath/javax/crypto/Cipher.java index b9dee74..1f68ea6 100644 --- a/libjava/classpath/javax/crypto/Cipher.java +++ b/libjava/classpath/javax/crypto/Cipher.java @@ -1,5 +1,5 @@ /* Cipher.java -- Interface to a cryptographic cipher. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,6 +40,9 @@ package javax.crypto; import gnu.java.security.Engine; +import java.nio.ByteBuffer; +import java.nio.ReadOnlyBufferException; + import java.security.AlgorithmParameters; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; @@ -496,7 +499,6 @@ public class Cipher { throw new IllegalStateException("neither encrypting nor decrypting"); } - state = INITIAL_STATE; return cipherSpi.engineDoFinal(input, inputOffset, inputLength); } @@ -532,7 +534,6 @@ public class Cipher { throw new IllegalStateException("neither encrypting nor decrypting"); } - state = INITIAL_STATE; return cipherSpi.engineDoFinal(new byte[0], 0, 0, output, outputOffset); } @@ -576,7 +577,6 @@ public class Cipher { throw new IllegalStateException("neither encrypting nor decrypting"); } - state = INITIAL_STATE; return cipherSpi.engineDoFinal(input, inputOffset, inputLength, output, outputOffset); } @@ -590,6 +590,43 @@ public class Cipher } /** + * Finishes a multi-part transformation with, or completely + * transforms, a byte buffer, and stores the result into the output + * buffer. + * + * @param input The input buffer. + * @param output The output buffer. + * @return The number of bytes stored into the output buffer. + * @throws IllegalArgumentException If the input and output buffers + * are the same object. + * @throws IllegalStateException If this cipher was not initialized + * for encryption or decryption. + * @throws ReadOnlyBufferException If the output buffer is not + * writable. + * @throws IllegalBlockSizeException If this cipher requires a total + * input that is a multiple of its block size to complete this + * transformation. + * @throws ShortBufferException If the output buffer is not large + * enough to hold the transformed bytes. + * @throws BadPaddingException If the cipher is a block cipher with + * a padding scheme, and the decrypted bytes do not end with a + * valid padding. + * @since 1.5 + */ + public final int doFinal (ByteBuffer input, ByteBuffer output) + throws ReadOnlyBufferException, ShortBufferException, + BadPaddingException, IllegalBlockSizeException + { + if (input == output) + throw new IllegalArgumentException + ("input and output buffers cannot be the same"); + if (state != ENCRYPT_MODE && state != DECRYPT_MODE) + throw new IllegalStateException + ("not initialized for encrypting or decrypting"); + return cipherSpi.engineDoFinal (input, output); + } + + /** * Returns the size an output buffer needs to be if this cipher is * updated with a number of bytes. * @@ -672,11 +709,11 @@ public class Cipher */ public final void init(int opmode, Key key) throws InvalidKeyException { - state = opmode; if (cipherSpi != null) { cipherSpi.engineInit(opmode, key, new SecureRandom()); } + state = opmode; } /** @@ -791,11 +828,11 @@ public class Cipher public final void init(int opmode, Key key, SecureRandom random) throws InvalidKeyException { - state = opmode; if (cipherSpi != null) { cipherSpi.engineInit(opmode, key, random); } + state = opmode; } /** @@ -890,11 +927,11 @@ public class Cipher SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException { - state = opmode; if (cipherSpi != null) { cipherSpi.engineInit(opmode, key, params, random); } + state = opmode; } /** @@ -925,11 +962,11 @@ public class Cipher SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException { - state = opmode; if (cipherSpi != null) { cipherSpi.engineInit(opmode, key, params, random); } + state = opmode; } /** @@ -1068,6 +1105,35 @@ public class Cipher } /** + * Continue a multi-part transformation on a byte buffer, storing + * the transformed bytes into another buffer. + * + * @param input The input buffer. + * @param output The output buffer. + * @return The number of bytes stored in <i>output</i>. + * @throws IllegalArgumentException If the two buffers are the same + * object. + * @throws IllegalStateException If this cipher was not initialized + * for encrypting or decrypting. + * @throws ReadOnlyBufferException If the output buffer is not + * writable. + * @throws ShortBufferException If the output buffer does not have + * enough available space for the transformed bytes. + * @since 1.5 + */ + public final int update (ByteBuffer input, ByteBuffer output) + throws ReadOnlyBufferException, ShortBufferException + { + if (input == output) + throw new IllegalArgumentException + ("input and output buffers must be different"); + if (state != ENCRYPT_MODE && state != DECRYPT_MODE) + throw new IllegalStateException + ("not initialized for encryption or decryption"); + return cipherSpi.engineUpdate (input, output); + } + + /** * Wrap a key. * * @param key The key to wrap. diff --git a/libjava/classpath/javax/crypto/CipherSpi.java b/libjava/classpath/javax/crypto/CipherSpi.java index a51a3ae..194c1da 100644 --- a/libjava/classpath/javax/crypto/CipherSpi.java +++ b/libjava/classpath/javax/crypto/CipherSpi.java @@ -1,5 +1,5 @@ /* CipherSpi.java -- The cipher service provider interface. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,6 +38,8 @@ exception statement from your version. */ package javax.crypto; +import java.nio.ByteBuffer; + import java.security.AlgorithmParameters; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; @@ -179,6 +181,31 @@ public abstract class CipherSpi throws IllegalBlockSizeException, BadPaddingException, ShortBufferException; /** + * @since 1.5 + */ + protected int engineDoFinal (ByteBuffer input, ByteBuffer output) + throws BadPaddingException, IllegalBlockSizeException, + ShortBufferException + { + int total = 0; + byte[] inbuf = new byte[256]; + while (input.hasRemaining ()) + { + int in = Math.min (inbuf.length, input.remaining ()); + input.get (inbuf, 0, in); + byte[] outbuf = new byte[engineGetOutputSize (in)]; + int out = 0; + if (input.hasRemaining ()) // i.e., we have more 'update' calls + out = engineUpdate (inbuf, 0, in, outbuf, 0); + else + out = engineDoFinal (inbuf, 0, in, outbuf, 0); + output.put (outbuf, 0, out); + total += out; + } + return total; + } + + /** * Returns the block size of the underlying cipher. * * @return The block size. @@ -380,6 +407,26 @@ public abstract class CipherSpi throws ShortBufferException; /** + * @since 1.5 + */ + protected int engineUpdate (ByteBuffer input, ByteBuffer output) + throws ShortBufferException + { + int total = 0; + byte[] inbuf = new byte[256]; + while (input.hasRemaining ()) + { + int in = Math.min (inbuf.length, input.remaining ()); + input.get (inbuf, 0, in); + byte[] outbuf = new byte[engineGetOutputSize (in)]; + int out = engineUpdate (inbuf, 0, in, outbuf, 0); + output.put (outbuf, 0, out); + total += out; + } + return total; + } + + /** * <p>Wrap a key.</p> * * <p>For compatibility this method is not declared diff --git a/libjava/classpath/javax/crypto/KeyGenerator.java b/libjava/classpath/javax/crypto/KeyGenerator.java index c3f4cee..e824c64 100644 --- a/libjava/classpath/javax/crypto/KeyGenerator.java +++ b/libjava/classpath/javax/crypto/KeyGenerator.java @@ -160,9 +160,11 @@ public class KeyGenerator { try { - return new KeyGenerator((KeyGeneratorSpi) + KeyGenerator instance = new KeyGenerator((KeyGeneratorSpi) Engine.getInstance(SERVICE, algorithm, provider), provider, algorithm); + instance.init(new SecureRandom()); + return instance; } catch (InvocationTargetException ite) { |