I have an RSA private key file generated with openssl that is encrypted using the aes-128-cbc method.  The content of this key is as follows:

 

-----BEGIN ENCRYPTED PRIVATE KEY-----

MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIsWjkRdsPP9ICAggA

MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBB5NuIUsFZvPCRWX4PwvN+aBIIE

0Pos3/0Q7vVbRxnpmx3b3H3uOuILQ28vayLi4dtIg3SAEATSbShEzSIee1txKKcT

iE2rAMs6Wr/NRjHxgdzPZIUjvkNr5xMRn9OfzUCXOxF345RUP8seK701VceatHIz

Bv6R9WSUMofZ5TnV4qiUwtfmEgc1fkyCEjrzpu6Er2YijY7rHm/YDT+45hz3m3Rs

MRW1ulPTzLw9GO/pbqg87yvZ1L9AhPpaWj0SRQJga7cuGglDAYDkl5lGRFNMAN3W

cttgxvaWaENGgerVtofQJdXJGHypuRKMw/23KmpQWpH/pHrkj4/8z3C4EztWNkQd

+kxV+eM7Yrq/BIT+mF0H7eoG45x27SKZx3TocQdHQn1xqv9zYLn9AcnDWH2CxH/4

t+X/CopmzAVNWZmmxJpQ4Uxr1O3rdn3q6qtFPNrinj9zTPAlVYouhzD78X9dsOUR

jj+y5Q0MP7RLfQqaXW+dS4E8hT54BP3QGIir5DN5Lz3iH3xNJtHfsPsSAE0rORzH

6A1bFhJ8F3Xcm0Dj+lGPzMTHXWqIChb+rZNV81/w9EUFVLggXrsNqhJXqU5iCq1E

thQx35YF1RD+R0SbuqF6x2OHlNvVJwEM2PvXpJw+tl9N5aLWCv0S9X42SD4T6W1N

/9fX8tak8Cctm6zUDnOh5M9o3TD7nnf+17g85M6XQ8EYXFnsQywoMIgkAVMj+TJq

ndMn2Z2Dcyc8LRA3itNytCSL2qhzVVTnDkF8KhkF6Bv82Il2WjzMHsoVFoOMKN8I

fcD22wZDvW1NtrkJYI6vge57k4gyDHYRPVd1L4/hKdITuwDUOX6M0rNi07n9WTId

bZs+PYnntkzi+8jQSbKenUrq9L3loTHmVJHKNYR63w6VtHLxrXSbNrzOxxOcPAD3

DMNi6vf6DivQYcOtNFXtFt7A5ZLB0LYLzJyAm5+5DJ0LCWr+OgfNi7sLcb9QaXEy

YwWgMmdaK9KzGH/bkUaaxOUj58eFcvh0/JfO933VXYuGGcZbr9KHnj5AIJZ1GW1J

xbdVpa6C1y3YfALxCjddm+P6SslY+6SatDHDaAl6UR/pALx8J7n2WhBZXYuTMcC7

BdespFdPaOrVUq54jiwc0/IiX+LDSmhw5QBgk5/96pkjta/RKFgbijzbO2Hqd/sr

1Os5q0hy06CURK6hZKPeBrj7tUHEEN7/nvXp7kYmPvxbY9X6qMbBEKWBdcent/zp

giekyYktJ4i1+3xYp8Bm3fB7el3+H6F1ut6b91rnvF9hScEMEHO+iUuGKBotZuGW

Le223uzCzoqyd2BuYtM90JgeTLNT/j894a1jN0HYqz2mWsyqQ3cEhOzEB/M92OwJ

f+nygSET9Vwkd8Uhf1/rrFC5cNSuL9Qk+AZn7QFWOApo4h1X/jBiapuRVzQlLLUm

2frQ/962x36cHXoz/KYcaODtJhTtvVWHY4BLKxtugjVf7kz7fx/vO+djKd9ZOLmk

dUY+8uIWXa59AIq+/dqeVvH6UFB55ghm08mgISZXTL8Xwr8/e/hlallsEacarlVZ

TfQCLPDkDYfQAJYbmRSD02eSxA5Vh+FAMfu06BrNJEUuY48yiIAB/6JP6r4oA8xV

eRElHaP2949fXF0dTLicCnYHktE/lep8Aj6MZW9jbaTX

-----END ENCRYPTED PRIVATE KEY-----

 

When my program attempts to load this key by calling mbedtls_pk_parse_key(), I am getting a parse key failure: “PKCS5 -  Requested encryption or digest alg not available).  I have traced this through the debugger until I reach code generated by the FN_OID_TYPED_FROM_ASN1() and FN_OID_GET_ATTR1() macros which, as best I can tell in this particular use case, rely on a global array of cipher declarations:

 

static const oid_cipher_alg_t oid_cipher_alg[] =

{

    {

        OID_DESCRIPTOR(MBEDTLS_OID_DES_CBC,              "desCBC",       "DES-CBC"),

        MBEDTLS_CIPHER_DES_CBC,

    },

    {

        OID_DESCRIPTOR(MBEDTLS_OID_DES_EDE3_CBC,         "des-ede3-cbc", "DES-EDE3-CBC"),

        MBEDTLS_CIPHER_DES_EDE3_CBC,

    },

    {

        NULL_OID_DESCRIPTOR,

        MBEDTLS_CIPHER_NONE,

    },

};

 

 

I have attempted to alter this array declaration by adding support for AES encryption as follows:

 

static const oid_cipher_alg_t oid_cipher_alg[] =

