On 15/07/14 15:05, Dr. Stephen Henson wrote:
On Mon, Jul 14, 2014, Martin Basti wrote:

Hi list,

I have RSA encrypted private key as byte sequence, and I need to
export it as ASN.1 type EncryptedPrivateKeyInfo (RFC5958 section 3.)

Currently I use the following code (shortened):

unsigned char *pkey; //assigned encrypted primary key
priv_key_info = PKCS8_PRIV_KEY_INFO_new();
aobj = OBJ_nid2obj(NID_id_aes128_wrap);
PKCS8_pkey_set0(priv_key_info, aobj,  0 /*version*/, 0/*param type*/,
             NULL /*param val*/, pkey, pkey_len);
i2d_PKCS8_PRIV_KEY_INFO_fp(f, priv_key_info);

The output is:
# openssl asn1parse -in privkeyinfo.out -inform der -i
     0:d=0  hl=4 l=1244 cons: SEQUENCE
     4:d=1  hl=2 l=   1 prim:  INTEGER           :00
     7:d=1  hl=2 l=  11 cons:  SEQUENCE
     9:d=2  hl=2 l=   9 prim:   OBJECT            :id-aes128-wrap
    20:d=1  hl=4 l=1224 prim:  OCTET STRING      [HEX DUMP]: ....

Which is not ASN.1 type EncryptedPrivateKeyInfo, due the INTEGER
value (version). Output seems to be the OneAsymmetricKey type
(RFC5958 section 2).

Is there any way, how to export encrypted key as
EncryptedPrivateKeyInfo DER?

Normally the algorithm used for  EncryptedPrivateKeyInfo is a password based
encryption algorithm (PBE). The actual format for EncryptedPrivateKeyInfo is
identical to DigestInfo which uses X509_SIG so that is reused.

You don't have to set up the structure manually: that is tricky to get right.
You can use i2d_PKCS8PrivateKey_bio if you want the PBES2 format or for the
older version i2d_PKCS8PrivateKey_nid_bio. The older version typically uses
weaker encryption algorithms so it is not recommended.

To use those functions you first need to convert your RSA private key into an
EVP_PKEY structure. You could use d2i_PrivateKey for that.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org
Thank you for your reply,

but I'm not sure if it is what I need.
I have already encrypted private key outside of openssl (from softhsm), I need only add the type of algorithm and export it as ASN1 DER as is specified in RFC5958 section 3.

I will take a look at X509_SIG, maybe it is what I need.
Martin

--
Martin Basti

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to