package com.l7tech.server.security.keystore;

import com.l7tech.common.io.AliasNotFoundException;
import com.l7tech.common.io.CertGenParams;
import com.l7tech.common.io.KeyGenParams;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.gateway.common.security.keystore.SsgKeyMetadata;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.UpdateException;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyStoreException;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.concurrent.Future;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.SUPPORTS, rollbackFor = Throwable.class)
public interface SsgKeyStore extends SsgKeyFinder {
   @Transactional(propagation = Propagation.REQUIRED)
   Future<X509Certificate> generateKeyPair(Runnable var1, String var2, KeyGenParams var3, CertGenParams var4, @Nullable SsgKeyMetadata var5) throws GeneralSecurityException;

   List<String> findImpactedKeysByReplaceCertChain(String var1, X509Certificate[] var2) throws GeneralSecurityException, AliasNotFoundException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> replaceCertificateChain(Runnable var1, String var2, X509Certificate[] var3, boolean var4) throws InvalidKeyException, KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> storePrivateKeyEntry(Runnable var1, SsgKeyEntry var2, boolean var3, boolean var4) throws KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> storePrivateKeyEntry(boolean var1, Runnable var2, SsgKeyEntry var3, boolean var4) throws KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> storePrivateKeyEntry(boolean var1, Runnable var2, SsgKeyEntry var3, boolean var4, boolean var5) throws KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> deletePrivateKeyEntry(Runnable var1, String var2) throws KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   Future<Boolean> deletePrivateKeyEntry(boolean var1, Runnable var2, String var3) throws KeyStoreException;

   @Transactional(propagation = Propagation.REQUIRED)
   void updateKeyMetadata(Goid var1, @NotNull String var2, @Nullable SsgKeyMetadata var3) throws UpdateException, FindException, SaveException;
}
