Blame doc/man3/RSA_get0_key.pod

Packit Service 084de1
=pod
Packit Service 084de1
Packit Service 084de1
=head1 NAME
Packit Service 084de1
Packit Service 084de1
RSA_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key,
Packit Service 084de1
RSA_get0_factors, RSA_get0_crt_params,
Packit Service 084de1
RSA_get0_n, RSA_get0_e, RSA_get0_d, RSA_get0_p, RSA_get0_q,
Packit Service 084de1
RSA_get0_dmp1, RSA_get0_dmq1, RSA_get0_iqmp, RSA_get0_pss_params,
Packit Service 084de1
RSA_clear_flags,
Packit Service 084de1
RSA_test_flags, RSA_set_flags, RSA_get0_engine, RSA_get_multi_prime_extra_count,
Packit Service 084de1
RSA_get0_multi_prime_factors, RSA_get0_multi_prime_crt_params,
Packit Service 084de1
RSA_set0_multi_prime_params, RSA_get_version
Packit Service 084de1
- Routines for getting and setting data in an RSA object
Packit Service 084de1
Packit Service 084de1
=head1 SYNOPSIS
Packit Service 084de1
Packit Service 084de1
 #include <openssl/rsa.h>
Packit Service 084de1
Packit Service 084de1
 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
Packit Service 084de1
 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
Packit Service 084de1
 int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
Packit Service 084de1
 void RSA_get0_key(const RSA *r,
Packit Service 084de1
                   const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
Packit Service 084de1
 void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
Packit Service 084de1
 void RSA_get0_crt_params(const RSA *r,
Packit Service 084de1
                          const BIGNUM **dmp1, const BIGNUM **dmq1,
Packit Service 084de1
                          const BIGNUM **iqmp);
Packit Service 084de1
 const BIGNUM *RSA_get0_n(const RSA *d);
Packit Service 084de1
 const BIGNUM *RSA_get0_e(const RSA *d);
Packit Service 084de1
 const BIGNUM *RSA_get0_d(const RSA *d);
Packit Service 084de1
 const BIGNUM *RSA_get0_p(const RSA *d);
Packit Service 084de1
 const BIGNUM *RSA_get0_q(const RSA *d);
Packit Service 084de1
 const BIGNUM *RSA_get0_dmp1(const RSA *r);
Packit Service 084de1
 const BIGNUM *RSA_get0_dmq1(const RSA *r);
Packit Service 084de1
 const BIGNUM *RSA_get0_iqmp(const RSA *r);
Packit Service 084de1
 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r);
Packit Service 084de1
 void RSA_clear_flags(RSA *r, int flags);
Packit Service 084de1
 int RSA_test_flags(const RSA *r, int flags);
Packit Service 084de1
 void RSA_set_flags(RSA *r, int flags);
Packit Service 084de1
 ENGINE *RSA_get0_engine(RSA *r);
Packit Service 084de1
 int RSA_get_multi_prime_extra_count(const RSA *r);
Packit Service 084de1
 int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]);
Packit Service 084de1
 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[],
Packit Service 084de1
                                     const BIGNUM *coeffs[]);
Packit Service 084de1
 int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[],
Packit Service 084de1
                                BIGNUM *coeffs[], int pnum);
Packit Service 084de1
 int RSA_get_version(RSA *r);
Packit Service 084de1
Packit Service 084de1
=head1 DESCRIPTION
Packit Service 084de1
Packit Service 084de1
An RSA object contains the components for the public and private key,
Packit Service 084de1
B<n>, B<e>, B<d>, B

, B<q>, B<dmp1>, B<dmq1> and B<iqmp>. B<n> is

Packit Service 084de1
the modulus common to both public and private key, B<e> is the public
Packit Service 084de1
exponent and B<d> is the private exponent.  B

, B<q>, B<dmp1>,

