aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/javax/crypto/CipherSpi.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/javax/crypto/CipherSpi.java')
-rw-r--r--libjava/classpath/javax/crypto/CipherSpi.java49
1 files changed, 48 insertions, 1 deletions
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