]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/man/EC_POINT_new.3
Regen manual pages.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / man / EC_POINT_new.3
1 .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 .    ds C`
42 .    ds C'
43 'br\}
44 .\"
45 .\" Escape single quotes in literal strings from groff's Unicode transform.
46 .ie \n(.g .ds Aq \(aq
47 .el       .ds Aq '
48 .\"
49 .\" If the F register is >0, we'll generate index entries on stderr for
50 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51 .\" entries marked with X<> in POD.  Of course, you'll have to process the
52 .\" output yourself in some meaningful fashion.
53 .\"
54 .\" Avoid warning from groff about undefined register 'F'.
55 .de IX
56 ..
57 .if !\nF .nr F 0
58 .if \nF>0 \{\
59 .    de IX
60 .    tm Index:\\$1\t\\n%\t"\\$2"
61 ..
62 .    if !\nF==2 \{\
63 .        nr % 0
64 .        nr F 2
65 .    \}
66 .\}
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "EC_POINT_NEW 3"
132 .TH EC_POINT_NEW 3 "2018-09-11" "1.1.1" "OpenSSL"
133 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
134 .\" way too many mistakes in technical documents.
135 .if n .ad l
136 .nh
137 .SH "NAME"
138 EC_POINT_set_Jprojective_coordinates_GFp, EC_POINT_point2buf, EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates, EC_POINT_get_affine_coordinates, EC_POINT_set_compressed_coordinates, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point \&\- Functions for creating, destroying and manipulating EC_POINT objects
139 .SH "SYNOPSIS"
140 .IX Header "SYNOPSIS"
141 .Vb 1
142 \& #include <openssl/ec.h>
143 \&
144 \& EC_POINT *EC_POINT_new(const EC_GROUP *group);
145 \& void EC_POINT_free(EC_POINT *point);
146 \& void EC_POINT_clear_free(EC_POINT *point);
147 \& int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
148 \& EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
149 \& const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
150 \& int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
151 \& int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group,
152 \&                                              EC_POINT *p,
153 \&                                              const BIGNUM *x, const BIGNUM *y,
154 \&                                              const BIGNUM *z, BN_CTX *ctx);
155 \& int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
156 \&                                              const EC_POINT *p,
157 \&                                              BIGNUM *x, BIGNUM *y, BIGNUM *z,
158 \&                                              BN_CTX *ctx);
159 \& int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p,
160 \&                                     const BIGNUM *x, const BIGNUM *y,
161 \&                                     BN_CTX *ctx);
162 \& int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p,
163 \&                                     BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
164 \& int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p,
165 \&                                         const BIGNUM *x, int y_bit,
166 \&                                         BN_CTX *ctx);
167 \& int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
168 \&                                         const BIGNUM *x, const BIGNUM *y,
169 \&                                         BN_CTX *ctx);
170 \& int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
171 \&                                         const EC_POINT *p,
172 \&                                         BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
173 \& int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
174 \&                                             EC_POINT *p,
175 \&                                             const BIGNUM *x, int y_bit,
176 \&                                             BN_CTX *ctx);
177 \& int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
178 \&                                          const BIGNUM *x, const BIGNUM *y,
179 \&                                          BN_CTX *ctx);
180 \& int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
181 \&                                          const EC_POINT *p,
182 \&                                          BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
183 \& int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group,
184 \&                                              EC_POINT *p,
185 \&                                              const BIGNUM *x, int y_bit,
186 \&                                              BN_CTX *ctx);
187 \& size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
188 \&                           point_conversion_form_t form,
189 \&                           unsigned char *buf, size_t len, BN_CTX *ctx);
190 \& size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point,
191 \&                           point_conversion_form_t form,
192 \&                           unsigned char **pbuf, BN_CTX *ctx);
193 \& int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
194 \&                        const unsigned char *buf, size_t len, BN_CTX *ctx);
195 \& BIGNUM *EC_POINT_point2bn(const EC_GROUP *group, const EC_POINT *p,
196 \&                           point_conversion_form_t form, BIGNUM *bn,
197 \&                           BN_CTX *ctx);
198 \& EC_POINT *EC_POINT_bn2point(const EC_GROUP *group, const BIGNUM *bn,
199 \&                             EC_POINT *p, BN_CTX *ctx);
200 \& char *EC_POINT_point2hex(const EC_GROUP *group, const EC_POINT *p,
201 \&                          point_conversion_form_t form, BN_CTX *ctx);
202 \& EC_POINT *EC_POINT_hex2point(const EC_GROUP *group, const char *hex,
203 \&                              EC_POINT *p, BN_CTX *ctx);
204 .Ve
205 .SH "DESCRIPTION"
206 .IX Header "DESCRIPTION"
207 An \fB\s-1EC_POINT\s0\fR structure represents a point on a curve. A new point is
208 constructed by calling the function \fIEC_POINT_new()\fR and providing the
209 \&\fBgroup\fR object that the point relates to.
210 .PP
211 \&\fIEC_POINT_free()\fR frees the memory associated with the \fB\s-1EC_POINT\s0\fR.
212 if \fBpoint\fR is \s-1NULL\s0 nothing is done.
213 .PP
214 \&\fIEC_POINT_clear_free()\fR destroys any sensitive data held within the \s-1EC_POINT\s0 and
215 then frees its memory. If \fBpoint\fR is \s-1NULL\s0 nothing is done.
216 .PP
217 \&\fIEC_POINT_copy()\fR copies the point \fBsrc\fR into \fBdst\fR. Both \fBsrc\fR and \fBdst\fR
218 must use the same \fB\s-1EC_METHOD\s0\fR.
219 .PP
220 \&\fIEC_POINT_dup()\fR creates a new \fB\s-1EC_POINT\s0\fR object and copies the content from
221 \&\fBsrc\fR to the newly created \fB\s-1EC_POINT\s0\fR object.
222 .PP
223 \&\fIEC_POINT_method_of()\fR obtains the \fB\s-1EC_METHOD\s0\fR associated with \fBpoint\fR.
224 .PP
225 A valid point on a curve is the special point at infinity. A point is set to
226 be at infinity by calling \fIEC_POINT_set_to_infinity()\fR.
227 .PP
228 The affine co-ordinates for a point describe a point in terms of its x and y
229 position. The function \fIEC_POINT_set_affine_coordinates()\fR sets the \fBx\fR and \fBy\fR
230 co-ordinates for the point \fBp\fR defined over the curve given in \fBgroup\fR. The
231 function \fIEC_POINT_get_affine_coordinates()\fR sets \fBx\fR and \fBy\fR, either of which
232 may be \s-1NULL,\s0 to the corresponding coordinates of \fBp\fR.
233 .PP
234 The functions \fIEC_POINT_set_affine_coordinates_GFp()\fR and
235 \&\fIEC_POINT_set_affine_coordinates_GF2m()\fR are synonyms for
236 \&\fIEC_POINT_set_affine_coordinates()\fR. They are defined for backwards compatibility
237 only and should not be used.
238 .PP
239 The functions \fIEC_POINT_get_affine_coordinates_GFp()\fR and
240 \&\fIEC_POINT_get_affine_coordinates_GF2m()\fR are synonyms for
241 \&\fIEC_POINT_get_affine_coordinates()\fR. They are defined for backwards compatibility
242 only and should not be used.
243 .PP
244 As well as the affine co-ordinates, a point can alternatively be described in
245 terms of its Jacobian projective co-ordinates (for Fp curves only). Jacobian
246 projective co-ordinates are expressed as three values x, y and z. Working in
247 this co-ordinate system provides more efficient point multiplication
248 operations.  A mapping exists between Jacobian projective co-ordinates and
249 affine co-ordinates. A Jacobian projective co-ordinate (x, y, z) can be written
250 as an affine co-ordinate as (x/(z^2), y/(z^3)). Conversion to Jacobian
251 projective from affine co-ordinates is simple. The co-ordinate (x, y) is mapped
252 to (x, y, 1). To set or get the projective co-ordinates use
253 \&\fIEC_POINT_set_Jprojective_coordinates_GFp()\fR and
254 \&\fIEC_POINT_get_Jprojective_coordinates_GFp()\fR respectively.
255 .PP
256 Points can also be described in terms of their compressed co-ordinates. For a
257 point (x, y), for any given value for x such that the point is on the curve
258 there will only ever be two possible values for y. Therefore a point can be set
259 using the \fIEC_POINT_set_compressed_coordinates()\fR function where \fBx\fR is the x
260 co-ordinate and \fBy_bit\fR is a value 0 or 1 to identify which of the two
261 possible values for y should be used.
262 .PP
263 The functions \fIEC_POINT_set_compressed_coordinates_GFp()\fR and
264 \&\fIEC_POINT_set_compressed_coordinates_GF2m()\fR are synonyms for
265 \&\fIEC_POINT_set_compressed_coordinates()\fR. They are defined for backwards
266 compatibility only and should not be used.
267 .PP
268 In addition \fB\s-1EC_POINT\s0\fR can be converted to and from various external
269 representations. The octet form is the binary encoding of the \fBECPoint\fR
270 structure (as defined in \s-1RFC5480\s0 and used in certificates and \s-1TLS\s0 records):
271 only the content octets are present, the \fB\s-1OCTET STRING\s0\fR tag and length are
272 not included. \fB\s-1BIGNUM\s0\fR form is the octet form interpreted as a big endian
273 integer converted to a \fB\s-1BIGNUM\s0\fR structure. Hexadecimal form is the octet
274 form converted to a \s-1NULL\s0 terminated character string where each character
275 is one of the printable values 0\-9 or A\-F (or a\-f).
276 .PP
277 The functions \fIEC_POINT_point2oct()\fR, \fIEC_POINT_oct2point()\fR, \fIEC_POINT_point2bn()\fR,
278 \&\fIEC_POINT_bn2point()\fR, \fIEC_POINT_point2hex()\fR and \fIEC_POINT_hex2point()\fR convert from
279 and to EC_POINTs for the formats: octet, \s-1BIGNUM\s0 and hexadecimal respectively.
280 .PP
281 The function \fIEC_POINT_point2oct()\fR must be supplied with a buffer long enough to
282 store the octet form. The return value provides the number of octets stored.
283 Calling the function with a \s-1NULL\s0 buffer will not perform the conversion but
284 will still return the required buffer length.
285 .PP
286 The function \fIEC_POINT_point2buf()\fR allocates a buffer of suitable length and
287 writes an \s-1EC_POINT\s0 to it in octet format. The allocated buffer is written to
288 \&\fB*pbuf\fR and its length is returned. The caller must free up the allocated
289 buffer with a call to \fIOPENSSL_free()\fR. Since the allocated buffer value is
290 written to \fB*pbuf\fR the \fBpbuf\fR parameter \fB\s-1MUST NOT\s0\fR be \fB\s-1NULL\s0\fR.
291 .PP
292 The function \fIEC_POINT_point2hex()\fR will allocate sufficient memory to store the
293 hexadecimal string. It is the caller's responsibility to free this memory with
294 a subsequent call to \fIOPENSSL_free()\fR.
295 .SH "RETURN VALUES"
296 .IX Header "RETURN VALUES"
297 \&\fIEC_POINT_new()\fR and \fIEC_POINT_dup()\fR return the newly allocated \s-1EC_POINT\s0 or \s-1NULL\s0
298 on error.
299 .PP
300 The following functions return 1 on success or 0 on error: \fIEC_POINT_copy()\fR,
301 \&\fIEC_POINT_set_to_infinity()\fR, \fIEC_POINT_set_Jprojective_coordinates_GFp()\fR,
302 \&\fIEC_POINT_get_Jprojective_coordinates_GFp()\fR,
303 \&\fIEC_POINT_set_affine_coordinates_GFp()\fR, \fIEC_POINT_get_affine_coordinates_GFp()\fR,
304 \&\fIEC_POINT_set_compressed_coordinates_GFp()\fR,
305 \&\fIEC_POINT_set_affine_coordinates_GF2m()\fR, \fIEC_POINT_get_affine_coordinates_GF2m()\fR,
306 \&\fIEC_POINT_set_compressed_coordinates_GF2m()\fR and \fIEC_POINT_oct2point()\fR.
307 .PP
308 EC_POINT_method_of returns the \s-1EC_METHOD\s0 associated with the supplied \s-1EC_POINT.\s0
309 .PP
310 \&\fIEC_POINT_point2oct()\fR and \fIEC_POINT_point2buf()\fR return the length of the required
311 buffer or 0 on error.
312 .PP
313 \&\fIEC_POINT_point2bn()\fR returns the pointer to the \s-1BIGNUM\s0 supplied, or \s-1NULL\s0 on
314 error.
315 .PP
316 \&\fIEC_POINT_bn2point()\fR returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on
317 error.
318 .PP
319 \&\fIEC_POINT_point2hex()\fR returns a pointer to the hex string, or \s-1NULL\s0 on error.
320 .PP
321 \&\fIEC_POINT_hex2point()\fR returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on
322 error.
323 .SH "SEE ALSO"
324 .IX Header "SEE ALSO"
325 \&\fIcrypto\fR\|(7), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
326 \&\fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
327 \&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
328 .SH "COPYRIGHT"
329 .IX Header "COPYRIGHT"
330 Copyright 2013\-2018 The OpenSSL Project Authors. All Rights Reserved.
331 .PP
332 Licensed under the OpenSSL license (the \*(L"License\*(R").  You may not use
333 this file except in compliance with the License.  You can obtain a copy
334 in the file \s-1LICENSE\s0 in the source distribution or at
335 <https://www.openssl.org/source/license.html>.