diff options
author | Matt Caswell <matt@openssl.org> | 2020-06-15 14:21:00 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2020-06-19 10:34:58 +0100 |
commit | 2da8d4eb2812e18cec5c8324a54a4c56b52563ed (patch) | |
tree | 83398242047d499554026412f2bd68a51fe7217b /doc/man3 | |
parent | 48e971dd9f88933a7f77f5051a8b79b9e17892a9 (diff) |
Add more complete support for libctx/propq in the EC code
Renames some "new_ex" functions to "new_with_libctx" and ensures that we
pass around the libctx AND the propq everywhere.
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/12159)
Diffstat (limited to 'doc/man3')
-rw-r--r-- | doc/man3/EC_GROUP_new.pod | 53 | ||||
-rw-r--r-- | doc/man3/EC_KEY_new.pod | 70 |
2 files changed, 65 insertions, 58 deletions
diff --git a/doc/man3/EC_GROUP_new.pod b/doc/man3/EC_GROUP_new.pod index fa61275806..76fed3b246 100644 --- a/doc/man3/EC_GROUP_new.pod +++ b/doc/man3/EC_GROUP_new.pod @@ -11,7 +11,7 @@ EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, -EC_GROUP_new_by_curve_name_ex, +EC_GROUP_new_by_curve_name_with_libctx, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve, EC_GROUP_get_curve, @@ -34,7 +34,8 @@ objects const BIGNUM *b, BN_CTX *ctx); EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); - EC_GROUP *EC_GROUP_new_by_curve_name_ex(OPENSSL_CTX *libctx, int nid); + EC_GROUP *EC_GROUP_new_by_curve_name_with_libctx(OPENSSL_CTX *libctx, + const char *propq, int nid); EC_GROUP *EC_GROUP_new_by_curve_name(int nid); int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, @@ -83,24 +84,24 @@ pentanomial for this parameter. Although deprecated since OpenSSL 3.0 and should no longer be used, a new curve can be constructed by calling EC_GROUP_new(), using the -implementation provided by B<meth> (see L<EC_GFp_simple_method(3)>) and -associated with the library context B<ctx> (see L<OPENSSL_CTX(3)>). -The B<ctx> parameter may be NULL in which case the default library context is +implementation provided by I<meth> (see L<EC_GFp_simple_method(3)>) and +associated with the library context I<ctx> (see L<OPENSSL_CTX(3)>). +The I<ctx> parameter may be NULL in which case the default library context is used. It is then necessary to call EC_GROUP_set_curve() to set the curve parameters. Applications should instead use one of the other EC_GROUP_new_* constructors. EC_GROUP_new_from_ecparameters() will create a group from the -specified B<params> and +specified I<params> and EC_GROUP_new_from_ecpkparameters() will create a group from the specific PK -B<params>. +I<params>. -EC_GROUP_set_curve() sets the curve parameters B<p>, B<a> and B<b>. For a curve -over Fp B<p> is the prime for the field. For a curve over F2^m B<p> represents +EC_GROUP_set_curve() sets the curve parameters I<p>, I<a> and I<b>. For a curve +over Fp I<p> is the prime for the field. For a curve over F2^m I<p> represents the irreducible polynomial - each bit represents a term in the polynomial. Therefore there will either be three or five bits set dependent on whether the polynomial is a trinomial or a pentanomial. -In either case, B<a> and B<b> represents the coefficients a and b from the +In either case, I<a> and I<b> represents the coefficients a and b from the relevant equation introduced above. EC_group_get_curve() obtains the previously set curve parameters. @@ -120,13 +121,13 @@ An appropriate default implementation method will be used. Whilst the library can be used to create any curve using the functions described above, there are also a number of predefined curves that are available. In order to obtain a list of all of the predefined curves, call the function -EC_get_builtin_curves(). The parameter B<r> should be an array of -EC_builtin_curve structures of size B<nitems>. The function will populate the -B<r> array with information about the built-in curves. If B<nitems> is less than -the total number of curves available, then the first B<nitems> curves will be +EC_get_builtin_curves(). The parameter I<r> should be an array of +EC_builtin_curve structures of size I<nitems>. The function will populate the +I<r> array with information about the built-in curves. If I<nitems> is less than +the total number of curves available, then the first I<nitems> curves will be returned. Otherwise the total number of curves will be provided. The return value is the total number of curves available (whether that number has been -populated in B<r> or not). Passing a NULL B<r>, or setting B<nitems> to 0 will +populated in I<r> or not). Passing a NULL I<r>, or setting I<nitems> to 0 will do nothing other than return the total number of curves available. The EC_builtin_curve structure is defined as follows: @@ -135,26 +136,28 @@ The EC_builtin_curve structure is defined as follows: const char *comment; } EC_builtin_curve; -Each EC_builtin_curve item has a unique integer id (B<nid>), and a human +Each EC_builtin_curve item has a unique integer id (I<nid>), and a human readable comment string describing the curve. In order to construct a built-in curve use the function -EC_GROUP_new_by_curve_name_ex() and provide the B<nid> of the curve to be -constructed and the associated library context to be used in B<ctx> (see -L<OPENSSL_CTX(3)>). The B<ctx> value may be NULL in which case the default -library context is used. +EC_GROUP_new_by_curve_name_with_libctx() and provide the I<nid> of the curve to +be constructed, the associated library context to be used in I<ctx> (see +L<OPENSSL_CTX(3)>) and any property query string in I<propq>. The I<ctx> value +may be NULL in which case the default library context is used. The I<propq> +value may also be NULL. -EC_GROUP_new_by_curve_name() is the same as EC_GROUP_new_by_curve_name_ex() -except that the default library context is always used. +EC_GROUP_new_by_curve_name() is the same as +EC_GROUP_new_by_curve_name_with_libctx() except that the default library context +is always used along with a NULL property query string. EC_GROUP_free() frees the memory associated with the EC_GROUP. -If B<group> is NULL nothing is done. +If I<group> is NULL nothing is done. EC_GROUP_clear_free() is deprecated: it was meant to destroy any sensitive data held within the EC_GROUP and then free its memory, but since all the data stored in the EC_GROUP is public anyway, this function is unnecessary. Its use can be safely replaced with EC_GROUP_free(). -If B<group> is NULL nothing is done. +If I<group> is NULL nothing is done. =head1 RETURN VALUES @@ -182,7 +185,7 @@ L<OPENSSL_CTX(3)> EC_GROUP_new() was deprecated in OpenSSL 3.0. -EC_GROUP_new_by_curve_name_ex() was added in OpenSSL 3.0. +EC_GROUP_new_by_curve_name_with_libctx() was added in OpenSSL 3.0. =item * diff --git a/doc/man3/EC_KEY_new.pod b/doc/man3/EC_KEY_new.pod index 04ad740bc6..a907435153 100644 --- a/doc/man3/EC_KEY_new.pod +++ b/doc/man3/EC_KEY_new.pod @@ -2,10 +2,10 @@ =head1 NAME -EC_KEY_get_method, EC_KEY_set_method, EC_KEY_new_ex, +EC_KEY_get_method, EC_KEY_set_method, EC_KEY_new_with_libctx, EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, -EC_KEY_new_by_curve_name_ex, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, -EC_KEY_dup, EC_KEY_up_ref, EC_KEY_get0_engine, +EC_KEY_new_by_curve_name_with_libctx, EC_KEY_new_by_curve_name, EC_KEY_free, +EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, EC_KEY_get0_engine, EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, EC_KEY_set_public_key, EC_KEY_get_conv_form, @@ -19,12 +19,13 @@ EC_KEY objects #include <openssl/ec.h> - EC_KEY *EC_KEY_new_ex(OPENSSL_CTX *ctx); + EC_KEY *EC_KEY_new_with_libctx(OPENSSL_CTX *ctx, const char *propq); EC_KEY *EC_KEY_new(void); int EC_KEY_get_flags(const EC_KEY *key); void EC_KEY_set_flags(EC_KEY *key, int flags); void EC_KEY_clear_flags(EC_KEY *key, int flags); - EC_KEY *EC_KEY_new_by_curve_name_ex(OPENSSL_CTX *ctx, int nid); + EC_KEY *EC_KEY_new_by_curve_name_with_libctx(OPENSSL_CTX *ctx, + const char *propq, int nid); EC_KEY *EC_KEY_new_by_curve_name(int nid); void EC_KEY_free(EC_KEY *key); EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); @@ -64,9 +65,9 @@ Deprecated since OpenSSL 3.0: An EC_KEY represents a public key and, optionally, the associated private key. A new EC_KEY with no associated curve can be constructed by calling -EC_KEY_new_ex() and specifying the associated library context in B<ctx> -(see L<OPENSSL_CTX(3)>). -The B<ctx> parameter may be NULL in which case the default library context is +EC_KEY_new_ex() and specifying the associated library context in I<ctx> +(see L<OPENSSL_CTX(3)>) and property query string I<propq>. +The I<ctx> parameter may be NULL in which case the default library context is used. The reference count for the newly created EC_KEY is initially set to 1. @@ -77,24 +78,26 @@ EC_KEY_new() is the same as EC_KEY_new_ex() except that the default library context is always used. Alternatively a new EC_KEY can be constructed by calling -EC_KEY_new_by_curve_name_ex() and supplying the nid of the associated curve and -the library context to be used B<ctx> (see L<OPENSSL_CTX(3)>). -The B<ctx> parameter may be NULL in which case the default library context is -used. +EC_KEY_new_by_curve_name_with_libctx() and supplying the nid of the associated +curve, the library context to be used I<ctx> (see L<OPENSSL_CTX(3)>) and any +property query string I<propq>. +The I<ctx> parameter may be NULL in which case the default library context is +used. The I<propq> value may also be NULL. See L<EC_GROUP_new(3)> for a description of curve names. This function simply wraps calls to EC_KEY_new_ex() and -EC_GROUP_new_by_curve_name_ex(). +EC_GROUP_new_by_curve_name_with_libctx(). -EC_KEY_new_by_curve_name() is the same as EC_KEY_new_by_curve_name_ex() except -that the default library context is always used. +EC_KEY_new_by_curve_name() is the same as EC_KEY_new_by_curve_name_with_libctx() +except that the default library context is always used and a NULL property query +string. Calling EC_KEY_free() decrements the reference count for the EC_KEY object, and if it has dropped to zero then frees the memory associated with it. If -B<key> is NULL nothing is done. +I<key> is NULL nothing is done. -EC_KEY_copy() copies the contents of the EC_KEY in B<src> into B<dest>. +EC_KEY_copy() copies the contents of the EC_KEY in I<src> into I<dest>. -EC_KEY_dup() creates a new EC_KEY object and copies B<ec_key> into it. +EC_KEY_dup() creates a new EC_KEY object and copies I<ec_key> into it. EC_KEY_up_ref() increments the reference count associated with the EC_KEY object. @@ -103,7 +106,7 @@ EC_KEY_get0_engine() returns a handle to the ENGINE that has been set for this EC_KEY object. EC_KEY_generate_key() generates a new public and private key for the supplied -B<eckey> object. B<eckey> must have an EC_GROUP object associated with it +I<eckey> object. I<eckey> must have an EC_GROUP object associated with it before calling this function. The private key is a random integer (0 < priv_key < order, where I<order> is the order of the EC_GROUP object). The public key is an EC_POINT on the curve calculated by multiplying the generator for the @@ -112,27 +115,27 @@ curve by the private key. EC_KEY_check_key() performs various sanity checks on the EC_KEY object to confirm that it is valid. -EC_KEY_set_public_key_affine_coordinates() sets the public key for B<key> based +EC_KEY_set_public_key_affine_coordinates() sets the public key for I<key> based on its affine co-ordinates; i.e., it constructs an EC_POINT object based on -the supplied B<x> and B<y> values and sets the public key to be this +the supplied I<x> and I<y> values and sets the public key to be this EC_POINT. It also performs certain sanity checks on the key to confirm that it is valid. The functions EC_KEY_get0_group(), EC_KEY_set_group(), EC_KEY_get0_private_key(), EC_KEY_set_private_key(), EC_KEY_get0_public_key(), and EC_KEY_set_public_key() get and set the EC_GROUP object, the private key, -and the EC_POINT public key for the B<key> respectively. +and the EC_POINT public key for the I<key> respectively. The functions EC_KEY_get_conv_form() and EC_KEY_set_conv_form() get and set the -point_conversion_form for the B<key>. For a description of +point_conversion_form for the I<key>. For a description of point_conversion_forms please see L<EC_POINT_new(3)>. -EC_KEY_set_flags() sets the flags in the B<flags> parameter on the EC_KEY +EC_KEY_set_flags() sets the flags in the I<flags> parameter on the EC_KEY object. Any flags that are already set are left set. The flags currently defined are EC_FLAG_NON_FIPS_ALLOW and EC_FLAG_FIPS_CHECKED. In addition there is the flag EC_FLAG_COFACTOR_ECDH which is specific to ECDH. EC_KEY_get_flags() returns the current flags that are set for this EC_KEY. -EC_KEY_clear_flags() clears the flags indicated by the B<flags> parameter; all +EC_KEY_clear_flags() clears the flags indicated by the I<flags> parameter; all other flags are left in their existing state. EC_KEY_set_asn1_flag() sets the asn1_flag on the underlying EC_GROUP object @@ -147,11 +150,11 @@ hardcoded lookup tables for. EC_KEY_oct2key() and EC_KEY_key2buf() are identical to the functions EC_POINT_oct2point() and EC_POINT_point2buf() except they use the public key -EC_POINT in B<eckey>. +EC_POINT in I<eckey>. EC_KEY_oct2priv() and EC_KEY_priv2oct() convert between the private key -component of B<eckey> and octet form. The octet form consists of the content -octets of the B<privateKey> OCTET STRING in an B<ECPrivateKey> ASN.1 structure. +component of I<eckey> and octet form. The octet form consists of the content +octets of the I<privateKey> OCTET STRING in an I<ECPrivateKey> ASN.1 structure. The function EC_KEY_priv2oct() must be supplied with a buffer long enough to store the octet form. The return value provides the number of octets stored. @@ -159,17 +162,18 @@ Calling the function with a NULL buffer will not perform the conversion but will just return the required buffer length. The function EC_KEY_priv2buf() allocates a buffer of suitable length and writes -an EC_KEY to it in octet format. The allocated buffer is written to B<*pbuf> +an EC_KEY to it in octet format. The allocated buffer is written to I<*pbuf> and its length is returned. The caller must free up the allocated buffer with a -call to OPENSSL_free(). Since the allocated buffer value is written to B<*pbuf> -the B<pbuf> parameter B<MUST NOT> be B<NULL>. +call to OPENSSL_free(). Since the allocated buffer value is written to I<*pbuf> +the I<pbuf> parameter B<MUST NOT> be B<NULL>. EC_KEY_priv2buf() converts an EC_KEY private key into an allocated buffer. =head1 RETURN VALUES -EC_KEY_new_ex(), EC_KEY_new(), EC_KEY_new_by_curve_name() and EC_KEY_dup() -return a pointer to the newly created EC_KEY object, or NULL on error. +EC_KEY_new_with_libctx(), EC_KEY_new(), EC_KEY_new_by_curve_name_with_libctx(), +EC_KEY_new_by_curve_name() and EC_KEY_dup() return a pointer to the newly +created EC_KEY object, or NULL on error. EC_KEY_get_flags() returns the flags associated with the EC_KEY object as an integer. |