Статус: Новичок
Группы: Участники
Зарегистрирован: 14.09.2008(UTC) Сообщений: 4
|
Добрый день, Пытаюсь написать JNI-процедуру, которая бы импортировала открытый ключ в X.509-формате: Код:
JNIEXPORT jint JNICALL Java_be_cardon_nativecall_cryptoapi_CryptoAPICalls_CryptImportPublicKey
(JNIEnv *env, jobject obj, jint hProv, jbyteArray keyEncoded) {
#define szOID_CP_GOST_R3410EL "1.2.643.2.2.19"
#define ENCODING X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
#define ALG_TYPE_GR3410 (7 << 9)
#define ALG_SID_GR3410 30
#define ALG_SID_GR3410EL 35
#define CALG_GR3410 (ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410)
#define CALG_GR3410EL (ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410EL)
LPBYTE pbKeyEncoded = (LPBYTE)env->GetByteArrayElements(keyEncoded, 0);
DWORD dwKeyLen = env->GetArrayLength(keyEncoded);
LPBYTE pvStructIfno;
DWORD cbStructInfo = 0;
HCRYPTKEY hKey;
CryptDecodeObject(ENCODING, szOID_CP_GOST_R3410EL, pbKeyEncoded, dwKeyLen, 0, NULL, &cbStructInfo);
if (cbStructInfo == 0){
const char* msg = "Failed to decode public key";
throwCryptoAPIException(env, msg);
}
pvStructIfno = new BYTE[cbStructInfo];
if (!CryptDecodeObject(ENCODING, szOID_CP_GOST_R3410EL, pbKeyEncoded, dwKeyLen, 0, pvStructIfno, &cbStructInfo)){
const char* msg = "Failed to decode public key";
throwCryptoAPIException(env, msg);
}
if (!CryptImportPublicKeyInfoEx(hProv, ENCODING, (PCERT_PUBLIC_KEY_INFO)pvStructIfno, CALG_GR3410, 0, NULL, &hKey)){
const char* msg = "Failed to import public key";
throwCryptoAPIException(env, msg);
}
env->ReleaseByteArrayElements(keyEncoded, (jbyte*)pbKeyEncoded, JNI_ABORT);
return (jint)hKey;
}
Вызов CryptImportPublicKeyInfoEx дает ошибку 0x8009310b (ASN.1 bad tag value met) Пробовал вызывать с CALG_GR3410EL -- тот же эффект. Ключ передается нормальный (по крайней мере, такой же как в сертификате): На всякий случай он же в аттаче Что посоветуете? С уважением, Владислав Бабин Вложение(я): pub.key (1kb) загружен 16 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|