Здравствуйте!Я собрал OpenSSL 1.0.1h для Android. Engine ГОСТ подключается.
Пытаюсь вычислить хеш NID_id_GostR3411_94 и сделать подпись. Хеш работает, сертификат парсится, но личный ключ прочитать не удаётся: ошибка digital envelope routines:evp_pkcs82pkey: unsupported private key algorithm type = GOST R 34.10 - 2001.
Код для открытия ключа:
BIO *keyBIO = keyBIO = BIO_new_file(privateKeyPath, "rb");
EVP_PKEY *pkey = d2i_PrivateKey_bio(keyBIO, &pkey);
Код инициализации GOST:
ENGINE * gostEngine;
int initGostOpenSSL() {
OPENSSL_config(NULL);
SSL_library_init();
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
ERR_load_crypto_strings();
ERR_load_BIO_strings();
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
const char * engine_gost = "gost";
gostEngine = ENGINE_by_id(engine_gost);
if (!gostEngine) {
return 0;
}
if (!ENGINE_init(gostEngine)) {
ENGINE_free(gostEngine);
gostEngine = NULL;
return 0;
}
return 1;
}