diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV4Fingerprint.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV4Fingerprint.kt index 4d05c4f9..f4bb41db 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV4Fingerprint.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV4Fingerprint.kt @@ -5,14 +5,11 @@ package org.pgpainless.key import java.net.URI -import java.nio.Buffer -import java.nio.ByteBuffer -import java.nio.charset.Charset +import org.bouncycastle.bcpg.FingerprintUtil import org.bouncycastle.bcpg.KeyIdentifier import org.bouncycastle.openpgp.PGPKeyRing import org.bouncycastle.openpgp.PGPPublicKey import org.bouncycastle.openpgp.PGPSecretKey -import org.bouncycastle.util.encoders.Hex class OpenPgpV4Fingerprint : OpenPgpFingerprint { @@ -28,17 +25,7 @@ class OpenPgpV4Fingerprint : OpenPgpFingerprint { override fun getVersion() = 4 - override val keyId: Long - get() { - val bytes = Hex.decode(toString().toByteArray(Charset.forName("UTF-8"))) - val buf = ByteBuffer.wrap(bytes) - - // The key id is the right-most 8 bytes (conveniently a long) - // We have to cast here in order to be compatible with java 8 - // https://github.com/eclipse/jetty.project/issues/3244 - (buf as Buffer).position(12) // 20 - 8 bytes = offset 12 - return buf.getLong() - } + override val keyId: Long = FingerprintUtil.keyIdFromV4Fingerprint(bytes) override val keyIdentifier: KeyIdentifier = KeyIdentifier(bytes) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV5Fingerprint.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV5Fingerprint.kt index df62ddef..5864bcd9 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV5Fingerprint.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/OpenPgpV5Fingerprint.kt @@ -4,6 +4,7 @@ package org.pgpainless.key +import org.bouncycastle.bcpg.FingerprintUtil import org.bouncycastle.bcpg.KeyIdentifier import org.bouncycastle.openpgp.PGPKeyRing import org.bouncycastle.openpgp.PGPPublicKey @@ -22,6 +23,8 @@ class OpenPgpV5Fingerprint : _64DigitFingerprint { constructor(bytes: ByteArray) : super(bytes) + override val keyId: Long = FingerprintUtil.keyIdFromLibrePgpFingerprint(bytes) + override fun getVersion(): Int { return 5 } diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/_64DigitFingerprint.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/_64DigitFingerprint.kt index f5447d61..465787ea 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/_64DigitFingerprint.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/_64DigitFingerprint.kt @@ -4,14 +4,11 @@ package org.pgpainless.key -import java.nio.Buffer -import java.nio.ByteBuffer -import java.nio.charset.Charset +import org.bouncycastle.bcpg.FingerprintUtil import org.bouncycastle.bcpg.KeyIdentifier import org.bouncycastle.openpgp.PGPKeyRing import org.bouncycastle.openpgp.PGPPublicKey import org.bouncycastle.openpgp.PGPSecretKey -import org.bouncycastle.util.encoders.Hex /** * This class represents a hex encoded, upper case OpenPGP v5 or v6 fingerprint. Since both @@ -35,18 +32,7 @@ open class _64DigitFingerprint : OpenPgpFingerprint { constructor(keys: PGPKeyRing) : super(keys) - override val keyId: Long - get() { - val bytes = Hex.decode(fingerprint.toByteArray(Charset.forName("UTF-8"))) - val buf = ByteBuffer.wrap(bytes) - - // The key id is the left-most 8 bytes (conveniently a long). - // We have to cast here in order to be compatible with java 8 - // https://github.com/eclipse/jetty.project/issues/3244 - (buf as Buffer).position(0) - - return buf.getLong() - } + override val keyId: Long = FingerprintUtil.keyIdFromV6Fingerprint(bytes) override fun getVersion(): Int { return -1 // might be v5 or v6