Доброго дня.
Проблема C_DeriveKey.
Ключевая пара создаётся по примеру из SDK
GOST3410_PARAMS_OID = { 0x06, 0x07, 0x2a, (byte)0x85, 0x03, 0x02, 0x02, 0x24, 0x00 };
Или
GOST3410_PARAMS_OID = { 0x06, 0x07, 0x2a, (byte)0x85, 0x03, 0x02, 0x02, 0x23, 0x01 }
Результат не меняется
Random r = new Random();
//заполняем DeriveParams как в примере
byte[] ckDeriveParamUkm = new byte[8];
r.nextBytes(ckDeriveParamUkm);
//keyValue это 64 байта открытого ключа получателя
ckDeriveParams = new CK_GOSTR3410_DERIVE_PARAMS(9,keyValue,keyValue.length,ckDeriveParamUkm,ckDeriveParamUkm.length);
//посещаем параметры в механизм derive
ckmDeriveMech = new CK_MECHANISM(RtPkcs11Constants.CKM_GOSTR3410_DERIVE,ckDeriveParams.getPointer(),ckDeriveParams.size());
//атрибуты ключа согласования
CK_ATTRIBUTE[] derivedKeyAttr = (CK_ATTRIBUTE[]) (new CK_ATTRIBUTE()).toArray(8);
derivedKeyAttr[0].set(Pkcs11Constants.CKA_CLASS,Pkcs11Constants.CKO_SECRET_KEY);
derivedKeyAttr[1].set(Pkcs11Constants.CKA_LABEL,"derived_key");
derivedKeyAttr[2].set(Pkcs11Constants.CKA_KEY_TYPE,RtPkcs11Constants.CKK_GOST28147);
derivedKeyAttr[3].set(Pkcs11Constants.CKA_TOKEN,false);
derivedKeyAttr[4].set(Pkcs11Constants.CKA_MODIFIABLE,true);
derivedKeyAttr[5].set(Pkcs11Constants.CKA_PRIVATE, true);
derivedKeyAttr[6].set(Pkcs11Constants.CKA_EXTRACTABLE, true);
derivedKeyAttr[7].set(Pkcs11Constants.CKA_SENSITIVE, false);
String eferKPId = "efemernaya_para";
int phPriKeyEfemer = getPrivateKeyHandle(selectedToken.hSession,eferKPId.getBytes());
if(phPriKeyEfemer!=0){
LogF("����� ��������� ���� ��������� ����");
}
int rv = Pkcs11Constants.CKR_OK;
try {
rv = RtPkcs11Library.getInstance().C_DeriveKey(
selectedToken.hSession,
ckmDeriveMech,
phPriKeyEfemer,
derivedKeyAttr,
derivedKeyAttr.length,
hDerivedKey);
} catch (Exception e) {
LogF(e.getMessage());
}
C_DeriveKey выдаёт ошибку 7 - BAD ARGUMENT