Я пытаюсь разобрать ключи 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. Я также проверил на ошибочное чтение файла, но буфер совпадает и используется двоичный режим чтения.
openssl rsa -in <file.der> -inform der -noout -check
для проверки файла. - person President James K. Polk   schedule 12.10.2019openssl rsa -check
для проверки файла, так иopenssl asn1parse
для проверки структуры на соответствие моему модулю asn1. - person Zerg Overmind   schedule 12.10.2019