Ошибка «cryptodev_digest_update: недопустимые входы» при попытке зашифровать число с открытым ключом rsa, используя PKCS1_OAEP на плате ARM - PullRequest
0 голосов
/ 04 сентября 2018

Я создал приложение на 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     

Кто-нибудь сталкивался с подобной проблемой? Есть ли корреляция между алгоритмом заполнения и криптодевом, потому что я не нашел ничего релевантного?

...