Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pg/src/main/java/org/spongycastle/openpgp/operator/bc/BcUtil.java')
-rw-r--r--pg/src/main/java/org/spongycastle/openpgp/operator/bc/BcUtil.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/pg/src/main/java/org/spongycastle/openpgp/operator/bc/BcUtil.java b/pg/src/main/java/org/spongycastle/openpgp/operator/bc/BcUtil.java
new file mode 100644
index 00000000..c3be8c83
--- /dev/null
+++ b/pg/src/main/java/org/spongycastle/openpgp/operator/bc/BcUtil.java
@@ -0,0 +1,75 @@
+package org.spongycastle.openpgp.operator.bc;
+
+import java.io.InputStream;
+
+import org.spongycastle.crypto.BlockCipher;
+import org.spongycastle.crypto.BufferedBlockCipher;
+import org.spongycastle.crypto.io.CipherInputStream;
+import org.spongycastle.crypto.modes.CFBBlockCipher;
+import org.spongycastle.crypto.modes.OpenPGPCFBBlockCipher;
+import org.spongycastle.crypto.params.KeyParameter;
+import org.spongycastle.crypto.params.ParametersWithIV;
+import org.spongycastle.openpgp.operator.PGPDataDecryptor;
+import org.spongycastle.openpgp.operator.PGPDigestCalculator;
+
+class BcUtil
+{
+ static BufferedBlockCipher createStreamCipher(boolean forEncryption, BlockCipher engine, boolean withIntegrityPacket, byte[] key)
+ {
+ BufferedBlockCipher c;
+
+ if (withIntegrityPacket)
+ {
+ c = new BufferedBlockCipher(new CFBBlockCipher(engine, engine.getBlockSize() * 8));
+ }
+ else
+ {
+ c = new BufferedBlockCipher(new OpenPGPCFBBlockCipher(engine));
+ }
+
+ KeyParameter keyParameter = new KeyParameter(key);
+
+ if (withIntegrityPacket)
+ {
+ c.init(forEncryption, new ParametersWithIV(keyParameter, new byte[engine.getBlockSize()]));
+ }
+ else
+ {
+ c.init(forEncryption, keyParameter);
+ }
+
+ return c;
+ }
+
+ public static PGPDataDecryptor createDataDecryptor(boolean withIntegrityPacket, BlockCipher engine, byte[] key)
+ {
+ final BufferedBlockCipher c = createStreamCipher(false, engine, withIntegrityPacket, key);
+
+ return new PGPDataDecryptor()
+ {
+ public InputStream getInputStream(InputStream in)
+ {
+ return new CipherInputStream(in, c);
+ }
+
+ public int getBlockSize()
+ {
+ return c.getBlockSize();
+ }
+
+ public PGPDigestCalculator getIntegrityCalculator()
+ {
+ return new SHA1PGPDigestCalculator();
+ }
+ };
+ }
+
+ public static BufferedBlockCipher createSymmetricKeyWrapper(boolean forEncryption, BlockCipher engine, byte[] key, byte[] iv)
+ {
+ BufferedBlockCipher c = new BufferedBlockCipher(new CFBBlockCipher(engine, engine.getBlockSize() * 8));
+
+ c.init(forEncryption, new ParametersWithIV(new KeyParameter(key), iv));
+
+ return c;
+ }
+}