Packit Service 084de1
B<dmq1> and B<iqmp> are the factors for the second representation of a
Packit Service 084de1
private key (see PKCS#1 section 3 Key Types), where B

and B<q> are

Packit Service 084de1
the first and second factor of B<n> and B<dmp1>, B<dmq1> and B<iqmp>
Packit Service 084de1
are the exponents and coefficient for CRT calculations.
Packit Service 084de1
Packit Service 084de1
For multi-prime RSA (defined in RFC 8017), there are also one or more
Packit Service 084de1
'triplet' in an RSA object. A triplet contains three members, B<r>, B<d>
Packit Service 084de1
and B<t>. B<r> is the additional prime besides B

and B<q>. B<d> and

Packit Service 084de1
B<t> are the exponent and coefficient for CRT calculations.
Packit Service 084de1
Packit Service 084de1
The B<n>, B<e> and B<d> parameters can be obtained by calling
Packit Service 084de1
RSA_get0_key().  If they have not been set yet, then B<*n>, B<*e> and
Packit Service 084de1
B<*d> will be set to NULL.  Otherwise, they are set to pointers to
Packit Service 084de1
their respective values. These point directly to the internal
Packit Service 084de1
representations of the values and therefore should not be freed
Packit Service 084de1
by the caller.
Packit Service 084de1
Packit Service 084de1
The B<n>, B<e> and B<d> parameter values can be set by calling
Packit Service 084de1
RSA_set0_key() and passing the new values for B<n>, B<e> and B<d> as
Packit Service 084de1
parameters to the function.  The values B<n> and B<e> must be non-NULL
Packit Service 084de1
the first time this function is called on a given RSA object. The
Packit Service 084de1
value B<d> may be NULL. On subsequent calls any of these values may be
Packit Service 084de1
NULL which means the corresponding RSA field is left untouched.
Packit Service 084de1
Calling this function transfers the memory management of the values to
Packit Service 084de1
the RSA object, and therefore the values that have been passed in
Packit Service 084de1
should not be freed by the caller after this function has been called.
Packit Service 084de1
Packit Service 084de1
In a similar fashion, the B

and B<q> parameters can be obtained and

Packit Service 084de1
set with RSA_get0_factors() and RSA_set0_factors(), and the B<dmp1>,
Packit Service 084de1
B<dmq1> and B<iqmp> parameters can be obtained and set with
Packit Service 084de1
RSA_get0_crt_params() and RSA_set0_crt_params().
Packit Service 084de1
Packit Service 084de1
For RSA_get0_key(), RSA_get0_factors(), and RSA_get0_crt_params(),
Packit Service 084de1
NULL value BIGNUM ** output parameters are permitted. The functions
Packit Service 084de1
ignore NULL parameters but return values for other, non-NULL, parameters.
Packit Service 084de1
Packit Service 084de1
For multi-prime RSA, RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_params()
Packit Service 084de1
can be used to obtain other primes and related CRT parameters. The
Packit Service 084de1
return values are stored in an array of B<BIGNUM *>. RSA_set0_multi_prime_params()
Packit Service 084de1
sets a collect of multi-prime 'triplet' members (prime, exponent and coefficient)
Packit Service 084de1
into an RSA object.
Packit Service 084de1
Packit Service 084de1
Any of the values B<n>, B<e>, B<d>, B

, B<q>, B<dmp1>, B<dmq1>, and B<iqmp> can also be

Packit Service 084de1
retrieved separately by the corresponding function
Packit Service 084de1
RSA_get0_n(), RSA_get0_e(), RSA_get0_d(), RSA_get0_p(), RSA_get0_q(),
Packit Service 084de1
RSA_get0_dmp1(), RSA_get0_dmq1(), and RSA_get0_iqmp(), respectively.
Packit Service 084de1
Packit Service 084de1
RSA_get0_pss_params() is used to retrieve the RSA-PSS parameters.
Packit Service 084de1
Packit Service 084de1
RSA_set_flags() sets the flags in the B<flags> parameter on the RSA
Packit Service 084de1
object. Multiple flags can be passed in one go (bitwise ORed together).
Packit Service 084de1
Any flags that are already set are left set. RSA_test_flags() tests to
Packit Service 084de1
see whether the flags passed in the B<flags> parameter are currently
Packit Service 084de1
set in the RSA object. Multiple flags can be tested in one go. All
Packit Service 084de1
flags that are currently set are returned, or zero if none of the
Packit Service 084de1
flags are set. RSA_clear_flags() clears the specified flags within the
Packit Service 084de1
RSA object.
Packit Service 084de1
Packit Service 084de1
RSA_get0_engine() returns a handle to the ENGINE that has been set for
Packit Service 084de1
this RSA object, or NULL if no such ENGINE has been set.
Packit Service 084de1
Packit Service 084de1
RSA_get_version() returns the version of an RSA object B<r>.
Packit Service 084de1
Packit Service 084de1
=head1 NOTES
Packit Service 084de1
Packit Service 084de1
Values retrieved with RSA_get0_key() are owned by the RSA object used
Packit Service 084de1
in the call and may therefore I<not> be passed to RSA_set0_key().  If
Packit Service 084de1
needed, duplicate the received value using BN_dup() and pass the
Packit Service 084de1
duplicate.  The same applies to RSA_get0_factors() and RSA_set0_factors()
Packit Service 084de1
as well as RSA_get0_crt_params() and RSA_set0_crt_params().
Packit Service 084de1
Packit Service 084de1
The caller should obtain the size by calling RSA_get_multi_prime_extra_count()
Packit Service 084de1
in advance and allocate sufficient buffer to store the return values before
Packit Service 084de1
calling RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_params().
Packit Service 084de1
Packit Service 084de1
RSA_set0_multi_prime_params() always clears the original multi-prime
Packit Service 084de1
triplets in RSA object B<r> and assign the new set of triplets into it.
Packit Service 084de1
Packit Service 084de1
=head1 RETURN VALUES
Packit Service 084de1
Packit Service 084de1
RSA_set0_key(), RSA_set0_factors(), RSA_set0_crt_params() and
Packit Service 084de1
RSA_set0_multi_prime_params() return 1 on success or 0 on failure.
Packit Service 084de1
Packit Service 084de1
RSA_get0_n(), RSA_get0_e(), RSA_get0_d(), RSA_get0_p(), RSA_get0_q(),
Packit Service 084de1
RSA_get0_dmp1(), RSA_get0_dmq1(), and RSA_get0_iqmp()
Packit Service 084de1
return the respective value.
Packit Service 084de1
Packit Service 084de1
RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_crt_params() return
Packit Service 084de1
1 on success or 0 on failure.
Packit Service 084de1
Packit Service 084de1
RSA_get_multi_prime_extra_count() returns two less than the number of primes
Packit Service 084de1
in use, which is 0 for traditional RSA and the number of extra primes for
Packit Service 084de1
multi-prime RSA.
Packit Service 084de1
Packit Service 084de1
RSA_get_version() returns B<RSA_ASN1_VERSION_MULTI> for multi-prime RSA and
Packit Service 084de1
B<RSA_ASN1_VERSION_DEFAULT> for normal two-prime RSA, as defined in RFC 8017.
Packit Service 084de1
Packit Service 084de1
RSA_test_flags() returns the current state of the flags in the RSA object.
Packit Service 084de1
Packit Service 084de1
RSA_get0_engine() returns the ENGINE set for the RSA object or NULL if no
Packit Service 084de1
ENGINE has been set.
Packit Service 084de1
Packit Service 084de1
=head1 SEE ALSO
Packit Service 084de1
Packit Service 084de1
L<RSA_new(3)>, L<RSA_size(3)>
Packit Service 084de1
Packit Service 084de1
=head1 HISTORY
Packit Service 084de1
Packit Service 084de1
The RSA_get0_pss_params() function was added in OpenSSL 1.1.1e.
Packit Service 084de1
Packit Service 084de1
The
Packit Service 084de1
RSA_get_multi_prime_extra_count(), RSA_get0_multi_prime_factors(),
Packit Service 084de1
RSA_get0_multi_prime_crt_params(), RSA_set0_multi_prime_params(),
Packit Service 084de1
and RSA_get_version() functions were added in OpenSSL 1.1.1.
Packit Service 084de1
Packit Service 084de1
Other functions described here were added in OpenSSL 1.1.0.
Packit Service 084de1
Packit Service 084de1
=head1 COPYRIGHT
Packit Service 084de1
Packit Service 084de1
Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
Packit Service 084de1
Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
in the file LICENSE in the source distribution or at
Packit Service 084de1
L<https://www.openssl.org/source/license.html>.
Packit Service 084de1
Packit Service 084de1
=cut