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:
authorRoberto Tyley <roberto.tyley@gmail.com>2014-07-15 01:38:01 +0400
committerRoberto Tyley <roberto.tyley@gmail.com>2014-07-26 11:23:17 +0400
commit7cb752aaf746dc0b473afeb9e892b7fbc12666c5 (patch)
treecc4f91ddc18332b5adbe82e3fcb040d976c90105 /pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java
parent551830f8ea5177042af2c7dd1fc90888bc67387d (diff)
Execute become-spongy.sh
https://github.com/rtyley/spongycastle/blob/3040af/become-spongy.sh
Diffstat (limited to 'pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java')
-rw-r--r--pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java b/pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java
new file mode 100644
index 00000000..e72955f2
--- /dev/null
+++ b/pg/src/main/java/org/spongycastle/openpgp/operator/jcajce/JcaKeyFingerprintCalculator.java
@@ -0,0 +1,74 @@
+package org.spongycastle.openpgp.operator.jcajce;
+
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.spongycastle.bcpg.BCPGKey;
+import org.spongycastle.bcpg.MPInteger;
+import org.spongycastle.bcpg.PublicKeyPacket;
+import org.spongycastle.bcpg.RSAPublicBCPGKey;
+import org.spongycastle.openpgp.PGPException;
+import org.spongycastle.openpgp.operator.KeyFingerPrintCalculator;
+
+public class JcaKeyFingerprintCalculator
+ implements KeyFingerPrintCalculator
+{
+
+ // FIXME: Convert this to builder style so we can set provider?
+ public byte[] calculateFingerprint(PublicKeyPacket publicPk)
+ throws PGPException
+ {
+ BCPGKey key = publicPk.getKey();
+
+ if (publicPk.getVersion() <= 3)
+ {
+ RSAPublicBCPGKey rK = (RSAPublicBCPGKey)key;
+
+ try
+ {
+ MessageDigest digest = MessageDigest.getInstance("MD5");
+
+ byte[] bytes = new MPInteger(rK.getModulus()).getEncoded();
+ digest.update(bytes, 2, bytes.length - 2);
+
+ bytes = new MPInteger(rK.getPublicExponent()).getEncoded();
+ digest.update(bytes, 2, bytes.length - 2);
+
+ return digest.digest();
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ throw new PGPException("can't find MD5", e);
+ }
+ catch (IOException e)
+ {
+ throw new PGPException("can't encode key components: " + e.getMessage(), e);
+ }
+ }
+ else
+ {
+ try
+ {
+ byte[] kBytes = publicPk.getEncodedContents();
+
+ MessageDigest digest = MessageDigest.getInstance("SHA1");
+
+ digest.update((byte)0x99);
+ digest.update((byte)(kBytes.length >> 8));
+ digest.update((byte)kBytes.length);
+ digest.update(kBytes);
+
+ return digest.digest();
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ throw new PGPException("can't find SHA1", e);
+ }
+ catch (IOException e)
+ {
+ throw new PGPException("can't encode key components: " + e.getMessage(), e);
+ }
+ }
+ }
+}