Я пытаюсь проанализировать RSA (закрытые) ключи, используя asn1c. Я основал модуль asn1 на https://tools.ietf.org/html/rfc3447, и он выглядит следующим образом (я пытался использовать только часть с закрытым и открытым ключами):
-- ===================
-- Main structures
-- ===================
RSAPrivateKey DEFINITIONS ::=
BEGIN
--
-- Representation of RSA private key with information for the CRT
-- algorithm.
--
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
Version ::= INTEGER { two-prime(0), multi(1) }
(CONSTRAINED BY {
-- version must be multi if otherPrimeInfos present --
})
OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
OtherPrimeInfo ::= SEQUENCE {
prime INTEGER, -- ri
exponent INTEGER, -- di
coefficient INTEGER -- ti
}
END -- PKCS1Definitions
Однако, когда я компилирую модуль и пытаюсь разобратьЗакрытый ключ .der с использованием следующего, он заканчивается на RC_FAIL.
RSAPrivateKey_t *rsa_p_key;
rsa_p_key= (RSAPrivateKey_t*)calloc(1, sizeof *rsa_p_key);
asn_dec_rval_t rval = ber_decode(
0,
&asn_DEF_RSAPrivateKey,
(void**)&rsa_p_key,
buffer, // buffer containing key (unsigned char*)
buffer_len); // buffer length (amount of read bytes)
Я пытался найти ошибку в модуле asn1, но безуспешно. Использование openssl для распечатки файла .der, похоже, соответствует RSAPrivateKey. Я также проверил ошибочное чтение файлов, но используются совпадения с буфером и режим двоичного чтения.