mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-09 18:29:39 +02:00
Make secret key protection settings customizable via policy
This commit is contained in:
parent
671dde0de9
commit
b1855d0a13
4 changed files with 8 additions and 7 deletions
|
@ -19,7 +19,6 @@ import org.pgpainless.algorithm.KeyFlag
|
|||
import org.pgpainless.algorithm.OpenPGPKeyVersion
|
||||
import org.pgpainless.algorithm.SignatureType
|
||||
import org.pgpainless.bouncycastle.extensions.unlock
|
||||
import org.pgpainless.key.protection.KeyRingProtectionSettings
|
||||
import org.pgpainless.policy.Policy
|
||||
import org.pgpainless.signature.subpackets.SelfSignatureSubpackets
|
||||
import org.pgpainless.signature.subpackets.SignatureSubpackets
|
||||
|
@ -93,7 +92,7 @@ class KeyRingBuilder(
|
|||
requireNotNull(primaryKeySpec) { "Primary Key spec required." }
|
||||
val certKey = generateKeyPair(primaryKeySpec!!, version)
|
||||
|
||||
val secretKeyEncryptor = buildSecretKeyEncryptor(certKey.publicKey, false)
|
||||
val secretKeyEncryptor = buildSecretKeyEncryptor(certKey.publicKey)
|
||||
val secretKeyDecryptor = buildSecretKeyDecryptor()
|
||||
|
||||
passphrase.clear() // Passphrase was used above, so we can get rid of it
|
||||
|
@ -229,15 +228,14 @@ class KeyRingBuilder(
|
|||
|
||||
private fun buildSecretKeyEncryptor(
|
||||
publicKey: PGPPublicKey,
|
||||
aead: Boolean
|
||||
): PBESecretKeyEncryptor? {
|
||||
check(passphrase.isValid) { "Passphrase was cleared." }
|
||||
val protectionSettings = KeyRingProtectionSettings.secureDefaultSettings()
|
||||
val protectionSettings = PGPainless.getPolicy().keyProtectionSettings
|
||||
return if (passphrase.isEmpty) null
|
||||
else
|
||||
OpenPGPImplementation.getInstance()
|
||||
.pbeSecretKeyEncryptorFactory(
|
||||
aead,
|
||||
protectionSettings.aead,
|
||||
protectionSettings.encryptionAlgorithm.algorithmId,
|
||||
protectionSettings.s2kCount)
|
||||
.build(passphrase.getChars(), publicKey.publicKeyPacket)
|
||||
|
|
|
@ -49,7 +49,7 @@ open class BaseSecretKeyRingProtector(
|
|||
else
|
||||
OpenPGPImplementation.getInstance()
|
||||
.pbeSecretKeyEncryptorFactory(
|
||||
false,
|
||||
protectionSettings.aead,
|
||||
protectionSettings.encryptionAlgorithm.algorithmId,
|
||||
protectionSettings.s2kCount)
|
||||
.build(it.getChars(), key.publicKeyPacket)
|
||||
|
|
|
@ -509,7 +509,7 @@ class KeyRingUtils {
|
|||
|
||||
return PGPSecretKey.copyWithNewPassword(
|
||||
secretKey,
|
||||
oldProtector.getDecryptor(secretKey.keyID),
|
||||
oldProtector.getDecryptor(secretKey.keyIdentifier),
|
||||
newProtector.getEncryptor(secretKey.publicKey))
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package org.pgpainless.policy
|
|||
|
||||
import java.util.*
|
||||
import org.pgpainless.algorithm.*
|
||||
import org.pgpainless.key.protection.KeyRingProtectionSettings
|
||||
import org.pgpainless.util.DateUtil
|
||||
import org.pgpainless.util.NotationRegistry
|
||||
|
||||
|
@ -17,6 +18,7 @@ class Policy(
|
|||
var symmetricKeyDecryptionAlgorithmPolicy: SymmetricKeyAlgorithmPolicy,
|
||||
var compressionAlgorithmPolicy: CompressionAlgorithmPolicy,
|
||||
var publicKeyAlgorithmPolicy: PublicKeyAlgorithmPolicy,
|
||||
var keyProtectionSettings: KeyRingProtectionSettings,
|
||||
var notationRegistry: NotationRegistry
|
||||
) {
|
||||
|
||||
|
@ -29,6 +31,7 @@ class Policy(
|
|||
SymmetricKeyAlgorithmPolicy.symmetricKeyDecryptionPolicy2022(),
|
||||
CompressionAlgorithmPolicy.anyCompressionAlgorithmPolicy(),
|
||||
PublicKeyAlgorithmPolicy.bsi2021PublicKeyAlgorithmPolicy(),
|
||||
KeyRingProtectionSettings.secureDefaultSettings(),
|
||||
NotationRegistry())
|
||||
|
||||
var keyGenerationAlgorithmSuite = AlgorithmSuite.defaultAlgorithmSuite
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue