From 9785582bd22f962408b941d6df18f9819817e625 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 3 Feb 2024 13:36:58 +0100 Subject: [PATCH] Improve readability of primaryUserId adjustment --- .../key/generation/GenerateOpenPgpKey.kt | 37 +++++++++++-------- .../generation/OpenPgpComponentKeyBuilder.kt | 3 +- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/GenerateOpenPgpKey.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/GenerateOpenPgpKey.kt index 6be2d607..85c84f7a 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/GenerateOpenPgpKey.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/GenerateOpenPgpKey.kt @@ -147,26 +147,30 @@ open class GenerateOpenPgpKey( userId: CharSequence, subpacketsCallback: SelfSignatureSubpackets.Callback = SelfSignatureSubpackets.nop() ) = apply { - val hasPrimaryUID = - primaryKey.pair.publicKey.userIDs.asSequence().any { uid -> - primaryKey.pair.publicKey.getSignaturesForID(uid).asSequence().any { - it.hashedSubPackets.isPrimaryUserID - } - } - val setPrimaryUID = - SelfSignatureSubpackets.applyHashed { - if (hasPrimaryUID) { - setPrimaryUserId(null) - } else { - setPrimaryUserId() - } - } primaryKey.userId( userId, subpacketsCallback = - preferencesCallback.then(setPrimaryUID).then(subpacketsCallback)) + preferencesCallback.then(adjustPrimaryUserId()).then(subpacketsCallback)) } + private fun adjustPrimaryUserId() = + SelfSignatureSubpackets.applyHashed { + if (primaryKeyHasPrimaryUserId()) { + setPrimaryUserId(null) + } else { + setPrimaryUserId() + } + } + + private fun primaryKeyHasPrimaryUserId() = + primaryKey.pair.publicKey.let { pk -> + pk.userIDs.asSequence().any { uid -> + pk.getSignaturesForID(uid).asSequence().any { + it.hashedSubPackets.isPrimaryUserID + } + } + } + /** * Add a user-attribute to the key. The subpackets of the binding signature are * prepopulated, setting algorithm preferences and features. However, the subpackets can @@ -302,7 +306,8 @@ open class GenerateOpenPgpKey( return PGPSecretKeyRing( mutableListOf( - toSecretKey(primaryKey, true, protector.getEncryptor(primaryKey.pair.keyID))) + toSecretKey( + primaryKey, true, protector.getEncryptor(primaryKey.pair.keyID))) .plus( subkeys.map { toSecretKey(it, false, protector.getEncryptor(it.pair.keyID)) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/OpenPgpComponentKeyBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/OpenPgpComponentKeyBuilder.kt index 577c82a8..a5911e73 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/OpenPgpComponentKeyBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/OpenPgpComponentKeyBuilder.kt @@ -215,7 +215,8 @@ class OpenPgpComponentKeyBuilder { // Create back-sig val backSigBuilder = - PrimaryKeyBindingSignatureBuilder(pair.privateKey, pair.publicKey, hashAlgorithm) + PrimaryKeyBindingSignatureBuilder( + pair.privateKey, pair.publicKey, hashAlgorithm) backSigBuilder.hashedSubpackets.setSignatureCreationTime(bindingTime)