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/j2me/org/spongycastle/openpgp/PGPUtil.java')
-rw-r--r--pg/src/main/j2me/org/spongycastle/openpgp/PGPUtil.java152
1 files changed, 152 insertions, 0 deletions
diff --git a/pg/src/main/j2me/org/spongycastle/openpgp/PGPUtil.java b/pg/src/main/j2me/org/spongycastle/openpgp/PGPUtil.java
new file mode 100644
index 00000000..6bff42d0
--- /dev/null
+++ b/pg/src/main/j2me/org/spongycastle/openpgp/PGPUtil.java
@@ -0,0 +1,152 @@
+package org.spongycastle.openpgp;
+
+import java.io.IOException;
+import java.security.SecureRandom;
+
+import org.spongycastle.asn1.ASN1InputStream;
+import org.spongycastle.asn1.ASN1Sequence;
+import org.spongycastle.asn1.ASN1Integer;
+import org.spongycastle.bcpg.HashAlgorithmTags;
+import org.spongycastle.bcpg.MPInteger;
+import org.spongycastle.bcpg.PublicKeyAlgorithmTags;
+import org.spongycastle.bcpg.SymmetricKeyAlgorithmTags;
+
+/**
+ * Basic utility class
+ */
+public class PGPUtil
+ implements HashAlgorithmTags
+{
+ static MPInteger[] dsaSigToMpi(
+ byte[] encoding)
+ throws PGPException
+ {
+ ASN1InputStream aIn = new ASN1InputStream(encoding);
+
+ ASN1Integer i1;
+ ASN1Integer i2;
+
+ try
+ {
+ ASN1Sequence s = (ASN1Sequence)aIn.readObject();
+
+ i1 = (ASN1Integer)s.getObjectAt(0);
+ i2 = (ASN1Integer)s.getObjectAt(1);
+ }
+ catch (IOException e)
+ {
+ throw new PGPException("exception encoding signature", e);
+ }
+
+ MPInteger[] values = new MPInteger[2];
+
+ values[0] = new MPInteger(i1.getValue());
+ values[1] = new MPInteger(i2.getValue());
+
+ return values;
+ }
+
+ static String getDigestName(
+ int hashAlgorithm)
+ throws PGPException
+ {
+ switch (hashAlgorithm)
+ {
+ case HashAlgorithmTags.SHA1:
+ return "SHA1";
+ case HashAlgorithmTags.MD2:
+ return "MD2";
+ case HashAlgorithmTags.MD5:
+ return "MD5";
+ case HashAlgorithmTags.RIPEMD160:
+ return "RIPEMD160";
+ case HashAlgorithmTags.SHA256:
+ return "SHA256";
+ case HashAlgorithmTags.SHA384:
+ return "SHA384";
+ case HashAlgorithmTags.SHA512:
+ return "SHA512";
+ case HashAlgorithmTags.SHA224:
+ return "SHA224";
+ default:
+ throw new PGPException("unknown hash algorithm tag in getDigestName: " + hashAlgorithm);
+ }
+ }
+
+ static String getSignatureName(
+ int keyAlgorithm,
+ int hashAlgorithm)
+ throws PGPException
+ {
+ String encAlg;
+
+ switch (keyAlgorithm)
+ {
+ case PublicKeyAlgorithmTags.RSA_GENERAL:
+ case PublicKeyAlgorithmTags.RSA_SIGN:
+ encAlg = "RSA";
+ break;
+ case PublicKeyAlgorithmTags.DSA:
+ encAlg = "DSA";
+ break;
+ case PublicKeyAlgorithmTags.ELGAMAL_ENCRYPT: // in some malformed cases.
+ case PublicKeyAlgorithmTags.ELGAMAL_GENERAL:
+ encAlg = "ElGamal";
+ break;
+ default:
+ throw new PGPException("unknown algorithm tag in signature:" + keyAlgorithm);
+ }
+
+ return getDigestName(hashAlgorithm) + "with" + encAlg;
+ }
+
+ public static byte[] makeRandomKey(
+ int algorithm,
+ SecureRandom random)
+ throws PGPException
+ {
+ int keySize = 0;
+
+ switch (algorithm)
+ {
+ case SymmetricKeyAlgorithmTags.TRIPLE_DES:
+ keySize = 192;
+ break;
+ case SymmetricKeyAlgorithmTags.IDEA:
+ keySize = 128;
+ break;
+ case SymmetricKeyAlgorithmTags.CAST5:
+ keySize = 128;
+ break;
+ case SymmetricKeyAlgorithmTags.BLOWFISH:
+ keySize = 128;
+ break;
+ case SymmetricKeyAlgorithmTags.SAFER:
+ keySize = 128;
+ break;
+ case SymmetricKeyAlgorithmTags.DES:
+ keySize = 64;
+ break;
+ case SymmetricKeyAlgorithmTags.AES_128:
+ keySize = 128;
+ break;
+ case SymmetricKeyAlgorithmTags.AES_192:
+ keySize = 192;
+ break;
+ case SymmetricKeyAlgorithmTags.AES_256:
+ keySize = 256;
+ break;
+ case SymmetricKeyAlgorithmTags.TWOFISH:
+ keySize = 256;
+ break;
+ default:
+ throw new PGPException("unknown symmetric algorithm: " + algorithm);
+ }
+
+ byte[] keyBytes = new byte[(keySize + 7) / 8];
+
+ random.nextBytes(keyBytes);
+
+ return keyBytes;
+ }
+}