From 17c31349a1225211eb4f2028fc4ff1d02c51d7fe Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 18 Mar 2025 11:46:31 +0100 Subject: [PATCH] Pass down API instance --- .../main/kotlin/org/pgpainless/PGPainless.kt | 8 ++-- .../key/certification/CertifyCertificate.kt | 35 ++++++++++------- .../org/pgpainless/key/info/KeyRingInfo.kt | 11 +++--- .../secretkeyring/SecretKeyRingEditor.kt | 38 ++++++++++-------- .../builder/AbstractSignatureBuilder.kt | 39 +++++++++++-------- .../builder/DirectKeySelfSignatureBuilder.kt | 18 ++++----- .../PrimaryKeyBindingSignatureBuilder.kt | 12 ++++-- .../builder/RevocationSignatureBuilder.kt | 8 +++- .../signature/builder/SelfSignatureBuilder.kt | 16 +++++--- .../builder/SubkeyBindingSignatureBuilder.kt | 18 ++++++--- ...ThirdPartyCertificationSignatureBuilder.kt | 20 +++++----- .../ThirdPartyDirectKeySignatureBuilder.kt | 12 +++--- .../builder/UniversalSignatureBuilder.kt | 11 ++++-- ...bkeyAndPrimaryKeyBindingSignatureTest.java | 5 ++- ...artyCertificationSignatureBuilderTest.java | 11 ++++-- ...irdPartyDirectKeySignatureBuilderTest.java | 4 +- .../UniversalSignatureBuilderTest.java | 3 +- 17 files changed, 157 insertions(+), 112 deletions(-) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/PGPainless.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/PGPainless.kt index d5839054..8625efdd 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/PGPainless.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/PGPainless.kt @@ -217,8 +217,8 @@ class PGPainless( fun modifyKeyRing( secretKey: PGPSecretKeyRing, referenceTime: Date = Date(), - policy: Policy = getInstance().algorithmPolicy - ) = SecretKeyRingEditor(secretKey, policy, referenceTime) + api: PGPainless = getInstance() + ) = SecretKeyRingEditor(secretKey, api, referenceTime) /** * Quickly access information about a [org.bouncycastle.openpgp.PGPPublicKeyRing] / @@ -237,7 +237,7 @@ class PGPainless( @JvmStatic @JvmOverloads fun inspectKeyRing(key: OpenPGPCertificate, referenceTime: Date = Date()) = - KeyRingInfo(key, getInstance().algorithmPolicy, referenceTime) + KeyRingInfo(key, getInstance(), referenceTime) /** * Access, and make changes to PGPainless policy on acceptable/default algorithms etc. @@ -255,6 +255,6 @@ class PGPainless( * * @return builder */ - @JvmStatic fun certify() = CertifyCertificate() + @JvmStatic fun certify() = CertifyCertificate(getInstance()) } } diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/certification/CertifyCertificate.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/certification/CertifyCertificate.kt index 8febadbb..e43b30d8 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/certification/CertifyCertificate.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/certification/CertifyCertificate.kt @@ -34,7 +34,7 @@ import org.pgpainless.signature.subpackets.CertificationSubpackets * really belongs to the owner of the certificate. A delegation over a key can be used to delegate * trust by marking the certificate as a trusted introducer. */ -class CertifyCertificate { +class CertifyCertificate(private val api: PGPainless) { /** * Create a certification over a User-Id. By default, this method will use @@ -49,7 +49,7 @@ class CertifyCertificate { userId: CharSequence, certificate: OpenPGPCertificate, certificationType: CertificationType = CertificationType.GENERIC - ): CertificationOnUserId = CertificationOnUserId(userId, certificate, certificationType) + ): CertificationOnUserId = CertificationOnUserId(userId, certificate, certificationType, api) /** * Create a certification over a User-Id. By default, this method will use @@ -76,7 +76,7 @@ class CertifyCertificate { userId: String, certificate: PGPPublicKeyRing, certificationType: CertificationType - ) = CertificationOnUserId(userId, certificate, certificationType) + ) = CertificationOnUserId(userId, certificate, certificationType, api) /** * Create a delegation (direct key signature) over a certificate. This can be used to mark a @@ -88,7 +88,7 @@ class CertifyCertificate { */ @JvmOverloads fun certificate(certificate: OpenPGPCertificate, trustworthiness: Trustworthiness? = null) = - DelegationOnCertificate(certificate, trustworthiness) + DelegationOnCertificate(certificate, trustworthiness, api) /** * Create a delegation (direct key signature) over a certificate. This can be used to mark a @@ -113,20 +113,22 @@ class CertifyCertificate { */ @Deprecated("Pass in an OpenPGPCertificate instead of PGPPublicKeyRing.") fun certificate(certificate: PGPPublicKeyRing, trustworthiness: Trustworthiness?) = - DelegationOnCertificate(certificate, trustworthiness) + DelegationOnCertificate(certificate, trustworthiness, api) class CertificationOnUserId( val userId: CharSequence, val certificate: OpenPGPCertificate, - val certificationType: CertificationType + val certificationType: CertificationType, + private val api: PGPainless ) { @Deprecated("Use primary constructor instead.") constructor( userId: String, certificate: PGPPublicKeyRing, - certificationType: CertificationType - ) : this(userId, PGPainless.getInstance().toCertificate(certificate), certificationType) + certificationType: CertificationType, + api: PGPainless + ) : this(userId, api.toCertificate(certificate), certificationType, api) fun withKey( key: OpenPGPKey, @@ -135,7 +137,7 @@ class CertifyCertificate { val secretKey = getCertifyingSecretKey(key) val sigBuilder = ThirdPartyCertificationSignatureBuilder( - certificationType.asSignatureType(), secretKey, protector) + certificationType.asSignatureType(), secretKey, protector, api) return CertificationOnUserIdWithSubpackets(certificate, userId, sigBuilder) } @@ -166,8 +168,9 @@ class CertifyCertificate { constructor( certificate: PGPPublicKeyRing, userId: String, - sigBuilder: ThirdPartyCertificationSignatureBuilder - ) : this(PGPainless.getInstance().toCertificate(certificate), userId, sigBuilder) + sigBuilder: ThirdPartyCertificationSignatureBuilder, + api: PGPainless + ) : this(api.toCertificate(certificate), userId, sigBuilder) /** * Apply the given signature subpackets and build the certification. @@ -202,21 +205,23 @@ class CertifyCertificate { class DelegationOnCertificate( val certificate: OpenPGPCertificate, - val trustworthiness: Trustworthiness? + val trustworthiness: Trustworthiness?, + private val api: PGPainless ) { @Deprecated("Pass in an OpenPGPCertificate instead of PGPPublicKeyRing.") constructor( certificate: PGPPublicKeyRing, - trustworthiness: Trustworthiness? - ) : this(PGPainless.getInstance().toCertificate(certificate), trustworthiness) + trustworthiness: Trustworthiness?, + api: PGPainless + ) : this(api.toCertificate(certificate), trustworthiness, api) fun withKey( key: OpenPGPKey, protector: SecretKeyRingProtector ): DelegationOnCertificateWithSubpackets { val secretKey = getCertifyingSecretKey(key) - val sigBuilder = ThirdPartyDirectKeySignatureBuilder(secretKey, protector) + val sigBuilder = ThirdPartyDirectKeySignatureBuilder(secretKey, protector, api) if (trustworthiness != null) { sigBuilder.hashedSubpackets.setTrust( true, trustworthiness.depth, trustworthiness.amount) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/info/KeyRingInfo.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/info/KeyRingInfo.kt index f0c1a755..42c15dc9 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/info/KeyRingInfo.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/info/KeyRingInfo.kt @@ -19,7 +19,6 @@ import org.pgpainless.exception.KeyException.UnboundUserIdException import org.pgpainless.key.OpenPgpFingerprint import org.pgpainless.key.SubkeyIdentifier import org.pgpainless.key.util.KeyRingUtils -import org.pgpainless.policy.Policy import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil.Companion.getKeyExpirationTimeAsDate import org.pgpainless.util.DateUtil @@ -27,24 +26,24 @@ import org.slf4j.LoggerFactory class KeyRingInfo( val keys: OpenPGPCertificate, - val policy: Policy = PGPainless.getPolicy(), - val referenceDate: Date = Date() + private val api: PGPainless = PGPainless.getInstance(), + private val referenceDate: Date = Date() ) { constructor( keys: PGPKeyRing, - policy: Policy = PGPainless.getPolicy(), + api: PGPainless = PGPainless.getInstance(), referenceDate: Date = Date() ) : this( if (keys is PGPSecretKeyRing) OpenPGPKey(keys) else OpenPGPCertificate(keys), - policy, + api, referenceDate) @JvmOverloads constructor( keys: PGPKeyRing, referenceDate: Date = Date() - ) : this(keys, PGPainless.getPolicy(), referenceDate) + ) : this(keys, PGPainless.getInstance(), referenceDate) /** Primary [OpenPGPCertificate.OpenPGPPrimaryKey]. */ val primaryKey: OpenPGPCertificate.OpenPGPPrimaryKey = keys.primaryKey diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt index 381f87bd..6c94c120 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt @@ -39,7 +39,6 @@ import org.pgpainless.key.util.KeyRingUtils import org.pgpainless.key.util.KeyRingUtils.Companion.changePassphrase import org.pgpainless.key.util.KeyRingUtils.Companion.injectCertification import org.pgpainless.key.util.RevocationAttributes -import org.pgpainless.policy.Policy import org.pgpainless.signature.builder.* import org.pgpainless.signature.subpackets.* import org.pgpainless.util.Passphrase @@ -47,7 +46,7 @@ import org.pgpainless.util.selection.userid.SelectUserId class SecretKeyRingEditor( var key: OpenPGPKey, - val policy: Policy = PGPainless.getInstance().algorithmPolicy, + val api: PGPainless = PGPainless.getInstance(), override val referenceTime: Date = Date() ) : SecretKeyRingEditorInterface { @@ -56,9 +55,9 @@ class SecretKeyRingEditor( @JvmOverloads constructor( secretKeyRing: PGPSecretKeyRing, - policy: Policy = PGPainless.getInstance().algorithmPolicy, + api: PGPainless = PGPainless.getInstance(), referenceTime: Date = Date() - ) : this(PGPainless.getInstance().toKey(secretKeyRing), policy, referenceTime) + ) : this(PGPainless.getInstance().toKey(secretKeyRing), api, referenceTime) override fun addUserId( userId: CharSequence, @@ -298,14 +297,16 @@ class SecretKeyRingEditor( SignatureSubpacketsUtil.assureKeyCanCarryFlags(subkeyAlgorithm) val bitStrength = subkey.publicKey.bitStrength - require(policy.publicKeyAlgorithmPolicy.isAcceptable(subkeyAlgorithm, bitStrength)) { - "Public key algorithm policy violation: $subkeyAlgorithm with bit strength $bitStrength is not acceptable." - } + require( + api.algorithmPolicy.publicKeyAlgorithmPolicy.isAcceptable( + subkeyAlgorithm, bitStrength)) { + "Public key algorithm policy violation: $subkeyAlgorithm with bit strength $bitStrength is not acceptable." + } val primaryKey = secretKeyRing.secretKey val info = inspectKeyRing(secretKeyRing, referenceTime) val hashAlgorithm = - HashAlgorithmNegotiator.negotiateSignatureHashAlgorithm(policy) + HashAlgorithmNegotiator.negotiateSignatureHashAlgorithm(api.algorithmPolicy) .negotiateHashAlgorithm(info.preferredHashAlgorithms) var secretSubkey = @@ -323,13 +324,15 @@ class SecretKeyRingEditor( PGPainless.getInstance().implementation.pbeSecretKeyDecryptorBuilderProvider()) val skBindingBuilder = - SubkeyBindingSignatureBuilder(key.primarySecretKey, primaryKeyProtector, hashAlgorithm) + SubkeyBindingSignatureBuilder( + key.primarySecretKey, primaryKeyProtector, hashAlgorithm, api) skBindingBuilder.apply { hashedSubpackets.setSignatureCreationTime(referenceTime) hashedSubpackets.setKeyFlags(flags) if (subkeyAlgorithm.isSigningCapable()) { val pkBindingBuilder = - PrimaryKeyBindingSignatureBuilder(componentKey, subkeyProtector, hashAlgorithm) + PrimaryKeyBindingSignatureBuilder( + componentKey, subkeyProtector, hashAlgorithm, api) pkBindingBuilder.hashedSubpackets.setSignatureCreationTime(referenceTime) hashedSubpackets.addEmbeddedSignature(pkBindingBuilder.build(primaryKey.publicKey)) } @@ -624,7 +627,7 @@ class SecretKeyRingEditor( if (revokeeSubkey.isMasterKey) SignatureType.KEY_REVOCATION else SignatureType.SUBKEY_REVOCATION - return RevocationSignatureBuilder(signatureType, key.primarySecretKey, protector) + return RevocationSignatureBuilder(signatureType, key.primarySecretKey, protector, api) .apply { applyCallback(callback) } .build(revokeeSubkey) } @@ -635,7 +638,7 @@ class SecretKeyRingEditor( callback: RevocationSignatureSubpackets.Callback? ): SecretKeyRingEditorInterface { RevocationSignatureBuilder( - SignatureType.CERTIFICATION_REVOCATION, key.primarySecretKey, protector) + SignatureType.CERTIFICATION_REVOCATION, key.primarySecretKey, protector, api) .apply { hashedSubpackets.setSignatureCreationTime(referenceTime) applyCallback(callback) @@ -664,7 +667,7 @@ class SecretKeyRingEditor( prevUserIdSig: PGPSignature ): PGPSignature { val builder = - SelfSignatureBuilder(key.primarySecretKey, secretKeyRingProtector, prevUserIdSig) + SelfSignatureBuilder(key.primarySecretKey, secretKeyRingProtector, prevUserIdSig, api) builder.hashedSubpackets.setSignatureCreationTime(referenceTime) builder.applyCallback( object : SelfSignatureSubpackets.Callback { @@ -683,7 +686,8 @@ class SecretKeyRingEditor( @Nonnull primaryUserId: String, @Nonnull prevUserIdSig: PGPSignature ): PGPSignature { - return SelfSignatureBuilder(key.primarySecretKey, secretKeyRingProtector, prevUserIdSig) + return SelfSignatureBuilder( + key.primarySecretKey, secretKeyRingProtector, prevUserIdSig, api) .apply { hashedSubpackets.setSignatureCreationTime(referenceTime) applyCallback( @@ -711,7 +715,7 @@ class SecretKeyRingEditor( prevDirectKeySig: PGPSignature ): OpenPGPSignature { return DirectKeySelfSignatureBuilder( - secretKeyRing, secretKeyRingProtector, prevDirectKeySig) + secretKeyRing, secretKeyRingProtector, prevDirectKeySig, api) .apply { hashedSubpackets.setSignatureCreationTime(referenceTime) applyCallback( @@ -742,7 +746,7 @@ class SecretKeyRingEditor( val builder = SubkeyBindingSignatureBuilder( - key.primarySecretKey, protector, prevSubkeyBindingSignature) + key.primarySecretKey, protector, prevSubkeyBindingSignature, api) builder.hashedSubpackets.apply { // set expiration setSignatureCreationTime(referenceTime) @@ -762,7 +766,7 @@ class SecretKeyRingEditor( clearEmbeddedSignatures() addEmbeddedSignature( PrimaryKeyBindingSignatureBuilder( - key.getSecretKey(subkey.keyIdentifier), protector) + key.getSecretKey(subkey.keyIdentifier), protector, api) .build(primaryKey)) } } diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/AbstractSignatureBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/AbstractSignatureBuilder.kt index a7b95f76..4fa7ba31 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/AbstractSignatureBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/AbstractSignatureBuilder.kt @@ -10,7 +10,6 @@ import org.bouncycastle.openpgp.PGPPublicKey import org.bouncycastle.openpgp.PGPSignature import org.bouncycastle.openpgp.PGPSignatureGenerator import org.bouncycastle.openpgp.api.OpenPGPCertificate.OpenPGPComponentKey -import org.bouncycastle.openpgp.api.OpenPGPImplementation import org.bouncycastle.openpgp.api.OpenPGPKey import org.pgpainless.PGPainless import org.pgpainless.algorithm.HashAlgorithm @@ -27,7 +26,8 @@ abstract class AbstractSignatureBuilder>( protected var _hashAlgorithm: HashAlgorithm, protected var _signatureType: SignatureType, protected val _hashedSubpackets: SignatureSubpackets, - protected val _unhashedSubpackets: SignatureSubpackets + protected val _unhashedSubpackets: SignatureSubpackets, + protected val api: PGPainless ) { protected abstract val signatureTypePredicate: Predicate @@ -45,40 +45,46 @@ abstract class AbstractSignatureBuilder>( protector: SecretKeyRingProtector, hashAlgorithm: HashAlgorithm, hashedSubpackets: SignatureSubpackets, - unhashedSubpackets: SignatureSubpackets + unhashedSubpackets: SignatureSubpackets, + api: PGPainless ) : this( UnlockSecretKey.unlockSecretKey(signingKey, protector), hashAlgorithm, signatureType, hashedSubpackets, - unhashedSubpackets) + unhashedSubpackets, + api) @Throws(PGPException::class) constructor( signatureType: SignatureType, signingKey: OpenPGPKey.OpenPGPSecretKey, - protector: SecretKeyRingProtector + protector: SecretKeyRingProtector, + api: PGPainless ) : this( signatureType, signingKey, protector, - negotiateHashAlgorithm(signingKey), + negotiateHashAlgorithm(signingKey, api), SignatureSubpackets.createHashedSubpackets(signingKey.pgpSecretKey.publicKey), - SignatureSubpackets.createEmptySubpackets()) + SignatureSubpackets.createEmptySubpackets(), + api) @Throws(PGPException::class) constructor( signingKey: OpenPGPKey.OpenPGPSecretKey, protector: SecretKeyRingProtector, - archetypeSignature: PGPSignature + archetypeSignature: PGPSignature, + api: PGPainless ) : this( SignatureType.requireFromCode(archetypeSignature.signatureType), signingKey, protector, - negotiateHashAlgorithm(signingKey), + negotiateHashAlgorithm(signingKey, api), SignatureSubpackets.refreshHashedSubpackets( signingKey.publicKey.pgpPublicKey, archetypeSignature), - SignatureSubpackets.refreshUnhashedSubpackets(archetypeSignature)) + SignatureSubpackets.refreshUnhashedSubpackets(archetypeSignature), + api) val hashAlgorithm = _hashAlgorithm @@ -110,9 +116,8 @@ abstract class AbstractSignatureBuilder>( @Throws(PGPException::class) protected fun buildAndInitSignatureGenerator(): PGPSignatureGenerator = PGPSignatureGenerator( - OpenPGPImplementation.getInstance() - .pgpContentSignerBuilder( - signingKey.keyPair.publicKey.algorithm, hashAlgorithm.algorithmId), + api.implementation.pgpContentSignerBuilder( + signingKey.keyPair.publicKey.algorithm, hashAlgorithm.algorithmId), signingKey.keyPair.publicKey) .apply { setUnhashedSubpackets(SignatureSubpacketsHelper.toVector(_unhashedSubpackets)) @@ -129,13 +134,13 @@ abstract class AbstractSignatureBuilder>( * @return hash algorithm */ @JvmStatic - fun negotiateHashAlgorithm(publicKey: PGPPublicKey): HashAlgorithm = - HashAlgorithmNegotiator.negotiateSignatureHashAlgorithm(PGPainless.getPolicy()) + fun negotiateHashAlgorithm(publicKey: PGPPublicKey, api: PGPainless): HashAlgorithm = + HashAlgorithmNegotiator.negotiateSignatureHashAlgorithm(api.algorithmPolicy) .negotiateHashAlgorithm( OpenPgpKeyAttributeUtil.getOrGuessPreferredHashAlgorithms(publicKey)) @JvmStatic - fun negotiateHashAlgorithm(key: OpenPGPComponentKey): HashAlgorithm = - negotiateHashAlgorithm(key.pgpPublicKey) + fun negotiateHashAlgorithm(key: OpenPGPComponentKey, api: PGPainless): HashAlgorithm = + negotiateHashAlgorithm(key.pgpPublicKey, api) } } diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/DirectKeySelfSignatureBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/DirectKeySelfSignatureBuilder.kt index 8fc18ba4..c8faa73e 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/DirectKeySelfSignatureBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/DirectKeySelfSignatureBuilder.kt @@ -29,24 +29,24 @@ class DirectKeySelfSignatureBuilder : AbstractSignatureBuilder(signatureType, signingKey, protector) { + protector: SecretKeyRingProtector, + api: PGPainless +) : + AbstractSignatureBuilder( + signatureType, signingKey, protector, api) { override val signatureTypePredicate: Predicate get() = diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SelfSignatureBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SelfSignatureBuilder.kt index 54f5bab0..3a32f927 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SelfSignatureBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SelfSignatureBuilder.kt @@ -9,6 +9,7 @@ import org.bouncycastle.openpgp.PGPException import org.bouncycastle.openpgp.PGPSignature import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector import org.bouncycastle.openpgp.api.OpenPGPKey +import org.pgpainless.PGPainless import org.pgpainless.algorithm.SignatureType import org.pgpainless.key.protection.SecretKeyRingProtector import org.pgpainless.signature.subpackets.SelfSignatureSubpackets @@ -32,22 +33,25 @@ class SelfSignatureBuilder : AbstractSignatureBuilder { @Throws(PGPException::class) constructor( signingKey: OpenPGPKey.OpenPGPSecretKey, - protector: SecretKeyRingProtector - ) : super(SignatureType.GENERIC_CERTIFICATION, signingKey, protector) + protector: SecretKeyRingProtector, + api: PGPainless + ) : super(SignatureType.GENERIC_CERTIFICATION, signingKey, protector, api) @Throws(PGPException::class) constructor( signatureType: SignatureType, signingKey: OpenPGPKey.OpenPGPSecretKey, - protector: SecretKeyRingProtector - ) : super(signatureType, signingKey, protector) + protector: SecretKeyRingProtector, + api: PGPainless + ) : super(signatureType, signingKey, protector, api) @Throws(PGPException::class) constructor( primaryKey: OpenPGPKey.OpenPGPSecretKey, primaryKeyProtector: SecretKeyRingProtector, - oldCertification: PGPSignature - ) : super(primaryKey, primaryKeyProtector, oldCertification) + oldCertification: PGPSignature, + api: PGPainless + ) : super(primaryKey, primaryKeyProtector, oldCertification, api) val hashedSubpackets: SelfSignatureSubpackets = _hashedSubpackets val unhashedSubpackets: SelfSignatureSubpackets = _unhashedSubpackets diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SubkeyBindingSignatureBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SubkeyBindingSignatureBuilder.kt index 90a7f18e..9816ee29 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SubkeyBindingSignatureBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/builder/SubkeyBindingSignatureBuilder.kt @@ -9,6 +9,7 @@ import org.bouncycastle.openpgp.PGPException import org.bouncycastle.openpgp.PGPPublicKey import org.bouncycastle.openpgp.PGPSignature import org.bouncycastle.openpgp.api.OpenPGPKey +import org.pgpainless.PGPainless import org.pgpainless.algorithm.HashAlgorithm import org.pgpainless.algorithm.SignatureType import org.pgpainless.key.protection.SecretKeyRingProtector @@ -27,27 +28,31 @@ class SubkeyBindingSignatureBuilder : AbstractSignatureBuilder new ThirdPartyCertificationSignatureBuilder( SignatureType.BINARY_DOCUMENT, // invalid type secretKeys.getPrimarySecretKey(), - SecretKeyRingProtector.unprotectedKeys())); + SecretKeyRingProtector.unprotectedKeys(), + api)); } @Test public void testUserIdCertification() throws PGPException { + PGPainless api = PGPainless.getInstance(); OpenPGPKey secretKeys = PGPainless.generateKeyRing() .modernKeyRing("Alice"); @@ -49,7 +51,8 @@ public class ThirdPartyCertificationSignatureBuilderTest { ThirdPartyCertificationSignatureBuilder signatureBuilder = new ThirdPartyCertificationSignatureBuilder( secretKeys.getPrimarySecretKey(), - SecretKeyRingProtector.unprotectedKeys()); + SecretKeyRingProtector.unprotectedKeys(), + api); signatureBuilder.applyCallback(new CertificationSubpackets.Callback() { @Override @@ -70,7 +73,7 @@ public class ThirdPartyCertificationSignatureBuilderTest { assertFalse(exportable.isExportable()); // test sig correctness - signature.init(OpenPGPImplementation.getInstance().pgpContentVerifierBuilderProvider(), + signature.init(api.getImplementation().pgpContentVerifierBuilderProvider(), secretKeys.getPrimaryKey().getPGPPublicKey()); assertTrue(signature.verifyCertification("Bob", bobsPublicKeys.getPrimaryKey().getPGPPublicKey())); } diff --git a/pgpainless-core/src/test/java/org/pgpainless/signature/builder/ThirdPartyDirectKeySignatureBuilderTest.java b/pgpainless-core/src/test/java/org/pgpainless/signature/builder/ThirdPartyDirectKeySignatureBuilderTest.java index d0e2aa39..afa3710c 100644 --- a/pgpainless-core/src/test/java/org/pgpainless/signature/builder/ThirdPartyDirectKeySignatureBuilderTest.java +++ b/pgpainless-core/src/test/java/org/pgpainless/signature/builder/ThirdPartyDirectKeySignatureBuilderTest.java @@ -34,12 +34,14 @@ public class ThirdPartyDirectKeySignatureBuilderTest { @Test public void testDirectKeySignatureBuilding() throws PGPException { + PGPainless api = PGPainless.getInstance(); OpenPGPKey secretKeys = PGPainless.generateKeyRing() .modernKeyRing("Alice"); DirectKeySelfSignatureBuilder dsb = new DirectKeySelfSignatureBuilder( secretKeys.getPrimarySecretKey(), - SecretKeyRingProtector.unprotectedKeys()); + SecretKeyRingProtector.unprotectedKeys(), + api); Date now = new Date(); Date t1 = new Date(now.getTime() + 1000 * 60 * 60); diff --git a/pgpainless-core/src/test/java/org/pgpainless/signature/builder/UniversalSignatureBuilderTest.java b/pgpainless-core/src/test/java/org/pgpainless/signature/builder/UniversalSignatureBuilderTest.java index 8eb287c2..c308877a 100644 --- a/pgpainless-core/src/test/java/org/pgpainless/signature/builder/UniversalSignatureBuilderTest.java +++ b/pgpainless-core/src/test/java/org/pgpainless/signature/builder/UniversalSignatureBuilderTest.java @@ -62,10 +62,11 @@ public class UniversalSignatureBuilderTest { @Test public void createPetNameSignature() throws PGPException { + PGPainless api = PGPainless.getInstance(); OpenPGPKey.OpenPGPSecretKey signingKey = secretKeys.getPrimarySecretKey(); PGPSignature archetype = signingKey.getPublicKey().getPGPPublicKey().getSignatures().next(); UniversalSignatureBuilder builder = new UniversalSignatureBuilder( - signingKey, protector, archetype); + signingKey, protector, archetype, api); builder.applyCallback(new SignatureSubpackets.Callback() { @Override