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.OpenPGPKeyGenerator
|
||||||
import org.bouncycastle.openpgp.api.OpenPGPKeyReader
|
import org.bouncycastle.openpgp.api.OpenPGPKeyReader
|
||||||
import org.bouncycastle.openpgp.api.bc.BcOpenPGPApi
|
import org.bouncycastle.openpgp.api.bc.BcOpenPGPApi
|
||||||
|
import org.bouncycastle.openpgp.api.bc.BcOpenPGPImplementation
|
||||||
import org.pgpainless.algorithm.OpenPGPKeyVersion
|
import org.pgpainless.algorithm.OpenPGPKeyVersion
|
||||||
import org.pgpainless.bouncycastle.PolicyAdapter
|
import org.pgpainless.bouncycastle.PolicyAdapter
|
||||||
import org.pgpainless.bouncycastle.extensions.setAlgorithmSuite
|
import org.pgpainless.bouncycastle.extensions.setAlgorithmSuite
|
||||||
|
@ -34,7 +35,7 @@ import org.pgpainless.util.ArmorUtils
|
||||||
|
|
||||||
class PGPainless(
|
class PGPainless(
|
||||||
val implementation: OpenPGPImplementation = OpenPGPImplementation.getInstance(),
|
val implementation: OpenPGPImplementation = OpenPGPImplementation.getInstance(),
|
||||||
var algorithmPolicy: Policy = Policy.getInstance()
|
var algorithmPolicy: Policy = Policy()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private var api: OpenPGPApi
|
private var api: OpenPGPApi
|
||||||
|
@ -107,6 +108,8 @@ class PGPainless(
|
||||||
|
|
||||||
@Volatile private var instance: PGPainless? = null
|
@Volatile private var instance: PGPainless? = null
|
||||||
|
|
||||||
|
@JvmStatic fun newInstance(): PGPainless = PGPainless(BcOpenPGPImplementation(), Policy())
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getInstance(): PGPainless =
|
fun getInstance(): PGPainless =
|
||||||
instance ?: synchronized(this) { instance ?: PGPainless().also { instance = it } }
|
instance ?: synchronized(this) { instance ?: PGPainless().also { instance = it } }
|
||||||
|
|
|
@ -10,7 +10,7 @@ import org.bouncycastle.openpgp.api.OpenPGPPolicy.OpenPGPNotationRegistry
|
||||||
import org.pgpainless.policy.Policy
|
import org.pgpainless.policy.Policy
|
||||||
|
|
||||||
/** Adapter class that adapts a PGPainless [Policy] object to Bouncy Castles [OpenPGPPolicy]. */
|
/** 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.
|
* Determine, whether the hash algorithm of a document signature is acceptable.
|
||||||
|
|
|
@ -139,7 +139,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
||||||
ThirdPartyCertificationSignatureBuilder(
|
ThirdPartyCertificationSignatureBuilder(
|
||||||
certificationType.asSignatureType(), secretKey, protector, api)
|
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(
|
fun withKey(
|
||||||
certificationKey: PGPSecretKeyRing,
|
certificationKey: PGPSecretKeyRing,
|
||||||
protector: SecretKeyRingProtector
|
protector: SecretKeyRingProtector
|
||||||
): CertificationOnUserIdWithSubpackets =
|
): CertificationOnUserIdWithSubpackets = withKey(api.toKey(certificationKey), protector)
|
||||||
withKey(PGPainless.getInstance().toKey(certificationKey), protector)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CertificationOnUserIdWithSubpackets(
|
class CertificationOnUserIdWithSubpackets(
|
||||||
val certificate: OpenPGPCertificate,
|
val certificate: OpenPGPCertificate,
|
||||||
val userId: CharSequence,
|
val userId: CharSequence,
|
||||||
val sigBuilder: ThirdPartyCertificationSignatureBuilder
|
val sigBuilder: ThirdPartyCertificationSignatureBuilder,
|
||||||
|
private val api: PGPainless
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
||||||
|
@ -170,7 +170,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
||||||
userId: String,
|
userId: String,
|
||||||
sigBuilder: ThirdPartyCertificationSignatureBuilder,
|
sigBuilder: ThirdPartyCertificationSignatureBuilder,
|
||||||
api: PGPainless
|
api: PGPainless
|
||||||
) : this(api.toCertificate(certificate), userId, sigBuilder)
|
) : this(api.toCertificate(certificate), userId, sigBuilder, api)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the given signature subpackets and build the certification.
|
* Apply the given signature subpackets and build the certification.
|
||||||
|
@ -195,7 +195,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
||||||
fun build(): CertificationResult {
|
fun build(): CertificationResult {
|
||||||
val signature = sigBuilder.build(certificate, userId)
|
val signature = sigBuilder.build(certificate, userId)
|
||||||
val certifiedCertificate =
|
val certifiedCertificate =
|
||||||
OpenPGPCertificate(
|
api.toCertificate(
|
||||||
KeyRingUtils.injectCertification(
|
KeyRingUtils.injectCertification(
|
||||||
certificate.pgpPublicKeyRing, userId, signature.signature))
|
certificate.pgpPublicKeyRing, userId, signature.signature))
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ class CertifyCertificate(private val api: PGPainless) {
|
||||||
sigBuilder.hashedSubpackets.setTrust(
|
sigBuilder.hashedSubpackets.setTrust(
|
||||||
true, trustworthiness.depth, trustworthiness.amount)
|
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(
|
fun withKey(
|
||||||
certificationKey: PGPSecretKeyRing,
|
certificationKey: PGPSecretKeyRing,
|
||||||
protector: SecretKeyRingProtector
|
protector: SecretKeyRingProtector
|
||||||
): DelegationOnCertificateWithSubpackets =
|
): DelegationOnCertificateWithSubpackets = withKey(api.toKey(certificationKey), protector)
|
||||||
withKey(PGPainless.getInstance().toKey(certificationKey), protector)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DelegationOnCertificateWithSubpackets(
|
class DelegationOnCertificateWithSubpackets(
|
||||||
val certificate: OpenPGPCertificate,
|
val certificate: OpenPGPCertificate,
|
||||||
val sigBuilder: ThirdPartyDirectKeySignatureBuilder
|
val sigBuilder: ThirdPartyDirectKeySignatureBuilder,
|
||||||
|
private val api: PGPainless
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
@Deprecated("Pass in an OpenPGPCertificate instead of a PGPPublicKeyRing.")
|
||||||
constructor(
|
constructor(
|
||||||
certificate: PGPPublicKeyRing,
|
certificate: PGPPublicKeyRing,
|
||||||
sigBuilder: ThirdPartyDirectKeySignatureBuilder
|
sigBuilder: ThirdPartyDirectKeySignatureBuilder,
|
||||||
) : this(PGPainless.getInstance().toCertificate(certificate), sigBuilder)
|
api: PGPainless
|
||||||
|
) : this(api.toCertificate(certificate), sigBuilder, api)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the given signature subpackets and build the delegation signature.
|
* 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 delegatedKey = certificate.primaryKey
|
||||||
val delegation = sigBuilder.build(delegatedKey)
|
val delegation = sigBuilder.build(delegatedKey)
|
||||||
val delegatedCertificate =
|
val delegatedCertificate =
|
||||||
OpenPGPCertificate(
|
api.toCertificate(
|
||||||
KeyRingUtils.injectCertification(
|
KeyRingUtils.injectCertification(
|
||||||
certificate.pgpPublicKeyRing,
|
certificate.pgpPublicKeyRing,
|
||||||
delegatedKey.pgpPublicKey,
|
delegatedKey.pgpPublicKey,
|
||||||
|
|
|
@ -411,15 +411,6 @@ class Policy(
|
||||||
DISABLED
|
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) {
|
class Builder(private val origin: Policy) {
|
||||||
private var certificationSignatureHashAlgorithmPolicy: HashAlgorithmPolicy =
|
private var certificationSignatureHashAlgorithmPolicy: HashAlgorithmPolicy =
|
||||||
origin.certificationSignatureHashAlgorithmPolicy
|
origin.certificationSignatureHashAlgorithmPolicy
|
||||||
|
|
|
@ -17,43 +17,43 @@ public class PolicySetterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetCertificationSignatureHashAlgorithmPolicy_NullFails() {
|
public void testSetCertificationSignatureHashAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withCertificationSignatureHashAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withCertificationSignatureHashAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetDataSignatureHashAlgorithmPolicy_NullFails() {
|
public void testSetDataSignatureHashAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withDataSignatureHashAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withDataSignatureHashAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetRevocationSignatureHashAlgorithmPolicy_NullFails() {
|
public void testSetRevocationSignatureHashAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withRevocationSignatureHashAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withRevocationSignatureHashAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetSymmetricKeyEncryptionAlgorithmPolicy_NullFails() {
|
public void testSetSymmetricKeyEncryptionAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyEncryptionAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyEncryptionAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetSymmetricKeyDecryptionAlgorithmPolicy_NullFails() {
|
public void testSetSymmetricKeyDecryptionAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyDecryptionAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withSymmetricKeyDecryptionAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetCompressionAlgorithmPolicy_NullFails() {
|
public void testSetCompressionAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withCompressionAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withCompressionAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetPublicKeyAlgorithmPolicy_NullFails() {
|
public void testSetPublicKeyAlgorithmPolicy_NullFails() {
|
||||||
Policy policy = Policy.getInstance();
|
Policy policy = new Policy();
|
||||||
assertThrows(NullPointerException.class, () -> policy.copy().withPublicKeyAlgorithmPolicy(null));
|
assertThrows(NullPointerException.class, () -> policy.copy().withPublicKeyAlgorithmPolicy(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue