Здравствуйте.
Предполагается использование КриптоПро JCP для обеспечения закрытого обмена.
На КриптоПро CSP все решалось использованием классических выховов CAPI.
HCRYPTPROV hProv; (PROV_GOST_2001_DH)
HCRYPTKEY *hKey;
LPBYTE *pbPubKey;
LPDWORD cbPubKey;
ALG_ID aiSrcKey;
LPSTR szDHOID;
LPSTR szHashOID;
CryptGenKey(hProv, aiSrcKey, CRYPT_PREGEN, hKey1);
CryptSetKeyParam(*hKey1, KP_X, NULL,0);
CryptExportKey(*hKey1, 0, PUBLICKEYBLOB, 0, pbEPubKey, &cbEPubKey);
//-----------------------------------------------------------------------------------------------------------//
ImportPublicKey(hProv, hKey1,hKEK, pbPubKey2, cbPubKey2,aiKey2, szDHOID2,szHashOID2);
Отталкиваясь от документации по JAVA и КриптоПРо мы попытались реализовать следующую конструкцию.
java.security.KeyStore hdImageStore = java.security.KeyStore.getInstance("HDImageStore");
hdImageStore.load(null, null);
java.security.PrivateKey senderKey = (java.security.PrivateKey) hdImageStore.getKey("signkey", null);
java.security.cert.X509Certificate publicSenderCert = (java.security.cert.X509Certificate) hdImageStore.getCertificate("signkey");
final byte[] sv = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11};
final javax.crypto.KeyAgreement senderKeyAgree = javax.crypto.KeyAgreement.getInstance("GOST3410DH");
senderKeyAgree.init(senderKey, new javax.crypto.spec.IvParameterSpec(sv), null);
senderKeyAgree.doPhase(publicSenderCert, true);
javax.crypto.SecretKey sk = senderKeyAgree.generateSecret("GOST28147");
Все отрабатывается нормально, но alisaSecret.getEncoded() возвращает NULL;
Не совсем понятно с установкой параметров, в данной реализации как мы поимаем беруться текущие.
Пожалуйста, подскажите верна ли такая реализация и каким образом можно реализовать генерацию сессионного ключа в JCP.
Спасибо.