mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-09 18:29:39 +02:00
Policy is no longer a Singleton
This commit is contained in:
parent
b24d0ef99c
commit
2d42457ce4
5 changed files with 26 additions and 31 deletions
|
@ -17,6 +17,7 @@ import org.bouncycastle.openpgp.api.OpenPGPKey
|
|||
import org.bouncycastle.openpgp.api.OpenPGPKeyGenerator
|
||||
import org.bouncycastle.openpgp.api.OpenPGPKeyReader
|
||||
import org.bouncycastle.openpgp.api.bc.BcOpenPGPApi
|
||||
import org.bouncycastle.openpgp.api.bc.BcOpenPGPImplementation
|
||||
import org.pgpainless.algorithm.OpenPGPKeyVersion
|
||||
import org.pgpainless.bouncycastle.PolicyAdapter
|
||||
import org.pgpainless.bouncycastle.extensions.setAlgorithmSuite
|
||||
|
@ -34,7 +35,7 @@ import org.pgpainless.util.ArmorUtils
|
|||
|
||||
class PGPainless(
|
||||
val implementation: OpenPGPImplementation = OpenPGPImplementation.getInstance(),
|
||||
var algorithmPolicy: Policy = Policy.getInstance()
|
||||
var algorithmPolicy: Policy = Policy()
|
||||
) {
|
||||
|
||||
private var api: OpenPGPApi
|
||||
|
@ -107,6 +108,8 @@ class PGPainless(
|
|||
|
||||
@Volatile private var instance: PGPainless? = null
|
||||
|
||||
@JvmStatic fun newInstance(): PGPainless = PGPainless(BcOpenPGPImplementation(), Policy())
|
||||
|
||||
@JvmStatic
|
||||
fun getInstance(): PGPainless =
|
||||
instance ?: synchronized(this) { instance ?: PGPainless().also { instance = it } }
|
||||
|
|
|
@ -10,7 +10,7 @@ import org.bouncycastle.openpgp.api.OpenPGPPolicy.OpenPGPNotationRegistry
|
|||
import org.pgpainless.policy.Policy
|
||||
|
||||
/** Adapter class that adapts a PGPainless [Policy] object to Bouncy Castles [OpenPGPPolicy]. */
|
||||
class PolicyAdapter(val policy: Policy = Policy.getInstance()) : OpenPGPPolicy {
|
||||
class PolicyAdapter(val policy: Policy) : OpenPGPPolicy {
|
||||
|
||||
/**
|
||||
* Determine, whether the hash algorithm of a document signature is acceptable.
|
||||
|
|
|
@ -139,7 +139,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
ThirdPartyCertificationSignatureBuilder(
|
||||
certificationType.asSignatureType(), secretKey, protector, api)
|
||||
|
||||
return CertificationOnUserIdWithSubpackets(certificate, userId, sigBuilder)
|
||||
return CertificationOnUserIdWithSubpackets(certificate, userId, sigBuilder, api)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -154,14 +154,14 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
fun withKey(
|
||||
certificationKey: PGPSecretKeyRing,
|
||||
protector: SecretKeyRingProtector
|
||||
): CertificationOnUserIdWithSubpackets =
|
||||
withKey(PGPainless.getInstance().toKey(certificationKey), protector)
|
||||
): CertificationOnUserIdWithSubpackets = withKey(api.toKey(certificationKey), protector)
|
||||
}
|
||||
|
||||
class CertificationOnUserIdWithSubpackets(
|
||||
val certificate: OpenPGPCertificate,
|
||||
val userId: CharSequence,
|
||||
val sigBuilder: ThirdPartyCertificationSignatureBuilder
|
||||
val sigBuilder: ThirdPartyCertificationSignatureBuilder,
|
||||
private val api: PGPainless
|
||||
) {
|
||||
|
||||
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
||||
|
@ -170,7 +170,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
userId: String,
|
||||
sigBuilder: ThirdPartyCertificationSignatureBuilder,
|
||||
api: PGPainless
|
||||
) : this(api.toCertificate(certificate), userId, sigBuilder)
|
||||
) : this(api.toCertificate(certificate), userId, sigBuilder, api)
|
||||
|
||||
/**
|
||||
* Apply the given signature subpackets and build the certification.
|
||||
|
@ -195,7 +195,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
fun build(): CertificationResult {
|
||||
val signature = sigBuilder.build(certificate, userId)
|
||||
val certifiedCertificate =
|
||||
OpenPGPCertificate(
|
||||
api.toCertificate(
|
||||
KeyRingUtils.injectCertification(
|
||||
certificate.pgpPublicKeyRing, userId, signature.signature))
|
||||
|
||||
|
@ -226,7 +226,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
sigBuilder.hashedSubpackets.setTrust(
|
||||
true, trustworthiness.depth, trustworthiness.amount)
|
||||
}
|
||||
return DelegationOnCertificateWithSubpackets(certificate, sigBuilder)
|
||||
return DelegationOnCertificateWithSubpackets(certificate, sigBuilder, api)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -241,20 +241,21 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
fun withKey(
|
||||
certificationKey: PGPSecretKeyRing,
|
||||
protector: SecretKeyRingProtector
|
||||
): DelegationOnCertificateWithSubpackets =
|
||||
withKey(PGPainless.getInstance().toKey(certificationKey), protector)
|
||||
): DelegationOnCertificateWithSubpackets = withKey(api.toKey(certificationKey), protector)
|
||||
}
|
||||
|
||||
class DelegationOnCertificateWithSubpackets(
|
||||
val certificate: OpenPGPCertificate,
|
||||
val sigBuilder: ThirdPartyDirectKeySignatureBuilder
|
||||
val sigBuilder: ThirdPartyDirectKeySignatureBuilder,
|
||||
private val api: PGPainless
|
||||
) {
|
||||
|
||||
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
||||
constructor(
|
||||
certificate: PGPPublicKeyRing,
|
||||
sigBuilder: ThirdPartyDirectKeySignatureBuilder
|
||||
) : this(PGPainless.getInstance().toCertificate(certificate), sigBuilder)
|
||||
sigBuilder: ThirdPartyDirectKeySignatureBuilder,
|
||||
api: PGPainless
|
||||
) : this(api.toCertificate(certificate), sigBuilder, api)
|
||||
|
||||
/**
|
||||
* Apply the given signature subpackets and build the delegation signature.
|
||||
|
@ -280,7 +281,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
|||
val delegatedKey = certificate.primaryKey
|
||||
val delegation = sigBuilder.build(delegatedKey)
|
||||
val delegatedCertificate =
|
||||
OpenPGPCertificate(
|
||||
api.toCertificate(
|
||||
KeyRingUtils.injectCertification(
|
||||
certificate.pgpPublicKeyRing,
|
||||
delegatedKey.pgpPublicKey,
|
||||
|
|
|
@ -411,15 +411,6 @@ class Policy(
|
|||
DISABLED
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@Volatile private var INSTANCE: Policy? = null
|
||||
|
||||
@JvmStatic
|
||||
fun getInstance() =
|
||||
INSTANCE ?: synchronized(this) { INSTANCE ?: Policy().also { INSTANCE = it } }
|
||||
}
|
||||
|
||||
class Builder(private val origin: Policy) {
|
||||
private var certificationSignatureHashAlgorithmPolicy: HashAlgorithmPolicy =
|
||||
origin.certificationSignatureHashAlgorithmPolicy
|
||||
|
|
|
@ -17,43 +17,43 @@ public class PolicySetterTest {
|
|||
|
||||
@Test
|
||||
public void testSetCertificationSignatureHashAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withCertificationSignatureHashAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetDataSignatureHashAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withDataSignatureHashAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetRevocationSignatureHashAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withRevocationSignatureHashAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetSymmetricKeyEncryptionAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyEncryptionAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetSymmetricKeyDecryptionAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyDecryptionAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetCompressionAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withCompressionAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPublicKeyAlgorithmPolicy_NullFails() {
|
||||
Policy policy = Policy.getInstance();
|
||||
Policy policy = new Policy();
|
||||
assertThrows(NullPointerException.class, () -> policy.copy().withPublicKeyAlgorithmPolicy(null));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue