JcaSigningBackend.java

package io.mersel.dss.signer.api.models;

import eu.europa.esig.dss.enumerations.SignatureAlgorithm;
import io.mersel.dss.signer.api.exceptions.SignatureException;

import java.security.PrivateKey;
import java.security.Signature;

/**
 * PKCS#12/PFX materyali için JCA tabanlı yazılım imzalama arka ucu.
 */
public final class JcaSigningBackend implements SigningBackend {

    private final PrivateKey privateKey;

    public JcaSigningBackend(PrivateKey privateKey) {
        if (privateKey == null) {
            throw new IllegalArgumentException("JCA imzalama arka ucunda privateKey null olamaz");
        }
        this.privateKey = privateKey;
    }

    @Override
    public String getName() {
        return "PFX/JCA";
    }

    @Override
    public boolean isPkcs11() {
        return false;
    }

    @Override
    public byte[] sign(byte[] dataToSign, SignatureAlgorithm signatureAlgorithm) {
        try {
            Signature signature = Signature.getInstance(signatureAlgorithm.getJCEId());
            signature.initSign(privateKey);
            signature.update(dataToSign);
            return signature.sign();
        } catch (SignatureException e) {
            throw e;
        } catch (Exception e) {
            throw new SignatureException("JCA imzası oluşturulamadı", e);
        }
    }

    public PrivateKey getPrivateKey() {
        return privateKey;
    }
}