// пример по задаче rm#28494 Пример генерации ключа в существующем контейнере
// программа консольная: аргументы запуска: имя_профайла OID
// например: 007 1.3.6.1.4.1.6801.1.5.8


import kz.gamma.jce.provider.GammaTechProvider;
import kz.gamma.jce.provider.JDKKeyPairGenerator;

import java.io.ByteArrayInputStream;
import java.security.*;
import java.util.Enumeration;
import java.util.Hashtable;

public class testCreateKey {
    /**
     *
     * @param profile имя профиля на файловой системе
     * @param algOID OID ключа (например - 1.3.6.1.4.1.6801.1.5.14)
     * @throws Exception
     */
    static void createKey(String profile, String algOID) throws Exception {
        KeyStore store = KeyStore.getInstance("PKS", "GAMMA");
        store.load(new ByteArrayInputStream( profile.getBytes()), null);

        KeyPairGenerator ecGostKpg = KeyPairGenerator.getInstance("ECGOST34310", "GAMMA");

        Hashtable<String, String> str = GammaTechProvider.algUtil.algKeyName;
        Enumeration en1 = str.keys();
        Enumeration en2 = str.elements();
        while (en1.hasMoreElements()) {
            System.out.println(en1.nextElement());
            if (en2.hasMoreElements())
                System.out.println(en2.nextElement());
        }

        // Инициализируем алгоритм генерации ключа, если передать 2 то будет сгенерирован
        // ключ в соответствии настроенного профайла.
        if(GammaTechProvider.algUtil.algKey.containsKey(algOID))
            ecGostKpg.initialize(GammaTechProvider.algUtil.algKey.get(algOID));
        else
            ecGostKpg.initialize(2);

        ((JDKKeyPairGenerator.ECGOST34310)ecGostKpg).setProfName(profile,"");

        // генерируем пару ключей
        KeyPair pair = ecGostKpg.generateKeyPair();
        // Получаем класс закрытого ключа
        PrivateKey privKey = pair.getPrivate();
        // Получаем класс открытого ключа
        PublicKey pubKey = pair.getPublic();
    }
    public static void main(String[] args) {
        try {
            if (args.length != 2) {
                System.out.println("Usage:\n" +
                        "Профиль \t" + "OID ключа  \t");
                return;
            }
            Security.addProvider(new GammaTechProvider());
            String profile = args[0];
            String algOID = args[1];

            createKey(profile,algOID);

        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
