Is this a bug in openssl provider?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

 

Since I’m writing a small provider, I’m reading openssl provider source to use as learning tool. Today, I noticed something strange in RSA key management here: https://github.com/openssl/openssl/blob/3307338e26862070eaacad6ec7537a63a63b8a90/providers/implementations/keymgmt/rsa_kmgmt.c#L115-L133

 

The rsa_has() method is written like this:

static int rsa_has(const void *keydata, int selection)

{

    const RSA *rsa = keydata;

    int ok = 1;

 

    if (rsa == NULL || !ossl_prov_is_running())

        return 0;

    if ((selection & RSA_POSSIBLE_SELECTIONS) == 0)

        return 1; /* the selection is not missing */

 

    /* OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS are always available even if empty */

    if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0)

        ok = ok && (RSA_get0_e(rsa) != NULL);

    if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)

        ok = ok && (RSA_get0_n(rsa) != NULL);

    if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0)

        ok = ok && (RSA_get0_d(rsa) != NULL);

    return ok;

}

 

But I think selection of OSSL_KEYMGMT_SELECT_KEYPAIR and OSSL_KEYMGMT_SELECT_PUBLIC_KEY should be like this:

    if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0)

        ok = ok && (RSA_get0_n(rsa) != NULL);

    if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)

        ok = ok && (RSA_get0_e(rsa) != NULL);

RSA public key is pair (e,n) and private key is (d,n). `n` is the common part, so I think in case of OSSL_KEYMGMT_SELECT_KEYPAIR, we need to check `n` is not null, not `e` and we need to check `e` for public key. Current rsa_has() return 1 if RSA structure has `d` and `e` but no `n` and we OSSL_KEYMGMT_SELECT_PRIVATE_KEY selection which I think is incorrect.

 

What do you think? Do you think it is a bug too?


This email is confidential and may contain information subject to legal privilege. If you are not the intended recipient please advise us of our error by return e-mail then delete this email and any attached files. You may not copy, disclose or use the contents in any way. The views expressed in this email may not be those of Gallagher Group Ltd or subsidiary companies thereof.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux