
io.github.mmm.crypto.asymmetric.access.AsymmetricAccess Maven / Gradle / Ivy
package io.github.mmm.crypto.asymmetric.access;
import java.security.Key;
import java.security.PrivateKey;
import java.security.PublicKey;
import io.github.mmm.crypto.CryptoAccess;
import io.github.mmm.crypto.asymmetric.crypt.AsymmetricCryptorConfig;
import io.github.mmm.crypto.asymmetric.crypt.AsymmetricCryptorFactory;
import io.github.mmm.crypto.asymmetric.key.AsymmetricKeyCreator;
import io.github.mmm.crypto.asymmetric.key.AsymmetricKeyCreatorFactory;
import io.github.mmm.crypto.asymmetric.key.AsymmetricKeyPair;
import io.github.mmm.crypto.asymmetric.sign.SignatureBinary;
import io.github.mmm.crypto.asymmetric.sign.SignatureConfig;
import io.github.mmm.crypto.asymmetric.sign.SignatureProcessorFactory;
import io.github.mmm.crypto.asymmetric.sign.SignatureProcessorFactoryImpl;
import io.github.mmm.crypto.asymmetric.sign.SignatureSigner;
import io.github.mmm.crypto.asymmetric.sign.SignatureVerifier;
import io.github.mmm.crypto.crypt.Decryptor;
import io.github.mmm.crypto.crypt.DecryptorImplCipher;
import io.github.mmm.crypto.crypt.Encryptor;
import io.github.mmm.crypto.crypt.EncryptorImplCiper;
import io.github.mmm.crypto.hash.HashCreator;
import io.github.mmm.crypto.hash.HashFactory;
import io.github.mmm.crypto.hash.access.HashAccess;
import io.github.mmm.crypto.random.RandomFactory;
/**
* Abstract base implementation of factory for {@link AsymmetricKeyCreator key management},
* {@link AsymmetricCryptorFactory encryption/decryption}, and {@link SignatureProcessorFactory
* signature management} based on {@link io.github.mmm.crypto.asymmetric.key.AsymmetricKeyPair asymmetric}
* cryptography.
*
* @param type of {@link SignatureBinary}.
* @param type of {@link PrivateKey}.
* @param type of {@link PublicKey}.
* @param type of {@link AsymmetricKeyPair}.
* @param type of {@link AsymmetricKeyCreator}.
* @author Joerg Hohwiller (hohwille at users.sourceforge.net)
* @since 1.0.0
*/
public abstract class AsymmetricAccess, KC extends AsymmetricKeyCreator>
extends CryptoAccess implements AsymmetricKeyCreatorFactory, AsymmetricCryptorFactory,
SignatureProcessorFactory, HashFactory {
/** The {@link AsymmetricCryptorConfig}. */
protected final AsymmetricCryptorConfig cryptorConfig;
private final SignatureConfig signatureConfig;
/** The {@link RandomFactory}. */
protected final RandomFactory randomFactory;
private final SignatureProcessorFactory signatureFactory;
private final HashAccess hashFactory;
private KC keyCreator;
/**
* The constructor.
*
* @param signatureConfig the {@link SignatureConfig}.
* @param cryptorConfig the {@link AsymmetricCryptorConfig}.
* @param randomFactory the {@link RandomFactory}.
*/
public AsymmetricAccess(SignatureConfig signatureConfig, AsymmetricCryptorConfig cryptorConfig,
RandomFactory randomFactory) {
this(signatureConfig, null, cryptorConfig, randomFactory);
}
/**
* The constructor.
*
* @param signatureConfig the {@link SignatureConfig}.
* @param signatureFactory the {@link SignatureProcessorFactory}.
* @param cryptorConfig the {@link AsymmetricCryptorConfig}.
* @param randomFactory the {@link RandomFactory}.
*/
public AsymmetricAccess(SignatureConfig signatureConfig, SignatureProcessorFactory signatureFactory,
AsymmetricCryptorConfig cryptorConfig, RandomFactory randomFactory) {
super();
this.signatureConfig = signatureConfig;
if (signatureFactory == null) {
this.signatureFactory = new SignatureProcessorFactoryImpl<>(signatureConfig, randomFactory);
} else {
this.signatureFactory = signatureFactory;
}
this.cryptorConfig = cryptorConfig;
this.randomFactory = randomFactory;
this.hashFactory = new HashAccess(signatureConfig.getHashConfig());
}
/**
* @return the {@link SignatureConfig}.
*/
public SignatureConfig getSignatureConfig() {
return this.signatureConfig;
}
/**
* @return the {@link AsymmetricCryptorConfig}.
*/
public AsymmetricCryptorConfig getCryptorConfig() {
return this.cryptorConfig;
}
private KC getKeyCreatorInternal() {
if (this.keyCreator == null) {
this.keyCreator = newKeyCreator();
}
return this.keyCreator;
}
@Override
public Decryptor newDecryptorUnsafe(Key decryptionKey) {
return new DecryptorImplCipher(this.randomFactory, this.cryptorConfig, decryptionKey);
}
@Override
public Decryptor newDecryptor(PR privateKey) {
getKeyCreatorInternal().verifyKey(privateKey);
return newDecryptorUnsafe(privateKey);
}
@Override
public Encryptor newEncryptorUnsafe(Key encryptionKey) {
return new EncryptorImplCiper(this.randomFactory, this.cryptorConfig, encryptionKey);
}
@Override
public Encryptor newEncryptor(PU publicKey) {
getKeyCreatorInternal().verifyKey(publicKey);
return newEncryptorUnsafe(publicKey);
}
@Override
public SignatureSigner newSigner(PR privateKey) {
getKeyCreatorInternal().verifyKey(privateKey);
return this.signatureFactory.newSigner(privateKey);
}
@Override
public SignatureVerifier newVerifier(PU publicKey) {
getKeyCreatorInternal().verifyKey(publicKey);
return this.signatureFactory.newVerifier(publicKey);
}
@Override
public S createSignature(byte[] data) {
return this.signatureFactory.createSignature(data);
}
@Override
public HashCreator newHashCreator() {
return this.hashFactory.newHashCreator();
}
@Override
public SignatureProcessorFactory getSignatureFactoryWithoutHash() {
return this.signatureFactory.getSignatureFactoryWithoutHash();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy