Go to main content

man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

RSA_check_key (3openssl)

Name

RSA_check_key - validate private RSA keys

Synopsis

#include <openssl/rsa.h>

int RSA_check_key(RSA *rsa);

Description

RSA_check_key(3openssl)             OpenSSL            RSA_check_key(3openssl)



NAME
       RSA_check_key - validate private RSA keys

SYNOPSIS
        #include <openssl/rsa.h>

        int RSA_check_key(RSA *rsa);

DESCRIPTION
       This function validates RSA keys. It checks that p and q are in fact
       prime, and that n = p*q.

       It also checks that d*e = 1 mod (p-1*q-1), and that dmp1, dmq1 and iqmp
       are set correctly or are NULL.

       As such, this function can not be used with any arbitrary RSA key
       object, even if it is otherwise fit for regular RSA operation. See
       NOTES for more information.

RETURN VALUE
       RSA_check_key() returns 1 if rsa is a valid RSA key, and 0 otherwise.
       -1 is returned if an error occurs while checking the key.

       If the key is invalid or an error occurred, the reason code can be
       obtained using ERR_get_error(3).


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+--------------------------+
       |ATTRIBUTE TYPE |     ATTRIBUTE VALUE      |
       +---------------+--------------------------+
       |Availability   | library/security/openssl |
       +---------------+--------------------------+
       |Stability      | Pass-through uncommitted |
       +---------------+--------------------------+

NOTES
       This function does not work on RSA public keys that have only the
       modulus and public exponent elements populated. It performs integrity
       checks on all the RSA key material, so the RSA key structure must
       contain all the private key data too.

       Unlike most other RSA functions, this function does not work
       transparently with any underlying ENGINE implementation because it uses
       the key data in the RSA structure directly. An ENGINE implementation
       can override the way key data is stored and handled, and can even
       provide support for HSM keys - in which case the RSA structure may
       contain no key data at all! If the ENGINE in question is only being
       used for acceleration or analysis purposes, then in all likelihood the
       RSA key data is complete and untouched, but this can't be assumed in
       the general case.

       Source code for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This software was built from source available at
       https://github.com/oracle/solaris-userland.  The original community
       source was downloaded from
       https://www.openssl.org/source/openssl-1.0.2ze.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.openssl.org/.

BUGS
       A method of verifying the RSA key using opaque RSA API functions might
       need to be considered. Right now RSA_check_key() simply uses the RSA
       structure elements directly, bypassing the RSA_METHOD table altogether
       (and completely violating encapsulation and object-orientation in the
       process).  The best fix will probably be to introduce a "check_key()"
       handler to the RSA_METHOD function table so that alternative
       implementations can also provide their own verifiers.

SEE ALSO
       rsa(3), ERR_get_error(3)

HISTORY
       RSA_check_key() appeared in OpenSSL 0.9.4.




1.0.2ze                           2022-05-03           RSA_check_key(3openssl)