Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Vladislav Babin  
#1 Оставлено : 14 сентября 2008 г. 16:21:47(UTC)
Vladislav Babin

Статус: Новичок

Группы: Участники
Зарегистрирован: 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 -- тот же эффект.

Ключ передается нормальный (по крайней мере, такой же как в сертификате):

UserPostedImage На всякий случай он же в аттаче

Что посоветуете?

С уважением,
Владислав Бабин

Вложение(я):
pub.key (1kb) загружен 16 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Максим Коллегин  
#2 Оставлено : 16 сентября 2008 г. 14:26:43(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
hProv - откуда получается?
Знания в базе знаний, поддержка в техподдержке
Offline Vladislav Babin  
#3 Оставлено : 19 сентября 2008 г. 17:38:12(UTC)
Vladislav Babin

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2008(UTC)
Сообщений: 4

Сам облажался. Вместо szOID_CP_GOST_R3410EL нужно писать X509_PUBLIC_KEY_INFO и тогда все работает
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.