1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2025-09-09 10:19:39 +02:00

Rename and document members of SubkeyIdentifier

This commit is contained in:
Paul Schaub 2025-02-19 10:49:06 +01:00
parent 259a77d4df
commit 2f3b1fac95
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 110 additions and 34 deletions

View file

@ -11,59 +11,135 @@ import org.bouncycastle.openpgp.api.OpenPGPCertificate.OpenPGPComponentKey
import org.bouncycastle.openpgp.api.OpenPGPKey.OpenPGPPrivateKey
/**
* Tuple class used to identify a subkey by fingerprints of the primary key of the subkeys key ring,
* as well as the subkeys fingerprint.
* Tuple class used to identify a subkey (component key) by fingerprints of the certificate,
* as well as the component keys fingerprint.
*/
class SubkeyIdentifier(
val primaryKeyFingerprint: OpenPgpFingerprint,
val subkeyFingerprint: OpenPgpFingerprint
val certificateFingerprint: OpenPgpFingerprint,
val componentKeyFingerprint: OpenPgpFingerprint
) {
constructor(fingerprint: OpenPgpFingerprint) : this(fingerprint, fingerprint)
/**
* Constructor for a [SubkeyIdentifier] pointing to the primary key identified by the
* [certificateFingerprint].
* @param certificateFingerprint primary key fingerprint
*/
constructor(certificateFingerprint: OpenPgpFingerprint) : this(certificateFingerprint, certificateFingerprint)
constructor(keys: PGPKeyRing) : this(keys.publicKey)
/**
* Constructor for a [SubkeyIdentifier] pointing to the primary key of the given [PGPKeyRing].
*
* @param certificate certificate
*/
constructor(certificate: PGPKeyRing) : this(certificate.publicKey)
constructor(key: PGPPublicKey) : this(OpenPgpFingerprint.of(key))
/**
* Constructor for a [SubkeyIdentifier] pointing to the given [primaryKey].
*
* @param primaryKey primary key
*/
constructor(primaryKey: PGPPublicKey) : this(OpenPgpFingerprint.of(primaryKey))
constructor(keys: PGPKeyRing, keyId: Long) : this(keys, KeyIdentifier(keyId))
/**
* Constructor for a [SubkeyIdentifier] pointing to a component key (identified by
* [componentKeyId]) from the given [certificate].
*/
@Deprecated("Pass in a KeyIdentifier instead of a keyId.")
constructor(certificate: PGPKeyRing, componentKeyId: Long) : this(certificate, KeyIdentifier(componentKeyId))
/**
* Constructor for a [SubkeyIdentifier] pointing to the given [componentKey].
*
* @param componentKey component key
*/
constructor(
key: OpenPGPComponentKey
componentKey: OpenPGPComponentKey
) : this(
OpenPgpFingerprint.of(key.certificate.pgpPublicKeyRing),
OpenPgpFingerprint.of(key.pgpPublicKey))
OpenPgpFingerprint.of(componentKey.certificate),
OpenPgpFingerprint.of(componentKey))
constructor(key: OpenPGPPrivateKey) : this(key.secretKey)
/**
* Constructor for a [SubkeyIdentifier] pointing to the given [componentKey].
*/
constructor(componentKey: OpenPGPPrivateKey) : this(componentKey.secretKey)
/**
* Constructor for a [SubkeyIdentifier] pointing to a component key (identified by
* the [componentKeyFingerprint]) of the given [certificate].
*
* @param certificate certificate
* @param componentKeyFingerprint fingerprint of the component key
*/
constructor(
keys: PGPKeyRing,
subkeyFingerprint: OpenPgpFingerprint
) : this(OpenPgpFingerprint.of(keys), subkeyFingerprint)
certificate: PGPKeyRing,
componentKeyFingerprint: OpenPgpFingerprint
) : this(OpenPgpFingerprint.of(certificate), componentKeyFingerprint)
/**
* Constructor for a [SubkeyIdentifier] pointing to a component key (identified by the
* [componentKeyIdentifier]) of the given [certificate].
*
* @param certificate certificate
* @param componentKeyIdentifier identifier of the component key
*/
constructor(
keys: PGPKeyRing,
subkeyIdentifier: KeyIdentifier
certificate: PGPKeyRing,
componentKeyIdentifier: KeyIdentifier
) : this(
OpenPgpFingerprint.of(keys),
OpenPgpFingerprint.of(certificate),
OpenPgpFingerprint.of(
keys.getPublicKey(subkeyIdentifier)
certificate.getPublicKey(componentKeyIdentifier)
?: throw NoSuchElementException(
"OpenPGP key does not contain subkey $subkeyIdentifier")))
"OpenPGP key does not contain subkey $componentKeyIdentifier")))
val keyIdentifier = KeyIdentifier(subkeyFingerprint.bytes)
val subkeyIdentifier = keyIdentifier
val primaryKeyIdentifier = KeyIdentifier(primaryKeyFingerprint.bytes)
@Deprecated("Use certificateFingerprint instead.",
replaceWith = ReplaceWith("certificateFingerprint")
)
val primaryKeyFingerprint: OpenPgpFingerprint = certificateFingerprint
@Deprecated("Use componentKeyFingerprint instead.",
replaceWith = ReplaceWith("componentKeyFingerprint"))
val subkeyFingerprint: OpenPgpFingerprint = componentKeyFingerprint
/**
* [KeyIdentifier] of the component key.
*/
val keyIdentifier = componentKeyFingerprint.keyIdentifier
/**
* [KeyIdentifier] of the component key.
*/
val componentKeyIdentifier = keyIdentifier
/**
* [KeyIdentifier] of the primary key of the certificate the component key belongs to.
*/
val certificateIdentifier = certificateFingerprint.keyIdentifier
/**
* Key-ID of the component key.
*/
@Deprecated("Use of key-ids is discouraged.") val keyId = keyIdentifier.keyId
val fingerprint = subkeyFingerprint
@Deprecated("Use of key-ids is discouraged.") val subkeyId = subkeyIdentifier.keyId
@Deprecated("Use of key-ids is discouraged.") val primaryKeyId = primaryKeyIdentifier.keyId
/**
* Fingerprint of the component key.
*/
val fingerprint = componentKeyFingerprint
val isPrimaryKey = primaryKeyIdentifier == subkeyIdentifier
/**
* Key-ID of the component key.
*/
@Deprecated("Use of key-ids is discouraged.") val subkeyId = componentKeyIdentifier.keyId
/**
* Key-ID of the primary key of the certificate the component key belongs to.
*/
@Deprecated("Use of key-ids is discouraged.") val primaryKeyId = certificateIdentifier.keyId
val isPrimaryKey = certificateIdentifier.matches(componentKeyIdentifier)
fun matches(fingerprint: OpenPgpFingerprint) =
primaryKeyFingerprint == fingerprint || subkeyFingerprint == fingerprint
certificateFingerprint == fingerprint || componentKeyFingerprint == fingerprint
override fun equals(other: Any?): Boolean {
if (other == null) {
@ -76,13 +152,13 @@ class SubkeyIdentifier(
return false
}
return primaryKeyFingerprint == other.primaryKeyFingerprint &&
subkeyFingerprint == other.subkeyFingerprint
return certificateFingerprint == other.certificateFingerprint &&
componentKeyFingerprint == other.componentKeyFingerprint
}
override fun hashCode(): Int {
return primaryKeyFingerprint.hashCode() + 31 * subkeyFingerprint.hashCode()
return certificateFingerprint.hashCode() + 31 * componentKeyFingerprint.hashCode()
}
override fun toString(): String = "$subkeyFingerprint $primaryKeyFingerprint"
override fun toString(): String = "$componentKeyFingerprint $certificateFingerprint"
}

View file

@ -594,7 +594,7 @@ class KeyRingInfo(
require(publicKey.keyIdentifier.equals(identifier.keyIdentifier)) {
"Mismatching primary key ID."
}
return getPublicKey(identifier.subkeyIdentifier)
return getPublicKey(identifier.componentKeyIdentifier)
}
/**
@ -605,7 +605,7 @@ class KeyRingInfo(
* key of the key.
*/
fun getSecretKey(identifier: SubkeyIdentifier): OpenPGPComponentKey? =
getSecretKey(identifier.subkeyIdentifier)
getSecretKey(identifier.componentKeyIdentifier)
fun isKeyValidlyBound(keyIdentifier: KeyIdentifier): Boolean {
return isKeyValidlyBound(keyIdentifier.keyId)