mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-09 10:19:39 +02:00
Remove ProviderFactory classes
It is no longer possible to inject custom SecurityProviders. Instead, you can create and inject your own implementation of BCs OpenPGPImplementation
This commit is contained in:
parent
6951911520
commit
5f64e92724
5 changed files with 11 additions and 102 deletions
|
@ -50,7 +50,8 @@ class Policy(
|
|||
* regardless of usage date.
|
||||
*
|
||||
* @param defaultHashAlgorithm default hash algorithm
|
||||
* @param acceptableHashAlgorithmsAndTerminationDates map of acceptable algorithms and their termination dates
|
||||
* @param acceptableHashAlgorithmsAndTerminationDates map of acceptable algorithms and their
|
||||
* termination dates
|
||||
*/
|
||||
class HashAlgorithmPolicy(
|
||||
val defaultHashAlgorithm: HashAlgorithm,
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package org.pgpainless.provider
|
||||
|
||||
import java.security.Provider
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
||||
|
||||
class BouncyCastleProviderFactory : ProviderFactory() {
|
||||
override val securityProvider: Provider = BouncyCastleProvider()
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package org.pgpainless.provider
|
||||
|
||||
import java.security.Provider
|
||||
|
||||
/**
|
||||
* Allow the use of different [Provider] implementations to provide cryptographic primitives by
|
||||
* setting a [ProviderFactory] singleton. By default, the class is initialized with a
|
||||
* [BouncyCastleProviderFactory]. To make use of your own custom [Provider], call [setFactory],
|
||||
* passing your own custom [ProviderFactory] instance.
|
||||
*/
|
||||
abstract class ProviderFactory {
|
||||
|
||||
protected abstract val securityProvider: Provider
|
||||
protected open val securityProviderName: String
|
||||
get() = securityProvider.name
|
||||
|
||||
companion object {
|
||||
// singleton instance
|
||||
@JvmStatic var factory: ProviderFactory = BouncyCastleProviderFactory()
|
||||
|
||||
@JvmStatic
|
||||
val provider: Provider
|
||||
@JvmName("getProvider") get() = factory.securityProvider
|
||||
|
||||
@JvmStatic
|
||||
val providerName: String
|
||||
get() = factory.securityProviderName
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import java.security.InvalidAlgorithmParameterException;
|
|||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.Provider;
|
||||
import java.util.Date;
|
||||
|
||||
import org.bouncycastle.bcpg.CompressionAlgorithmTags;
|
||||
|
@ -16,6 +17,7 @@ import org.bouncycastle.bcpg.PublicKeyAlgorithmTags;
|
|||
import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
|
||||
import org.bouncycastle.bcpg.sig.Features;
|
||||
import org.bouncycastle.bcpg.sig.KeyFlags;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec;
|
||||
import org.bouncycastle.openpgp.PGPException;
|
||||
import org.bouncycastle.openpgp.PGPKeyPair;
|
||||
|
@ -29,22 +31,19 @@ import org.bouncycastle.openpgp.operator.PGPDigestCalculator;
|
|||
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
|
||||
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
|
||||
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
|
||||
import org.junit.jupiter.api.TestTemplate;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.pgpainless.provider.ProviderFactory;
|
||||
import org.pgpainless.util.TestAllImplementations;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class BouncycastleExportSubkeys {
|
||||
|
||||
@TestTemplate
|
||||
@ExtendWith(TestAllImplementations.class)
|
||||
@Test
|
||||
public void testExportImport() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, PGPException {
|
||||
Provider provider = new BouncyCastleProvider();
|
||||
KeyPairGenerator generator;
|
||||
KeyPair pair;
|
||||
|
||||
// Generate master key
|
||||
|
||||
generator = KeyPairGenerator.getInstance("ECDSA", ProviderFactory.getProvider());
|
||||
generator = KeyPairGenerator.getInstance("ECDSA", provider);
|
||||
generator.initialize(new ECNamedCurveGenParameterSpec("P-256"));
|
||||
|
||||
pair = generator.generateKeyPair();
|
||||
|
@ -70,7 +69,7 @@ public class BouncycastleExportSubkeys {
|
|||
|
||||
// Generate sub key
|
||||
|
||||
generator = KeyPairGenerator.getInstance("ECDH", ProviderFactory.getProvider());
|
||||
generator = KeyPairGenerator.getInstance("ECDH", provider);
|
||||
generator.initialize(new ECNamedCurveGenParameterSpec("P-256"));
|
||||
|
||||
pair = generator.generateKeyPair();
|
||||
|
@ -79,13 +78,13 @@ public class BouncycastleExportSubkeys {
|
|||
// Assemble key
|
||||
|
||||
PGPDigestCalculator calculator = new JcaPGPDigestCalculatorProviderBuilder()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(provider)
|
||||
.build()
|
||||
.get(HashAlgorithmTags.SHA1);
|
||||
|
||||
PGPContentSignerBuilder signerBuilder = new JcaPGPContentSignerBuilder(
|
||||
pgpMasterKey.getPublicKey().getAlgorithm(), HashAlgorithmTags.SHA512)
|
||||
.setProvider(ProviderFactory.getProvider());
|
||||
.setProvider(provider);
|
||||
|
||||
PGPKeyRingGenerator pgpGenerator = new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION,
|
||||
pgpMasterKey, "alice@wonderland.lit", calculator, subPackets.generate(), null,
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2020 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package org.pgpainless.provider;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.security.Provider;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ProviderFactoryTest {
|
||||
|
||||
private final ProviderFactory customProviderFactory = new ProviderFactory() {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
final Provider provider = new Provider("PL", 1L, "PGPainlessTestProvider") {
|
||||
|
||||
};
|
||||
|
||||
@Override
|
||||
protected Provider getSecurityProvider() {
|
||||
return provider;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@Test
|
||||
public void providerFactoryDefaultIsBouncyCastleTest() {
|
||||
assertEquals("BC", ProviderFactory.getProviderName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setCustomProviderTest() {
|
||||
ProviderFactory.setFactory(customProviderFactory);
|
||||
assertEquals("PL", ProviderFactory.getProviderName());
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void resetToDefault() {
|
||||
// Reset back to BouncyCastle
|
||||
ProviderFactory.setFactory(new BouncyCastleProviderFactory());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue