Я создал приложение на c ++, которое работает на плате arm7l с linux v3.10.17-rt12 + yocto. В какой-то момент мне нужно зашифровать открытый ключ RSA. Открытый ключ, который я использую, создан с использованием openssl:
openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private_rsa.pem -pubout -out public.pem
Для этого случая я использовал библиотеку poco. Код, который я создал, выглядит следующим образом:
Poco::Crypto::CipherFactory &factory = Poco::Crypto::CipherFactory::defaultFactory();
Poco::Crypto::Cipher* pCipher = factory.createCipher(Poco::Crypto::RSAKey("public.pem"), RSA_PADDING_PKCS1_OAEP);
Poco::Crypto::CryptoTransform *pEncryptor = NULL;
pEncryptor = pCipher->createEncryptor();
std::stringstream memstream;
Poco::Crypto::CryptoOutputStream encryptor(memstream, pEncryptor);
std::string number = "123456789";
encryptor << number;
encryptor.close();
После команды encryptor.close () я получаю следующее сообщение об ошибке:
cryptodev_digest_update: illegal inputs
Однако, когда я пытаюсь использовать RSA_PADDING_PKCS1 или даже RSA_PADDING_NONE, код работает правильно. Я пока не хочу удалять криптовалюту ядра.
Версия openssl:
OpenSSL 1.0.1s
Двигатели openssl:
(cryptodev) cryptodev engine
(dynamic) Dynamic engine loading support
Пока поддерживаются следующие команды openssl:
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam ec
ecparam enc engine errstr
gendh gendsa genpkey genrsa
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand req
rsa rsautl s_client s_server
s_time sess_id smime speed
spkac srp ts verify
version x509
Message Digest commands (see the `dgst' command for more details)
md4 md5 mdc2 rmd160
sha sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb
Кто-нибудь сталкивался с подобной проблемой? Есть ли корреляция между алгоритмом заполнения и криптодевом, потому что я не нашел ничего релевантного?