Small improvements

This commit is contained in:
Paul Schaub 2024-02-13 14:26:55 +01:00
parent 7ff63142b4
commit 4e02996c08
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
1 changed files with 20 additions and 14 deletions

View File

@ -1,8 +1,6 @@
package org.pgpainless.key.generation package org.pgpainless.key.generation
import org.bouncycastle.bcpg.attr.ImageAttribute import org.bouncycastle.bcpg.attr.ImageAttribute
import java.security.KeyPair
import java.security.KeyPairGenerator
import java.util.Date import java.util.Date
import org.bouncycastle.openpgp.PGPKeyPair import org.bouncycastle.openpgp.PGPKeyPair
import org.bouncycastle.openpgp.PGPPublicKey import org.bouncycastle.openpgp.PGPPublicKey
@ -23,7 +21,6 @@ import org.pgpainless.key.generation.type.eddsa.EdDSACurve
import org.pgpainless.key.generation.type.rsa.RsaLength import org.pgpainless.key.generation.type.rsa.RsaLength
import org.pgpainless.key.generation.type.xdh.XDHSpec import org.pgpainless.key.generation.type.xdh.XDHSpec
import org.pgpainless.policy.Policy import org.pgpainless.policy.Policy
import org.pgpainless.provider.ProviderFactory
import org.pgpainless.signature.builder.DirectKeySelfSignatureBuilder import org.pgpainless.signature.builder.DirectKeySelfSignatureBuilder
import org.pgpainless.signature.builder.SelfSignatureBuilder import org.pgpainless.signature.builder.SelfSignatureBuilder
import org.pgpainless.signature.builder.SubkeyBindingSignatureBuilder import org.pgpainless.signature.builder.SubkeyBindingSignatureBuilder
@ -35,6 +32,7 @@ import java.io.InputStream
* *
* @param policy policy to ensure algorithm compliance and to determine default algorithms * @param policy policy to ensure algorithm compliance and to determine default algorithms
* @param creationTime creation time for the secret key * @param creationTime creation time for the secret key
* @param preferences suite of algorithm preferences and enabled features
*/ */
fun buildV4( fun buildV4(
policy: Policy = PGPainless.getPolicy(), policy: Policy = PGPainless.getPolicy(),
@ -53,7 +51,7 @@ fun buildV4(
fun buildV6( fun buildV6(
policy: Policy = PGPainless.getPolicy(), policy: Policy = PGPainless.getPolicy(),
creationTime: Date = Date(), creationTime: Date = Date(),
preferences: AlgorithmSuite = policy.keyGenerationAlgorithmSuite preferences: AlgorithmSuite = AlgorithmSuite.v6AlgorithmSuite
): OpinionatedDefinePrimaryKey.V6 { ): OpinionatedDefinePrimaryKey.V6 {
return OpinionatedDefinePrimaryKey.V6(policy, creationTime, preferences) return OpinionatedDefinePrimaryKey.V6(policy, creationTime, preferences)
} }
@ -167,7 +165,10 @@ abstract class OpinionatedDefinePrimaryKey<
" for the current public key algorithm policy." " for the current public key algorithm policy."
} }
val applier = applyToPrimaryKey ?: { addDirectKeySignature(preferencesSubpackets()) } val applier = applyToPrimaryKey ?: {
// Add default direct-key signature containing preferences
addDirectKeySignature(preferencesSubpackets())
}
val unopinionatedSubkeys = unopinionated().setPrimaryKey(type, creationTime, applier) val unopinionatedSubkeys = unopinionated().setPrimaryKey(type, creationTime, applier)
return OpinionatedDefineSubkeys.V4( return OpinionatedDefineSubkeys.V4(
@ -234,10 +235,15 @@ abstract class UnopinionatedDefinePrimaryKey<U : UnopinionatedDefineSubkeys>(
creationTime: Date, creationTime: Date,
applyToPrimaryKey: (ApplyToPrimaryKey.() -> PGPKeyPair)? applyToPrimaryKey: (ApplyToPrimaryKey.() -> PGPKeyPair)?
): UnopinionatedDefineSubkeys.V4 { ): UnopinionatedDefineSubkeys.V4 {
// generate primary key
var primaryKey = OpenPgpKeyPairGenerator.V4().generatePrimaryKey(type, creationTime) var primaryKey = OpenPgpKeyPairGenerator.V4().generatePrimaryKey(type, creationTime)
// add user-ids and direct-key signatures if requested
if (applyToPrimaryKey != null) { if (applyToPrimaryKey != null) {
primaryKey = ApplyToPrimaryKey.V4(primaryKey, this).applyToPrimaryKey() primaryKey = ApplyToPrimaryKey.V4(primaryKey, this).applyToPrimaryKey()
} }
// return builder for adding subkeys
return UnopinionatedDefineSubkeys.V4(primaryKey, policy, creationTime) return UnopinionatedDefineSubkeys.V4(primaryKey, policy, creationTime)
} }
} }
@ -267,13 +273,13 @@ abstract class DefineSubkeys<B : DefineSubkeys<B>>(val policy: Policy, val creat
* *
* @param type subkey type * @param type subkey type
* @param creationTime creation time of the subkey * @param creationTime creation time of the subkey
* @param function function to apply to the subkey. Used to add binding signatures. * @param applyToSubkey function to apply to the subkey. Used to add binding signatures.
* @return this * @return this
*/ */
abstract fun addSubkey( abstract fun addSubkey(
type: KeyType, type: KeyType,
creationTime: Date = this.creationTime, creationTime: Date = this.creationTime,
function: (ApplyToSubkey.() -> PGPKeyPair)? = null applyToSubkey: (ApplyToSubkey.() -> PGPKeyPair)? = null
): B ): B
/** /**
@ -287,6 +293,7 @@ abstract class DefineSubkeys<B : DefineSubkeys<B>>(val policy: Policy, val creat
abstract class OpinionatedDefineSubkeys(policy: Policy, creationTime: Date) : abstract class OpinionatedDefineSubkeys(policy: Policy, creationTime: Date) :
DefineSubkeys<OpinionatedDefineSubkeys>(policy, creationTime) { DefineSubkeys<OpinionatedDefineSubkeys>(policy, creationTime) {
// unopinionated builder
abstract val unopinionated: UnopinionatedDefineSubkeys abstract val unopinionated: UnopinionatedDefineSubkeys
override fun build(): PGPSecretKeyRing = unopinionated.build() override fun build(): PGPSecretKeyRing = unopinionated.build()
@ -340,8 +347,8 @@ abstract class OpinionatedDefineSubkeys(policy: Policy, creationTime: Date) :
override fun addSubkey( override fun addSubkey(
type: KeyType, type: KeyType,
creationTime: Date, creationTime: Date,
function: (ApplyToSubkey.() -> PGPKeyPair)? applyToSubkey: (ApplyToSubkey.() -> PGPKeyPair)?
): V6 = apply { unopinionated.addSubkey(type, creationTime, function) } ): V6 = apply { unopinionated.addSubkey(type, creationTime, applyToSubkey) }
} }
} }
@ -397,11 +404,10 @@ abstract class UnopinionatedDefineSubkeys(policy: Policy, creationTime: Date) :
override fun addSubkey( override fun addSubkey(
type: KeyType, type: KeyType,
creationTime: Date, creationTime: Date,
function: (ApplyToSubkey.() -> PGPKeyPair)? applyToSubkey: (ApplyToSubkey.() -> PGPKeyPair)?
): V6 = ): V6 {
apply { TODO("Not yet implemented")
// Add Key }
}
override fun build(): PGPSecretKeyRing { override fun build(): PGPSecretKeyRing {
TODO("Not yet implemented") TODO("Not yet implemented")