RSA_get0_* functions are not available in LibreSSL and deprecated in
OpenSSL. This fixes build with LibreSSL and removes deprecation warnings
with OpenSSL 3

Signed-off-by: Michal Vasilek <michal.vasi...@nic.cz>
---
 tools/sunxi_toc0.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/tools/sunxi_toc0.c b/tools/sunxi_toc0.c
index bab5d17b7d..a6c4b59010 100644
--- a/tools/sunxi_toc0.c
+++ b/tools/sunxi_toc0.c
@@ -207,8 +207,8 @@ static int toc0_create_key_item(uint8_t *buf, uint32_t *len,
        int n_len, e_len;
 
        /* Store key 0. */
-       n_len = BN_bn2bin(RSA_get0_n(root_key), key_item->key0);
-       e_len = BN_bn2bin(RSA_get0_e(root_key), key_item->key0 + n_len);
+       n_len = BN_bn2bin(root_key->n, key_item->key0);
+       e_len = BN_bn2bin(root_key->e, key_item->key0 + n_len);
        if (n_len + e_len > sizeof(key_item->key0)) {
                pr_err("Root key is too big for key item\n");
                goto err;
@@ -217,8 +217,8 @@ static int toc0_create_key_item(uint8_t *buf, uint32_t *len,
        key_item->key0_e_len = cpu_to_le32(e_len);
 
        /* Store key 1. */
-       n_len = BN_bn2bin(RSA_get0_n(fw_key), key_item->key1);
-       e_len = BN_bn2bin(RSA_get0_e(fw_key), key_item->key1 + n_len);
+       n_len = BN_bn2bin(fw_key->n, key_item->key1);
+       e_len = BN_bn2bin(fw_key->e, key_item->key1 + n_len);
        if (n_len + e_len > sizeof(key_item->key1)) {
                pr_err("Firmware key is too big for key item\n");
                goto err;
@@ -281,8 +281,8 @@ static int toc0_verify_key_item(const uint8_t *buf, 
uint32_t len,
                goto err;
 
        /* If a root key was provided, compare it to key 0. */
-       if (root_key && (BN_cmp(n, RSA_get0_n(root_key)) ||
-                        BN_cmp(e, RSA_get0_e(root_key)))) {
+       if (root_key && (BN_cmp(n, root_key->n) ||
+                        BN_cmp(e, root_key->e))) {
                pr_err("Wrong root key in key item\n");
                goto err;
        }
@@ -313,8 +313,8 @@ static int toc0_verify_key_item(const uint8_t *buf, 
uint32_t len,
 
                if (*fw_key) {
                        /* If a FW key was provided, compare it to key 1. */
-                       if (BN_cmp(n, RSA_get0_n(*fw_key)) ||
-                           BN_cmp(e, RSA_get0_e(*fw_key))) {
+                       if (BN_cmp(n, (*fw_key)->n) ||
+                           BN_cmp(e, (*fw_key)->e)) {
                                pr_err("Wrong firmware key in key item\n");
                                goto err;
                        }
@@ -361,8 +361,8 @@ static int toc0_create_cert_item(uint8_t *buf, uint32_t 
*len, RSA *fw_key,
         */
        totalSequence = &cert_item->totalSequence;
        publicKey = &totalSequence->mainSequence.subjectPublicKeyInfo.publicKey;
-       if (BN_bn2binpad(RSA_get0_n(fw_key), publicKey->n, 
sizeof(publicKey->n)) < 0 ||
-           BN_bn2binpad(RSA_get0_e(fw_key), publicKey->e, 
sizeof(publicKey->e)) < 0) {
+       if (BN_bn2binpad(fw_key->n, publicKey->n, sizeof(publicKey->n)) < 0 ||
+           BN_bn2binpad(fw_key->e, publicKey->e, sizeof(publicKey->e)) < 0) {
                pr_err("Firmware key is too big for certificate\n");
                goto err;
        }
@@ -430,8 +430,8 @@ static int toc0_verify_cert_item(const uint8_t *buf, 
uint32_t len, RSA *fw_key,
                goto err;
 
        /* If a key was provided, compare it to the embedded key. */
-       if (fw_key && (BN_cmp(RSA_get0_n(key), RSA_get0_n(fw_key)) ||
-                      BN_cmp(RSA_get0_e(key), RSA_get0_e(fw_key)))) {
+       if (fw_key && (BN_cmp(key->n, fw_key->n) ||
+                      BN_cmp(key->e, fw_key->e))) {
                pr_err("Wrong firmware key in certificate\n");
                goto err;
        }
@@ -830,7 +830,7 @@ static void toc0_set_header(void *buf, struct stat *sbuf, 
int ifd,
        }
 
        /* When using an existing key item, the root key is optional. */
-       if (!key_item && (!root_key || !RSA_get0_d(root_key))) {
+       if (!key_item && (!root_key || !root_key->d)) {
                pr_err("Failed to read private key from '%s'\n",
                       root_key_file);
                pr_info("Try 'openssl genrsa -out root_key.pem'\n");
@@ -846,7 +846,7 @@ static void toc0_set_header(void *buf, struct stat *sbuf, 
int ifd,
        }
        if (!fw_key) {
                /* If the root key is a private key, it can be used instead. */
-               if (root_key && RSA_get0_d(root_key)) {
+               if (root_key && root_key->d) {
                        pr_info("Using root key as firmware key\n");
                        fw_key = root_key;
                } else {
-- 
2.37.1

Reply via email to