diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_check.3 | 157 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_copy.3 | 492 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_get_curve_name.3 | 264 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_new.3 | 353 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_new_by_curve_name.3 | 310 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_GROUP_new_curve_GFp.3 | 450 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_KEY_METHOD_new.3 | 13 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_KEY_new.3 | 21 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_POINT_add.3 | 18 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_POINT_get_affine_coordinates.3 | 215 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_POINT_new.3 | 506 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/EC_POINT_point2oct.3 | 431 | ||||
| -rw-r--r-- | src/lib/libcrypto/man/Makefile | 10 |
13 files changed, 1998 insertions, 1242 deletions
diff --git a/src/lib/libcrypto/man/EC_GROUP_check.3 b/src/lib/libcrypto/man/EC_GROUP_check.3 new file mode 100644 index 0000000000..e000be212b --- /dev/null +++ b/src/lib/libcrypto/man/EC_GROUP_check.3 | |||
| @@ -0,0 +1,157 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_check.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_GROUP_CHECK 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_GROUP_check_discriminant , | ||
| 22 | .Nm EC_GROUP_check | ||
| 23 | .Nd partially check validity of | ||
| 24 | .Vt EC_GROUP | ||
| 25 | objects | ||
| 26 | .Sh SYNOPSIS | ||
| 27 | .In openssl/bn.h | ||
| 28 | .In openssl/ec.h | ||
| 29 | .Pp | ||
| 30 | Deprecated: | ||
| 31 | .Pp | ||
| 32 | .Ft "int" | ||
| 33 | .Fo EC_GROUP_check_discriminant | ||
| 34 | .Fa "const EC_GROUP *group" | ||
| 35 | .Fa "BN_CTX *ctx" | ||
| 36 | .Fc | ||
| 37 | .Ft "int" | ||
| 38 | .Fo EC_GROUP_check | ||
| 39 | .Fa "const EC_GROUP *group" | ||
| 40 | .Fa "BN_CTX *ctx" | ||
| 41 | .Fc | ||
| 42 | .Sh DESCRIPTION | ||
| 43 | These functions are deprecated. | ||
| 44 | Only standardized curves built into the library should be used, see | ||
| 45 | .Xr EC_GROUP_new_by_curve_name 3 . | ||
| 46 | For builtin curves far more thorough checks than the minimal checks | ||
| 47 | performed by these functions have been performed. | ||
| 48 | .Pp | ||
| 49 | These functions have an optional | ||
| 50 | .Fa ctx | ||
| 51 | argument which is used to avoid the cost of repeated allocation of | ||
| 52 | auxiliary | ||
| 53 | .Vt BIGNUM | ||
| 54 | objects. | ||
| 55 | .Pp | ||
| 56 | .Fn EC_GROUP_check_discriminant | ||
| 57 | can be called after | ||
| 58 | .Xr EC_GROUP_new_curve_GFp 3 | ||
| 59 | to verify that | ||
| 60 | .Fa group Ns 's | ||
| 61 | parameters have non-zero discriminant 4a^3 + 27b^2 modulo p. | ||
| 62 | Assuming that | ||
| 63 | .Fa p | ||
| 64 | is a prime number larger than three | ||
| 65 | this implies that the Weierstrass equation defines an elliptic curve. | ||
| 66 | .Pp | ||
| 67 | .Fn EC_GROUP_check | ||
| 68 | partially verifies that | ||
| 69 | .Fa group | ||
| 70 | represents an an elliptic curve and that | ||
| 71 | .Fa generator | ||
| 72 | is a point on the curve whose order divides | ||
| 73 | .Fa order . | ||
| 74 | It checks with | ||
| 75 | .Fn EC_GROUP_check_discriminant | ||
| 76 | that the discriminant is non-zero | ||
| 77 | and then verifies that that | ||
| 78 | .Fa order | ||
| 79 | is non-zero and that the product | ||
| 80 | .Fa generator No * Fa order | ||
| 81 | is the point at infinity. | ||
| 82 | This implies that | ||
| 83 | .Fa order | ||
| 84 | is an integer multiple of the | ||
| 85 | .Fa generator Ns 's | ||
| 86 | .Fa order . | ||
| 87 | The verification that | ||
| 88 | .Fa p | ||
| 89 | is a prime | ||
| 90 | and that | ||
| 91 | .Fa order | ||
| 92 | is the | ||
| 93 | .Fa generator Ns 's | ||
| 94 | order are skipped because they are too expensive. | ||
| 95 | .Sh RETURN VALUES | ||
| 96 | .Fn EC_GROUP_check_discriminant | ||
| 97 | returns 1 on success and 0 on failure. | ||
| 98 | Failure modes include that the discriminant is zero modulo | ||
| 99 | .Fa p | ||
| 100 | and memory allocation failure. | ||
| 101 | .Pp | ||
| 102 | .Fn EC_GROUP_check | ||
| 103 | returns 1 on success and 0 on failure. | ||
| 104 | .Sh ERRORS | ||
| 105 | Diagnostics for | ||
| 106 | .Fn EC_GROUP_check | ||
| 107 | that can be retrieved with | ||
| 108 | .Xr ERR_get_error 3 , | ||
| 109 | .Xr ERR_GET_REASON 3 , | ||
| 110 | and | ||
| 111 | .Xr ERR_reason_error_string 3 | ||
| 112 | include: | ||
| 113 | .Bl -tag -width Ds | ||
| 114 | .It Dv EC_R_DISCRIMINANT_IS_ZERO Qq "discriminant is zero" | ||
| 115 | .Fn EC_GROUP_check_discriminant | ||
| 116 | failed because the discriminant is zero or for some other reason. | ||
| 117 | .It Dv EC_R_UNDEFINED_GENERATOR Qq "undefined generator" | ||
| 118 | no generator is set on | ||
| 119 | .Fa group , | ||
| 120 | for example because a call to | ||
| 121 | .Xr EC_GROUP_set_generator 3 | ||
| 122 | is missing. | ||
| 123 | .It Dv EC_R_POINT_IS_NOT_ON_CURVE Qq "point is not on curve" | ||
| 124 | a generator is set, but it is not a point on the curve represented by | ||
| 125 | .Fa group . | ||
| 126 | .It Dv EC_R_UNDEFINED_ORDER Qq "undefined order" | ||
| 127 | the | ||
| 128 | .Fa order | ||
| 129 | set on | ||
| 130 | .Fa group | ||
| 131 | is zero. | ||
| 132 | .It Dv EC_R_INVALID_GROUP_ORDER Qq "invalid group order" | ||
| 133 | .Fa generator No * Fa order | ||
| 134 | is not the point at infinity. | ||
| 135 | .El | ||
| 136 | .Sh SEE ALSO | ||
| 137 | .Xr BN_CTX_new 3 , | ||
| 138 | .Xr BN_is_zero 3 , | ||
| 139 | .Xr crypto 3 , | ||
| 140 | .Xr d2i_ECPKParameters 3 , | ||
| 141 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 142 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 143 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 144 | .Xr EC_KEY_METHOD_new 3 , | ||
| 145 | .Xr EC_KEY_new 3 , | ||
| 146 | .Xr EC_POINT_add 3 , | ||
| 147 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 148 | .Xr EC_POINT_new 3 , | ||
| 149 | .Xr EC_POINT_point2oct 3 , | ||
| 150 | .Xr ECDH_compute_key 3 , | ||
| 151 | .Xr ECDSA_SIG_new 3 | ||
| 152 | .Sh HISTORY | ||
| 153 | .Fn EC_GROUP_check | ||
| 154 | and | ||
| 155 | .Fn EC_GROUP_check_discriminant | ||
| 156 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 157 | .Ox 4.5 . | ||
diff --git a/src/lib/libcrypto/man/EC_GROUP_copy.3 b/src/lib/libcrypto/man/EC_GROUP_copy.3 deleted file mode 100644 index 2e5e798236..0000000000 --- a/src/lib/libcrypto/man/EC_GROUP_copy.3 +++ /dev/null | |||
| @@ -1,492 +0,0 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_copy.3,v 1.16 2025/03/08 16:40:59 tb Exp $ | ||
| 2 | .\" full merge up to: OpenSSL d900a015 Oct 8 14:40:42 2015 +0200 | ||
| 3 | .\" selective merge up to: OpenSSL 24c23e1f Aug 22 10:51:25 2019 +0530 | ||
| 4 | .\" | ||
| 5 | .\" This file was written by Matt Caswell <matt@openssl.org>, | ||
| 6 | .\" Dr. Stephen Henson <steve@openssl.org>, | ||
| 7 | .\" and Jayaram X Matta <jayaramx.matta@intel.com>. | ||
| 8 | .\" Copyright (c) 2013, 2015, 2019 The OpenSSL Project. All rights reserved. | ||
| 9 | .\" | ||
| 10 | .\" Redistribution and use in source and binary forms, with or without | ||
| 11 | .\" modification, are permitted provided that the following conditions | ||
| 12 | .\" are met: | ||
| 13 | .\" | ||
| 14 | .\" 1. Redistributions of source code must retain the above copyright | ||
| 15 | .\" notice, this list of conditions and the following disclaimer. | ||
| 16 | .\" | ||
| 17 | .\" 2. Redistributions in binary form must reproduce the above copyright | ||
| 18 | .\" notice, this list of conditions and the following disclaimer in | ||
| 19 | .\" the documentation and/or other materials provided with the | ||
| 20 | .\" distribution. | ||
| 21 | .\" | ||
| 22 | .\" 3. All advertising materials mentioning features or use of this | ||
| 23 | .\" software must display the following acknowledgment: | ||
| 24 | .\" "This product includes software developed by the OpenSSL Project | ||
| 25 | .\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 26 | .\" | ||
| 27 | .\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 28 | .\" endorse or promote products derived from this software without | ||
| 29 | .\" prior written permission. For written permission, please contact | ||
| 30 | .\" openssl-core@openssl.org. | ||
| 31 | .\" | ||
| 32 | .\" 5. Products derived from this software may not be called "OpenSSL" | ||
| 33 | .\" nor may "OpenSSL" appear in their names without prior written | ||
| 34 | .\" permission of the OpenSSL Project. | ||
| 35 | .\" | ||
| 36 | .\" 6. Redistributions of any form whatsoever must retain the following | ||
| 37 | .\" acknowledgment: | ||
| 38 | .\" "This product includes software developed by the OpenSSL Project | ||
| 39 | .\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 40 | .\" | ||
| 41 | .\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 42 | .\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 43 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 44 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 45 | .\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 46 | .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 47 | .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 48 | .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 49 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 50 | .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 51 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 52 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 53 | .\" | ||
| 54 | .Dd $Mdocdate: March 8 2025 $ | ||
| 55 | .Dt EC_GROUP_COPY 3 | ||
| 56 | .Os | ||
| 57 | .Sh NAME | ||
| 58 | .Nm EC_GROUP_copy , | ||
| 59 | .Nm EC_GROUP_dup , | ||
| 60 | .Nm EC_GROUP_set_generator , | ||
| 61 | .Nm EC_GROUP_get0_generator , | ||
| 62 | .Nm EC_GROUP_get_order , | ||
| 63 | .Nm EC_GROUP_order_bits , | ||
| 64 | .Nm EC_GROUP_get_cofactor , | ||
| 65 | .Nm EC_GROUP_set_curve_name , | ||
| 66 | .Nm EC_GROUP_get_curve_name , | ||
| 67 | .Nm EC_GROUP_set_asn1_flag , | ||
| 68 | .Nm EC_GROUP_get_asn1_flag , | ||
| 69 | .Nm EC_GROUP_set_point_conversion_form , | ||
| 70 | .Nm EC_GROUP_get_point_conversion_form , | ||
| 71 | .Nm EC_GROUP_get0_seed , | ||
| 72 | .Nm EC_GROUP_get_seed_len , | ||
| 73 | .Nm EC_GROUP_set_seed , | ||
| 74 | .Nm EC_GROUP_get_degree , | ||
| 75 | .Nm EC_GROUP_check , | ||
| 76 | .Nm EC_GROUP_check_discriminant , | ||
| 77 | .Nm EC_GROUP_cmp , | ||
| 78 | .Nm EC_GROUP_get_basis_type | ||
| 79 | .Nd manipulate EC_GROUP objects | ||
| 80 | .Sh SYNOPSIS | ||
| 81 | .In openssl/ec.h | ||
| 82 | .In openssl/bn.h | ||
| 83 | .Ft int | ||
| 84 | .Fo EC_GROUP_copy | ||
| 85 | .Fa "EC_GROUP *dst" | ||
| 86 | .Fa "const EC_GROUP *src" | ||
| 87 | .Fc | ||
| 88 | .Ft EC_GROUP * | ||
| 89 | .Fo EC_GROUP_dup | ||
| 90 | .Fa "const EC_GROUP *src" | ||
| 91 | .Fc | ||
| 92 | .Ft int | ||
| 93 | .Fo EC_GROUP_set_generator | ||
| 94 | .Fa "EC_GROUP *group" | ||
| 95 | .Fa "const EC_POINT *generator" | ||
| 96 | .Fa "const BIGNUM *order" | ||
| 97 | .Fa "const BIGNUM *cofactor" | ||
| 98 | .Fc | ||
| 99 | .Ft const EC_POINT * | ||
| 100 | .Fo EC_GROUP_get0_generator | ||
| 101 | .Fa "const EC_GROUP *group" | ||
| 102 | .Fc | ||
| 103 | .Ft int | ||
| 104 | .Fo EC_GROUP_get_order | ||
| 105 | .Fa "const EC_GROUP *group" | ||
| 106 | .Fa "BIGNUM *order" | ||
| 107 | .Fa "BN_CTX *ctx" | ||
| 108 | .Fc | ||
| 109 | .Ft int | ||
| 110 | .Fo EC_GROUP_order_bits | ||
| 111 | .Fa "const EC_GROUP *group" | ||
| 112 | .Fc | ||
| 113 | .Ft int | ||
| 114 | .Fo EC_GROUP_get_cofactor | ||
| 115 | .Fa "const EC_GROUP *group" | ||
| 116 | .Fa "BIGNUM *cofactor" | ||
| 117 | .Fa "BN_CTX *ctx" | ||
| 118 | .Fc | ||
| 119 | .Ft void | ||
| 120 | .Fo EC_GROUP_set_curve_name | ||
| 121 | .Fa "EC_GROUP *group" | ||
| 122 | .Fa "int nid" | ||
| 123 | .Fc | ||
| 124 | .Ft int | ||
| 125 | .Fo EC_GROUP_get_curve_name | ||
| 126 | .Fa "const EC_GROUP *group" | ||
| 127 | .Fc | ||
| 128 | .Ft void | ||
| 129 | .Fo EC_GROUP_set_asn1_flag | ||
| 130 | .Fa "EC_GROUP *group" | ||
| 131 | .Fa "int flag" | ||
| 132 | .Fc | ||
| 133 | .Ft int | ||
| 134 | .Fo EC_GROUP_get_asn1_flag | ||
| 135 | .Fa "const EC_GROUP *group" | ||
| 136 | .Fc | ||
| 137 | .Ft void | ||
| 138 | .Fo EC_GROUP_set_point_conversion_form | ||
| 139 | .Fa "EC_GROUP *group" | ||
| 140 | .Fa "point_conversion_form_t form" | ||
| 141 | .Fc | ||
| 142 | .Ft point_conversion_form_t | ||
| 143 | .Fo EC_GROUP_get_point_conversion_form | ||
| 144 | .Fa "const EC_GROUP *" | ||
| 145 | .Fc | ||
| 146 | .Ft unsigned char * | ||
| 147 | .Fo EC_GROUP_get0_seed | ||
| 148 | .Fa "const EC_GROUP *x" | ||
| 149 | .Fc | ||
| 150 | .Ft size_t | ||
| 151 | .Fo EC_GROUP_get_seed_len | ||
| 152 | .Fa "const EC_GROUP *" | ||
| 153 | .Fc | ||
| 154 | .Ft size_t | ||
| 155 | .Fo EC_GROUP_set_seed | ||
| 156 | .Fa "EC_GROUP *" | ||
| 157 | .Fa "const unsigned char *" | ||
| 158 | .Fa "size_t len" | ||
| 159 | .Fc | ||
| 160 | .Ft int | ||
| 161 | .Fo EC_GROUP_get_degree | ||
| 162 | .Fa "const EC_GROUP *group" | ||
| 163 | .Fc | ||
| 164 | .Ft int | ||
| 165 | .Fo EC_GROUP_check | ||
| 166 | .Fa "const EC_GROUP *group" | ||
| 167 | .Fa "BN_CTX *ctx" | ||
| 168 | .Fc | ||
| 169 | .Ft int | ||
| 170 | .Fo EC_GROUP_check_discriminant | ||
| 171 | .Fa "const EC_GROUP *group" | ||
| 172 | .Fa "BN_CTX *ctx" | ||
| 173 | .Fc | ||
| 174 | .Ft int | ||
| 175 | .Fo EC_GROUP_cmp | ||
| 176 | .Fa "const EC_GROUP *a" | ||
| 177 | .Fa "const EC_GROUP *b" | ||
| 178 | .Fa "BN_CTX *ctx" | ||
| 179 | .Fc | ||
| 180 | .Ft int | ||
| 181 | .Fo EC_GROUP_get_basis_type | ||
| 182 | .Fa "const EC_GROUP *" | ||
| 183 | .Fc | ||
| 184 | .Sh DESCRIPTION | ||
| 185 | These functions operate on | ||
| 186 | .Vt EC_GROUP | ||
| 187 | objects created by the functions described in | ||
| 188 | .Xr EC_GROUP_new 3 . | ||
| 189 | .Pp | ||
| 190 | .Fn EC_GROUP_copy | ||
| 191 | copies the curve | ||
| 192 | .Fa src | ||
| 193 | into | ||
| 194 | .Fa dst . | ||
| 195 | Both | ||
| 196 | .Fa src | ||
| 197 | and | ||
| 198 | .Fa dst | ||
| 199 | must use the same | ||
| 200 | .Vt EC_METHOD . | ||
| 201 | .Pp | ||
| 202 | .Fn EC_GROUP_dup | ||
| 203 | creates a new | ||
| 204 | .Vt EC_GROUP | ||
| 205 | object and copies the content from | ||
| 206 | .Fa src | ||
| 207 | to the newly created | ||
| 208 | .Vt EC_GROUP | ||
| 209 | object. | ||
| 210 | .Pp | ||
| 211 | .Fn EC_GROUP_set_generator | ||
| 212 | sets curve parameters that must be agreed by all participants using | ||
| 213 | the curve. | ||
| 214 | These parameters include the | ||
| 215 | .Fa generator , | ||
| 216 | the | ||
| 217 | .Fa order | ||
| 218 | and the | ||
| 219 | .Fa cofactor . | ||
| 220 | The | ||
| 221 | .Fa generator | ||
| 222 | is a well defined point on the curve chosen for cryptographic | ||
| 223 | operations. | ||
| 224 | Integers used for point multiplications will be between 0 and | ||
| 225 | .Fa order No - 1 . | ||
| 226 | The | ||
| 227 | .Fa order | ||
| 228 | multiplied by the | ||
| 229 | .Fa cofactor | ||
| 230 | gives the number of points on the curve. | ||
| 231 | .Pp | ||
| 232 | .Fn EC_GROUP_get0_generator | ||
| 233 | returns the generator for the identified | ||
| 234 | .Fa group . | ||
| 235 | .Pp | ||
| 236 | .Fn EC_GROUP_get_order | ||
| 237 | retrieves the order of the | ||
| 238 | .Fa group | ||
| 239 | and copies its value into | ||
| 240 | .Fa order . | ||
| 241 | It fails if the order of the | ||
| 242 | .Fa group | ||
| 243 | is not set or set to zero. | ||
| 244 | .Pp | ||
| 245 | .Fn EC_GROUP_get_cofactor | ||
| 246 | retrieves the cofactor of the | ||
| 247 | .Fa group | ||
| 248 | and copies its value into | ||
| 249 | .Fa cofactor . | ||
| 250 | It fails if the cofactor of the | ||
| 251 | .Fa group | ||
| 252 | is not set or set to zero. | ||
| 253 | .Pp | ||
| 254 | The functions | ||
| 255 | .Fn EC_GROUP_set_curve_name | ||
| 256 | and | ||
| 257 | .Fn EC_GROUP_get_curve_name | ||
| 258 | set and get the NID for the curve, respectively (see | ||
| 259 | .Xr EC_GROUP_new 3 ) . | ||
| 260 | If a curve does not have a NID associated with it, then | ||
| 261 | .Fn EC_GROUP_get_curve_name | ||
| 262 | will return | ||
| 263 | .Dv NID_undef . | ||
| 264 | .Pp | ||
| 265 | The asn1_flag value is used to determine whether the curve encoding | ||
| 266 | uses explicit parameters or a named curve using an ASN.1 OID: | ||
| 267 | many applications only support the latter form. | ||
| 268 | If asn1_flag is the default value | ||
| 269 | .Dv OPENSSL_EC_NAMED_CURVE , | ||
| 270 | then the named curve form is used and the parameters must have a | ||
| 271 | corresponding named curve NID set. | ||
| 272 | If asn1_flags is | ||
| 273 | .Dv OPENSSL_EC_EXPLICIT_CURVE , | ||
| 274 | the parameters are explicitly encoded. | ||
| 275 | The functions | ||
| 276 | .Fn EC_GROUP_get_asn1_flag | ||
| 277 | and | ||
| 278 | .Fn EC_GROUP_set_asn1_flag | ||
| 279 | get and set the status of the asn1_flag for the curve. | ||
| 280 | .Pp | ||
| 281 | The point_conversion_form for a curve controls how | ||
| 282 | .Vt EC_POINT | ||
| 283 | data is encoded as ASN.1 as defined in X9.62 (ECDSA). | ||
| 284 | .Vt point_conversion_form_t | ||
| 285 | is an enum defined as follows: | ||
| 286 | .Bd -literal | ||
| 287 | typedef enum { | ||
| 288 | /** the point is encoded as z||x, where the octet z specifies | ||
| 289 | * which solution of the quadratic equation y is */ | ||
| 290 | POINT_CONVERSION_COMPRESSED = 2, | ||
| 291 | /** the point is encoded as z||x||y, where z is the octet 0x04 */ | ||
| 292 | POINT_CONVERSION_UNCOMPRESSED = 4, | ||
| 293 | /** the point is encoded as z||x||y, where the octet z specifies | ||
| 294 | * which solution of the quadratic equation y is */ | ||
| 295 | POINT_CONVERSION_HYBRID = 6 | ||
| 296 | } point_conversion_form_t; | ||
| 297 | .Ed | ||
| 298 | .Pp | ||
| 299 | For | ||
| 300 | .Dv POINT_CONVERSION_UNCOMPRESSED | ||
| 301 | the point is encoded as an octet signifying the UNCOMPRESSED form | ||
| 302 | has been used followed by the octets for x, followed by the octets | ||
| 303 | for y. | ||
| 304 | .Pp | ||
| 305 | For any given x coordinate for a point on a curve it is possible to | ||
| 306 | derive two possible y values. | ||
| 307 | For | ||
| 308 | .Dv POINT_CONVERSION_COMPRESSED | ||
| 309 | the point is encoded as an octet signifying that the COMPRESSED | ||
| 310 | form has been used AND which of the two possible solutions for y | ||
| 311 | has been used, followed by the octets for x. | ||
| 312 | .Pp | ||
| 313 | For | ||
| 314 | .Dv POINT_CONVERSION_HYBRID | ||
| 315 | the point is encoded as an octet signifying the HYBRID form has | ||
| 316 | been used AND which of the two possible solutions for y has been | ||
| 317 | used, followed by the octets for x, followed by the octets for y. | ||
| 318 | .Pp | ||
| 319 | The functions | ||
| 320 | .Fn EC_GROUP_set_point_conversion_form | ||
| 321 | and | ||
| 322 | .Fn EC_GROUP_get_point_conversion_form | ||
| 323 | set and get the point_conversion_form for the curve, respectively. | ||
| 324 | .Pp | ||
| 325 | ANSI X9.62 (ECDSA standard) defines a method of generating the curve | ||
| 326 | parameter b from a random number. | ||
| 327 | This provides advantages in that a parameter obtained in this way is | ||
| 328 | highly unlikely to be susceptible to special purpose attacks, or have | ||
| 329 | any trapdoors in it. | ||
| 330 | If the seed is present for a curve then the b parameter was generated in | ||
| 331 | a verifiable fashion using that seed. | ||
| 332 | The OpenSSL EC library does not use this seed value but does enable you | ||
| 333 | to inspect it using | ||
| 334 | .Fn EC_GROUP_get0_seed . | ||
| 335 | This returns a pointer to a memory block containing the seed that was | ||
| 336 | used. | ||
| 337 | The length of the memory block can be obtained using | ||
| 338 | .Fn EC_GROUP_get_seed_len . | ||
| 339 | A number of the builtin curves within the library provide seed values | ||
| 340 | that can be obtained. | ||
| 341 | It is also possible to set a custom seed using | ||
| 342 | .Fn EC_GROUP_set_seed | ||
| 343 | and passing a pointer to a memory block, along with the length of | ||
| 344 | the seed. | ||
| 345 | Again, the EC library will not use this seed value, although it will be | ||
| 346 | preserved in any ASN.1 based communications. | ||
| 347 | .Pp | ||
| 348 | .Fn EC_GROUP_get_degree | ||
| 349 | gets the degree of the field. | ||
| 350 | For Fp fields this will be the number of bits in p. | ||
| 351 | For F2^m fields this will be the value m. | ||
| 352 | .Pp | ||
| 353 | The function | ||
| 354 | .Fn EC_GROUP_check_discriminant | ||
| 355 | calculates the discriminant for the curve and verifies that it is | ||
| 356 | valid. | ||
| 357 | For a curve defined over Fp the discriminant is given by the formula | ||
| 358 | 4*a^3 + 27*b^2 whilst for F2^m curves the discriminant is simply b. | ||
| 359 | In either case for the curve to be valid the discriminant must be | ||
| 360 | non-zero. | ||
| 361 | .Pp | ||
| 362 | The function | ||
| 363 | .Fn EC_GROUP_check | ||
| 364 | performs a number of checks on a curve to verify that it is valid. | ||
| 365 | Checks performed include verifying that the discriminant is non-zero; | ||
| 366 | that a generator has been defined; that the generator is on the curve | ||
| 367 | and has the correct order. | ||
| 368 | .Pp | ||
| 369 | .Fn EC_GROUP_cmp | ||
| 370 | compares | ||
| 371 | .Fa a | ||
| 372 | and | ||
| 373 | .Fa b | ||
| 374 | to determine whether they represent the same curve or not. | ||
| 375 | .Pp | ||
| 376 | .Fn EC_GROUP_get_basis_type | ||
| 377 | always returns 0 and is only provided for compatibility. | ||
| 378 | .Sh RETURN VALUES | ||
| 379 | The following functions return 1 on success or 0 on error: | ||
| 380 | .Fn EC_GROUP_copy , | ||
| 381 | .Fn EC_GROUP_set_generator , | ||
| 382 | .Fn EC_GROUP_check , | ||
| 383 | and | ||
| 384 | .Fn EC_GROUP_check_discriminant . | ||
| 385 | .Pp | ||
| 386 | .Fn EC_GROUP_dup | ||
| 387 | returns a pointer to the duplicated curve or | ||
| 388 | .Dv NULL | ||
| 389 | on error. | ||
| 390 | .Pp | ||
| 391 | .Fn EC_GROUP_get0_generator | ||
| 392 | returns the generator for the given curve or | ||
| 393 | .Dv NULL | ||
| 394 | on error. | ||
| 395 | .Pp | ||
| 396 | .Fn EC_GROUP_get_order | ||
| 397 | returns 0 if the order is not set or set to zero for the | ||
| 398 | .Fa group | ||
| 399 | or if copying into | ||
| 400 | .Fa order | ||
| 401 | fails, or 1 otherwise. | ||
| 402 | .Pp | ||
| 403 | .Fn EC_GROUP_order_bits | ||
| 404 | returns the number of bits in the group order. | ||
| 405 | .Pp | ||
| 406 | .Fn EC_GROUP_get_cofactor | ||
| 407 | returns 0 if the cofactor is not set or set to zero for the | ||
| 408 | .Fa group | ||
| 409 | or if copying into | ||
| 410 | .Fa cofactor | ||
| 411 | fails, or 1 otherwise. | ||
| 412 | .Pp | ||
| 413 | .Fn EC_GROUP_get_curve_name | ||
| 414 | returns the curve name (NID) for the | ||
| 415 | .Fa group | ||
| 416 | or | ||
| 417 | .Dv NID_undef | ||
| 418 | if no curve name is associated. | ||
| 419 | .Pp | ||
| 420 | .Fn EC_GROUP_get_asn1_flag | ||
| 421 | returns the ASN.1 flag for the specified | ||
| 422 | .Fa group . | ||
| 423 | .Pp | ||
| 424 | .Fn EC_GROUP_get_point_conversion_form | ||
| 425 | returns the point_conversion_form for the | ||
| 426 | .Fa group . | ||
| 427 | .Pp | ||
| 428 | .Fn EC_GROUP_get_degree | ||
| 429 | returns the degree for the | ||
| 430 | .Fa group | ||
| 431 | or 0 if the operation is not supported | ||
| 432 | by the underlying group implementation. | ||
| 433 | .Pp | ||
| 434 | .Fn EC_GROUP_get0_seed | ||
| 435 | returns a pointer to the seed that was used to generate the parameter | ||
| 436 | b, or | ||
| 437 | .Dv NULL | ||
| 438 | if the seed is not specified. | ||
| 439 | .Fn EC_GROUP_get_seed_len | ||
| 440 | returns the length of the seed or 0 if the seed is not specified. | ||
| 441 | .Pp | ||
| 442 | .Fn EC_GROUP_set_seed | ||
| 443 | returns the length of the seed that has been set. | ||
| 444 | If the supplied seed is | ||
| 445 | .Dv NULL | ||
| 446 | or the supplied seed length is 0, the return value will be 1. | ||
| 447 | On error 0 is returned. | ||
| 448 | .Pp | ||
| 449 | .Fn EC_GROUP_cmp | ||
| 450 | returns 0 if the curves are equal, 1 if they are not equal, | ||
| 451 | or -1 on error. | ||
| 452 | .Pp | ||
| 453 | .Fn EC_GROUP_get_basis_type | ||
| 454 | always returns 0. | ||
| 455 | .Sh SEE ALSO | ||
| 456 | .Xr d2i_ECPKParameters 3 , | ||
| 457 | .Xr EC_GROUP_new 3 , | ||
| 458 | .Xr EC_KEY_new 3 , | ||
| 459 | .Xr EC_POINT_add 3 , | ||
| 460 | .Xr EC_POINT_new 3 | ||
| 461 | .Sh HISTORY | ||
| 462 | .Fn EC_GROUP_copy , | ||
| 463 | .Fn EC_GROUP_set_generator , | ||
| 464 | .Fn EC_GROUP_get0_generator , | ||
| 465 | .Fn EC_GROUP_get_order , | ||
| 466 | and | ||
| 467 | .Fn EC_GROUP_get_cofactor | ||
| 468 | first appeared in OpenSSL 0.9.7 and have been available since | ||
| 469 | .Ox 3.2 . | ||
| 470 | .Pp | ||
| 471 | .Fn EC_GROUP_dup , | ||
| 472 | .Fn EC_GROUP_set_curve_name , | ||
| 473 | .Fn EC_GROUP_get_curve_name , | ||
| 474 | .Fn EC_GROUP_set_asn1_flag , | ||
| 475 | .Fn EC_GROUP_get_asn1_flag , | ||
| 476 | .Fn EC_GROUP_set_point_conversion_form , | ||
| 477 | .Fn EC_GROUP_get_point_conversion_form , | ||
| 478 | .Fn EC_GROUP_get0_seed , | ||
| 479 | .Fn EC_GROUP_get_seed_len , | ||
| 480 | .Fn EC_GROUP_set_seed , | ||
| 481 | .Fn EC_GROUP_get_degree , | ||
| 482 | .Fn EC_GROUP_check , | ||
| 483 | .Fn EC_GROUP_check_discriminant , | ||
| 484 | .Fn EC_GROUP_cmp , | ||
| 485 | and | ||
| 486 | .Fn EC_GROUP_get_basis_type | ||
| 487 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 488 | .Ox 4.5 . | ||
| 489 | .Pp | ||
| 490 | .Fn EC_GROUP_order_bits | ||
| 491 | first appeared in OpenSSL 1.1.0 and has been available since | ||
| 492 | .Ox 7.0 . | ||
diff --git a/src/lib/libcrypto/man/EC_GROUP_get_curve_name.3 b/src/lib/libcrypto/man/EC_GROUP_get_curve_name.3 new file mode 100644 index 0000000000..9a131fddfe --- /dev/null +++ b/src/lib/libcrypto/man/EC_GROUP_get_curve_name.3 | |||
| @@ -0,0 +1,264 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_get_curve_name.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_GROUP_GET_CURVE_NAME 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_GROUP_get_curve_name , | ||
| 22 | .Nm EC_GROUP_set_curve_name , | ||
| 23 | .Nm EC_GROUP_get_asn1_flag , | ||
| 24 | .Nm EC_GROUP_set_asn1_flag , | ||
| 25 | .Nm EC_GROUP_get0_seed , | ||
| 26 | .Nm EC_GROUP_get_seed_len , | ||
| 27 | .Nm EC_GROUP_set_seed , | ||
| 28 | .Nm EC_GROUP_get_point_conversion_form , | ||
| 29 | .Nm EC_GROUP_set_point_conversion_form , | ||
| 30 | .Nm EC_GROUP_get_basis_type | ||
| 31 | .Nd configure and inspect details of the ASN.1 encoding of | ||
| 32 | .Vt EC_GROUP | ||
| 33 | and related objects | ||
| 34 | .Sh SYNOPSIS | ||
| 35 | .In openssl/ec.h | ||
| 36 | .Ft int | ||
| 37 | .Fo EC_GROUP_get_curve_name | ||
| 38 | .Fa "const EC_GROUP *group" | ||
| 39 | .Fc | ||
| 40 | .Ft void | ||
| 41 | .Fo EC_GROUP_set_curve_name | ||
| 42 | .Fa "EC_GROUP *group" | ||
| 43 | .Fa "int nid" | ||
| 44 | .Fc | ||
| 45 | .Ft int | ||
| 46 | .Fo EC_GROUP_get_asn1_flag | ||
| 47 | .Fa "const EC_GROUP *group" | ||
| 48 | .Fc | ||
| 49 | .Ft void | ||
| 50 | .Fo EC_GROUP_set_asn1_flag | ||
| 51 | .Fa "EC_GROUP *group" | ||
| 52 | .Fa "int flag" | ||
| 53 | .Fc | ||
| 54 | .Ft "unsigned char *" | ||
| 55 | .Fo EC_GROUP_get0_seed | ||
| 56 | .Fa "const EC_GROUP *group" | ||
| 57 | .Fc | ||
| 58 | .Ft size_t | ||
| 59 | .Fo EC_GROUP_get_seed_len | ||
| 60 | .Fa "const EC_GROUP *group" | ||
| 61 | .Fc | ||
| 62 | .Ft size_t | ||
| 63 | .Fo EC_GROUP_set_seed | ||
| 64 | .Fa "EC_GROUP *group" | ||
| 65 | .Fa "const unsigned char *seed" | ||
| 66 | .Fa "size_t len" | ||
| 67 | .Fc | ||
| 68 | .Bd -literal | ||
| 69 | typedef enum { | ||
| 70 | POINT_CONVERSION_COMPRESSED = 2, | ||
| 71 | POINT_CONVERSION_UNCOMPRESSED = 4, | ||
| 72 | POINT_CONVERSION_HYBRID = 6 | ||
| 73 | } point_conversion_form_t; | ||
| 74 | |||
| 75 | .Ed | ||
| 76 | .Ft point_conversion_form_t | ||
| 77 | .Fo EC_GROUP_get_point_conversion_form | ||
| 78 | .Fa "const EC_GROUP *group" | ||
| 79 | .Fc | ||
| 80 | .Fo void | ||
| 81 | .Ft EC_GROUP_set_point_conversion_form | ||
| 82 | .Fa "EC_GROUP *group" | ||
| 83 | .Fa "point_conversion_form_t form" | ||
| 84 | .Fc | ||
| 85 | .Pp | ||
| 86 | Deprecated: | ||
| 87 | .Ft int | ||
| 88 | .Fo EC_GROUP_get_basis_type | ||
| 89 | .Fa "const EC_GROUP *group" | ||
| 90 | .Fc | ||
| 91 | .Sh DESCRIPTION | ||
| 92 | The functions in this manual affect or allow the inspection of | ||
| 93 | the details of the ASN.1 encoding produced by the | ||
| 94 | .Xr i2d_ECPKParameters 3 | ||
| 95 | family of functions. | ||
| 96 | Modern applications use named curves and uncompressed point encoding, | ||
| 97 | which are the default for | ||
| 98 | .Xr EC_GROUP_new_by_curve_name 3 . | ||
| 99 | .Pp | ||
| 100 | In this library, Elliptic curve parameters are either encoded as a | ||
| 101 | .Em named curve , | ||
| 102 | using an ASN.1 Object Identifier (OID) to refer to | ||
| 103 | standardized parameters that need to be built into the library, | ||
| 104 | or using | ||
| 105 | .Em explicit curve parameters | ||
| 106 | where the field, the curve equation, the base point's coordinates | ||
| 107 | and other data are encoded explicitly. | ||
| 108 | The | ||
| 109 | .Em implicitly CA | ||
| 110 | variant is not supported. | ||
| 111 | .Pp | ||
| 112 | .Fn EC_GROUP_get_curve_name | ||
| 113 | gets the Numerical Identifier (NID) representation of the | ||
| 114 | ASN.1 Object Identifier used for the named curve encoding of | ||
| 115 | .Fa group . | ||
| 116 | .Fn EC_GROUP_set_curve_name | ||
| 117 | sets it to | ||
| 118 | .Fa nid . | ||
| 119 | .Pp | ||
| 120 | .Fn EC_GROUP_get_asn1_flag | ||
| 121 | retrieves the value of the | ||
| 122 | .Fa asn1_flag | ||
| 123 | member of | ||
| 124 | .Fa group . | ||
| 125 | If the bit corresponding to | ||
| 126 | .Dv OPENSSL_EC_NAMED_CURVE | ||
| 127 | is set, named curve encoding is used for | ||
| 128 | .Fa group , | ||
| 129 | otherwise explicit encoding is used. | ||
| 130 | .Fn EC_GROUP_set_asn1_flag | ||
| 131 | sets the | ||
| 132 | .Fa asn1_flag | ||
| 133 | member of group to | ||
| 134 | .Fa flag , | ||
| 135 | which should be either | ||
| 136 | .Dv OPENSSL_EC_NAMED_CURVE | ||
| 137 | to use named curve encoding or | ||
| 138 | .Dv OPENSSL_EC_EXPLICIT_CURVE | ||
| 139 | to use explicit encoding. | ||
| 140 | .Pp | ||
| 141 | The ASN.1 encoding of explicit curve parameters includes | ||
| 142 | an optional seed value for parameters generated verifiably at random. | ||
| 143 | If a seed value is set on | ||
| 144 | .Fa group , | ||
| 145 | .Fn EC_GROUP_get0_seed | ||
| 146 | returns a pointer to the internal byte string whose length is returned by | ||
| 147 | .Fn EC_GROUP_get_seed_len . | ||
| 148 | .Pp | ||
| 149 | .Fn EC_GROUP_set_seed | ||
| 150 | first clears any seed and length already stored in | ||
| 151 | .Fa group . | ||
| 152 | If | ||
| 153 | .Fa seed | ||
| 154 | is not | ||
| 155 | .Dv NULL | ||
| 156 | and | ||
| 157 | .Fa len | ||
| 158 | is not zero, it stores a copy of them in | ||
| 159 | .Fa group . | ||
| 160 | The | ||
| 161 | .Fa seed | ||
| 162 | should be a random byte string of | ||
| 163 | .Fa len | ||
| 164 | at least 20 bytes. | ||
| 165 | The seed can be unset by passing | ||
| 166 | .Dv NULL | ||
| 167 | as a | ||
| 168 | .Fa seed | ||
| 169 | and a | ||
| 170 | .Fa len | ||
| 171 | of zero. | ||
| 172 | The library does not perform any computation or validation with this seed, | ||
| 173 | it only includes it in its ASN.1 encoded parameters, | ||
| 174 | whether it contains a sensible value or not. | ||
| 175 | .Pp | ||
| 176 | Points on an elliptic curve, such as the generator or a public key, | ||
| 177 | can be encoded in compressed form, uncompressed form, | ||
| 178 | or in a hybrid form encompassing both, see | ||
| 179 | .Xr EC_POINT_point2oct 3 . | ||
| 180 | .Fn EC_GROUP_get_point_conversion_form | ||
| 181 | retrieves the encoding used for points on | ||
| 182 | .Fa group | ||
| 183 | and | ||
| 184 | .Fn EC_GROUP_set_point_conversion_form | ||
| 185 | sets it to | ||
| 186 | .Fa form . | ||
| 187 | .Pp | ||
| 188 | The deprecated | ||
| 189 | .Fn EC_GROUP_get_basis_type | ||
| 190 | only makes sense for curves over binary fields. | ||
| 191 | It is provided for compatibility only. | ||
| 192 | .Sh RETURN VALUES | ||
| 193 | .Fn EC_GROUP_get_curve_name | ||
| 194 | returns the NID to be used for named curve encoding of | ||
| 195 | .Fa group | ||
| 196 | or | ||
| 197 | .Dv NID_undef | ||
| 198 | if no NID is set. | ||
| 199 | .Pp | ||
| 200 | .Fn EC_GROUP_get_asn1_flag | ||
| 201 | returns the value most recently set by | ||
| 202 | .Fn EC_GROUP_set_asn1_flag | ||
| 203 | on | ||
| 204 | .Fa group . | ||
| 205 | .Pp | ||
| 206 | .Fn EC_GROUP_get0_seed | ||
| 207 | returns an internal pointer to the | ||
| 208 | .Fa seed | ||
| 209 | on | ||
| 210 | .Fa group | ||
| 211 | or | ||
| 212 | .Dv NULL | ||
| 213 | if none is set. | ||
| 214 | .Pp | ||
| 215 | .Fn EC_GROUP_get_seed_len | ||
| 216 | returns the byte length of the seed set on | ||
| 217 | .Fa group | ||
| 218 | or zero if none is set. | ||
| 219 | .Pp | ||
| 220 | .Fn EC_GROUP_set_seed | ||
| 221 | returns 0 on memory allocation failure. | ||
| 222 | It returns | ||
| 223 | .Fa len | ||
| 224 | on success unless | ||
| 225 | .Fa seed | ||
| 226 | is | ||
| 227 | .Dv NULL | ||
| 228 | or | ||
| 229 | .Fa len | ||
| 230 | is zero, in which case it returns 1. | ||
| 231 | .Pp | ||
| 232 | .Fn EC_GROUP_get_point_conversion_form | ||
| 233 | returns the point conversion form last set by | ||
| 234 | .Fn EC_GROUP_set_point_conversion_form | ||
| 235 | on | ||
| 236 | .Fa group . | ||
| 237 | .Pp | ||
| 238 | .Fn EC_GROUP_get_basis_type | ||
| 239 | always returns | ||
| 240 | .Dv NID_undef . | ||
| 241 | .Sh SEE ALSO | ||
| 242 | .Xr crypto 3 , | ||
| 243 | .Xr d2i_ECPKParameters 3 , | ||
| 244 | .Xr EC_GROUP_check 3 , | ||
| 245 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 246 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 247 | .Xr EC_KEY_METHOD_new 3 , | ||
| 248 | .Xr EC_KEY_new 3 , | ||
| 249 | .Xr EC_POINT_add 3 , | ||
| 250 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 251 | .Xr EC_POINT_new 3 , | ||
| 252 | .Xr EC_POINT_point2oct 3 , | ||
| 253 | .Xr ECDH_compute_key 3 , | ||
| 254 | .Xr ECDSA_SIG_new 3 , | ||
| 255 | .Xr OBJ_obj2nid 3 | ||
| 256 | .Sh HISTORY | ||
| 257 | These functions first appeared in OpenSSL 0.9.8 and have been available since | ||
| 258 | .Ox 4.5 . | ||
| 259 | .Sh BUGS | ||
| 260 | Most of the setters cannot report errors and none of them perform proper | ||
| 261 | input validation and accept most of the values passed in. | ||
| 262 | This can result in invalid or nonsensical ASN.1 encoding produced by | ||
| 263 | .Xr i2d_ECPKParameters 3 | ||
| 264 | and related functions. | ||
diff --git a/src/lib/libcrypto/man/EC_GROUP_new.3 b/src/lib/libcrypto/man/EC_GROUP_new.3 deleted file mode 100644 index 83e3e4c870..0000000000 --- a/src/lib/libcrypto/man/EC_GROUP_new.3 +++ /dev/null | |||
| @@ -1,353 +0,0 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_new.3,v 1.18 2025/03/08 16:38:13 tb Exp $ | ||
| 2 | .\" OpenSSL 6328d367 Sat Jul 4 21:58:30 2020 +0200 | ||
| 3 | .\" | ||
| 4 | .\" This file was written by Matt Caswell <matt@openssl.org>. | ||
| 5 | .\" Copyright (c) 2013 The OpenSSL Project. All rights reserved. | ||
| 6 | .\" | ||
| 7 | .\" Redistribution and use in source and binary forms, with or without | ||
| 8 | .\" modification, are permitted provided that the following conditions | ||
| 9 | .\" are met: | ||
| 10 | .\" | ||
| 11 | .\" 1. Redistributions of source code must retain the above copyright | ||
| 12 | .\" notice, this list of conditions and the following disclaimer. | ||
| 13 | .\" | ||
| 14 | .\" 2. Redistributions in binary form must reproduce the above copyright | ||
| 15 | .\" notice, this list of conditions and the following disclaimer in | ||
| 16 | .\" the documentation and/or other materials provided with the | ||
| 17 | .\" distribution. | ||
| 18 | .\" | ||
| 19 | .\" 3. All advertising materials mentioning features or use of this | ||
| 20 | .\" software must display the following acknowledgment: | ||
| 21 | .\" "This product includes software developed by the OpenSSL Project | ||
| 22 | .\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 23 | .\" | ||
| 24 | .\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 25 | .\" endorse or promote products derived from this software without | ||
| 26 | .\" prior written permission. For written permission, please contact | ||
| 27 | .\" openssl-core@openssl.org. | ||
| 28 | .\" | ||
| 29 | .\" 5. Products derived from this software may not be called "OpenSSL" | ||
| 30 | .\" nor may "OpenSSL" appear in their names without prior written | ||
| 31 | .\" permission of the OpenSSL Project. | ||
| 32 | .\" | ||
| 33 | .\" 6. Redistributions of any form whatsoever must retain the following | ||
| 34 | .\" acknowledgment: | ||
| 35 | .\" "This product includes software developed by the OpenSSL Project | ||
| 36 | .\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 37 | .\" | ||
| 38 | .\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 39 | .\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 40 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 41 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 42 | .\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 43 | .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 44 | .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 45 | .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 46 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 47 | .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 48 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 49 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 50 | .\" | ||
| 51 | .Dd $Mdocdate: March 8 2025 $ | ||
| 52 | .Dt EC_GROUP_NEW 3 | ||
| 53 | .Os | ||
| 54 | .Sh NAME | ||
| 55 | .Nm EC_GROUP_new , | ||
| 56 | .Nm EC_GROUP_free , | ||
| 57 | .Nm EC_GROUP_clear_free , | ||
| 58 | .Nm EC_GROUP_new_curve_GFp , | ||
| 59 | .Nm EC_GROUP_new_by_curve_name , | ||
| 60 | .Nm EC_GROUP_set_curve , | ||
| 61 | .Nm EC_GROUP_get_curve , | ||
| 62 | .Nm EC_GROUP_set_curve_GFp , | ||
| 63 | .Nm EC_GROUP_get_curve_GFp , | ||
| 64 | .Nm EC_get_builtin_curves , | ||
| 65 | .Nm EC_curve_nid2nist , | ||
| 66 | .Nm EC_curve_nist2nid | ||
| 67 | .Nd create and destroy EC_GROUP objects | ||
| 68 | .Sh SYNOPSIS | ||
| 69 | .In openssl/ec.h | ||
| 70 | .In openssl/bn.h | ||
| 71 | .Ft EC_GROUP * | ||
| 72 | .Fo EC_GROUP_new | ||
| 73 | .Fa "const EC_METHOD *meth" | ||
| 74 | .Fc | ||
| 75 | .Ft void | ||
| 76 | .Fo EC_GROUP_free | ||
| 77 | .Fa "EC_GROUP *group" | ||
| 78 | .Fc | ||
| 79 | .Ft void | ||
| 80 | .Fo EC_GROUP_clear_free | ||
| 81 | .Fa "EC_GROUP *group" | ||
| 82 | .Fc | ||
| 83 | .Ft EC_GROUP * | ||
| 84 | .Fo EC_GROUP_new_curve_GFp | ||
| 85 | .Fa "const BIGNUM *p" | ||
| 86 | .Fa "const BIGNUM *a" | ||
| 87 | .Fa "const BIGNUM *b" | ||
| 88 | .Fa "BN_CTX *ctx" | ||
| 89 | .Fc | ||
| 90 | .Ft EC_GROUP * | ||
| 91 | .Fo EC_GROUP_new_by_curve_name | ||
| 92 | .Fa "int nid" | ||
| 93 | .Fc | ||
| 94 | .Ft int | ||
| 95 | .Fo EC_GROUP_set_curve | ||
| 96 | .Fa "EC_GROUP *group" | ||
| 97 | .Fa "const BIGNUM *p" | ||
| 98 | .Fa "const BIGNUM *a" | ||
| 99 | .Fa "const BIGNUM *b" | ||
| 100 | .Fa "BN_CTX *ctx" | ||
| 101 | .Fc | ||
| 102 | .Ft int | ||
| 103 | .Fo EC_GROUP_get_curve | ||
| 104 | .Fa "const EC_GROUP *group" | ||
| 105 | .Fa "BIGNUM *p" | ||
| 106 | .Fa "BIGNUM *a" | ||
| 107 | .Fa "BIGNUM *b" | ||
| 108 | .Fa "BN_CTX *ctx" | ||
| 109 | .Fc | ||
| 110 | .Ft int | ||
| 111 | .Fo EC_GROUP_set_curve_GFp | ||
| 112 | .Fa "EC_GROUP *group" | ||
| 113 | .Fa "const BIGNUM *p" | ||
| 114 | .Fa "const BIGNUM *a" | ||
| 115 | .Fa "const BIGNUM *b" | ||
| 116 | .Fa "BN_CTX *ctx" | ||
| 117 | .Fc | ||
| 118 | .Ft int | ||
| 119 | .Fo EC_GROUP_get_curve_GFp | ||
| 120 | .Fa "const EC_GROUP *group" | ||
| 121 | .Fa "BIGNUM *p" | ||
| 122 | .Fa "BIGNUM *a" | ||
| 123 | .Fa "BIGNUM *b" | ||
| 124 | .Fa "BN_CTX *ctx" | ||
| 125 | .Fc | ||
| 126 | .Ft size_t | ||
| 127 | .Fo EC_get_builtin_curves | ||
| 128 | .Fa "EC_builtin_curve *r" | ||
| 129 | .Fa "size_t nitems" | ||
| 130 | .Fc | ||
| 131 | .Ft "const char *" | ||
| 132 | .Fo EC_curve_nid2nist | ||
| 133 | .Fa "int nid" | ||
| 134 | .Fc | ||
| 135 | .Ft int | ||
| 136 | .Fo EC_curve_nist2nid | ||
| 137 | .Fa "const char *name" | ||
| 138 | .Fc | ||
| 139 | .Sh DESCRIPTION | ||
| 140 | The EC library provides functions for performing operations on | ||
| 141 | elliptic curves in Weierstrass form. | ||
| 142 | Such curves are defined over the prime field of order | ||
| 143 | .Fa p | ||
| 144 | and satisfy the Weierstrass equation with coefficients | ||
| 145 | .Fa a | ||
| 146 | and | ||
| 147 | .Fa b | ||
| 148 | .Pp | ||
| 149 | .Dl y^2 = x^3 + ax + b | ||
| 150 | .Pp | ||
| 151 | An | ||
| 152 | .Vt EC_GROUP | ||
| 153 | structure is used to represent the definition of an elliptic curve. | ||
| 154 | A new curve can be constructed by calling | ||
| 155 | .Fn EC_GROUP_new , | ||
| 156 | using the implementation provided by | ||
| 157 | .Fa meth . | ||
| 158 | It is then necessary to call | ||
| 159 | .Fn EC_GROUP_set_curve | ||
| 160 | to set the curve parameters. | ||
| 161 | .Pp | ||
| 162 | .Fn EC_GROUP_set_curve | ||
| 163 | sets the curve parameters | ||
| 164 | .Fa p , | ||
| 165 | .Fa a , | ||
| 166 | and | ||
| 167 | .Fa b , | ||
| 168 | where | ||
| 169 | .Fa a | ||
| 170 | and | ||
| 171 | .Fa b | ||
| 172 | represent the coefficients of the curve equation. | ||
| 173 | .Pp | ||
| 174 | .Fn EC_GROUP_set_curve_GFp | ||
| 175 | is a deprecated synonym for | ||
| 176 | .Fn EC_GROUP_set_curve . | ||
| 177 | .Pp | ||
| 178 | .Fn EC_GROUP_get_curve | ||
| 179 | obtains the previously set curve parameters. | ||
| 180 | .Pp | ||
| 181 | .Fn EC_GROUP_get_curve_GFp | ||
| 182 | is a deprecated synonym for | ||
| 183 | .Fn EC_GROUP_get_curve . | ||
| 184 | .Pp | ||
| 185 | The function | ||
| 186 | .Fn EC_GROUP_new_curve_GFp | ||
| 187 | is a shortcut for calling | ||
| 188 | .Fn EC_GROUP_new | ||
| 189 | and | ||
| 190 | .Fn EC_GROUP_set_curve . | ||
| 191 | An appropriate default implementation method will be used. | ||
| 192 | .Pp | ||
| 193 | Whilst the library can be used to create any curve using the functions | ||
| 194 | described above, there are also a number of predefined curves that are | ||
| 195 | available. | ||
| 196 | In order to obtain a list of all of the predefined curves, call the | ||
| 197 | function | ||
| 198 | .Fn EC_get_builtin_curves . | ||
| 199 | The parameter | ||
| 200 | .Fa r | ||
| 201 | should be an array of | ||
| 202 | .Vt EC_builtin_cure | ||
| 203 | structures of size | ||
| 204 | .Fa nitems . | ||
| 205 | The function will populate the | ||
| 206 | .Fa r | ||
| 207 | array with information about the builtin curves. | ||
| 208 | If | ||
| 209 | .Fa nitems | ||
| 210 | is less than the total number of curves available, then the first | ||
| 211 | .Fa nitems | ||
| 212 | curves will be returned. | ||
| 213 | Otherwise the total number of curves will be provided. | ||
| 214 | The return value is the total number of curves available (whether that | ||
| 215 | number has been populated in | ||
| 216 | .Fa r | ||
| 217 | or not). | ||
| 218 | Passing a | ||
| 219 | .Dv NULL | ||
| 220 | .Fa r , | ||
| 221 | or setting | ||
| 222 | .Fa nitems | ||
| 223 | to 0, will do nothing other than return the total number of curves | ||
| 224 | available. | ||
| 225 | The | ||
| 226 | .Vt EC_builtin_curve | ||
| 227 | structure is defined as follows: | ||
| 228 | .Bd -literal | ||
| 229 | typedef struct { | ||
| 230 | int nid; | ||
| 231 | const char *comment; | ||
| 232 | } EC_builtin_curve; | ||
| 233 | .Ed | ||
| 234 | .Pp | ||
| 235 | Each | ||
| 236 | .Vt EC_builtin_curve | ||
| 237 | item has a unique integer ID | ||
| 238 | .Pq Fa nid | ||
| 239 | and a human readable comment string describing the curve. | ||
| 240 | .Pp | ||
| 241 | In order to construct a builtin curve, use the function | ||
| 242 | .Fn EC_GROUP_new_by_curve_name | ||
| 243 | and provide the | ||
| 244 | .Fa nid | ||
| 245 | of the curve to be constructed. | ||
| 246 | .Pp | ||
| 247 | .Fn EC_GROUP_free | ||
| 248 | frees the memory associated with the | ||
| 249 | .Vt EC_GROUP . | ||
| 250 | If | ||
| 251 | .Fa group | ||
| 252 | is a | ||
| 253 | .Dv NULL | ||
| 254 | pointer, no action occurs. | ||
| 255 | .Pp | ||
| 256 | .Fn EC_GROUP_clear_free | ||
| 257 | destroys any sensitive data held within the | ||
| 258 | .Vt EC_GROUP | ||
| 259 | and then frees its memory. | ||
| 260 | If | ||
| 261 | .Fa group | ||
| 262 | is a | ||
| 263 | .Dv NULL | ||
| 264 | pointer, no action occurs. | ||
| 265 | .Pp | ||
| 266 | Some builtin curves can be identified by their NIST name | ||
| 267 | in addition to a numerical identifier (NID). | ||
| 268 | .Fn EC_curve_nid2nist | ||
| 269 | and | ||
| 270 | .Fn EC_curve_nist2nid | ||
| 271 | translate between the two. | ||
| 272 | The five built-in prime curves are: | ||
| 273 | .Pp | ||
| 274 | .Bl -column "NIST name" NID_X9_62_prime256v1 "deprecated in SP800-186" -compact | ||
| 275 | .It No NIST Fa name Ta Em ASN.1 NID Ta Em notes | ||
| 276 | .It Qq P-192 Ta Dv NID_X9_62_prime192v1 Ta No deprecated in SP800-186 | ||
| 277 | .It Qq P-224 Ta Dv NID_secp224r1 Ta | ||
| 278 | .It Qq P-256 Ta Dv NID_X9_62_prime256v1 Ta | ||
| 279 | .It Qq P-384 Ta Dv NID_secp384r1 Ta | ||
| 280 | .It Qq P-521 Ta Dv NID_secp521r1 Ta | ||
| 281 | .El | ||
| 282 | .Pp | ||
| 283 | .Fn EC_curve_nid2nist | ||
| 284 | and | ||
| 285 | .Fn EC_curve_nist2nid | ||
| 286 | also accept the ten binary curves defined in FIPS\& 186-4 | ||
| 287 | and deprecated in SP800-186, | ||
| 288 | although they no longer correspond to builtin curves in LibreSSL. | ||
| 289 | .Sh RETURN VALUES | ||
| 290 | All | ||
| 291 | .Fn EC_GROUP_new* | ||
| 292 | functions return a pointer to the newly constructed group or | ||
| 293 | .Dv NULL | ||
| 294 | on error. | ||
| 295 | .Pp | ||
| 296 | .Fn EC_get_builtin_curves | ||
| 297 | returns the number of builtin curves that are available. | ||
| 298 | .Pp | ||
| 299 | .Fn EC_curve_nid2nist | ||
| 300 | returns a string constant containing the NIST name if | ||
| 301 | .Fa nid | ||
| 302 | identifies a NIST curve or | ||
| 303 | .Dv NULL | ||
| 304 | otherwise. | ||
| 305 | .Pp | ||
| 306 | .Fn EC_curve_nist2nid | ||
| 307 | returns the NID corresponding to the NIST curve | ||
| 308 | .Fa name , | ||
| 309 | or | ||
| 310 | .Dv NID_undef . | ||
| 311 | .Pp | ||
| 312 | .Fn EC_GROUP_set_curve , | ||
| 313 | .Fn EC_GROUP_get_curve , | ||
| 314 | .Fn EC_GROUP_set_curve_GFp , | ||
| 315 | and | ||
| 316 | .Fn EC_GROUP_get_curve_GFp | ||
| 317 | return 1 on success or 0 on error. | ||
| 318 | .Sh SEE ALSO | ||
| 319 | .Xr crypto 3 , | ||
| 320 | .Xr d2i_ECPKParameters 3 , | ||
| 321 | .Xr EC_GROUP_copy 3 , | ||
| 322 | .Xr EC_KEY_new 3 , | ||
| 323 | .Xr EC_POINT_add 3 , | ||
| 324 | .Xr EC_POINT_new 3 , | ||
| 325 | .Xr ECDH_compute_key 3 , | ||
| 326 | .Xr ECDSA_SIG_new 3 | ||
| 327 | .Sh HISTORY | ||
| 328 | .Fn EC_GROUP_new , | ||
| 329 | .Fn EC_GROUP_free , | ||
| 330 | .Fn EC_GROUP_clear_free , | ||
| 331 | .Fn EC_GROUP_new_curve_GFp , | ||
| 332 | .Fn EC_GROUP_set_curve_GFp , | ||
| 333 | and | ||
| 334 | .Fn EC_GROUP_get_curve_GFp | ||
| 335 | first appeared in OpenSSL 0.9.7 and have been available since | ||
| 336 | .Ox 3.2 . | ||
| 337 | .Pp | ||
| 338 | .Fn EC_GROUP_new_by_curve_name | ||
| 339 | and | ||
| 340 | .Fn EC_get_builtin_curves | ||
| 341 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 342 | .Ox 4.5 . | ||
| 343 | .Fn EC_curve_nid2nist , | ||
| 344 | and | ||
| 345 | .Fn EC_curve_nist2nid | ||
| 346 | first appeared in OpenSSL 1.1.0 and have been available since | ||
| 347 | .Ox 5.8 . | ||
| 348 | .Pp | ||
| 349 | .Fn EC_GROUP_set_curve | ||
| 350 | and | ||
| 351 | .Fn EC_GROUP_get_curve | ||
| 352 | first appeared in OpenSSL 1.1.1 and have been available since | ||
| 353 | .Ox 7.0 . | ||
diff --git a/src/lib/libcrypto/man/EC_GROUP_new_by_curve_name.3 b/src/lib/libcrypto/man/EC_GROUP_new_by_curve_name.3 new file mode 100644 index 0000000000..128b30eda5 --- /dev/null +++ b/src/lib/libcrypto/man/EC_GROUP_new_by_curve_name.3 | |||
| @@ -0,0 +1,310 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_new_by_curve_name.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2024, 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_GROUP_NEW_BY_CURVE_NAME 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_GROUP_new_by_curve_name , | ||
| 22 | .Nm EC_GROUP_free , | ||
| 23 | .Nm EC_GROUP_dup , | ||
| 24 | .Nm EC_GROUP_cmp , | ||
| 25 | .Nm EC_get_builtin_curves , | ||
| 26 | .Nm EC_curve_nid2nist , | ||
| 27 | .Nm EC_curve_nist2nid | ||
| 28 | .Nd instantiate named curves built into libcrypto | ||
| 29 | .Sh SYNOPSIS | ||
| 30 | .In openssl/bn.h | ||
| 31 | .In openssl/ec.h | ||
| 32 | .In openssl/objects.h | ||
| 33 | .Ft "EC_GROUP *" | ||
| 34 | .Fo EC_GROUP_new_by_curve_name | ||
| 35 | .Fa "int nid" | ||
| 36 | .Fc | ||
| 37 | .Ft void | ||
| 38 | .Fo EC_GROUP_free | ||
| 39 | .Fa "EC_GROUP *group" | ||
| 40 | .Fc | ||
| 41 | .Ft EC_GROUP * | ||
| 42 | .Fo EC_GROUP_dup | ||
| 43 | .Fa "const EC_GROUP *group" | ||
| 44 | .Fc | ||
| 45 | .Ft int | ||
| 46 | .Fo EC_GROUP_cmp | ||
| 47 | .Fa "const EC_GROUP *group1" | ||
| 48 | .Fa "const EC_GROUP *group2" | ||
| 49 | .Fa "BN_CTX *ctx" | ||
| 50 | .Fc | ||
| 51 | .Bd -literal | ||
| 52 | typedef struct { | ||
| 53 | int nid; | ||
| 54 | const char *comment; | ||
| 55 | } EC_builtin_curve; | ||
| 56 | |||
| 57 | .Ed | ||
| 58 | .Ft size_t | ||
| 59 | .Fo EC_get_builtin_curves | ||
| 60 | .Fa "EC_builtin_curve *curves" | ||
| 61 | .Fa "size_t ncurves" | ||
| 62 | .Fc | ||
| 63 | .Ft int | ||
| 64 | .Fo EC_curve_nist2nid | ||
| 65 | .Fa "const char *name" | ||
| 66 | .Fc | ||
| 67 | .Ft "const char *" | ||
| 68 | .Fo EC_curve_nid2nist | ||
| 69 | .Fa "int nid" | ||
| 70 | .Fc | ||
| 71 | .Sh DESCRIPTION | ||
| 72 | Most elliptic curves used in cryptographic protocols have a | ||
| 73 | standardized representation as a | ||
| 74 | .Em named curve , | ||
| 75 | where an ASN.1 Object Identifier (OID) is used instead of | ||
| 76 | detailed domain parameters. | ||
| 77 | This OID is represented internally by a Numerical Identifier (NID), | ||
| 78 | and the parameters themselves must be built into the library. | ||
| 79 | In the EC library the | ||
| 80 | .Em curve name | ||
| 81 | refers to this NID. | ||
| 82 | .Pp | ||
| 83 | .Fn EC_GROUP_new_by_curve_name | ||
| 84 | returns a new | ||
| 85 | .Vt EC_GROUP | ||
| 86 | object representing the named curve corresponding to | ||
| 87 | .Fa nid , | ||
| 88 | using the parameters built into the library. | ||
| 89 | It is equivalent to passing the appropriate parameters to | ||
| 90 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 91 | .Xr EC_GROUP_set_curve_name 3 , | ||
| 92 | .Xr EC_GROUP_set_generator 3 | ||
| 93 | and | ||
| 94 | .Xr EC_GROUP_set_seed 3 . | ||
| 95 | .Pp | ||
| 96 | .Fn EC_GROUP_free | ||
| 97 | frees | ||
| 98 | .Fa group | ||
| 99 | and all the memory associated with it. | ||
| 100 | If | ||
| 101 | .Fa group | ||
| 102 | is | ||
| 103 | .Dv NULL , | ||
| 104 | no action occurs. | ||
| 105 | .Pp | ||
| 106 | .Fn EC_GROUP_dup | ||
| 107 | creates a deep copy of | ||
| 108 | .Fa group . | ||
| 109 | .Pp | ||
| 110 | .Fn EC_GROUP_cmp | ||
| 111 | is intended to determine whether | ||
| 112 | .Fa group1 | ||
| 113 | and | ||
| 114 | .Fa group2 | ||
| 115 | represent the same elliptic curve, | ||
| 116 | making use of the optional | ||
| 117 | .Fa ctx . | ||
| 118 | If the curve name is set on both curves, they are compared as integers, | ||
| 119 | then the prime field, | ||
| 120 | the coefficients of the Weierstrass equation, | ||
| 121 | the generators, their order and their cofactors are compared | ||
| 122 | using | ||
| 123 | .Xr BN_cmp 3 | ||
| 124 | or | ||
| 125 | .Xr EC_POINT_cmp 3 , | ||
| 126 | respectively. | ||
| 127 | .Pp | ||
| 128 | .Fn EC_get_builtin_curves | ||
| 129 | returns the number of builtin curves. | ||
| 130 | If | ||
| 131 | .Fa curves | ||
| 132 | is | ||
| 133 | .Dv NULL | ||
| 134 | or | ||
| 135 | .Fa ncurves | ||
| 136 | is zero, it performs no other action. | ||
| 137 | Otherwise, after reducing | ||
| 138 | .Fa ncurves | ||
| 139 | to the number of builtin curves if necessary, | ||
| 140 | it copies the | ||
| 141 | .Fa nid | ||
| 142 | and a pointer to the | ||
| 143 | .Fa comment | ||
| 144 | of the first | ||
| 145 | .Fa ncurves | ||
| 146 | built-in curves to the array of | ||
| 147 | .Vt EC_builtin_curve | ||
| 148 | objects pointed to by | ||
| 149 | .Fa curves | ||
| 150 | and leaves the remainder of the array uninitialized. | ||
| 151 | .Pp | ||
| 152 | Some curves can be identified by their NIST name | ||
| 153 | in addition to the numerical identifier (NID). | ||
| 154 | .Fn EC_curve_nist2nid | ||
| 155 | and | ||
| 156 | .Fn EC_curve_nid2nist | ||
| 157 | translate between the two. | ||
| 158 | The builtin NIST curves over a prime field are: | ||
| 159 | .Pp | ||
| 160 | .Bl -column "NIST name" NID_X9_62_prime256v1 "deprecated in SP800-186" -compact | ||
| 161 | .It No NIST Fa name Ta Em ASN.1 NID Ta Em notes | ||
| 162 | .It Qq P-224 Ta Dv NID_secp224r1 Ta | ||
| 163 | .It Qq P-256 Ta Dv NID_X9_62_prime256v1 Ta also known as secp256r1 | ||
| 164 | .It Qq P-384 Ta Dv NID_secp384r1 Ta | ||
| 165 | .It Qq P-521 Ta Dv NID_secp521r1 Ta | ||
| 166 | .El | ||
| 167 | .Pp | ||
| 168 | .Fn EC_curve_nist2nid | ||
| 169 | and | ||
| 170 | .Fn EC_curve_nid2nist | ||
| 171 | also accept the binary curves defined in FIPS\& 186-4 | ||
| 172 | and deprecated in SP800-186, | ||
| 173 | as well as | ||
| 174 | .Qq P-192 | ||
| 175 | and | ||
| 176 | .Dv NID_X9_62_prime192v1 , | ||
| 177 | although all these no longer correspond to builtin curves in LibreSSL. | ||
| 178 | .Sh RETURN VALUES | ||
| 179 | .Fn EC_GROUP_new_by_curve_name | ||
| 180 | returns a newly allocated group or | ||
| 181 | .Dv NULL | ||
| 182 | if there is no built-in group with NID | ||
| 183 | .Fa nid , | ||
| 184 | or if memory allocation fails. | ||
| 185 | .Pp | ||
| 186 | .Fn EC_GROUP_dup | ||
| 187 | returns a newly allocated group or | ||
| 188 | .Dv NULL | ||
| 189 | if memory allocation fails. | ||
| 190 | .Pp | ||
| 191 | .Fn EC_GROUP_cmp | ||
| 192 | returns 1 if the groups are distinct, 0 if the groups are | ||
| 193 | considered identical and \-1 on memory allocation error. | ||
| 194 | .Pp | ||
| 195 | .Fn EC_get_builtin_curves | ||
| 196 | returns the number of builtin curves. | ||
| 197 | .Pp | ||
| 198 | .Fn EC_curve_nid2nist | ||
| 199 | returns a string constant containing the NIST name if | ||
| 200 | .Fa nid | ||
| 201 | identifies a NIST curve or | ||
| 202 | .Dv NULL | ||
| 203 | otherwise. | ||
| 204 | .Pp | ||
| 205 | .Fn EC_curve_nist2nid | ||
| 206 | returns the NID corresponding to the NIST curve | ||
| 207 | .Fa name , | ||
| 208 | or | ||
| 209 | .Dv NID_undef . | ||
| 210 | .Sh EXAMPLES | ||
| 211 | Print the list of builtin curves, their NIDs, their NIST name and | ||
| 212 | a comment describing each curve: | ||
| 213 | .Bd -literal | ||
| 214 | #include <err.h> | ||
| 215 | #include <stdio.h> | ||
| 216 | #include <stdlib.h> | ||
| 217 | #include <unistd.h> | ||
| 218 | |||
| 219 | #include <openssl/ec.h> | ||
| 220 | |||
| 221 | int | ||
| 222 | main(void) | ||
| 223 | { | ||
| 224 | EC_builtin_curve *curves; | ||
| 225 | size_t ncurves, i; | ||
| 226 | |||
| 227 | if (pledge("stdio", NULL) == -1) | ||
| 228 | err(1, "pledge"); | ||
| 229 | |||
| 230 | ncurves = EC_get_builtin_curves(NULL, 0); | ||
| 231 | if ((curves = calloc(ncurves, sizeof(*curves))) == NULL) | ||
| 232 | err(1, NULL); | ||
| 233 | (void)EC_get_builtin_curves(curves, ncurves); | ||
| 234 | |||
| 235 | printf("curve\etnid\etNIST\etcomment\en"); | ||
| 236 | for (i = 0; i < ncurves; i++) { | ||
| 237 | const char *nist_name = EC_curve_nid2nist(curves[i].nid); | ||
| 238 | |||
| 239 | printf("%2zu\et%d\et%s\et%s\en", i, curves[i].nid, | ||
| 240 | nist_name != NULL ? nist_name : "", curves[i].comment); | ||
| 241 | } | ||
| 242 | |||
| 243 | free(curves); | ||
| 244 | |||
| 245 | return 0; | ||
| 246 | } | ||
| 247 | .Ed | ||
| 248 | .Sh SEE ALSO | ||
| 249 | .Xr crypto 3 , | ||
| 250 | .Xr d2i_ECPKParameters 3 , | ||
| 251 | .Xr EC_GROUP_check 3 , | ||
| 252 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 253 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 254 | .Xr EC_KEY_METHOD_new 3 , | ||
| 255 | .Xr EC_KEY_new 3 , | ||
| 256 | .Xr EC_POINT_add 3 , | ||
| 257 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 258 | .Xr EC_POINT_new 3 , | ||
| 259 | .Xr EC_POINT_point2oct 3 , | ||
| 260 | .Xr ECDH_compute_key 3 , | ||
| 261 | .Xr ECDSA_SIG_new 3 , | ||
| 262 | .Xr OBJ_nid2obj 3 | ||
| 263 | .Sh STANDARDS | ||
| 264 | .Rs | ||
| 265 | .%T SEC 1: Elliptic Curve Cryptography, Version 2.0 | ||
| 266 | .%U https://www.secg.org/sec1-v2.pdf | ||
| 267 | .%D May 21, 2009 | ||
| 268 | .Re | ||
| 269 | .Pp | ||
| 270 | .Rs | ||
| 271 | .%T SEC 2: Recommended Elliptic Curve Domain Parameters, Version 2.0 | ||
| 272 | .%U https://www.secg.org/sec2-v2.pdf | ||
| 273 | .%D Jan 27, 2010 | ||
| 274 | .Re | ||
| 275 | .Sh HISTORY | ||
| 276 | .Fn EC_GROUP_free | ||
| 277 | first appeared in OpenSSL 0.9.7 and has been available since | ||
| 278 | .Ox 3.2 . | ||
| 279 | .Pp | ||
| 280 | .Fn EC_GROUP_new_by_curve_name , | ||
| 281 | .Fn EC_GROUP_cmp , | ||
| 282 | .Fn EC_GROUP_dup , | ||
| 283 | and | ||
| 284 | .Fn EC_get_builtin_curves | ||
| 285 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 286 | .Ox 4.5 . | ||
| 287 | .Pp | ||
| 288 | .Fn EC_curve_nid2nist | ||
| 289 | and | ||
| 290 | .Fn EC_curve_nist2nid | ||
| 291 | first appeared in OpenSSL 1.1.0 and have been available since | ||
| 292 | .Ox 5.8 . | ||
| 293 | .Sh BUGS | ||
| 294 | .Fn EC_GROUP_cmp | ||
| 295 | compares the coefficients of the Weierstrass equation as | ||
| 296 | integers, not as elements of the prime field. | ||
| 297 | It also treats the generator as mandatory while it is generally | ||
| 298 | optional in the EC library. | ||
| 299 | Aspects of the ASN.1 encoding controlled by the functions in | ||
| 300 | .Xr EC_GROUP_get_asn1_flag 3 , | ||
| 301 | in particular seed, ASN.1 flag, and point conversion form, | ||
| 302 | are ignored in the comparison. | ||
| 303 | Group objects may therefore compare as equal and produce | ||
| 304 | completely different ASN.1 encodings via | ||
| 305 | .Xr i2d_ECPKParameters 3 | ||
| 306 | and related functions. | ||
| 307 | In fact, either of these encodings might be valid or not, | ||
| 308 | accepted or rejected by | ||
| 309 | .Xr d2i_ECPKParameters 3 , | ||
| 310 | or the encoding might fail on one or both of the group objects. | ||
diff --git a/src/lib/libcrypto/man/EC_GROUP_new_curve_GFp.3 b/src/lib/libcrypto/man/EC_GROUP_new_curve_GFp.3 new file mode 100644 index 0000000000..f13c969c28 --- /dev/null +++ b/src/lib/libcrypto/man/EC_GROUP_new_curve_GFp.3 | |||
| @@ -0,0 +1,450 @@ | |||
| 1 | .\" $OpenBSD: EC_GROUP_new_curve_GFp.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_GROUP_NEW_CURVE_GFP 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_GROUP_new_curve_GFp , | ||
| 22 | .Nm EC_GROUP_set_curve , | ||
| 23 | .Nm EC_GROUP_get_curve , | ||
| 24 | .Nm EC_GROUP_set_generator , | ||
| 25 | .Nm EC_GROUP_get0_generator , | ||
| 26 | .Nm EC_GROUP_get_degree , | ||
| 27 | .Nm EC_GROUP_get_order , | ||
| 28 | .Nm EC_GROUP_order_bits , | ||
| 29 | .Nm EC_GROUP_get_cofactor , | ||
| 30 | .Nm EC_GROUP_clear_free , | ||
| 31 | .Nm EC_GROUP_set_curve_GFp , | ||
| 32 | .Nm EC_GROUP_get_curve_GFp | ||
| 33 | .Nd define elliptic curves and retrieve information from them | ||
| 34 | .Sh SYNOPSIS | ||
| 35 | .In openssl/bn.h | ||
| 36 | .In openssl/ec.h | ||
| 37 | .Ft "EC_GROUP *" | ||
| 38 | .Fo EC_GROUP_new_curve_GFp | ||
| 39 | .Fa "const BIGNUM *p" | ||
| 40 | .Fa "const BIGNUM *a" | ||
| 41 | .Fa "const BIGNUM *b" | ||
| 42 | .Fa "BN_CTX *ctx" | ||
| 43 | .Fc | ||
| 44 | .Ft int | ||
| 45 | .Fo EC_GROUP_set_curve | ||
| 46 | .Fa "EC_GROUP *group" | ||
| 47 | .Fa "const BIGNUM *p" | ||
| 48 | .Fa "const BIGNUM *a" | ||
| 49 | .Fa "const BIGNUM *b" | ||
| 50 | .Fa "BN_CTX *ctx" | ||
| 51 | .Fc | ||
| 52 | .Ft int | ||
| 53 | .Fo EC_GROUP_get_curve | ||
| 54 | .Fa "const EC_GROUP *group" | ||
| 55 | .Fa "BIGNUM *p" | ||
| 56 | .Fa "BIGNUM *a" | ||
| 57 | .Fa "BIGNUM *b" | ||
| 58 | .Fa "BN_CTX *ctx" | ||
| 59 | .Fc | ||
| 60 | .Ft int | ||
| 61 | .Fo EC_GROUP_set_generator | ||
| 62 | .Fa "EC_GROUP *group" | ||
| 63 | .Fa "const EC_POINT *generator" | ||
| 64 | .Fa "const BIGNUM *order" | ||
| 65 | .Fa "const BIGNUM *cofactor" | ||
| 66 | .Fc | ||
| 67 | .Ft "const EC_POINT *" | ||
| 68 | .Fo EC_GROUP_get0_generator | ||
| 69 | .Fa "const EC_GROUP *group" | ||
| 70 | .Fc | ||
| 71 | .Ft int | ||
| 72 | .Fo EC_GROUP_get_degree | ||
| 73 | .Fa "const EC_GROUP *" | ||
| 74 | .Fc | ||
| 75 | .Ft int | ||
| 76 | .Fo EC_GROUP_get_order | ||
| 77 | .Fa "const EC_GROUP *group" | ||
| 78 | .Fa "BIGNUM *order" | ||
| 79 | .Fa "BN_CTX *ctx" | ||
| 80 | .Fc | ||
| 81 | .Ft int | ||
| 82 | .Fo EC_GROUP_order_bits | ||
| 83 | .Fa "const EC_GROUP *group" | ||
| 84 | .Fc | ||
| 85 | .Ft int | ||
| 86 | .Fo EC_GROUP_get_cofactor | ||
| 87 | .Fa "const EC_GROUP *group" | ||
| 88 | .Fa "BIGNUM *cofactor" | ||
| 89 | .Fa "BN_CTX *ctx" | ||
| 90 | .Fc | ||
| 91 | .Pp | ||
| 92 | Deprecated: | ||
| 93 | .Pp | ||
| 94 | .Ft void | ||
| 95 | .Fo EC_GROUP_clear_free | ||
| 96 | .Fa "EC_GROUP *group" | ||
| 97 | .Fc | ||
| 98 | .Ft int | ||
| 99 | .Fo EC_GROUP_set_curve_GFp | ||
| 100 | .Fa "EC_GROUP *group" | ||
| 101 | .Fa "const BIGNUM *p" | ||
| 102 | .Fa "const BIGNUM *a" | ||
| 103 | .Fa "const BIGNUM *b" | ||
| 104 | .Fa "BN_CTX *ctx" | ||
| 105 | .Fc | ||
| 106 | .Ft int | ||
| 107 | .Fo EC_GROUP_get_curve_GFp | ||
| 108 | .Fa "const EC_GROUP *group" | ||
| 109 | .Fa "BIGNUM *p" | ||
| 110 | .Fa "BIGNUM *a" | ||
| 111 | .Fa "BIGNUM *b" | ||
| 112 | .Fa "BN_CTX *ctx" | ||
| 113 | .Fc | ||
| 114 | .Sh DESCRIPTION | ||
| 115 | With the exception of the getters | ||
| 116 | the functions in this manual should not be used. | ||
| 117 | Use | ||
| 118 | .Xr EC_GROUP_new_by_curve_name 3 | ||
| 119 | instead. | ||
| 120 | .Pp | ||
| 121 | The EC library uses | ||
| 122 | .Vt EC_GROUP | ||
| 123 | objects to represent | ||
| 124 | elliptic curves in Weierstrass form. | ||
| 125 | These curves are defined over the prime field of order | ||
| 126 | .Fa p | ||
| 127 | via the Weierstrass equation | ||
| 128 | .Dl y^2 = x^3 + ax + b | ||
| 129 | where | ||
| 130 | .Fa a | ||
| 131 | and | ||
| 132 | .Fa b | ||
| 133 | are such that the discriminant 4a^3 - 27b^2 is non-zero. | ||
| 134 | .Pp | ||
| 135 | The points on an elliptic curve form a group. | ||
| 136 | Cryptographic applications usually depend on the choice of a | ||
| 137 | .Fa generator | ||
| 138 | whose multiples form a cyclic subgroup of a certain | ||
| 139 | .Fa order . | ||
| 140 | By Lagrange's theorem, the number of points on the elliptic curve is | ||
| 141 | the product of | ||
| 142 | .Fa order | ||
| 143 | and another integer called the | ||
| 144 | .Fa cofactor . | ||
| 145 | Hasse's theorem is the inequality | ||
| 146 | .Dl | Ns Fa order No * Fa cofactor No - (p + 1)| <= 2 sqrt(p) | ||
| 147 | which implies an upper bound on | ||
| 148 | .Fa order | ||
| 149 | in terms of | ||
| 150 | .Fa p | ||
| 151 | and allows the computation of | ||
| 152 | .Fa cofactor | ||
| 153 | provided that | ||
| 154 | .Fa order | ||
| 155 | is large enough. | ||
| 156 | .Pp | ||
| 157 | .Fn EC_GROUP_new_curve_GFp | ||
| 158 | instantiates a new | ||
| 159 | .Vt EC_GROUP | ||
| 160 | object over the prime field of size | ||
| 161 | .Fa p | ||
| 162 | with Weierstrass equation given by the coefficients | ||
| 163 | .Fa a | ||
| 164 | and | ||
| 165 | .Fa b . | ||
| 166 | The optional | ||
| 167 | .Fa ctx | ||
| 168 | is used to transform the other arguments into internal representation. | ||
| 169 | It is the caller's responsibility to ensure that | ||
| 170 | .Fa p | ||
| 171 | is a prime number greater than three and that | ||
| 172 | the discriminant is non-zero. | ||
| 173 | This can be done with | ||
| 174 | .Xr EC_GROUP_check_discriminant 3 | ||
| 175 | or as part of | ||
| 176 | .Xr EC_GROUP_check 3 | ||
| 177 | after | ||
| 178 | .Fn EC_GROUP_set_generator . | ||
| 179 | .Pp | ||
| 180 | .Fn EC_GROUP_set_curve | ||
| 181 | sets the curve parameters of | ||
| 182 | .Fa group | ||
| 183 | to | ||
| 184 | .Fa p , | ||
| 185 | .Fa a , | ||
| 186 | .Fa b | ||
| 187 | using the optional | ||
| 188 | .Fa ctx | ||
| 189 | and the comments in | ||
| 190 | .Fn EC_GROUP_new_curve_GFp | ||
| 191 | apply. | ||
| 192 | Existing | ||
| 193 | .Fa generator , | ||
| 194 | .Fa order , | ||
| 195 | or | ||
| 196 | .Fa cofactor | ||
| 197 | on | ||
| 198 | .Fa group | ||
| 199 | are left unmodified and become most likely invalid. | ||
| 200 | They must therefore be set to legitimate values using | ||
| 201 | .Fn EC_GROUP_set_generator . | ||
| 202 | .Pp | ||
| 203 | .Fn EC_GROUP_get_curve | ||
| 204 | copies the curve parameters of | ||
| 205 | .Fa group | ||
| 206 | into the caller-owned | ||
| 207 | .Fa p , | ||
| 208 | .Fa a , | ||
| 209 | and | ||
| 210 | .Fa b , | ||
| 211 | possibly making use of the | ||
| 212 | .Fa ctx | ||
| 213 | for conversion from internal representations. | ||
| 214 | Except for | ||
| 215 | .Fa group , | ||
| 216 | all arguments are optional. | ||
| 217 | .Pp | ||
| 218 | .Fn EC_GROUP_set_generator | ||
| 219 | performs sanity checks based on Hasse's theorem | ||
| 220 | and copies | ||
| 221 | .Fa generator , | ||
| 222 | .Fa order | ||
| 223 | and the optional | ||
| 224 | .Fa cofactor | ||
| 225 | into | ||
| 226 | .Fa group , | ||
| 227 | replacing all existing entries. | ||
| 228 | It is the caller's responsibility to ensure that | ||
| 229 | .Fa generator | ||
| 230 | is a point on the curve and that | ||
| 231 | .Fa order | ||
| 232 | is its order, | ||
| 233 | which can partially be accomplished with a subsequent call to | ||
| 234 | .Xr EC_GROUP_check 3 . | ||
| 235 | If | ||
| 236 | .Fa cofactor | ||
| 237 | is | ||
| 238 | .Dv NULL , | ||
| 239 | it can be computed on curves of cryptographic interest, | ||
| 240 | in which case | ||
| 241 | .Fa cofactor | ||
| 242 | is set to the computed value, otherwise it is set to zero. | ||
| 243 | .Pp | ||
| 244 | .Fn EC_GROUP_get0_generator | ||
| 245 | returns an internal pointer to the | ||
| 246 | .Fa group Ns 's | ||
| 247 | .Fa generator , | ||
| 248 | which may be | ||
| 249 | .Dv NULL | ||
| 250 | if no generator was set. | ||
| 251 | .Pp | ||
| 252 | .Fn EC_GROUP_get_degree | ||
| 253 | returns the bit length of the prime | ||
| 254 | .Fa p | ||
| 255 | set on | ||
| 256 | .Fa group . | ||
| 257 | .Pp | ||
| 258 | .Fn EC_GROUP_get_order | ||
| 259 | copies the value of the | ||
| 260 | .Fa group Ns 's | ||
| 261 | .Fa order | ||
| 262 | into the caller-owned | ||
| 263 | .Fa order , | ||
| 264 | returning failure if the | ||
| 265 | .Fa group Ns 's | ||
| 266 | .Fa order | ||
| 267 | is zero. | ||
| 268 | The | ||
| 269 | .Fa ctx | ||
| 270 | argument is ignored. | ||
| 271 | .Pp | ||
| 272 | .Fn EC_GROUP_order_bits | ||
| 273 | returns the number of bits in the | ||
| 274 | .Fa group Ns 's | ||
| 275 | .Fa order , | ||
| 276 | which is the result of calling | ||
| 277 | .Xr BN_num_bits 3 | ||
| 278 | on | ||
| 279 | .Fa order . | ||
| 280 | Unlike | ||
| 281 | .Fn EC_GROUP_get_order , | ||
| 282 | it does not fail if | ||
| 283 | .Fa order | ||
| 284 | is zero. | ||
| 285 | .Pp | ||
| 286 | .Fn EC_GROUP_get_cofactor | ||
| 287 | copies the value of the | ||
| 288 | .Fa group Ns 's | ||
| 289 | .Fa cofactor | ||
| 290 | into the caller-owned | ||
| 291 | .Fa cofactor , | ||
| 292 | returning failure if the | ||
| 293 | .Fa group Ns 's | ||
| 294 | .Fa cofactor | ||
| 295 | is zero. | ||
| 296 | The | ||
| 297 | .Fa ctx | ||
| 298 | argument is ignored. | ||
| 299 | .Pp | ||
| 300 | The deprecated | ||
| 301 | .Fn EC_GROUP_clear_free | ||
| 302 | uses | ||
| 303 | .Xr explicit_bzero 3 | ||
| 304 | and | ||
| 305 | .Xr freezero 3 | ||
| 306 | to clear and free all data associated with | ||
| 307 | .Fa group . | ||
| 308 | If | ||
| 309 | .Fa group | ||
| 310 | is | ||
| 311 | .Dv NULL , | ||
| 312 | no action occurs. | ||
| 313 | Since there is no secret data in | ||
| 314 | .Fa group , | ||
| 315 | this API is useless. | ||
| 316 | In LibreSSL, | ||
| 317 | .Xr EC_GROUP_free 3 | ||
| 318 | and | ||
| 319 | .Fn EC_GROUP_clear_free | ||
| 320 | behave identically. | ||
| 321 | .Pp | ||
| 322 | .Fn EC_GROUP_set_curve_GFp | ||
| 323 | and | ||
| 324 | .Fn EC_GROUP_get_curve_GFp | ||
| 325 | are deprecated aliases for | ||
| 326 | .Fn EC_GROUP_set_curve | ||
| 327 | and | ||
| 328 | .Fn EC_GROUP_get_curve , | ||
| 329 | respectively. | ||
| 330 | .Sh RETURN VALUES | ||
| 331 | .Fn EC_GROUP_new_curve_GFp | ||
| 332 | returns a newly allocated group or | ||
| 333 | .Dv NULL | ||
| 334 | if memory allocation fails, | ||
| 335 | or if some minimal sanity checks on | ||
| 336 | .Fa p , | ||
| 337 | .Fa a , | ||
| 338 | and | ||
| 339 | .Fa b | ||
| 340 | fail. | ||
| 341 | .Pp | ||
| 342 | .Fn EC_GROUP_set_curve | ||
| 343 | and | ||
| 344 | .Fn EC_GROUP_set_curve_GFp | ||
| 345 | return 1 on success and 0 on failure. | ||
| 346 | Failure conditions include that | ||
| 347 | .Fa p | ||
| 348 | is smaller than or equal to three, or even, or | ||
| 349 | memory allocation failure. | ||
| 350 | .Pp | ||
| 351 | .Fn EC_GROUP_get_curve | ||
| 352 | and | ||
| 353 | .Fn EC_GROUP_get_curve_GFp | ||
| 354 | return 1 on success and 0 on memory allocation failure. | ||
| 355 | .Pp | ||
| 356 | .Fn EC_GROUP_set_generator | ||
| 357 | returns 1 on success and 0 on memory allocation failure, or if | ||
| 358 | .Fa order | ||
| 359 | or | ||
| 360 | .Fa cofactor | ||
| 361 | are larger than Hasse's theorem allows. | ||
| 362 | .Fn EC_GROUP_get0_generator | ||
| 363 | returns an internal pointer to the | ||
| 364 | .Fa generator | ||
| 365 | or | ||
| 366 | .Dv NULL | ||
| 367 | if none was set on | ||
| 368 | .Fa group . | ||
| 369 | .Pp | ||
| 370 | .Fn EC_GROUP_get_order | ||
| 371 | returns 1 on success or 0 on memory allocation failure or if the | ||
| 372 | .Fa group Ns 's | ||
| 373 | order is set to | ||
| 374 | .Fa zero . | ||
| 375 | .Pp | ||
| 376 | .Fn EC_GROUP_get_degree , | ||
| 377 | .Fn EC_GROUP_order_bits , | ||
| 378 | and | ||
| 379 | .Fn EC_GROUP_get_cofactor | ||
| 380 | return the number of bits in the | ||
| 381 | .Fa group Ns 's | ||
| 382 | .Fa p , | ||
| 383 | .Fa order , | ||
| 384 | and | ||
| 385 | .Fa cofactor , | ||
| 386 | respectively. | ||
| 387 | .Sh SEE ALSO | ||
| 388 | .Xr BN_new 3 , | ||
| 389 | .Xr BN_num_bits 3 , | ||
| 390 | .Xr crypto 3 , | ||
| 391 | .Xr d2i_ECPKParameters 3 , | ||
| 392 | .Xr EC_GROUP_check 3 , | ||
| 393 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 394 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 395 | .Xr EC_KEY_METHOD_new 3 , | ||
| 396 | .Xr EC_KEY_new 3 , | ||
| 397 | .Xr EC_POINT_add 3 , | ||
| 398 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 399 | .Xr EC_POINT_new 3 , | ||
| 400 | .Xr EC_POINT_point2oct 3 , | ||
| 401 | .Xr ECDH_compute_key 3 , | ||
| 402 | .Xr ECDSA_SIG_new 3 | ||
| 403 | .Sh STANDARDS | ||
| 404 | .Rs | ||
| 405 | .%T SEC 1: Elliptic Curve Cryptography, Version 2.0 | ||
| 406 | .%U https://www.secg.org/sec1-v2.pdf | ||
| 407 | .%D May 21, 2009 | ||
| 408 | .Re | ||
| 409 | .Pp | ||
| 410 | .Rs | ||
| 411 | .%T SEC 2: Recommended Elliptic Curve Domain Parameters, Version 2.0 | ||
| 412 | .%U https://www.secg.org/sec2-v2.pdf | ||
| 413 | .%D Jan 27, 2010 | ||
| 414 | .Re | ||
| 415 | .Sh HISTORY | ||
| 416 | .Fn EC_GROUP_new_curve_GFp , | ||
| 417 | .Fn EC_GROUP_clear_free , | ||
| 418 | .Fn EC_GROUP_set_curve_GFp , | ||
| 419 | .Fn EC_GROUP_get_curve_GFp , | ||
| 420 | .Fn EC_GROUP_set_generator , | ||
| 421 | .Fn EC_GROUP_get0_generator , | ||
| 422 | .Fn EC_GROUP_get_order , | ||
| 423 | and | ||
| 424 | .Fn EC_GROUP_get_cofactor | ||
| 425 | first appeared in OpenSSL 0.9.7 and | ||
| 426 | have been available since | ||
| 427 | .Ox 3.2 . | ||
| 428 | .Pp | ||
| 429 | .Fn EC_GROUP_get_degree | ||
| 430 | first appeared in OpenSSL 0.9.8 and | ||
| 431 | has been available since | ||
| 432 | .Ox 4.5 . | ||
| 433 | .Pp | ||
| 434 | .Fn EC_GROUP_set_curve , | ||
| 435 | .Fn EC_GROUP_get_curve , | ||
| 436 | and | ||
| 437 | .Fn EC_GROUP_order_bits | ||
| 438 | first appeared in OpenSSL 1.1.1 and | ||
| 439 | have been available since | ||
| 440 | .Ox 7.0 | ||
| 441 | .Sh BUGS | ||
| 442 | Too many. | ||
| 443 | The API is unergonomic and the design is very poor even by | ||
| 444 | OpenSSL's standards. | ||
| 445 | Naming is inconsistent, especially in regards to the _GFp suffix | ||
| 446 | and the _get_ infix. | ||
| 447 | Function signatures are inconsistent. | ||
| 448 | In particular, functions that should have a | ||
| 449 | .Vt BN_CTX | ||
| 450 | argument don't have one and functions that don't need it have one. | ||
diff --git a/src/lib/libcrypto/man/EC_KEY_METHOD_new.3 b/src/lib/libcrypto/man/EC_KEY_METHOD_new.3 index 79c16ef014..5f5795d5cc 100644 --- a/src/lib/libcrypto/man/EC_KEY_METHOD_new.3 +++ b/src/lib/libcrypto/man/EC_KEY_METHOD_new.3 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .\" $OpenBSD: EC_KEY_METHOD_new.3,v 1.4 2024/07/21 08:36:43 tb Exp $ | 1 | .\" $OpenBSD: EC_KEY_METHOD_new.3,v 1.5 2025/04/25 19:57:12 tb Exp $ |
| 2 | .\" Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org> | 2 | .\" Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org> |
| 3 | .\" | 3 | .\" |
| 4 | .\" Permission to use, copy, modify, and distribute this software for any | 4 | .\" Permission to use, copy, modify, and distribute this software for any |
| @@ -13,7 +13,7 @@ | |||
| 13 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | 13 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 14 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 14 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 15 | .\" | 15 | .\" |
| 16 | .Dd $Mdocdate: July 21 2024 $ | 16 | .Dd $Mdocdate: April 25 2025 $ |
| 17 | .Dt EC_KEY_METHOD_NEW 3 | 17 | .Dt EC_KEY_METHOD_NEW 3 |
| 18 | .Os | 18 | .Os |
| 19 | .Sh NAME | 19 | .Sh NAME |
| @@ -312,7 +312,16 @@ returns 1 for success or 0 for failure. | |||
| 312 | returns the EC_KEY implementation used by the given | 312 | returns the EC_KEY implementation used by the given |
| 313 | .Fa key . | 313 | .Fa key . |
| 314 | .Sh SEE ALSO | 314 | .Sh SEE ALSO |
| 315 | .Xr crypto 3 , | ||
| 316 | .Xr EC_GROUP_check 3 , | ||
| 317 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 318 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 319 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 315 | .Xr EC_KEY_new 3 , | 320 | .Xr EC_KEY_new 3 , |
| 321 | .Xr EC_POINT_add 3 , | ||
| 322 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 323 | .Xr EC_POINT_new 3 , | ||
| 324 | .Xr EC_POINT_point2oct 3 , | ||
| 316 | .Xr ECDSA_sign 3 | 325 | .Xr ECDSA_sign 3 |
| 317 | .Sh HISTORY | 326 | .Sh HISTORY |
| 318 | These functions first appeared in OpenSSL 1.1.0 | 327 | These functions first appeared in OpenSSL 1.1.0 |
diff --git a/src/lib/libcrypto/man/EC_KEY_new.3 b/src/lib/libcrypto/man/EC_KEY_new.3 index c24cb080ef..a2592a20ae 100644 --- a/src/lib/libcrypto/man/EC_KEY_new.3 +++ b/src/lib/libcrypto/man/EC_KEY_new.3 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .\" $OpenBSD: EC_KEY_new.3,v 1.21 2025/03/08 16:38:13 tb Exp $ | 1 | .\" $OpenBSD: EC_KEY_new.3,v 1.22 2025/04/25 19:57:12 tb Exp $ |
| 2 | .\" full merge up to: OpenSSL 3aef36ff Jan 5 13:06:03 2016 -0500 | 2 | .\" full merge up to: OpenSSL 3aef36ff Jan 5 13:06:03 2016 -0500 |
| 3 | .\" partial merge up to: OpenSSL e9b77246 Jan 20 19:58:49 2017 +0100 | 3 | .\" partial merge up to: OpenSSL e9b77246 Jan 20 19:58:49 2017 +0100 |
| 4 | .\" | 4 | .\" |
| @@ -49,7 +49,7 @@ | |||
| 49 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 49 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 50 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | 50 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. |
| 51 | .\" | 51 | .\" |
| 52 | .Dd $Mdocdate: March 8 2025 $ | 52 | .Dd $Mdocdate: April 25 2025 $ |
| 53 | .Dt EC_KEY_NEW 3 | 53 | .Dt EC_KEY_NEW 3 |
| 54 | .Os | 54 | .Os |
| 55 | .Sh NAME | 55 | .Sh NAME |
| @@ -234,7 +234,7 @@ and supplying the | |||
| 234 | .Fa nid | 234 | .Fa nid |
| 235 | of the associated curve. | 235 | of the associated curve. |
| 236 | Refer to | 236 | Refer to |
| 237 | .Xr EC_GROUP_new 3 | 237 | .Xr EC_GROUP_new_by_curve_name 3 |
| 238 | for a description of curve names. | 238 | for a description of curve names. |
| 239 | This function simply wraps calls to | 239 | This function simply wraps calls to |
| 240 | .Fn EC_KEY_new | 240 | .Fn EC_KEY_new |
| @@ -357,7 +357,7 @@ The format of the external representation of the public key written by | |||
| 357 | such as whether it is stored in a compressed form or not, | 357 | such as whether it is stored in a compressed form or not, |
| 358 | is described by the point_conversion_form. | 358 | is described by the point_conversion_form. |
| 359 | See | 359 | See |
| 360 | .Xr EC_GROUP_copy 3 | 360 | .Xr EC_POINT_point2oct 3 |
| 361 | for a description of point_conversion_form. | 361 | for a description of point_conversion_form. |
| 362 | .Pp | 362 | .Pp |
| 363 | When reading a private key encoded without an associated public key, | 363 | When reading a private key encoded without an associated public key, |
| @@ -378,7 +378,7 @@ and | |||
| 378 | get and set the point_conversion_form for the | 378 | get and set the point_conversion_form for the |
| 379 | .Fa key . | 379 | .Fa key . |
| 380 | For a description of point_conversion_form refer to | 380 | For a description of point_conversion_form refer to |
| 381 | .Xr EC_GROUP_copy 3 . | 381 | .Xr EC_POINT_point2oct 3 . |
| 382 | .Pp | 382 | .Pp |
| 383 | .Fn EC_KEY_set_flags | 383 | .Fn EC_KEY_set_flags |
| 384 | sets the flags in the | 384 | sets the flags in the |
| @@ -407,7 +407,7 @@ sets the asn1_flag on the underlying | |||
| 407 | .Vt EC_GROUP | 407 | .Vt EC_GROUP |
| 408 | object (if set). | 408 | object (if set). |
| 409 | Refer to | 409 | Refer to |
| 410 | .Xr EC_GROUP_copy 3 | 410 | .Xr EC_GROUP_get_curve_name 3 |
| 411 | for further information on the asn1_flag. | 411 | for further information on the asn1_flag. |
| 412 | .Pp | 412 | .Pp |
| 413 | .Fn EC_KEY_precompute_mult | 413 | .Fn EC_KEY_precompute_mult |
| @@ -488,11 +488,14 @@ returns the point_conversion_form for the | |||
| 488 | .Vt EC_KEY . | 488 | .Vt EC_KEY . |
| 489 | .Sh SEE ALSO | 489 | .Sh SEE ALSO |
| 490 | .Xr d2i_ECPKParameters 3 , | 490 | .Xr d2i_ECPKParameters 3 , |
| 491 | .Xr EC_GROUP_copy 3 , | 491 | .Xr EC_GROUP_check 3 , |
| 492 | .Xr EC_GROUP_new 3 , | 492 | .Xr EC_GROUP_get_curve_name 3 , |
| 493 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 494 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 493 | .Xr EC_KEY_METHOD_new 3 , | 495 | .Xr EC_KEY_METHOD_new 3 , |
| 494 | .Xr EC_POINT_add 3 , | 496 | .Xr EC_POINT_add 3 , |
| 495 | .Xr EC_POINT_new 3 , | 497 | .Xr EC_POINT_get_affine_coordinates 3 , |
| 498 | .Xr EC_POINT_point2oct 3 , | ||
| 496 | .Xr ECDH_compute_key 3 , | 499 | .Xr ECDH_compute_key 3 , |
| 497 | .Xr ECDSA_SIG_new 3 , | 500 | .Xr ECDSA_SIG_new 3 , |
| 498 | .Xr EVP_PKEY_set1_EC_KEY 3 | 501 | .Xr EVP_PKEY_set1_EC_KEY 3 |
diff --git a/src/lib/libcrypto/man/EC_POINT_add.3 b/src/lib/libcrypto/man/EC_POINT_add.3 index cc35499c0e..9c75f0dcd3 100644 --- a/src/lib/libcrypto/man/EC_POINT_add.3 +++ b/src/lib/libcrypto/man/EC_POINT_add.3 | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .\" $OpenBSD: EC_POINT_add.3,v 1.15 2025/03/08 16:48:22 tb Exp $ | 1 | .\" $OpenBSD: EC_POINT_add.3,v 1.16 2025/04/25 19:57:12 tb Exp $ |
| 2 | .\" OpenSSL b97fdb57 Nov 11 09:33:09 2016 +0100 | 2 | .\" OpenSSL b97fdb57 Nov 11 09:33:09 2016 +0100 |
| 3 | .\" | 3 | .\" |
| 4 | .\" This file was written by Matt Caswell <matt@openssl.org>. | 4 | .\" This file was written by Matt Caswell <matt@openssl.org>. |
| @@ -48,7 +48,7 @@ | |||
| 48 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 48 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 49 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | 49 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. |
| 50 | .\" | 50 | .\" |
| 51 | .Dd $Mdocdate: March 8 2025 $ | 51 | .Dd $Mdocdate: April 25 2025 $ |
| 52 | .Dt EC_POINT_ADD 3 | 52 | .Dt EC_POINT_ADD 3 |
| 53 | .Os | 53 | .Os |
| 54 | .Sh NAME | 54 | .Sh NAME |
| @@ -177,7 +177,7 @@ in which case the result is just | |||
| 177 | .Dl q * m. | 177 | .Dl q * m. |
| 178 | .Pp | 178 | .Pp |
| 179 | See | 179 | See |
| 180 | .Xr EC_GROUP_copy 3 | 180 | .Xr EC_GROUP_new_curve_GFp 3 |
| 181 | for information about the generator. | 181 | for information about the generator. |
| 182 | .Sh RETURN VALUES | 182 | .Sh RETURN VALUES |
| 183 | The following functions return 1 on success or 0 on error: | 183 | The following functions return 1 on success or 0 on error: |
| @@ -197,11 +197,17 @@ returns 1 if the point is on the curve, 0 if not, or -1 on error. | |||
| 197 | .Fn EC_POINT_cmp | 197 | .Fn EC_POINT_cmp |
| 198 | returns 1 if the points are not equal, 0 if they are, or -1 on error. | 198 | returns 1 if the points are not equal, 0 if they are, or -1 on error. |
| 199 | .Sh SEE ALSO | 199 | .Sh SEE ALSO |
| 200 | .Xr crypto 3 , | ||
| 200 | .Xr d2i_ECPKParameters 3 , | 201 | .Xr d2i_ECPKParameters 3 , |
| 201 | .Xr EC_GROUP_copy 3 , | 202 | .Xr EC_GROUP_check 3 , |
| 202 | .Xr EC_GROUP_new 3 , | 203 | .Xr EC_GROUP_get_curve_name 3 , |
| 204 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 205 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 206 | .Xr EC_KEY_METHOD_new 3 , | ||
| 203 | .Xr EC_KEY_new 3 , | 207 | .Xr EC_KEY_new 3 , |
| 204 | .Xr EC_POINT_new 3 | 208 | .Xr EC_POINT_get_affine_coordinates 3 , |
| 209 | .Xr EC_POINT_new 3 , | ||
| 210 | .Xr EC_POINT_point2oct 3 | ||
| 205 | .Sh HISTORY | 211 | .Sh HISTORY |
| 206 | .Fn EC_POINT_add , | 212 | .Fn EC_POINT_add , |
| 207 | .Fn EC_POINT_dbl , | 213 | .Fn EC_POINT_dbl , |
diff --git a/src/lib/libcrypto/man/EC_POINT_get_affine_coordinates.3 b/src/lib/libcrypto/man/EC_POINT_get_affine_coordinates.3 new file mode 100644 index 0000000000..b36d480530 --- /dev/null +++ b/src/lib/libcrypto/man/EC_POINT_get_affine_coordinates.3 | |||
| @@ -0,0 +1,215 @@ | |||
| 1 | .\" $OpenBSD: EC_POINT_get_affine_coordinates.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_POINT_GET_AFFINE_COORDINATES 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_POINT_get_affine_coordinates , | ||
| 22 | .Nm EC_POINT_set_affine_coordinates , | ||
| 23 | .Nm EC_POINT_set_compressed_coordinates , | ||
| 24 | .Nm EC_POINT_set_to_infinity , | ||
| 25 | .Nm EC_POINT_get_affine_coordinates_GFp , | ||
| 26 | .Nm EC_POINT_set_affine_coordinates_GFp , | ||
| 27 | .Nm EC_POINT_set_compressed_coordinates_GFp | ||
| 28 | .Nd get and set coordinates of elliptic curve points | ||
| 29 | .Sh SYNOPSIS | ||
| 30 | .In openssl/bn.h | ||
| 31 | .In openssl/ec.h | ||
| 32 | .Pp | ||
| 33 | .Ft int | ||
| 34 | .Fo EC_POINT_get_affine_coordinates | ||
| 35 | .Fa "const EC_GROUP *group" | ||
| 36 | .Fa "const EC_POINT *point" | ||
| 37 | .Fa "BIGNUM *x" | ||
| 38 | .Fa "BIGNUM *y" | ||
| 39 | .Fa "BN_CTX *ctx" | ||
| 40 | .Fc | ||
| 41 | .Ft int | ||
| 42 | .Fo EC_POINT_set_affine_coordinates | ||
| 43 | .Fa "const EC_GROUP *group" | ||
| 44 | .Fa "EC_POINT *point" | ||
| 45 | .Fa "const BIGNUM *x" | ||
| 46 | .Fa "const BIGNUM *y" | ||
| 47 | .Fa "BN_CTX *ctx" | ||
| 48 | .Fc | ||
| 49 | .Ft int | ||
| 50 | .Fo EC_POINT_set_compressed_coordinates | ||
| 51 | .Fa "const EC_GROUP *group" | ||
| 52 | .Fa "EC_POINT *point" | ||
| 53 | .Fa "const BIGNUM *x" | ||
| 54 | .Fa "int y_bit" | ||
| 55 | .Fa "BN_CTX *ctx" | ||
| 56 | .Fc | ||
| 57 | .Ft int | ||
| 58 | .Fo EC_POINT_set_to_infinity | ||
| 59 | .Fa "const EC_GROUP *group" | ||
| 60 | .Fa "EC_POINT *point" | ||
| 61 | .Fc | ||
| 62 | .Pp | ||
| 63 | Deprecated: | ||
| 64 | .Pp | ||
| 65 | .Ft int | ||
| 66 | .Fo EC_POINT_get_affine_coordinates_GFp | ||
| 67 | .Fa "const EC_GROUP *group" | ||
| 68 | .Fa "const EC_POINT *point" | ||
| 69 | .Fa "BIGNUM *x" | ||
| 70 | .Fa "BIGNUM *y" | ||
| 71 | .Fa "BN_CTX *ctx" | ||
| 72 | .Fc | ||
| 73 | .Ft int | ||
| 74 | .Fo EC_POINT_set_affine_coordinates_GFp | ||
| 75 | .Fa "const EC_GROUP *group" | ||
| 76 | .Fa "EC_POINT *point" | ||
| 77 | .Fa "const BIGNUM *x" | ||
| 78 | .Fa "const BIGNUM *y" | ||
| 79 | .Fa "BN_CTX *ctx" | ||
| 80 | .Fc | ||
| 81 | .Ft int | ||
| 82 | .Fo EC_POINT_set_compressed_coordinates_GFp | ||
| 83 | .Fa "const EC_GROUP *group" | ||
| 84 | .Fa "EC_POINT *point" | ||
| 85 | .Fa "const BIGNUM *x" | ||
| 86 | .Fa "int y_bit" | ||
| 87 | .Fa "BN_CTX *ctx" | ||
| 88 | .Fc | ||
| 89 | .Sh DESCRIPTION | ||
| 90 | .Fn EC_POINT_get_affine_coordinates | ||
| 91 | assumes that | ||
| 92 | .Fa point | ||
| 93 | is a point on | ||
| 94 | .Fa group , | ||
| 95 | calculates its affine coordinates from its internal representation | ||
| 96 | using the optional | ||
| 97 | .Fa ctx , | ||
| 98 | and copies them into the optional user-provided | ||
| 99 | .Fa x | ||
| 100 | and | ||
| 101 | .Fa y . | ||
| 102 | .Pp | ||
| 103 | .Fn EC_POINT_set_affine_coordinates | ||
| 104 | assumes that | ||
| 105 | .Fa x | ||
| 106 | and | ||
| 107 | .Fa y | ||
| 108 | are the affine coordinates of a point on | ||
| 109 | .Fa group , | ||
| 110 | converts them into internal representation and sets them on | ||
| 111 | .Fa point | ||
| 112 | using the optional | ||
| 113 | .Fa ctx . | ||
| 114 | The user-provided | ||
| 115 | .Fa point | ||
| 116 | should be the result of | ||
| 117 | .Fn EC_POINT_new 3 | ||
| 118 | with an argument of | ||
| 119 | .Fa group . | ||
| 120 | It then verifies using | ||
| 121 | .Xr EC_POINT_is_on_curve 3 | ||
| 122 | that | ||
| 123 | .Fa x | ||
| 124 | and | ||
| 125 | .Fa y | ||
| 126 | are indeed the affine coordinates of a point on | ||
| 127 | .Fa group . | ||
| 128 | .Pp | ||
| 129 | .Fn EC_POINT_set_compressed_coordinates | ||
| 130 | assumes that | ||
| 131 | .Fa x | ||
| 132 | is the x-coordinate and | ||
| 133 | .Fa y_bit | ||
| 134 | is the parity bit of a point on | ||
| 135 | .Fa group | ||
| 136 | and sets | ||
| 137 | .Fa point | ||
| 138 | to the corresponding point on | ||
| 139 | .Fa group . | ||
| 140 | It does this by solving the quadratic equation y^2 = x^3 + ax + b using | ||
| 141 | .Xr BN_mod_sqrt 3 | ||
| 142 | and the optional | ||
| 143 | .Fa ctx , | ||
| 144 | chooses the solution | ||
| 145 | .Fa y | ||
| 146 | with parity matching | ||
| 147 | .Fa y_bit , | ||
| 148 | and passes | ||
| 149 | .Fa x | ||
| 150 | and | ||
| 151 | .Fa y | ||
| 152 | to | ||
| 153 | .Fn EC_POINT_set_affine_coordinates . | ||
| 154 | The user-provided | ||
| 155 | .Fa point | ||
| 156 | should be the result of | ||
| 157 | .Fn EC_POINT_new | ||
| 158 | with argument | ||
| 159 | .Fa group . | ||
| 160 | .Pp | ||
| 161 | .Fn EC_POINT_set_to_infinity | ||
| 162 | sets | ||
| 163 | .Fa point | ||
| 164 | to the internal representation of the point at infinity on | ||
| 165 | .Fa group . | ||
| 166 | .Pp | ||
| 167 | .Fn EC_POINT_get_affine_coordinates_GFp | ||
| 168 | is a deprecated alias for | ||
| 169 | .Fn EC_POINT_get_affine_coordinates . | ||
| 170 | Similarly for | ||
| 171 | .Fn EC_POINT_set_affine_coordinates_GFp | ||
| 172 | and | ||
| 173 | .Fn EC_POINT_set_compressed_coordinates_GFp . | ||
| 174 | .Sh RETURN VALUES | ||
| 175 | All these functions return 1 on success and 0 on error. | ||
| 176 | Error conditions include memory allocation failure, | ||
| 177 | that | ||
| 178 | .Fa point | ||
| 179 | is incompatible with | ||
| 180 | .Fa group , | ||
| 181 | and, for the coordinate setters, that the provided coordinates | ||
| 182 | do not represent a point on | ||
| 183 | .Fa group . | ||
| 184 | .Sh SEE ALSO | ||
| 185 | .Xr BN_CTX_new 3 , | ||
| 186 | .Xr BN_is_zero 3 , | ||
| 187 | .Xr BN_mod_sqrt 3 , | ||
| 188 | .Xr crypto 3 , | ||
| 189 | .Xr d2i_ECPKParameters 3 , | ||
| 190 | .Xr EC_GROUP_check 3 , | ||
| 191 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 192 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 193 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 194 | .Xr EC_KEY_METHOD_new 3 , | ||
| 195 | .Xr EC_KEY_new 3 , | ||
| 196 | .Xr EC_POINT_add 3 , | ||
| 197 | .Xr EC_POINT_new 3 , | ||
| 198 | .Xr EC_POINT_point2oct 3 , | ||
| 199 | .Xr ECDH_compute_key 3 , | ||
| 200 | .Xr ECDSA_SIG_new 3 | ||
| 201 | .Sh HISTORY | ||
| 202 | .Fn EC_POINT_get_affine_coordinates_GFp , | ||
| 203 | .Fn EC_POINT_set_affine_coordinates_GFp , | ||
| 204 | .Fn EC_POINT_set_compressed_coordinates_GFp , | ||
| 205 | and | ||
| 206 | .Fn EC_POINT_set_to_infinity | ||
| 207 | first appeared in OpenSSL 0.9.7 and have been available since | ||
| 208 | .Ox 3.2 . | ||
| 209 | .Pp | ||
| 210 | .Fn EC_POINT_get_affine_coordinates , | ||
| 211 | .Fn EC_POINT_set_affine_coordinates , | ||
| 212 | and | ||
| 213 | .Fn EC_POINT_set_compressed_coordinates | ||
| 214 | first appeared in OpenSSL 1.1.1 and have been available since | ||
| 215 | .Ox 7.0 . | ||
diff --git a/src/lib/libcrypto/man/EC_POINT_new.3 b/src/lib/libcrypto/man/EC_POINT_new.3 index db6280fce7..cfc988f294 100644 --- a/src/lib/libcrypto/man/EC_POINT_new.3 +++ b/src/lib/libcrypto/man/EC_POINT_new.3 | |||
| @@ -1,54 +1,20 @@ | |||
| 1 | .\" $OpenBSD: EC_POINT_new.3,v 1.17 2025/03/08 17:04:07 tb Exp $ | 1 | .\" $OpenBSD: EC_POINT_new.3,v 1.18 2025/04/25 19:57:12 tb Exp $ |
| 2 | .\" full merge up to: OpenSSL 50db8163 Jul 30 16:56:41 2018 +0100 | ||
| 3 | .\" | 2 | .\" |
| 4 | .\" This file was written by Matt Caswell <matt@openssl.org>. | 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> |
| 5 | .\" Copyright (c) 2013, 2016 The OpenSSL Project. All rights reserved. | ||
| 6 | .\" | 4 | .\" |
| 7 | .\" Redistribution and use in source and binary forms, with or without | 5 | .\" Permission to use, copy, modify, and distribute this software for any |
| 8 | .\" modification, are permitted provided that the following conditions | 6 | .\" purpose with or without fee is hereby granted, provided that the above |
| 9 | .\" are met: | 7 | .\" copyright notice and this permission notice appear in all copies. |
| 10 | .\" | 8 | .\" |
| 11 | .\" 1. Redistributions of source code must retain the above copyright | 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 12 | .\" notice, this list of conditions and the following disclaimer. | 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 13 | .\" | 16 | .\" |
| 14 | .\" 2. Redistributions in binary form must reproduce the above copyright | 17 | .Dd $Mdocdate: April 25 2025 $ |
| 15 | .\" notice, this list of conditions and the following disclaimer in | ||
| 16 | .\" the documentation and/or other materials provided with the | ||
| 17 | .\" distribution. | ||
| 18 | .\" | ||
| 19 | .\" 3. All advertising materials mentioning features or use of this | ||
| 20 | .\" software must display the following acknowledgment: | ||
| 21 | .\" "This product includes software developed by the OpenSSL Project | ||
| 22 | .\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 23 | .\" | ||
| 24 | .\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 25 | .\" endorse or promote products derived from this software without | ||
| 26 | .\" prior written permission. For written permission, please contact | ||
| 27 | .\" openssl-core@openssl.org. | ||
| 28 | .\" | ||
| 29 | .\" 5. Products derived from this software may not be called "OpenSSL" | ||
| 30 | .\" nor may "OpenSSL" appear in their names without prior written | ||
| 31 | .\" permission of the OpenSSL Project. | ||
| 32 | .\" | ||
| 33 | .\" 6. Redistributions of any form whatsoever must retain the following | ||
| 34 | .\" acknowledgment: | ||
| 35 | .\" "This product includes software developed by the OpenSSL Project | ||
| 36 | .\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 37 | .\" | ||
| 38 | .\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 39 | .\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 40 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 41 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 42 | .\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 43 | .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 44 | .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 45 | .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 46 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 47 | .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 48 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 49 | .\" OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 50 | .\" | ||
| 51 | .Dd $Mdocdate: March 8 2025 $ | ||
| 52 | .Dt EC_POINT_NEW 3 | 18 | .Dt EC_POINT_NEW 3 |
| 53 | .Os | 19 | .Os |
| 54 | .Sh NAME | 20 | .Sh NAME |
| @@ -56,163 +22,56 @@ | |||
| 56 | .Nm EC_POINT_free , | 22 | .Nm EC_POINT_free , |
| 57 | .Nm EC_POINT_clear_free , | 23 | .Nm EC_POINT_clear_free , |
| 58 | .Nm EC_POINT_copy , | 24 | .Nm EC_POINT_copy , |
| 59 | .Nm EC_POINT_dup , | 25 | .Nm EC_POINT_dup |
| 60 | .Nm EC_POINT_set_to_infinity , | 26 | .Nd allocate, free and copy elliptic curve points |
| 61 | .Nm EC_POINT_set_affine_coordinates , | ||
| 62 | .Nm EC_POINT_set_affine_coordinates_GFp , | ||
| 63 | .Nm EC_POINT_get_affine_coordinates , | ||
| 64 | .Nm EC_POINT_get_affine_coordinates_GFp , | ||
| 65 | .Nm EC_POINT_set_compressed_coordinates , | ||
| 66 | .Nm EC_POINT_set_compressed_coordinates_GFp , | ||
| 67 | .Nm EC_POINT_point2oct , | ||
| 68 | .Nm EC_POINT_oct2point , | ||
| 69 | .Nm EC_POINT_point2bn , | ||
| 70 | .Nm EC_POINT_bn2point , | ||
| 71 | .Nm EC_POINT_point2hex , | ||
| 72 | .Nm EC_POINT_hex2point | ||
| 73 | .Nd create, destroy, and manipulate EC_POINT objects | ||
| 74 | .Sh SYNOPSIS | 27 | .Sh SYNOPSIS |
| 75 | .In openssl/ec.h | 28 | .In openssl/ec.h |
| 76 | .In openssl/bn.h | 29 | .Pp |
| 77 | .Ft EC_POINT * | 30 | .Ft "EC_POINT *" |
| 78 | .Fo EC_POINT_new | 31 | .Fo EC_POINT_new |
| 79 | .Fa "const EC_GROUP *group" | 32 | .Fa "const EC_GROUP *group" |
| 80 | .Fc | 33 | .Fc |
| 81 | .Ft void | 34 | .Ft "void" |
| 82 | .Fo EC_POINT_free | 35 | .Fo EC_POINT_free |
| 83 | .Fa "EC_POINT *point" | 36 | .Fa "EC_POINT *point" |
| 84 | .Fc | 37 | .Fc |
| 85 | .Ft void | 38 | .Ft "void" |
| 86 | .Fo EC_POINT_clear_free | 39 | .Fo EC_POINT_clear_free |
| 87 | .Fa "EC_POINT *point" | 40 | .Fa "EC_POINT *point" |
| 88 | .Fc | 41 | .Fc |
| 89 | .Ft int | 42 | .Ft "int" |
| 90 | .Fo EC_POINT_copy | 43 | .Fo EC_POINT_copy |
| 91 | .Fa "EC_POINT *dst" | 44 | .Fa "EC_POINT *dst" |
| 92 | .Fa "const EC_POINT *src" | 45 | .Fa "const EC_POINT *src" |
| 93 | .Fc | 46 | .Fc |
| 94 | .Ft EC_POINT * | 47 | .Ft "EC_POINT *" |
| 95 | .Fo EC_POINT_dup | 48 | .Fo EC_POINT_dup |
| 96 | .Fa "const EC_POINT *src" | 49 | .Fa "const EC_POINT *point" |
| 97 | .Fa "const EC_GROUP *group" | ||
| 98 | .Fc | ||
| 99 | .Ft int | ||
| 100 | .Fo EC_POINT_set_to_infinity | ||
| 101 | .Fa "const EC_GROUP *group" | ||
| 102 | .Fa "EC_POINT *point" | ||
| 103 | .Fc | ||
| 104 | .Ft int | ||
| 105 | .Fo EC_POINT_set_affine_coordinates | ||
| 106 | .Fa "const EC_GROUP *group" | ||
| 107 | .Fa "EC_POINT *p" | ||
| 108 | .Fa "const BIGNUM *x" | ||
| 109 | .Fa "const BIGNUM *y" | ||
| 110 | .Fa "BN_CTX *ctx" | ||
| 111 | .Fc | ||
| 112 | .Ft int | ||
| 113 | .Fo EC_POINT_set_affine_coordinates_GFp | ||
| 114 | .Fa "const EC_GROUP *group" | ||
| 115 | .Fa "EC_POINT *p" | ||
| 116 | .Fa "const BIGNUM *x" | ||
| 117 | .Fa "const BIGNUM *y" | ||
| 118 | .Fa "BN_CTX *ctx" | ||
| 119 | .Fc | ||
| 120 | .Ft int | ||
| 121 | .Fo EC_POINT_get_affine_coordinates | ||
| 122 | .Fa "const EC_GROUP *group" | ||
| 123 | .Fa "const EC_POINT *p" | ||
| 124 | .Fa "BIGNUM *x" | ||
| 125 | .Fa "BIGNUM *y" | ||
| 126 | .Fa "BN_CTX *ctx" | ||
| 127 | .Fc | ||
| 128 | .Ft int | ||
| 129 | .Fo EC_POINT_get_affine_coordinates_GFp | ||
| 130 | .Fa "const EC_GROUP *group" | ||
| 131 | .Fa "const EC_POINT *p" | ||
| 132 | .Fa "BIGNUM *x" | ||
| 133 | .Fa "BIGNUM *y" | ||
| 134 | .Fa "BN_CTX *ctx" | ||
| 135 | .Fc | ||
| 136 | .Ft int | ||
| 137 | .Fo EC_POINT_set_compressed_coordinates | ||
| 138 | .Fa "const EC_GROUP *group" | ||
| 139 | .Fa "EC_POINT *p" | ||
| 140 | .Fa "const BIGNUM *x" | ||
| 141 | .Fa "int y_bit" | ||
| 142 | .Fa "BN_CTX *ctx" | ||
| 143 | .Fc | ||
| 144 | .Ft int | ||
| 145 | .Fo EC_POINT_set_compressed_coordinates_GFp | ||
| 146 | .Fa "const EC_GROUP *group" | ||
| 147 | .Fa "EC_POINT *p" | ||
| 148 | .Fa "const BIGNUM *x" | ||
| 149 | .Fa "int y_bit" | ||
| 150 | .Fa "BN_CTX *ctx" | ||
| 151 | .Fc | ||
| 152 | .Ft size_t | ||
| 153 | .Fo EC_POINT_point2oct | ||
| 154 | .Fa "const EC_GROUP *group" | 50 | .Fa "const EC_GROUP *group" |
| 155 | .Fa "const EC_POINT *p" | ||
| 156 | .Fa "point_conversion_form_t form" | ||
| 157 | .Fa "unsigned char *buf" | ||
| 158 | .Fa "size_t len" | ||
| 159 | .Fa "BN_CTX *ctx" | ||
| 160 | .Fc | ||
| 161 | .Ft int | ||
| 162 | .Fo EC_POINT_oct2point | ||
| 163 | .Fa "const EC_GROUP *group" | ||
| 164 | .Fa "EC_POINT *p" | ||
| 165 | .Fa "const unsigned char *buf" | ||
| 166 | .Fa "size_t len" | ||
| 167 | .Fa "BN_CTX *ctx" | ||
| 168 | .Fc | ||
| 169 | .Ft BIGNUM * | ||
| 170 | .Fo EC_POINT_point2bn | ||
| 171 | .Fa "const EC_GROUP *" | ||
| 172 | .Fa "const EC_POINT *" | ||
| 173 | .Fa "point_conversion_form_t form" | ||
| 174 | .Fa "BIGNUM *" | ||
| 175 | .Fa "BN_CTX *" | ||
| 176 | .Fc | ||
| 177 | .Ft EC_POINT * | ||
| 178 | .Fo EC_POINT_bn2point | ||
| 179 | .Fa "const EC_GROUP *" | ||
| 180 | .Fa "const BIGNUM *" | ||
| 181 | .Fa "EC_POINT *" | ||
| 182 | .Fa "BN_CTX *" | ||
| 183 | .Fc | ||
| 184 | .Ft char * | ||
| 185 | .Fo EC_POINT_point2hex | ||
| 186 | .Fa "const EC_GROUP *" | ||
| 187 | .Fa "const EC_POINT *" | ||
| 188 | .Fa "point_conversion_form_t form" | ||
| 189 | .Fa "BN_CTX *" | ||
| 190 | .Fc | ||
| 191 | .Ft EC_POINT * | ||
| 192 | .Fo EC_POINT_hex2point | ||
| 193 | .Fa "const EC_GROUP *" | ||
| 194 | .Fa "const char *" | ||
| 195 | .Fa "EC_POINT *" | ||
| 196 | .Fa "BN_CTX *" | ||
| 197 | .Fc | 51 | .Fc |
| 198 | .Sh DESCRIPTION | 52 | .Sh DESCRIPTION |
| 199 | An | 53 | An |
| 200 | .Vt EC_POINT | 54 | .Vt EC_POINT |
| 201 | represents a point on a curve. | 55 | object holds a point on the elliptic curve represented by an |
| 202 | A curve is represented by an | 56 | .Vt EC_GROUP . |
| 203 | .Vt EC_GROUP | 57 | The details of the internal representation depend on the group |
| 204 | object created by the functions described in | 58 | and should never be an application's concern since the EC library |
| 205 | .Xr EC_GROUP_new 3 . | 59 | has API to set a point's coordinates, |
| 60 | .Xr EC_POINT_set_affine_coordinates 3 . | ||
| 206 | .Pp | 61 | .Pp |
| 207 | A new point is constructed by calling the function | ||
| 208 | .Fn EC_POINT_new | 62 | .Fn EC_POINT_new |
| 209 | and providing the | 63 | allocates and initializes an |
| 210 | .Fa group | 64 | .Vt EC_POINT |
| 211 | object that the point relates to. | 65 | object to be used with the |
| 66 | .Fa group . | ||
| 67 | Before explicitly setting its coordinates, the returned | ||
| 68 | .Vt EC_POINT | ||
| 69 | is invalid. | ||
| 212 | .Pp | 70 | .Pp |
| 213 | .Fn EC_POINT_free | 71 | .Fn EC_POINT_free |
| 214 | frees the memory associated with the | 72 | frees |
| 215 | .Vt EC_POINT . | 73 | .Fa point |
| 74 | and all memory associated with it. | ||
| 216 | If | 75 | If |
| 217 | .Fa point | 76 | .Fa point |
| 218 | is a | 77 | is a |
| @@ -220,236 +79,129 @@ is a | |||
| 220 | pointer, no action occurs. | 79 | pointer, no action occurs. |
| 221 | .Pp | 80 | .Pp |
| 222 | .Fn EC_POINT_clear_free | 81 | .Fn EC_POINT_clear_free |
| 223 | destroys any sensitive data held within the | 82 | is intended to destroy sensitive data held in |
| 224 | .Vt EC_POINT | ||
| 225 | and then frees its memory. | ||
| 226 | If | ||
| 227 | .Fa point | 83 | .Fa point |
| 228 | is a | 84 | in addition to freeing all memory associated with it. |
| 229 | .Dv NULL | 85 | Since elliptic curve points usually hold public data, this |
| 230 | pointer, no action occurs. | 86 | is rarely needed. |
| 87 | In LibreSSL, | ||
| 88 | .Fn EC_POINT_free | ||
| 89 | and | ||
| 90 | .Fn EC_POINT_clear_free | ||
| 91 | behave identically. | ||
| 231 | .Pp | 92 | .Pp |
| 232 | .Fn EC_POINT_copy | 93 | .Fn EC_POINT_copy |
| 233 | copies the point | 94 | copies the internal representation of |
| 234 | .Fa src | 95 | .Fa src |
| 235 | into | 96 | into |
| 236 | .Fa dst . | 97 | .Fa dst . |
| 237 | Both | 98 | If |
| 238 | .Fa src | 99 | .Fa src |
| 239 | and | 100 | and |
| 240 | .Fa dst | 101 | .Fa dst |
| 241 | must use the same | 102 | are identical, no action occurs. |
| 242 | .Vt EC_METHOD . | 103 | Both |
| 243 | .Pp | ||
| 244 | .Fn EC_POINT_dup | ||
| 245 | creates a new | ||
| 246 | .Vt EC_POINT | ||
| 247 | object and copies the content from | ||
| 248 | .Fa src | 104 | .Fa src |
| 249 | to the newly created | ||
| 250 | .Vt EC_POINT | ||
| 251 | object. | ||
| 252 | .Pp | ||
| 253 | A valid point on a curve is the special point at infinity. | ||
| 254 | A point is set to be at infinity by calling | ||
| 255 | .Fn EC_POINT_set_to_infinity . | ||
| 256 | .Pp | ||
| 257 | The affine coordinates for a point describe a point in terms of its | ||
| 258 | .Fa x | ||
| 259 | and | ||
| 260 | .Fa y | ||
| 261 | position. | ||
| 262 | The function | ||
| 263 | .Fn EC_POINT_set_affine_coordinates | ||
| 264 | sets the | ||
| 265 | .Fa x | ||
| 266 | and | ||
| 267 | .Fa y | ||
| 268 | coordinates for the point | ||
| 269 | .Fa p | ||
| 270 | defined over the curve given in | ||
| 271 | .Fa group . | ||
| 272 | The function | ||
| 273 | .Fn EC_POINT_get_affine_coordinates | ||
| 274 | sets | ||
| 275 | .Fa x | ||
| 276 | and | ||
| 277 | .Fa y , | ||
| 278 | either of which may be | ||
| 279 | .Dv NULL , | ||
| 280 | to the corresponding coordinates of | ||
| 281 | .Fa p . | ||
| 282 | .Pp | ||
| 283 | The functions | ||
| 284 | .Fn EC_POINT_set_affine_coordinates_GFp | ||
| 285 | is a deprecated synonym for | ||
| 286 | .Fn EC_POINT_set_affine_coordinates | ||
| 287 | and the function | ||
| 288 | .Fn EC_POINT_get_affine_coordinates_GFp | ||
| 289 | is a deprecated synonym for | ||
| 290 | .Fn EC_POINT_get_affine_coordinates . | ||
| 291 | .Pp | ||
| 292 | Points can also be described in terms of their compressed coordinates. | ||
| 293 | For a point | ||
| 294 | .Pq Fa x , y , | ||
| 295 | for any given value for | ||
| 296 | .Fa x | ||
| 297 | such that the point is on the curve, there will only ever be two | ||
| 298 | possible values for | ||
| 299 | .Fa y . | ||
| 300 | Therefore, a point can be set using the | ||
| 301 | .Fn EC_POINT_set_compressed_coordinates | ||
| 302 | function where | ||
| 303 | .Fa x | ||
| 304 | is the x coordinate and | ||
| 305 | .Fa y_bit | ||
| 306 | is a value 0 or 1 to identify which of the two possible values for y | ||
| 307 | should be used. | ||
| 308 | .Pp | ||
| 309 | The functions | ||
| 310 | .Fn EC_POINT_set_compressed_coordinates_GFp | ||
| 311 | is a deprecated synonym for | ||
| 312 | .Fn EC_POINT_set_compressed_coordinates . | ||
| 313 | .Pp | ||
| 314 | In addition | ||
| 315 | .Vt EC_POINT Ns s | ||
| 316 | can be converted to and from various external representations. | ||
| 317 | Supported representations are octet strings, | ||
| 318 | .Vt BIGNUM Ns s , | ||
| 319 | and hexadecimal. | ||
| 320 | The format of the external representation is described by the | ||
| 321 | point_conversion_form. | ||
| 322 | See | ||
| 323 | .Xr EC_GROUP_copy 3 | ||
| 324 | for a description of point_conversion_form. | ||
| 325 | Octet strings are stored in a buffer along with an associated buffer | ||
| 326 | length. | ||
| 327 | A point held in a | ||
| 328 | .Vt BIGNUM | ||
| 329 | is calculated by converting the point to an octet string and then | ||
| 330 | converting that octet string into a | ||
| 331 | .Vt BIGNUM | ||
| 332 | integer. | ||
| 333 | Points in hexadecimal format are stored in a NUL terminated character | ||
| 334 | string where each character is one of the printable values 0-9 or A-F | ||
| 335 | (or a-f). | ||
| 336 | .Pp | ||
| 337 | The functions | ||
| 338 | .Fn EC_POINT_point2oct , | ||
| 339 | .Fn EC_POINT_oct2point , | ||
| 340 | .Fn EC_POINT_point2bn , | ||
| 341 | .Fn EC_POINT_bn2point , | ||
| 342 | .Fn EC_POINT_point2hex , | ||
| 343 | and | 105 | and |
| 344 | .Fn EC_POINT_hex2point | 106 | .Fa dst |
| 345 | convert from and to | 107 | should be the result of |
| 346 | .Vt EC_POINT Ns s | 108 | .Fn EC_POINT_new |
| 347 | for the formats octet string, | 109 | with the same |
| 348 | .Vt BIGNUM , | 110 | .Fa group |
| 349 | and hexadecimal, respectively. | 111 | argument, although |
| 350 | .Pp | 112 | .Fn EC_POINT_copy |
| 351 | The function | 113 | cannot check that. |
| 352 | .Fn EC_POINT_point2oct | ||
| 353 | must be supplied with a | ||
| 354 | .Fa buf | ||
| 355 | long enough to store the octet string. | ||
| 356 | The return value provides the number of octets stored. | ||
| 357 | Calling the function with a | ||
| 358 | .Dv NULL | ||
| 359 | .Fa buf | ||
| 360 | will not perform the conversion but will still return the required | ||
| 361 | buffer length. | ||
| 362 | .Pp | 114 | .Pp |
| 363 | The function | 115 | .Fn EC_POINT_dup |
| 364 | .Fn EC_POINT_point2hex | 116 | creates a deep copy of |
| 365 | will allocate sufficient memory to store the hexadecimal string. | 117 | .Fa point |
| 366 | It is the caller's responsibility to free this memory with a subsequent | 118 | by combining |
| 367 | call to | 119 | .Fn EC_POINT_new |
| 368 | .Xr free 3 . | 120 | with |
| 121 | .Fn EC_GROUP_copy . | ||
| 369 | .Sh RETURN VALUES | 122 | .Sh RETURN VALUES |
| 370 | .Fn EC_POINT_new | 123 | .Fn EC_POINT_new |
| 371 | and | 124 | returns a newly allocated |
| 372 | .Fn EC_POINT_dup | ||
| 373 | return the newly allocated | ||
| 374 | .Vt EC_POINT | 125 | .Vt EC_POINT |
| 375 | or | 126 | or |
| 376 | .Dv NULL | 127 | .Dv NULL |
| 377 | on error. | 128 | on memory allocation failure. |
| 378 | .Pp | 129 | .Pp |
| 379 | The following functions return 1 on success or 0 on error: | 130 | .Fn EC_POINT_copy |
| 380 | .Fn EC_POINT_copy , | 131 | returns 1 on success or 0 on error. |
| 381 | .Fn EC_POINT_set_to_infinity , | 132 | Error conditions include memory allocation failure and that |
| 382 | .Fn EC_POINT_set_affine_coordinates , | 133 | .Fa dst |
| 383 | .Fn EC_POINT_set_affine_coordinates_GFp , | 134 | is incompatible with the group on which |
| 384 | .Fn EC_POINT_get_affine_coordinates , | 135 | .Fa src |
| 385 | .Fn EC_POINT_get_affine_coordinates_GFp , | 136 | is defined. |
| 386 | .Fn EC_POINT_set_compressed_coordinates , | ||
| 387 | .Fn EC_POINT_set_compressed_coordinates_GFp , | ||
| 388 | and | ||
| 389 | .Fn EC_POINT_oct2point . | ||
| 390 | .Pp | ||
| 391 | .Fn EC_POINT_point2oct | ||
| 392 | returns the length of the required buffer, or 0 on error. | ||
| 393 | .Pp | ||
| 394 | .Fn EC_POINT_point2bn | ||
| 395 | returns the pointer to the | ||
| 396 | .Vt BIGNUM | ||
| 397 | supplied or | ||
| 398 | .Dv NULL | ||
| 399 | on error. | ||
| 400 | .Pp | ||
| 401 | .Fn EC_POINT_bn2point | ||
| 402 | returns the pointer to the | ||
| 403 | .Vt EC_POINT | ||
| 404 | supplied or | ||
| 405 | .Dv NULL | ||
| 406 | on error. | ||
| 407 | .Pp | ||
| 408 | .Fn EC_POINT_point2hex | ||
| 409 | returns a pointer to the hex string or | ||
| 410 | .Dv NULL | ||
| 411 | on error. | ||
| 412 | .Pp | 137 | .Pp |
| 413 | .Fn EC_POINT_hex2point | 138 | .Fn EC_POINT_dup |
| 414 | returns the pointer to the | 139 | returns a newly allocated |
| 415 | .Vt EC_POINT | 140 | .Vt EC_POINT |
| 416 | supplied or | 141 | or |
| 417 | .Dv NULL | 142 | .Dv NULL |
| 418 | on error. | 143 | on failure. |
| 144 | Error conditions include memory allocation failure or that | ||
| 145 | .Fa group | ||
| 146 | is incompatible with | ||
| 147 | .Fa src . | ||
| 419 | .Sh SEE ALSO | 148 | .Sh SEE ALSO |
| 149 | .Xr BN_CTX_new 3 , | ||
| 150 | .Xr BN_is_zero 3 , | ||
| 151 | .Xr crypto 3 , | ||
| 420 | .Xr d2i_ECPKParameters 3 , | 152 | .Xr d2i_ECPKParameters 3 , |
| 421 | .Xr EC_GROUP_copy 3 , | 153 | .Xr EC_GROUP_check 3 , |
| 422 | .Xr EC_GROUP_new 3 , | 154 | .Xr EC_GROUP_get_curve_name 3 , |
| 155 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 156 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 157 | .Xr EC_KEY_METHOD_new 3 , | ||
| 423 | .Xr EC_KEY_new 3 , | 158 | .Xr EC_KEY_new 3 , |
| 424 | .Xr EC_POINT_add 3 , | 159 | .Xr EC_POINT_add 3 , |
| 425 | .Xr ECDH_compute_key 3 | 160 | .Xr EC_POINT_get_affine_coordinates 3 , |
| 161 | .Xr EC_POINT_point2oct 3 , | ||
| 162 | .Xr ECDH_compute_key 3 , | ||
| 163 | .Xr ECDSA_SIG_new 3 | ||
| 426 | .Sh HISTORY | 164 | .Sh HISTORY |
| 427 | .Fn EC_POINT_new , | 165 | .Fn EC_POINT_new , |
| 428 | .Fn EC_POINT_free , | 166 | .Fn EC_POINT_free , |
| 429 | .Fn EC_POINT_clear_free , | 167 | .Fn EC_POINT_clear_free , |
| 430 | .Fn EC_POINT_copy , | ||
| 431 | .Fn EC_POINT_set_to_infinity , | ||
| 432 | .Fn EC_POINT_set_affine_coordinates_GFp , | ||
| 433 | .Fn EC_POINT_get_affine_coordinates_GFp , | ||
| 434 | .Fn EC_POINT_set_compressed_coordinates_GFp , | ||
| 435 | .Fn EC_POINT_point2oct , | ||
| 436 | and | 168 | and |
| 437 | .Fn EC_POINT_oct2point | 169 | .Fn EC_POINT_copy |
| 438 | first appeared in OpenSSL 0.9.7 and have been available since | 170 | first appeared in OpenSSL 0.9.7 and have been available since |
| 439 | .Ox 3.2 . | 171 | .Ox 3.2 . |
| 440 | .Pp | 172 | .Pp |
| 441 | .Fn EC_POINT_dup , | 173 | .Fn EC_POINT_dup |
| 442 | .Fn EC_POINT_point2bn , | 174 | first appeared in OpenSSL 0.9.8 and has been available since |
| 443 | .Fn EC_POINT_bn2point , | ||
| 444 | .Fn EC_POINT_point2hex , | ||
| 445 | and | ||
| 446 | .Fn EC_POINT_hex2point | ||
| 447 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 448 | .Ox 4.5 . | 175 | .Ox 4.5 . |
| 449 | .Pp | 176 | .Sh BUGS |
| 450 | .Fn EC_POINT_set_affine_coordinates , | 177 | A fundamental flaw in the OpenSSL API toolkit is that |
| 451 | .Fn EC_POINT_get_affine_coordinates , | 178 | .Fn *_new |
| 179 | functions usually create invalid objects that are tricky to | ||
| 180 | turn into valid objects. | ||
| 181 | A fundamental flaw in the EC library is that | ||
| 182 | .Vt EC_POINT | ||
| 183 | objects do not hold a reference to the group they live on | ||
| 184 | despite the fact that | ||
| 185 | .Fn EC_POINT_new | ||
| 186 | has a | ||
| 187 | .Fa group | ||
| 188 | argument. | ||
| 189 | This is difficult to fix because | ||
| 190 | .Vt EC_GROUP | ||
| 191 | objects are not reference counted and | ||
| 192 | because of const qualifiers in the API. | ||
| 193 | This is the root cause for various contortions in the EC library | ||
| 194 | and API. | ||
| 195 | This has security implications because not | ||
| 196 | only does the library not know whether an | ||
| 197 | .Fa EC_POINT | ||
| 198 | object represents a valid point, | ||
| 199 | even if it did know that it would not know on what curve. | ||
| 200 | .Pp | ||
| 201 | The signature of | ||
| 202 | .Fn EC_GROUP_dup | ||
| 203 | is bizarre and the order of | ||
| 204 | .Fa point | ||
| 452 | and | 205 | and |
| 453 | .Fn EC_POINT_set_compressed_coordinates | 206 | .Fa group |
| 454 | first appeared in OpenSSL 1.1.1 and have been available since | 207 | is inconsistent with the rest of the EC API. |
| 455 | .Ox 7.0 . | ||
diff --git a/src/lib/libcrypto/man/EC_POINT_point2oct.3 b/src/lib/libcrypto/man/EC_POINT_point2oct.3 new file mode 100644 index 0000000000..d0663670ee --- /dev/null +++ b/src/lib/libcrypto/man/EC_POINT_point2oct.3 | |||
| @@ -0,0 +1,431 @@ | |||
| 1 | .\" $OpenBSD: EC_POINT_point2oct.3,v 1.1 2025/04/25 19:57:12 tb Exp $ | ||
| 2 | .\" | ||
| 3 | .\" Copyright (c) 2025 Theo Buehler <tb@openbsd.org> | ||
| 4 | .\" | ||
| 5 | .\" Permission to use, copy, modify, and distribute this software for any | ||
| 6 | .\" purpose with or without fee is hereby granted, provided that the above | ||
| 7 | .\" copyright notice and this permission notice appear in all copies. | ||
| 8 | .\" | ||
| 9 | .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | .\" | ||
| 17 | .Dd $Mdocdate: April 25 2025 $ | ||
| 18 | .Dt EC_POINT_POINT2OCT 3 | ||
| 19 | .Os | ||
| 20 | .Sh NAME | ||
| 21 | .Nm EC_POINT_point2oct , | ||
| 22 | .Nm EC_POINT_oct2point , | ||
| 23 | .Nm EC_POINT_point2bn , | ||
| 24 | .Nm EC_POINT_bn2point , | ||
| 25 | .Nm EC_POINT_point2hex , | ||
| 26 | .Nm EC_POINT_hex2point | ||
| 27 | .Nd encode and decode elliptic curve points | ||
| 28 | .Sh SYNOPSIS | ||
| 29 | .In openssl/bn.h | ||
| 30 | .In openssl/ec.h | ||
| 31 | .Bd -literal | ||
| 32 | typedef enum { | ||
| 33 | POINT_CONVERSION_COMPRESSED = 2, | ||
| 34 | POINT_CONVERSION_UNCOMPRESSED = 4, | ||
| 35 | POINT_CONVERSION_HYBRID = 6 | ||
| 36 | } point_conversion_form_t; | ||
| 37 | |||
| 38 | .Ed | ||
| 39 | .Ft size_t | ||
| 40 | .Fo EC_POINT_point2oct | ||
| 41 | .Fa "const EC_GROUP *group" | ||
| 42 | .Fa "const EC_POINT *point" | ||
| 43 | .Fa "point_conversion_form_t form" | ||
| 44 | .Fa "unsigned char *buf" | ||
| 45 | .Fa "size_t len" | ||
| 46 | .Fa "BN_CTX *ctx" | ||
| 47 | .Fc | ||
| 48 | .Ft int | ||
| 49 | .Fo EC_POINT_oct2point | ||
| 50 | .Fa "const EC_GROUP *group" | ||
| 51 | .Fa "EC_POINT *point" | ||
| 52 | .Fa "const unsigned char *buf" | ||
| 53 | .Fa "size_t len" | ||
| 54 | .Fa "BN_CTX *ctx" | ||
| 55 | .Fc | ||
| 56 | .Ft "BIGNUM *" | ||
| 57 | .Fo EC_POINT_point2bn | ||
| 58 | .Fa "const EC_GROUP *group" | ||
| 59 | .Fa "const EC_POINT *point" | ||
| 60 | .Fa "point_conversion_form_t form" | ||
| 61 | .Fa "BIGNUM *bn" | ||
| 62 | .Fa "BN_CTX *ctx" | ||
| 63 | .Fc | ||
| 64 | .Ft "EC_POINT *" | ||
| 65 | .Fo EC_POINT_bn2point | ||
| 66 | .Fa "const EC_GROUP *group" | ||
| 67 | .Fa "const BIGNUM *bn" | ||
| 68 | .Fa "EC_POINT *point" | ||
| 69 | .Fa "BN_CTX *ctx" | ||
| 70 | .Fc | ||
| 71 | .Ft "char *" | ||
| 72 | .Fo EC_POINT_point2hex | ||
| 73 | .Fa "const EC_GROUP *group" | ||
| 74 | .Fa "const EC_POINT *point" | ||
| 75 | .Fa "point_conversion_form_t form" | ||
| 76 | .Fa "BN_CTX *ctx" | ||
| 77 | .Fc | ||
| 78 | .Ft "EC_POINT *" | ||
| 79 | .Fo EC_POINT_hex2point | ||
| 80 | .Fa "const EC_GROUP *group" | ||
| 81 | .Fa "const char *hex" | ||
| 82 | .Fa "EC_POINT *point" | ||
| 83 | .Fa "BN_CTX *ctx" | ||
| 84 | .Fc | ||
| 85 | .Sh DESCRIPTION | ||
| 86 | The | ||
| 87 | .Fa ctx | ||
| 88 | argument of all functions in this manual is optional. | ||
| 89 | .Pp | ||
| 90 | An | ||
| 91 | .Vt EC_POINT | ||
| 92 | object represents a point on the elliptic curve given by an | ||
| 93 | .Vt EC_GROUP | ||
| 94 | object. | ||
| 95 | It is either the point at infinity or it has a representation | ||
| 96 | (x, y) in standard affine coordinates, | ||
| 97 | in which case it satisfies the curve's Weierstrass equation | ||
| 98 | .Dl y^2 = x^3 + ax + b | ||
| 99 | in the prime field of size p. | ||
| 100 | Thus, y is a square root of x^3 + ax + b. | ||
| 101 | Since p > 3 is odd, p - y is another square root | ||
| 102 | with different parity, unless y is zero. | ||
| 103 | Point compression uses that x and the parity of y are enough | ||
| 104 | to compute y using | ||
| 105 | .Xr BN_mod_sqrt 3 . | ||
| 106 | .Pp | ||
| 107 | Field elements are represented as non-negative integers < p | ||
| 108 | in big-endian 2-complement form, zero-padded on the left to the byte | ||
| 109 | length l of p. | ||
| 110 | If X and Y are the representations of x and y, respectively, and P is | ||
| 111 | the parity bit of y, the three encodings of the point (x, y) are | ||
| 112 | the byte strings: | ||
| 113 | .Bl -column "EncodingX" "CompressedX" "UncompressedX" "Hybrid" -offset indent -compact | ||
| 114 | .It Ta Em Compressed Ta Em Uncompressed Ta Em Hybrid | ||
| 115 | .It Encoding Ta 2+P || X Ta 4 || X || Y Ta 6+P || X || Y | ||
| 116 | .It Length Ta 1 + l Ta 1 + 2l Ta 1 + 2l | ||
| 117 | .El | ||
| 118 | where the first octet is the point conversion form | ||
| 119 | combined with the parity bit in the compressed and hybrid encodings. | ||
| 120 | The point at infinity is encoded as a single zero byte. | ||
| 121 | .Pp | ||
| 122 | .Fn EC_POINT_point2oct | ||
| 123 | converts | ||
| 124 | .Fa point | ||
| 125 | into the octet string encoding of type | ||
| 126 | .Fa form . | ||
| 127 | It assumes without checking that | ||
| 128 | .Fa point | ||
| 129 | is a point on the elliptic curve represented by | ||
| 130 | .Fa group | ||
| 131 | and operates in two modes depending on the | ||
| 132 | .Fa buf | ||
| 133 | argument. | ||
| 134 | If | ||
| 135 | .Fa buf | ||
| 136 | is | ||
| 137 | .Dv NULL , | ||
| 138 | .Fn EC_POINT_point2oct | ||
| 139 | returns the length of | ||
| 140 | .Fa point Ns 's | ||
| 141 | encoding of type | ||
| 142 | .Fa form | ||
| 143 | and ignores the | ||
| 144 | .Fa len | ||
| 145 | and | ||
| 146 | .Fa ctx | ||
| 147 | arguments. | ||
| 148 | If | ||
| 149 | .Fa buf | ||
| 150 | is not | ||
| 151 | .Dv NULL | ||
| 152 | and its length | ||
| 153 | .Fa len | ||
| 154 | is sufficiently big, | ||
| 155 | .Fn EC_POINT_point2oct 3 | ||
| 156 | writes the | ||
| 157 | .Fa point Ns 's | ||
| 158 | encoding of type | ||
| 159 | .Fa form | ||
| 160 | to | ||
| 161 | .Fa buf | ||
| 162 | and returns the number of bytes written. | ||
| 163 | Unless | ||
| 164 | .Fa point | ||
| 165 | is the point at infinity, the coordinates to be encoded are calculated using | ||
| 166 | .Xr EC_POINT_get_affine_coordinates 3 . | ||
| 167 | .Pp | ||
| 168 | .Fn EC_POINT_oct2point | ||
| 169 | decodes the octet string representation of a point on | ||
| 170 | .Fa group | ||
| 171 | in | ||
| 172 | .Fa buf | ||
| 173 | of size | ||
| 174 | .Fa len | ||
| 175 | and, if it represents a point on | ||
| 176 | .Fa group , | ||
| 177 | sets it on the caller-provided | ||
| 178 | .Fa point | ||
| 179 | using | ||
| 180 | .Xr EC_POINT_set_to_infinity 3 | ||
| 181 | .Xr EC_POINT_set_compressed_coordinates 3 , | ||
| 182 | or | ||
| 183 | .Xr EC_POINT_set_affine_coordinates 3 . | ||
| 184 | For hybrid encoding the consistency of | ||
| 185 | the parity bit in the leading octet is verified. | ||
| 186 | .Pp | ||
| 187 | .Fn EC_POINT_point2bn | ||
| 188 | returns a | ||
| 189 | .Vt BIGNUM | ||
| 190 | containing the encoding of type | ||
| 191 | .Fa form | ||
| 192 | of the | ||
| 193 | .Fa point | ||
| 194 | on | ||
| 195 | .Fa group . | ||
| 196 | If | ||
| 197 | .Fa bn | ||
| 198 | is | ||
| 199 | .Dv NULL , | ||
| 200 | this | ||
| 201 | .Vt BIGNUM | ||
| 202 | is newly allocated, otherwise the result is copied into | ||
| 203 | .Fa bn | ||
| 204 | and returned. | ||
| 205 | .Fn EC_POINT_point2bn | ||
| 206 | is equivalent to | ||
| 207 | .Fn EC_POINT_point2oct | ||
| 208 | followed by | ||
| 209 | .Xr BN_bin2bn 3 . | ||
| 210 | .Pp | ||
| 211 | .Fn EC_POINT_bn2point | ||
| 212 | assumes that | ||
| 213 | .Fa bn | ||
| 214 | contains the encoding of a point on | ||
| 215 | .Fa group . | ||
| 216 | If | ||
| 217 | .Fa point | ||
| 218 | is | ||
| 219 | .Dv NULL , | ||
| 220 | the result is placed in a newly allocated | ||
| 221 | .Vt EC_POINT , | ||
| 222 | otherwise the result is placed in | ||
| 223 | .Fa point | ||
| 224 | which is then returned. | ||
| 225 | .Fn EC_POINT_bn2point | ||
| 226 | is equivalent to | ||
| 227 | .Xr BN_bn2bin 3 | ||
| 228 | followed by | ||
| 229 | .Fn EC_POINT_oct2point . | ||
| 230 | .Pp | ||
| 231 | .Fn EC_POINT_point2hex | ||
| 232 | returns a printable string containing the hexadecimal encoding of | ||
| 233 | the point encoding of type | ||
| 234 | .Fa form | ||
| 235 | of the | ||
| 236 | .Fa point | ||
| 237 | on | ||
| 238 | .Fa group . | ||
| 239 | The string must be freed by the caller using | ||
| 240 | .Xr free 3 . | ||
| 241 | .Fn EC_POINT_point2hex | ||
| 242 | is equivalent to | ||
| 243 | .Fn EC_POINT_point2bn | ||
| 244 | followed by | ||
| 245 | .Fn BN_bn2hex 3 . | ||
| 246 | .Pp | ||
| 247 | .Fn EC_POINT_hex2point | ||
| 248 | interprets | ||
| 249 | .Fa hex | ||
| 250 | as a hexadecimal encoding of the point encoding of a point on | ||
| 251 | .Fa group . | ||
| 252 | If | ||
| 253 | .Fa point | ||
| 254 | is | ||
| 255 | .Dv NULL , | ||
| 256 | the result is returned in a newly allocated | ||
| 257 | .Vt EC_POINT , | ||
| 258 | otherwise the result is copied into | ||
| 259 | .Fa point , | ||
| 260 | which is then returned. | ||
| 261 | .Fn EC_POINT_hex2point | ||
| 262 | is equivalent to | ||
| 263 | .Xr BN_hex2bn 3 | ||
| 264 | followed by | ||
| 265 | .Fn EC_POINT_bn2point . | ||
| 266 | .Sh RETURN VALUES | ||
| 267 | If | ||
| 268 | .Fa buf | ||
| 269 | is | ||
| 270 | .Dv NULL , | ||
| 271 | .Fn EC_POINT_point2oct | ||
| 272 | returns the length needed to encode the | ||
| 273 | .Fa point | ||
| 274 | on | ||
| 275 | .Fa group , | ||
| 276 | or 0 on error. | ||
| 277 | If | ||
| 278 | .Fa buf | ||
| 279 | is not | ||
| 280 | .Dv NULL , | ||
| 281 | .Fn EC_POINT_point2oct | ||
| 282 | returns the number of bytes written to | ||
| 283 | .Fa buf | ||
| 284 | or 0 on error. | ||
| 285 | Error conditions include that | ||
| 286 | .Fa form | ||
| 287 | is invalid, | ||
| 288 | .Fa len | ||
| 289 | is too small, and memory allocation failure. | ||
| 290 | .Pp | ||
| 291 | .Fn EC_POINT_oct2point | ||
| 292 | returns 1 on success and 0 on error. | ||
| 293 | Error conditions include invalid encoding, | ||
| 294 | .Fa buf | ||
| 295 | does not represent a point on | ||
| 296 | .Fa group , | ||
| 297 | or memory allocation failure. | ||
| 298 | .Pp | ||
| 299 | .Fn EC_POINT_point2bn | ||
| 300 | returns a | ||
| 301 | .Vt BIGNUM | ||
| 302 | containing the encoding of | ||
| 303 | .Fa point | ||
| 304 | or | ||
| 305 | .Dv NULL | ||
| 306 | on error. | ||
| 307 | The returned | ||
| 308 | .Vt BIGNUM | ||
| 309 | is either | ||
| 310 | .Fa in_bn | ||
| 311 | or a newly allocated one which must be freed by the caller. | ||
| 312 | Error conditions include those of | ||
| 313 | .Fn EC_POINT_point2oct , | ||
| 314 | .Xr BN_bn2bin 3 , | ||
| 315 | or memory allocation failure. | ||
| 316 | .Pp | ||
| 317 | .Fn EC_POINT_bn2point | ||
| 318 | returns an | ||
| 319 | .Vt EC_POINT | ||
| 320 | corresponding to the encoding in | ||
| 321 | .Fa bn | ||
| 322 | or | ||
| 323 | .Dv NULL | ||
| 324 | on error. | ||
| 325 | The returned | ||
| 326 | .Vt EC_POINT | ||
| 327 | is either | ||
| 328 | .Fa in_point | ||
| 329 | or a newly allocated one which must be freed by the caller. | ||
| 330 | Error conditions include those of | ||
| 331 | .Xr BN_bn2bin 3 , | ||
| 332 | .Fn EC_POINT_oct2point , | ||
| 333 | or memory allocation failure. | ||
| 334 | .Pp | ||
| 335 | .Fn EC_POINT_point2hex | ||
| 336 | returns a newly allocated string or | ||
| 337 | .Dv NULL | ||
| 338 | on error. | ||
| 339 | Error conditions include those of | ||
| 340 | .Fn EC_POINT_point2bn | ||
| 341 | or | ||
| 342 | .Xr BN_bn2hex 3 . | ||
| 343 | .Pp | ||
| 344 | .Fn EC_POINT_hex2point | ||
| 345 | returns an | ||
| 346 | .Vt EC_POINT | ||
| 347 | containing the decoded point on | ||
| 348 | .Fa group | ||
| 349 | or | ||
| 350 | .Dv NULL | ||
| 351 | on error. | ||
| 352 | The returned | ||
| 353 | .Vt EC_POINT | ||
| 354 | is either | ||
| 355 | .Fa in_point | ||
| 356 | or a newly allocated one which must be freed by the caller. | ||
| 357 | Error conditions are those of | ||
| 358 | .Xr BN_hex2bn 3 , | ||
| 359 | or | ||
| 360 | .Fn EC_POINT_bn2point . | ||
| 361 | .Sh SEE ALSO | ||
| 362 | .Xr BN_mod_sqrt 3 , | ||
| 363 | .Xr BN_new 3 , | ||
| 364 | .Xr BN_num_bits 3 , | ||
| 365 | .Xr crypto 3 , | ||
| 366 | .Xr d2i_ECPKParameters 3 , | ||
| 367 | .Xr EC_GROUP_check 3 , | ||
| 368 | .Xr EC_GROUP_get_curve_name 3 , | ||
| 369 | .Xr EC_GROUP_new_by_curve_name 3 , | ||
| 370 | .Xr EC_GROUP_new_curve_GFp 3 , | ||
| 371 | .Xr EC_KEY_METHOD_new 3 , | ||
| 372 | .Xr EC_KEY_new 3 , | ||
| 373 | .Xr EC_POINT_add 3 , | ||
| 374 | .Xr EC_POINT_get_affine_coordinates 3 , | ||
| 375 | .Xr EC_POINT_new 3 , | ||
| 376 | .Xr ECDH_compute_key 3 , | ||
| 377 | .Xr ECDSA_SIG_new 3 | ||
| 378 | .Sh STANDARDS | ||
| 379 | .Rs | ||
| 380 | .%T SEC 1: Elliptic Curve Cryptography, Version 2.0 | ||
| 381 | .%U https://www.secg.org/sec1-v2.pdf | ||
| 382 | .%D May 21, 2009 | ||
| 383 | .Re | ||
| 384 | .Sh HISTORY | ||
| 385 | .Fn EC_POINT_point2oct | ||
| 386 | and | ||
| 387 | .Fn EC_POINT_oct2point | ||
| 388 | first appeared in OpenSSL 0.9.7 and have been available since | ||
| 389 | .Ox 3.2 . | ||
| 390 | .Pp | ||
| 391 | .Fn EC_POINT_point2bn , | ||
| 392 | .Fn EC_POINT_bn2point , | ||
| 393 | .Fn EC_POINT_point2hex , | ||
| 394 | and | ||
| 395 | .Fn EC_POINT_hex2point | ||
| 396 | first appeared in OpenSSL 0.9.8 and have been available since | ||
| 397 | .Ox 4.5 . | ||
| 398 | .Sh BUGS | ||
| 399 | The | ||
| 400 | .Vt point_conversion_form_t | ||
| 401 | is not properly exposed in the API. | ||
| 402 | There is no representation for the point at infinity nor is there | ||
| 403 | an API interface for the parity bit, | ||
| 404 | forcing applications to invent their own and do bit twiddling in buffers. | ||
| 405 | .Pp | ||
| 406 | The poorly chosen signatures of the functions in this manual result | ||
| 407 | in an unergonomic API, particularly so for | ||
| 408 | .Fn EC_POINT_point2oct | ||
| 409 | and | ||
| 410 | .Fn EC_POINT_oct2point . | ||
| 411 | Due to fundamental misdesign in the EC library, | ||
| 412 | points are not directly linked to the curve they live on. | ||
| 413 | Adding checks that | ||
| 414 | .Fa point | ||
| 415 | lives on | ||
| 416 | .Fa group | ||
| 417 | is too expensive and intrusive, so it is and will continue to be easy | ||
| 418 | to make the EC_POINT_point2* API output nonsense. | ||
| 419 | .Pp | ||
| 420 | .Fn EC_POINT_point2bn | ||
| 421 | and | ||
| 422 | .Fn EC_POINT_bn2point | ||
| 423 | make no sense. | ||
| 424 | They abuse | ||
| 425 | .Vt BIGNUM | ||
| 426 | as a vector type, which is in poor taste. | ||
| 427 | .Pp | ||
| 428 | .Fn EC_POINT_point2hex | ||
| 429 | and | ||
| 430 | .Fn EC_POINT_hex2point | ||
| 431 | use a non-standard encoding format. | ||
diff --git a/src/lib/libcrypto/man/Makefile b/src/lib/libcrypto/man/Makefile index 9f3d448432..b8dfe86d49 100644 --- a/src/lib/libcrypto/man/Makefile +++ b/src/lib/libcrypto/man/Makefile | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # $OpenBSD: Makefile,v 1.307 2025/03/08 17:12:55 tb Exp $ | 1 | # $OpenBSD: Makefile,v 1.308 2025/04/25 19:57:12 tb Exp $ |
| 2 | 2 | ||
| 3 | .include <bsd.own.mk> | 3 | .include <bsd.own.mk> |
| 4 | 4 | ||
| @@ -133,12 +133,16 @@ MAN= \ | |||
| 133 | DSA_size.3 \ | 133 | DSA_size.3 \ |
| 134 | ECDH_compute_key.3 \ | 134 | ECDH_compute_key.3 \ |
| 135 | ECDSA_SIG_new.3 \ | 135 | ECDSA_SIG_new.3 \ |
| 136 | EC_GROUP_copy.3 \ | 136 | EC_GROUP_check.3 \ |
| 137 | EC_GROUP_new.3 \ | 137 | EC_GROUP_get_curve_name.3 \ |
| 138 | EC_GROUP_new_by_curve_name.3 \ | ||
| 139 | EC_GROUP_new_curve_GFp.3 \ | ||
| 138 | EC_KEY_METHOD_new.3 \ | 140 | EC_KEY_METHOD_new.3 \ |
| 139 | EC_KEY_new.3 \ | 141 | EC_KEY_new.3 \ |
| 140 | EC_POINT_add.3 \ | 142 | EC_POINT_add.3 \ |
| 143 | EC_POINT_get_affine_coordinates.3 \ | ||
| 141 | EC_POINT_new.3 \ | 144 | EC_POINT_new.3 \ |
| 145 | EC_POINT_point2oct.3 \ | ||
| 142 | ENGINE_new.3 \ | 146 | ENGINE_new.3 \ |
| 143 | ERR.3 \ | 147 | ERR.3 \ |
| 144 | ERR_GET_LIB.3 \ | 148 | ERR_GET_LIB.3 \ |
