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

KeySpecBuilder: Expose API for overriding default AEAD algorithms and features

This commit is contained in:
Paul Schaub 2025-04-02 13:45:21 +02:00
parent 92630e40a4
commit b84f464b49
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 24 additions and 6 deletions

View file

@ -12,8 +12,7 @@ import org.pgpainless.signature.subpackets.SelfSignatureSubpackets
import org.pgpainless.signature.subpackets.SignatureSubpackets
import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil
class KeySpecBuilder
constructor(
class KeySpecBuilder(
private val type: KeyType,
private val keyFlags: List<KeyFlag>,
) : KeySpecBuilderInterface {
@ -27,6 +26,7 @@ constructor(
private var preferredSymmetricAlgorithms: Set<SymmetricKeyAlgorithm>? =
algorithmSuite.symmetricKeyAlgorithms
private var preferredAEADAlgorithms: Set<AEADCipherMode>? = algorithmSuite.aeadAlgorithms
private var features: Set<Feature>? = algorithmSuite.features
private var keyCreationDate: Date? = null
constructor(type: KeyType, vararg keyFlags: KeyFlag) : this(type, listOf(*keyFlags))
@ -37,11 +37,13 @@ constructor(
override fun overridePreferredCompressionAlgorithms(
vararg algorithms: CompressionAlgorithm
): KeySpecBuilder = apply { this.preferredCompressionAlgorithms = algorithms.toSet() }
): KeySpecBuilder = apply {
this.preferredCompressionAlgorithms = if (algorithms.isEmpty()) null else algorithms.toSet()
}
override fun overridePreferredHashAlgorithms(vararg algorithms: HashAlgorithm): KeySpecBuilder =
apply {
this.preferredHashAlgorithms = algorithms.toSet()
this.preferredHashAlgorithms = if (algorithms.isEmpty()) null else algorithms.toSet()
}
override fun overridePreferredSymmetricKeyAlgorithms(
@ -50,7 +52,17 @@ constructor(
require(!algorithms.contains(SymmetricKeyAlgorithm.NULL)) {
"NULL (unencrypted) is an invalid symmetric key algorithm preference."
}
this.preferredSymmetricAlgorithms = algorithms.toSet()
this.preferredSymmetricAlgorithms = if (algorithms.isEmpty()) null else algorithms.toSet()
}
override fun overridePreferredAEADAlgorithms(
vararg algorithms: AEADCipherMode
): KeySpecBuilder = apply {
this.preferredAEADAlgorithms = if (algorithms.isEmpty()) null else algorithms.toSet()
}
override fun overrideFeatures(vararg features: Feature): KeySpecBuilder = apply {
this.features = if (features.isEmpty()) null else features.toSet()
}
override fun setKeyCreationDate(creationDate: Date): KeySpecBuilder = apply {
@ -65,7 +77,7 @@ constructor(
preferredHashAlgorithms?.let { setPreferredHashAlgorithms(it) }
preferredSymmetricAlgorithms?.let { setPreferredSymmetricKeyAlgorithms(it) }
preferredAEADAlgorithms?.let { setPreferredAEADCiphersuites(it) }
setFeatures(Feature.MODIFICATION_DETECTION)
features?.let { setFeatures(*it.toTypedArray()) }
}
.let { KeySpec(type, hashedSubpackets as SignatureSubpackets, false, keyCreationDate) }
}

View file

@ -5,7 +5,9 @@
package org.pgpainless.key.generation
import java.util.*
import org.pgpainless.algorithm.AEADCipherMode
import org.pgpainless.algorithm.CompressionAlgorithm
import org.pgpainless.algorithm.Feature
import org.pgpainless.algorithm.HashAlgorithm
import org.pgpainless.algorithm.SymmetricKeyAlgorithm
@ -21,6 +23,10 @@ interface KeySpecBuilderInterface {
vararg algorithms: SymmetricKeyAlgorithm
): KeySpecBuilder
fun overridePreferredAEADAlgorithms(vararg algorithms: AEADCipherMode): KeySpecBuilder
fun overrideFeatures(vararg features: Feature): KeySpecBuilder
fun setKeyCreationDate(creationDate: Date): KeySpecBuilder
fun build(): KeySpec