mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-10 10:49:39 +02:00
Kotlin conversion: ProviderFactory
This commit is contained in:
parent
8351223614
commit
11c1c54111
8 changed files with 63 additions and 92 deletions
|
@ -31,20 +31,20 @@ import java.util.*
|
|||
class JceImplementationFactory : ImplementationFactory() {
|
||||
override val pgpDigestCalculatorProvider: PGPDigestCalculatorProvider =
|
||||
JcaPGPDigestCalculatorProviderBuilder()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build()
|
||||
override val pgpContentVerifierBuilderProvider: PGPContentVerifierBuilderProvider =
|
||||
JcaPGPContentVerifierBuilderProvider()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
override val keyFingerprintCalculator: KeyFingerPrintCalculator =
|
||||
JcaKeyFingerprintCalculator()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
|
||||
override fun getPBESecretKeyEncryptor(symmetricKeyAlgorithm: SymmetricKeyAlgorithm,
|
||||
digestCalculator: PGPDigestCalculator,
|
||||
passphrase: Passphrase): PBESecretKeyEncryptor =
|
||||
JcePBESecretKeyEncryptorBuilder(symmetricKeyAlgorithm.algorithmId, digestCalculator)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(passphrase.getChars())
|
||||
|
||||
override fun getPBESecretKeyEncryptor(encryptionAlgorithm: SymmetricKeyAlgorithm,
|
||||
|
@ -55,44 +55,44 @@ class JceImplementationFactory : ImplementationFactory() {
|
|||
encryptionAlgorithm.algorithmId,
|
||||
getPGPDigestCalculator(hashAlgorithm),
|
||||
s2kCount)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(passphrase.getChars())
|
||||
|
||||
override fun getPBESecretKeyDecryptor(passphrase: Passphrase): PBESecretKeyDecryptor =
|
||||
JcePBESecretKeyDecryptorBuilder(pgpDigestCalculatorProvider)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(passphrase.getChars())
|
||||
|
||||
override fun getPGPContentSignerBuilder(keyAlgorithm: Int, hashAlgorithm: Int): PGPContentSignerBuilder =
|
||||
JcaPGPContentSignerBuilder(keyAlgorithm, hashAlgorithm)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
|
||||
override fun getPBEDataDecryptorFactory(passphrase: Passphrase): PBEDataDecryptorFactory =
|
||||
JcePBEDataDecryptorFactoryBuilder(pgpDigestCalculatorProvider)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(passphrase.getChars())
|
||||
|
||||
override fun getPublicKeyDataDecryptorFactory(privateKey: PGPPrivateKey): PublicKeyDataDecryptorFactory =
|
||||
JcePublicKeyDataDecryptorFactoryBuilder()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(privateKey)
|
||||
|
||||
override fun getSessionKeyDataDecryptorFactory(sessionKey: PGPSessionKey): SessionKeyDataDecryptorFactory =
|
||||
JceSessionKeyDataDecryptorFactoryBuilder()
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
.build(sessionKey)
|
||||
|
||||
override fun getPublicKeyKeyEncryptionMethodGenerator(key: PGPPublicKey): PublicKeyKeyEncryptionMethodGenerator =
|
||||
JcePublicKeyKeyEncryptionMethodGenerator(key)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
|
||||
override fun getPBEKeyEncryptionMethodGenerator(passphrase: Passphrase): PBEKeyEncryptionMethodGenerator =
|
||||
JcePBEKeyEncryptionMethodGenerator(passphrase.getChars())
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
|
||||
override fun getPGPDataEncryptorBuilder(symmetricKeyAlgorithm: Int): PGPDataEncryptorBuilder =
|
||||
JcePGPDataEncryptorBuilder(symmetricKeyAlgorithm)
|
||||
.setProvider(ProviderFactory.getProvider())
|
||||
.setProvider(ProviderFactory.provider)
|
||||
|
||||
override fun getPGPKeyPair(publicKeyAlgorithm: PublicKeyAlgorithm, keyPair: KeyPair, creationDate: Date): PGPKeyPair =
|
||||
JcaPGPKeyPair(publicKeyAlgorithm.algorithmId, keyPair, creationDate)
|
||||
|
|
|
@ -222,7 +222,7 @@ class KeyRingBuilder : KeyRingBuilderInterface<KeyRingBuilder> {
|
|||
fun generateKeyPair(spec: KeySpec): PGPKeyPair {
|
||||
spec.keyType.let { type ->
|
||||
// Create raw Key Pair
|
||||
val keyPair = KeyPairGenerator.getInstance(type.name, ProviderFactory.getProvider())
|
||||
val keyPair = KeyPairGenerator.getInstance(type.name, ProviderFactory.provider)
|
||||
.also { it.initialize(type.algorithmSpec) }
|
||||
.generateKeyPair()
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package org.pgpainless.provider
|
||||
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
||||
import java.security.Provider
|
||||
|
||||
class BouncyCastleProviderFactory : ProviderFactory() {
|
||||
override val securityProvider: Provider = BouncyCastleProvider()
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
// 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
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue