PKCS11KeyStoreProvider.java
package io.mersel.dss.signer.api.services.keystore;
/**
* PKCS#11 yapılandırması için marker {@link KeyStoreProvider}.
*
* <p>Eski sürümlerde bu sınıf SunPKCS11 üzerinden gerçek bir JCA
* {@link java.security.KeyStore} oluşturuyordu (forceLogin, slot list index,
* showInfo gibi config tweak'leri dahil). Artık tüm PKCS#11 operasyonları
* {@link io.mersel.dss.signer.api.services.keystore.iaik.IaikPkcs11Module}
* üzerinden yürütüldüğü için bu sınıf yalnızca <em>type discrimination</em>
* için kullanılır:</p>
*
* <ul>
* <li>{@link io.mersel.dss.signer.api.config.SignatureConfiguration}
* PKCS#11 yapılandırmasında bu bean'i {@code KeyStoreProvider}
* arabiriminin somut implementasyonu olarak üretir; controller ve
* service'ler {@code instanceof PKCS11KeyStoreProvider} ile yola
* bakabilir.</li>
* <li>{@link #getType()} → "PKCS11" — info endpoint'i için.</li>
* <li>{@link #loadKeyStore} → {@link UnsupportedOperationException}.
* Gerçek anahtar materyali HSM'de kalır; JCA {@code KeyStore} arayüzü
* üzerinden yüklenmez.</li>
* </ul>
*/
public class PKCS11KeyStoreProvider implements KeyStoreProvider {
private final String libraryPath;
private final Long slot;
private final Long slotIndex;
public PKCS11KeyStoreProvider(String libraryPath, Long slot, Long slotIndex) {
this.libraryPath = libraryPath;
this.slot = slot;
this.slotIndex = slotIndex;
}
@Override
public java.security.KeyStore loadKeyStore(char[] pin) {
throw new UnsupportedOperationException(
"PKCS#11 yolunda JCA KeyStore artık yüklenmiyor. "
+ "İmzalama ve listeleme akışı IaikPkcs11Module üzerinden çalışır. "
+ "PFX yapılandırması için PfxKeyStoreProvider kullanın.");
}
@Override
public String getType() {
return "PKCS11";
}
public String getLibraryPath() {
return libraryPath;
}
public Long getSlot() {
return slot;
}
public Long getSlotIndex() {
return slotIndex;
}
}