{

    {

        OID_DESCRIPTOR(MBEDTLS_OID_DES_CBC,              "desCBC",       "DES-CBC"),

        MBEDTLS_CIPHER_DES_CBC,

    },

    {

        OID_DESCRIPTOR(MBEDTLS_OID_DES_EDE3_CBC,         "des-ede3-cbc", "DES-EDE3-CBC"),

        MBEDTLS_CIPHER_DES_EDE3_CBC,

    },

    {

        OID_DESCRIPTOR(MBEDTLS_OID_AES, "aes-128-cbc", "AES-128-CBC"),

        MBEDTLS_CIPHER_AES_128_CBC

    },

    {

        NULL_OID_DESCRIPTOR,

        MBEDTLS_CIPHER_NONE,

    },

};

 

 

I have found, however, that this addition does not appear to make any difference in the outcome of the key parsing call.

 

I have found that the key file can be parsed when I generate an openssl key file with the “-traditional” flag and the key file is presented in the following form:

 

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: AES-128-CBC,F4B5C3EF18218C3D98AA822064A8C32F

 

6sgGn751Ljr1EDn6JY3GtCHIeExVGwq79aQ/8ATlfkO40WeJKTqQDrqMOe4pwMRM

sUlL2XP1U8frZk7tDUgtVlzs9xA4XIT0XSxjqTVJDEaj9mrMjGSSXwRRXhN2XXci

/v3zE6g4BZReNsKZR0Q/P/jal2mWm2uEYGd8Bat6gubl1HqUf4kha4bFjXrUC/7J

4CTGzbdwcz5qP1JjaRh0X30QKNXmCbQdw14XEe9UxAM1Uk9fm1/eKGr0bhEfAE8h

li9lTY6nOPZYgcU3XoOykOZ6SAE4qgUJ+0GFoyJ2oCpkB9xhxei0kPsyRdkp60/W

uF97vtZUw0oLqWpnPfk4OzkaHm/pWsrq2MoBH/ioss75LbcEmkQsiehXEsr9CsV6

AGY342TszFqOKh5NICdAV/BCxBRf/YyMqITer/4O1HmdjC+WaONa1OdunH4cSe3o

QrZ+NZQkrzo1bFF+q1f8AQTyWS6imgkSrOxA0QEDsDVySsfDpWgiMjzuXDZR58zc

KMGYIfEO8YjYrMD1guZ+5pAX0GvvLlqmFUw8Xkyw3vwSJF1fVZjlzG879n5V8IkG

g9YuloFOMVL0ePej/bhb+kd95pjCCsXteGli0gKggE/2EM05wukrDXGlfOUoAcWg

UtnwU69OXo7Gk3BFac1K0Fh9wCxk4yqkUlsVHtU/txuTzRGGfYO4SH9YHv6dpSZx

0Jmi2fU2KarPLYJOMdRi5t62hjzykM8Lqez/mzqaKG0WWt07qXBMtso+EaLzx42r

Gdc8sb2EH0FpweKW2x5oSsJPLSItZd40QrOYWkwGGFinotr+1T990QjF/q6471bH

D2RhNwO3xviPUpu3sHUeG29dbk3EKsofe8Yw+0+jSY7bW0akdYZfdxSlH1dfnue4

9eFccDO0xiMxgx19NV1GFxSrY3AwQkoG7U0d204432O50VRLqAZsHIwmbcx5sEHF

1/GP6nq1Lwm1OzDs2M5/2cnzgNpDszxLrXqKcEZjGYJ8adSNdabus9C0ag3Yi62s

Dgavq5XpBayZbOohSUuSiUVJ+YHONLHcKyFJlOUTSsklW6um/VQmgnN2MpEucDni

iYYYZpqiM6+WHaIk37O9WbrxVEua/OCFqTgTuLh7h98ygI9jhBhQC6CBtl9q+h2c

m+nRNId5oWmOhD2sJmME8nNTSs8qXLha9mXj1eTS9vn8lG0aXj24qXfZ2Ns6iIBl

+M+wd3f7YeqX2H9sO+avN5jnZcPPpCpESQzzKcj8bDMzXb1jfxK7fyiTeSX1eX8r

dgKCXiBcu0oPXq8ntUSgU/0SWJFA9xHBuB8J0+y9XvhHncd0avP2wrA8qx/g334Z

bm3MtCiMNkRd9v9j9EpXpLUOwRgsxWKz40tNXHo2SPkyS0U3jIAYQwBr1Ot1DlBN

7GLFZE2ce/3Js3y6JSr9kXq1V8qwqcx9XTutNc4PtM8/kmW+jKg2NKu/aRPykae5

JuRfiOxF7Pr1rwSyz1GAO97Z7yd/q35k5o4AQiTjvPKp/d/j1MuJF6n/4Yso5Lwn

cSiKgdWulCnKEKkOV9q5n9fVMXtid0QBXRcvbyyUBveVwkqxu5K2lVHPnn5CB/pz

-----END RSA PRIVATE KEY-----

 

The parsing attempt will succeed. 

 

I had hoped that updating to the latest version of mbedtls would address this problem but it still persists.  I would love to try to fix the problem and submit a patch but am operating at the limits of my familiarity with the way that mbed-tls parses the ASN.1 structure and matches OID content.  This is a mid-level priority for me because there is a work-around but I am concerned that this problem may crop up with a customer who is using the server that I have written.  I would appreciate any advice on thjis matter.

 

Regards,

 

Jon Trauntvein