1Crypt::OpenSSL::EC(3) User Contributed Perl DocumentationCrypt::OpenSSL::EC(3)
2
3
4

NAME

6       Crypt::OpenSSL::EC - Perl extension for OpenSSL EC (Elliptic Curves)
7       library
8

SYNOPSIS

10          use Crypt::OpenSSL::EC;
11          use Crypt::OpenSSL::Bignum::CTX;
12
13          # Use of $ctx is optional in all calls, here we demonstrate its use.
14          # If it is provided it will increase performance.
15          my $ctx = Crypt::OpenSSL::Bignum::CTX->new();
16
17          my $method = Crypt::OpenSSL::EC::EC_GFp_mont_method();
18          my $group = Crypt::OpenSSL::EC::EC_GROUP::new($method);
19          Crypt::OpenSSL::EC::EC_GROUP::set_curve_GFp($group, $p, $a, $b, $ctx);
20          my $method = Crypt::OpenSSL::EC::EC_GROUP::method_of($group);
21          Crypt::OpenSSL::EC::EC_GROUP::copy($tmp, $group);
22          Crypt::OpenSSL::EC::EC_GROUP::get_curve_GFp($group, $p, $a, $b, $ctx);
23
24          $Crypt::OpenSSL::EC::trace = 1;
25          Crypt::OpenSSL::EC::print_errs();
26          my $P = Crypt::OpenSSL::EC::EC_POINT::new($group);
27
28
29          Crypt::OpenSSL::EC::EC_POINT_set_to_infinity($group, $P);
30          my $bool = Crypt::OpenSSL::EC::EC_POINT::is_at_infinity($group, $P);
31
32          my $buf = Crypt::OpenSSL::EC::EC_POINT::point2oct($group, $Q, &Crypt::OpenSSL::EC::POINT_CONVERSION_COMPRESSED, $ctx);
33          Crypt::OpenSSL::EC::EC_POINT::oct2point($group, $P, $buf, $ctx);
34          Crypt::OpenSSL::EC::EC_POINT::add($group, $P, $P, $Q, $ctx);
35
36          Crypt::OpenSSL::EC::EC_POINT::set_compressed_coordinates_GFp($group, $Q, $x, 1, $ctx));
37          my $bool = Crypt::OpenSSL::EC::EC_POINT::is_on_curve($group, $Q, $ctx));
38          Crypt::OpenSSL::EC::EC_POINT::copy($R, $P);
39          my $result = Crypt::OpenSSL::EC::EC_POINT::cmp($group, $P, $Q, $ctx);
40          Crypt::OpenSSL::EC::EC_POINT::set_affine_coordinates_GFp($group, $P, $x, $y, $ctx);
41          Crypt::OpenSSL::EC::EC_POINT::get_affine_coordinates_GFp($group, $P, $x, $y, $ctx);
42          Crypt::OpenSSL::EC::EC_GROUP::set_generator($group, $P, $z, Crypt::OpenSSL::Bignum->one());
43          my $degree = Crypt::OpenSSL::EC::EC_GROUP::get_degree($group)
44          my $order = Crypt::OpenSSL::EC::EC_GROUP::get_order($group, $order, $ctx);
45          Crypt::OpenSSL::EC::EC_POINT::mul($group, $Q, $order, $P, $n1, $ctx));
46          Crypt::OpenSSL::EC::EC_POINT::free($P);
47          Crypt::OpenSSL::EC::EC_GROUP::free($group);
48

DESCRIPTION

50       This module provides a standard (non-OO) interface to the OpenSSL EC
51       (Elliptic Curve) library.  Some OO Calls are supported.
52
53       Most of the functions described in openssl/ec.h are supported.
54
55       It provides the Crypt::OpenSSL::EC class which defines some high level
56       functions and constants.  At also provides 4 other classes for managing
57       EC objects:
58
59       Crypt::OpenSSL::EC::EC_GROUP
60       Crypt::OpenSSL::EC::EC_POINT
61       Crypt::OpenSSL::EC::EC_KEY
62       Crypt::OpenSSL::EC::EC_METHOD
63
64       All objects created by these 4 classes are implemented as blessed Perl
65       mortal references.  This ensures they will be auto-destroyed when the
66       Perl variable becomes unreferenced. ASlo the approproae EC free
67       function wil be called to free the underlying EC object.
68
69       Further, it means that many of the functions below can be called using
70       O-O methods.  If a method's first argument is the same as the class the
71       method is in, then it can be called O-O style. For example the
72       following 2 calls are equivalent:
73
74       my $newgroup = Crypt::OpenSSL::EC::EC_GROUP::dup($group);
75       my $newgroup = $group->dup();
76       Crypt::OpenSSL::EC::EC_GFp_simple_method();
77           Returns the basic GFp ec methods which provides the basis for the
78           optimized methods.
79
80       Crypt::OpenSSL::EC::EC_GFp_mont_method();
81           Returns GFp methods using montgomery multiplication.
82
83       Crypt::OpenSSL::EC::EC_GFp_nist_method();
84           Returns GFp methods using optimized methods for NIST recommended
85           curves
86
87       Crypt::OpenSSL::EC::EC_GF2m_simple_method();
88           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
89
90           Returns the basic GF2m ec method
91
92       Crypt::OpenSSL::EC::EC_GROUP::new($method);
93           Creates a new EC_GROUP object $method is the method to use
94
95       Crypt::OpenSSL::EC::EC_GROUP::set_curve_GFp($group, $p, $a, $b, $ctx);
96           Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b
97             group  EC_GROUP object
98             p      BIGNUM with the prime number
99             a      BIGNUM with parameter a of the equation
100             b      BIGNUM with parameter b of the equation
101             ctx    BN_CTX object (optional)
102            return 1 on success and 0 if an error occurred
103
104       Crypt::OpenSSL::EC::EC_GROUP::method_of($group);
105           Returns the EC_METHOD of the EC_GROUP object.
106
107       Crypt::OpenSSL::EC::EC_METHOD::get_field_type($method)
108           Returns the field type of the EC_METHOD.
109
110       Crypt::OpenSSL::EC::EC_GROUP::copy($dst, $src);
111           Copies EC_GROUP objects. Note: both EC_GROUPs must use the same
112           EC_METHOD.  return newly created EC_GROUP object or NULL in case of
113           an error.
114
115       Crypt::OpenSSL::EC::EC_GROUP::dup($src);
116           Creates a new EC_GROUP object and copies the copies the content
117           form src to the newly created EC_GROUP object.  return newly
118           created EC_GROUP object or NULL in case of an error.
119
120       Crypt::OpenSSL::EC::EC_GROUP::get_curve_GFp($group, $p, $a, $b, $ctx);
121           Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x +
122           b
123             group  EC_GROUP object
124             p      BIGNUM for the prime number
125             a      BIGNUM for parameter a of the equation
126             b      BIGNUM for parameter b of the equation
127             ctx    BN_CTX object (optional)
128            return 1 on success and 0 if an error occurred
129
130       Crypt::OpenSSL::EC::EC_GROUP::set_curve_GF2m($group, $p, $a, $b, $ctx);
131           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
132
133           Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 +
134           a*x^2 + b
135             group  EC_GROUP object
136             p      BIGNUM with the polynomial defining the underlying field
137             a      BIGNUM with parameter a of the equation
138             b      BIGNUM with parameter b of the equation
139             ctx    BN_CTX object (optional)
140             return 1 on success and 0 if an error occurred
141
142       Crypt::OpenSSL::EC::EC_GROUP::get_curve_GF2m($group, $p, $a, $b, $ctx);
143           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
144
145           Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 +
146           a*x^2 + b
147             group  EC_GROUP object
148             p      BIGNUM for the polynomial defining the underlying field
149             a      BIGNUM for parameter a of the equation
150             b      BIGNUM for parameter b of the equation
151             ctx    BN_CTX object (optional)
152             return 1 on success and 0 if an error occurred
153
154       Crypt::OpenSSL::EC::print_errs();
155       Crypt::OpenSSL::EC::EC_POINT::new($group);
156           Creates a new EC_POINT object for the specified EC_GROUP
157             group  EC_GROUP the underlying EC_GROUP object
158             return newly created EC_POINT object or NULL if an error occurred
159
160       Crypt::OpenSSL::EC::EC_POINT::free($point);
161           Frees a EC_POINT object
162             point  EC_POINT object to be freed This should normally not be
163           called from Perl, since EC_POINT objects created by this library
164           are auto-destroyed when they become unreferenced.
165
166       Crypt::OpenSSL::EC::EC_POINT::clear_free($point);
167           Clears and frees a EC_POINT object
168             point  EC_POINT object to be cleared and freed This should
169           normally not be called from Perl, since EC_POINT objects created by
170           this library are auto-destroyed when they become unreferenced.
171
172       Crypt::OpenSSL::EC::EC_POINT::copy($dst, $src);
173           Copies EC_POINT object
174             dst  destination EC_POINT object
175             src  source EC_POINT object
176             return 1 on success and 0 if an error occurred
177
178       Crypt::OpenSSL::EC::EC_POINT::dup($src, $group);
179           Creates a new EC_POINT object and copies the content of the
180           supplied EC_POINT
181             src    source EC_POINT object
182             group  underlying the EC_GROUP object
183             return newly created EC_POINT object or NULL if an error occurred
184
185       Crypt::OpenSSL::EC::EC_POINT::set_to_infinity($group, $point);
186           Sets a point to infinity (neutral element)
187             group  underlying EC_GROUP object
188             point  EC_POINT to set to infinity
189             return 1 on success and 0 if an error occurred
190
191       Crypt::OpenSSL::EC::EC_POINT::get_Jprojective_coordinates_GFp($group,
192       $p, $x, $y, $z, $ctx);
193           Gets the jacobian projective coordinates of a EC_POINT over GFp
194             group  underlying EC_GROUP object
195             p      EC_POINT object
196             x      BIGNUM for the x-coordinate
197             y      BIGNUM for the y-coordinate
198             z      BIGNUM for the z-coordinate
199             ctx    BN_CTX object (optional)
200             return 1 on success and 0 if an error occurred
201
202       Crypt::OpenSSL::EC::EC_POINT::set_affine_coordinates_GFp($group, $p,
203       $x, $y, $ctx);
204           Sets the affine coordinates of a EC_POINT over GFp
205             group  underlying EC_GROUP object
206             p      EC_POINT object
207             x      BIGNUM with the x-coordinate
208             y      BIGNUM with the y-coordinate
209             ctx    BN_CTX object (optional)
210             return 1 on success and 0 if an error occurred
211
212       Crypt::OpenSSL::EC::EC_POINT::get_affine_coordinates_GFp($group, $p,
213       $x, $y, $ctx);
214           Gets the affine coordinates of a EC_POINT over GFp
215             group  underlying EC_GROUP object
216             p      EC_POINT object
217             x      BIGNUM for the x-coordinate
218             y      BIGNUM for the y-coordinate
219             ctx    BN_CTX object (optional)
220             return 1 on success and 0 if an error occurred
221
222       Crypt::OpenSSL::EC::EC_POINT::set_compressed_coordinates_GFp($group,
223       $p, $x, $y_bit, $ctx);
224           Sets the x9.62 compressed coordinates of a EC_POINT over GFp
225             group  underlying EC_GROUP object
226             p      EC_POINT object
227             x      BIGNUM with x-coordinate
228             y_bit  integer with the y-Bit (either 0 or 1)
229             ctx    BN_CTX object (optional)
230             return 1 on success and 0 if an error occurred
231
232       Crypt::OpenSSL::EC::EC_POINT::set_affine_coordinates_GF2m($group, $p,
233       $x, $y, $ctx);
234           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
235
236           Sets the affine coordinates of a EC_POINT over GF2m
237             group  underlying EC_GROUP object
238             p      EC_POINT object
239             x      BIGNUM with the x-coordinate
240             y      BIGNUM with the y-coordinate
241             ctx    BN_CTX object (optional)
242             return 1 on success and 0 if an error occurred
243
244       Crypt::OpenSSL::EC::EC_POINT::get_affine_coordinates_GF2m($group, $p,
245       $x, $y, $ctx);
246           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
247
248           Gets the affine coordinates of a EC_POINT over GF2m
249             group  underlying EC_GROUP object
250             p      EC_POINT object
251             x      BIGNUM for the x-coordinate
252             y      BIGNUM for the y-coordinate
253             ctx    BN_CTX object (optional)
254             return 1 on success and 0 if an error occurred
255
256       Crypt::OpenSSL::EC::EC_POINT::set_compressed_coordinates_GF2m($group,
257       $p, $x, $y_bit, $ctx);
258           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
259
260           Sets the x9.62 compressed coordinates of a EC_POINT over GF2m
261             group  underlying EC_GROUP object
262             p      EC_POINT object
263             x      BIGNUM with x-coordinate
264             y_bit  integer with the y-Bit (either 0 or 1)
265             ctx    BN_CTX object (optional)
266             \return 1 on success and 0 if an error occurred
267
268       Crypt::OpenSSL::EC::EC_POINT::is_at_infinity($group, $p);
269           Checks whether the point is the neutral element of the group
270             group  the underlying EC_GROUP object
271             p      EC_POINT object
272             return 1 if the point is the neutral element and 0 otherwise
273
274       Crypt::OpenSSL::EC::EC_POINT::point2oct($group, $p, $form, $ctx);
275           Encodes a EC_POINT object to a octet string
276             group  underlying EC_GROUP object
277             p      EC_POINT object
278             form   point conversion form
279             ctx    BN_CTX object (optional)
280             return the encoded EC point
281
282       Crypt::OpenSSL::EC::EC_POINT::oct2point($group, $p, $buf, $ctx);
283           Decodes a EC_POINT from a octet string
284             group  underlying EC_GROUP object
285             p      EC_POINT object
286             buf    buffer with the encoded ec point
287             ctx    BN_CTX object (optional)
288             return 1 on success and 0 if an error occurred
289
290       Crypt::OpenSSL::EC::EC_POINT::point2bn($group, $p, $form, $bn, $ctx);
291       Crypt::OpenSSL::EC::EC_POINT::bn2point($group, $bn, $p, $ctx);
292       Crypt::OpenSSL::EC::EC_POINT::point2hex($group, $p, $form, $bn, $ctx);
293       Crypt::OpenSSL::EC::EC_POINT::hex2point($group, $bn, $p, $ctx);
294       Crypt::OpenSSL::EC::EC_POINT::add($group, $r, $a, $b, $ctx);
295            Computes the sum of two EC_POINT
296             group  underlying EC_GROUP object
297             r      EC_POINT object for the result (r = a + b)
298             a      EC_POINT object with the first summand
299             b      EC_POINT object with the second summand
300             ctx    BN_CTX object (optional)
301             return 1 on success and 0 if an error occurred
302
303       Crypt::OpenSSL::EC::EC_POINT::dbl($group, $r, $a, $ctx);
304           Computes the double of a EC_POINT
305             group  underlying EC_GROUP object
306             r      EC_POINT object for the result (r = 2 * a)
307             a      EC_POINT object
308             ctx    BN_CTX object (optional)
309             return 1 on success and 0 if an error occurred
310
311       Crypt::OpenSSL::EC::EC_POINT::invert($group, $a, $ctx);
312           Computes the inverse of a EC_POINT
313             group  underlying EC_GROUP object
314             a      EC_POINT object to be inverted (it's used for the result
315           as well)
316             ctx    BN_CTX object (optional)
317             return 1 on success and 0 if an error occurred
318
319       Crypt::OpenSSL::EC::EC_POINT::is_on_curve($group, $point, $ctx));
320           Checks whether the point is on the curve
321             group  underlying EC_GROUP object
322             point  EC_POINT object to check
323             ctx    BN_CTX object (optional)
324             return 1 if point if on the curve and 0 otherwise
325
326       Crypt::OpenSSL::EC::EC_POINT::cmp($group, $a, $b, $ctx);
327           Compares two EC_POINTs
328             group  underlying EC_GROUP object
329             a      first EC_POINT object
330             b      second EC_POINT object
331             ctx    BN_CTX object (optional)
332             return 0 if both points are equal and a value != 0 otherwise
333
334       Crypt::OpenSSL::EC::EC_POINT::make_affine($group, $point, $ct);
335       Crypt::OpenSSL::EC::EC_POINTs::make_affine
336           Not Implemented
337
338       Crypt::OpenSSL::EC::EC_POINTs::mul
339           Not Implemented
340
341       Crypt::OpenSSL::EC::EC_GROUP::set_generator($group, $generator, $order,
342       $cofactor);
343           Sets the generator and it's order/cofactor of a EC_GROUP object.
344             group      EC_GROUP object
345             generator  EC_POINT object with the generator.
346             order      the order of the group generated by the generator.
347             cofactor   the index of the sub-group generated by the generator
348                      in the group of all points on the elliptic curve.
349             return 1 on success and 0 if an error occurred
350
351       Crypt::OpenSSL::EC::EC_GROUP::get0_generator($group);
352           Returns the generator of a EC_GROUP object.
353
354             group  EC_GROUP object
355
356           return the currently used generator (possibly NULL).
357
358       Crypt::OpenSSL::EC::EC_GROUP::get_degree($group)
359           Returns the number of bits needed to represent a field element
360             group  EC_GROUP object
361             return number of bits needed to represent a field element
362
363       Crypt::OpenSSL::EC::EC_GROUP::check($group, $ctx);
364           Checks whether the parameter in the EC_GROUP define a valid ec
365           group
366             group  EC_GROUP object
367             ctx    BN_CTX object (optional)
368             return 1 if group is a valid ec group and 0 otherwise
369
370       Crypt::OpenSSL::EC::EC_GROUP::check_discriminant($group, $ctx);
371           Checks whether the discriminant of the elliptic curve is zero or
372           not
373             group  EC_GROUP object
374             ctx    BN_CTX object (optional)
375             return 1 if the discriminant is not zero and 0 otherwise
376
377       Crypt::OpenSSL::EC:: EC_GROUP::cmp($a, $b, $ctx);
378           Compares two EC_GROUP objects
379             a    first EC_GROUP object
380             b    second EC_GROUP object
381             ctx  BN_CTX object (optional)
382             return 0 if both groups are equal and 1 otherwise
383
384       Crypt::OpenSSL::EC::EC::EC_GROUP::new_curve_GFp($p, $a, $b, $ctx);
385           Creates a new EC_GROUP object with the specified parameters defined
386           over GFp (defined by the equation y^2 = x^3 + a*x + b)
387             p    BIGNUM with the prime number
388             a    BIGNUM with the parameter a of the equation
389             b    BIGNUM with the parameter b of the equation
390             ctx  BN_CTX object (optional)
391             return newly created EC_GROUP object with the specified
392           parameters
393
394       Crypt::OpenSSL::EC::EC_GROUP::new_curve_GF2m($p, $a, $b, $ctx);
395           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
396
397           Creates a new EC_GROUP object with the specified parameters defined
398           over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b)
399             p    BIGNUM with the polynomial defining the underlying field
400             a    BIGNUM with the parameter a of the equation
401             b    BIGNUM with the parameter b of the equation
402             ctx  BN_CTX object (optional)
403             return newly created EC_GROUP object with the specified
404           parameters
405
406       Crypt::OpenSSL::EC::EC_GROUP::new_by_curve_name($nid);
407           Creates a EC_GROUP object with a curve specified by a NID
408             nid  NID of the OID of the curve name
409             return newly created EC_GROUP object with specified curve or NULL
410                      if an error occurred
411
412       Crypt::OpenSSL::EC::EC_get_builtin_curves($r, $nitems);
413           EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number
414           of all available curves or zero if a error occurred.  In case r ist
415           not zero nitems EC_builtin_curve structures are filled with the
416           data of the first nitems internal groups
417
418       Crypt::OpenSSL::EC::EC_GROUP::get_order($group, $order, $ctx);
419           Gets the order of a EC_GROUP
420
421             group  EC_GROUP object
422             order  BIGNUM to which the order is copied
423             ctx    BN_CTX object (optional)
424             return 1 on success and 0 if an error occurred
425
426       Crypt::OpenSSL::EC::EC_GROUP::get_cofactor($group, $cofactopr, $ctx)
427           Gets the cofactor of a EC_GROUP
428
429             group     EC_GROUP object
430             cofactor  BIGNUM to which the cofactor is copied
431             ctx       BN_CTX object (optional)
432             return 1 on success and 0 if an error occurred
433
434       Crypt::OpenSSL::EC::EC_GROUP::set_curve_name($group, $nid);
435           Sets the name of a EC_GROUP object
436             group  EC_GROUP object
437             nid    NID of the curve name OID
438
439       Crypt::OpenSSL::EC::EC_GROUP::get_curve_name($group);
440           Returns the curve name of a EC_GROUP object
441             group  EC_GROUP object
442             return NID of the curve name OID or 0 if not set.
443
444       Crypt::OpenSSL::EC::EC_GROUP::set_asn1_flag($group, $flag);
445           Sets the ASN flag for the group
446
447       Crypt::OpenSSL::EC::EC_GROUP::get_asn1_flag($group);
448           Returns the ASN flag for the group
449
450       Crypt::OpenSSL::EC::EC_GROUP::set_point_conversion_form($group, $form);
451           Sets the point conversion form.
452
453       Crypt::OpenSSL::EC::EC_GROUP::get_point_conversion_form($group);
454           Returns the point conversion for for the group
455
456       Crypt::OpenSSL::EC::EC_GROUP::get0_seed($group);
457           Returns the 0 seed
458
459       Crypt::OpenSSL::EC::EC_GROUP::get_seed_len($group);
460           Returns the seed length
461
462       Crypt::OpenSSL::EC::EC_GROUP::set_seed($group, $seed);
463           Sets the group seed
464
465       Crypt::OpenSSL::EC::EC_POINT::mul($group, $r, $n, $q, $m, $ctx));
466           Computes r = generator * n + q * m
467             group  underlying EC_GROUP object
468             r      EC_POINT object for the result
469             n      BIGNUM with the multiplier for the group generator
470           (optional)
471             q      EC_POINT object with the first factor of the second
472           summand
473             m      BIGNUM with the second factor of the second summand
474             ctx    BN_CTX object (optional)
475             return 1 on success and 0 if an error occurred
476
477       Crypt::OpenSSL::EC::EC_GROUP::precompute_mult($group, $ctx);
478           Stores multiples of generator for faster point multiplication
479             group  EC_GROUP object
480             ctx    BN_CTX object (optional)
481             return 1 on success and 0 if an error occurred
482
483       Crypt::OpenSSL::EC::EC_GROUP::have_precompute_mult($group);
484           Reports whether a precomputation has been done
485             group  EC_GROUP object
486             return 1 if a pre-computation has been done and 0 otherwise
487
488       Crypt::OpenSSL::EC::EC_GROUP::get_basis_type($group);
489           EC_GROUP_get_basis_type() returns the NID of the basis type used to
490           represent the field elements
491
492       Crypt::OpenSSL::EC::EC_GROUP::get_trinomial_basis($group, $k);
493           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
494
495       Crypt::OpenSSL::EC:: EC_GROUP::get_pentanomial_basis($group, $k1, $k2,
496       $k3);
497           Not available if OPENSSL_NO_EC2M is defined in OpenSSL.
498
499       Crypt::OpenSSL::EC::EC_GROUP::free($group);
500           Frees a EC_GROUP object.  This should normally not be called from
501           Perl, since EC_GROUP objects created by this library are auto-
502           destroyed when they become unreferenced.
503
504       Crypt::OpenSSL::EC::EC_GROUP::clear_free($group);
505           Clears and frees a EC_GROUP object This should normally not be
506           called from Perl, since EC_GROUP objects created by this library
507           are auto-destroyed when they become unreferenced.
508
509       Crypt::OpenSSL::EC::EC_KEY::new(); Creates a new EC_KEY object. return
510       EC_KEY object or NULL if an error occurred.
511       Crypt::OpenSSL::EC::EC_KEY::new_by_curve_name($nid);
512           Creates a new EC_KEY object using a named curve as underlying
513           EC_GROUP object.
514             nid  NID of the named curve.
515             return EC_KEY object or NULL if an error occurred.
516
517       Crypt::OpenSSL::EC::EC_KEY::free($key);
518           Frees a EC_KEY object.
519             key  EC_KEY object to be freed.  This should normally not be
520           called from Perl, since EC_KEY objects created by this library are
521           auto-destroyed when they become unreferenced.
522
523       Crypt::OpenSSL::EC::EC_KEY::copy($dst, $src);
524           Copies a EC_KEY object.
525             dst  destination EC_KEY object
526             src  src EC_KEY object
527             return dst or NULL if an error occurred.
528
529       Crypt::OpenSSL::EC::EC_KEY::dup($src);
530           Creates a new EC_KEY object and copies the content from src to it.
531             src  the source EC_KEY object
532             return newly created EC_KEY object or NULL if an error occurred.
533
534       Crypt::OpenSSL::EC::EC_KEY::up_ref($key);
535           Increases the internal reference count of a EC_KEY object.
536             key  EC_KEY object
537             return 1 on success and 0 if an error occurred.
538
539       Crypt::OpenSSL::EC::EC_KEY::get0_group($key);
540           Returns the EC_GROUP object of a EC_KEY object
541             key  EC_KEY object
542             \return the EC_GROUP object (possibly NULL).
543
544       Crypt::OpenSSL::EC::EC_KEY::set_group($key, $group);
545           Sets the EC_GROUP of a EC_KEY object.
546             key    EC_KEY object
547             group  EC_GROUP to use in the EC_KEY object (note: the EC_KEY
548                    object will use an own copy of the EC_GROUP).
549             return 1 on success and 0 if an error occurred.
550
551       Crypt::OpenSSL::EC::EC_KEY::set_private_key($key, $prv);
552           Sets the private key of a EC_KEY object.
553             key  EC_KEY object
554             prv  BIGNUM with the private key (note: the EC_KEY object
555                  will use an own copy of the BIGNUM).
556             return 1 on success and 0 if an error occurred.
557
558       Crypt::OpenSSL::EC::EC_KEY::get0_public_key($key);
559           Returns the public key of a EC_KEY object.
560             key  the EC_KEY object
561             return a EC_POINT object with the public key (possibly NULL)
562
563       Crypt::OpenSSL::EC::EC_KEY::set_public_key($key, $pub);
564           Sets the public key of a EC_KEY object.
565             key  EC_KEY object
566             pub  EC_POINT object with the public key (note: the EC_KEY object
567                  will use an own copy of the EC_POINT object).
568             return 1 on success and 0 if an error occurred.
569
570       Crypt::OpenSSL::EC::EC_KEY::get_enc_flags($key);
571       Crypt::OpenSSL::EC::EC_KEY::set_enc_flags($key, $flags);
572       Crypt::OpenSSL::EC::EC_KEY::get_conv_form($key)
573       Crypt::OpenSSL::EC::EC_KEY::set_conv_form($key, $form);
574       Crypt::OpenSSL::EC::EC_KEY::get_key_method_data
575           Not Implemented
576
577       Crypt::OpenSSL::EC::EC_KEY::insert_key_method_data
578           Not Implemented
579
580       Crypt::OpenSSL::EC::EC_KEY::set_asn1_flag($key, $flag);
581       Crypt::OpenSSL::EC::EC_KEY::precompute_mult($key, $ctx);
582           Creates a table of pre-computed multiples of the generator to
583           further EC_KEY operations.
584             key  EC_KEY object
585             ctx  BN_CTX object (optional)
586             return 1 on success and 0 if an error occurred.
587
588       Crypt::OpenSSL::EC::EC_KEY::generate_key($key);
589           Creates a new ec private (and optional a new public) key.
590             key  EC_KEY object
591             return 1 on success and 0 if an error occurred.
592
593       Crypt::OpenSSL::EC::EC_KEY::check_key($key);
594           Verifies that a private and/or public key is valid.
595             key  the EC_KEY object
596             return 1 on success and 0 otherwise.
597
598   EXPORT
599       None by default.
600
601   Exportable constants
602         EC_F_COMPUTE_WNAF
603         EC_F_D2I_ECPARAMETERS
604         EC_F_D2I_ECPKPARAMETERS
605         EC_F_D2I_ECPRIVATEKEY
606         EC_F_DO_EC_KEY_PRINT
607         EC_F_ECKEY_PARAM2TYPE
608         EC_F_ECKEY_PARAM_DECODE
609         EC_F_ECKEY_PRIV_DECODE
610         EC_F_ECKEY_PRIV_ENCODE
611         EC_F_ECKEY_PUB_DECODE
612         EC_F_ECKEY_PUB_ENCODE
613         EC_F_ECKEY_TYPE2PARAM
614         EC_F_ECPARAMETERS_PRINT
615         EC_F_ECPARAMETERS_PRINT_FP
616         EC_F_ECPKPARAMETERS_PRINT
617         EC_F_ECPKPARAMETERS_PRINT_FP
618         EC_F_ECP_NIST_MOD_192
619         EC_F_ECP_NIST_MOD_224
620         EC_F_ECP_NIST_MOD_256
621         EC_F_ECP_NIST_MOD_521
622         EC_F_EC_ASN1_GROUP2CURVE
623         EC_F_EC_ASN1_GROUP2FIELDID
624         EC_F_EC_ASN1_GROUP2PARAMETERS
625         EC_F_EC_ASN1_GROUP2PKPARAMETERS
626         EC_F_EC_ASN1_PARAMETERS2GROUP
627         EC_F_EC_ASN1_PKPARAMETERS2GROUP
628         EC_F_EC_EX_DATA_SET_DATA
629         EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY
630         EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT
631         EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE
632         EC_F_EC_GF2M_SIMPLE_OCT2POINT
633         EC_F_EC_GF2M_SIMPLE_POINT2OCT
634         EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES
635         EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES
636         EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES
637         EC_F_EC_GFP_MONT_FIELD_DECODE
638         EC_F_EC_GFP_MONT_FIELD_ENCODE
639         EC_F_EC_GFP_MONT_FIELD_MUL
640         EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE
641         EC_F_EC_GFP_MONT_FIELD_SQR
642         EC_F_EC_GFP_MONT_GROUP_SET_CURVE
643         EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP
644         EC_F_EC_GFP_NIST_FIELD_MUL
645         EC_F_EC_GFP_NIST_FIELD_SQR
646         EC_F_EC_GFP_NIST_GROUP_SET_CURVE
647         EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT
648         EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE
649         EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP
650         EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR
651         EC_F_EC_GFP_SIMPLE_MAKE_AFFINE
652         EC_F_EC_GFP_SIMPLE_OCT2POINT
653         EC_F_EC_GFP_SIMPLE_POINT2OCT
654         EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE
655         EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES
656         EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP
657         EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES
658         EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP
659         EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES
660         EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP
661         EC_F_EC_GROUP_CHECK
662         EC_F_EC_GROUP_CHECK_DISCRIMINANT
663         EC_F_EC_GROUP_COPY
664         EC_F_EC_GROUP_GET0_GENERATOR
665         EC_F_EC_GROUP_GET_COFACTOR
666         EC_F_EC_GROUP_GET_CURVE_GF2M
667         EC_F_EC_GROUP_GET_CURVE_GFP
668         EC_F_EC_GROUP_GET_DEGREE
669         EC_F_EC_GROUP_GET_ORDER
670         EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS
671         EC_F_EC_GROUP_GET_TRINOMIAL_BASIS
672         EC_F_EC_GROUP_NEW
673         EC_F_EC_GROUP_NEW_BY_CURVE_NAME
674         EC_F_EC_GROUP_NEW_FROM_DATA
675         EC_F_EC_GROUP_PRECOMPUTE_MULT
676         EC_F_EC_GROUP_SET_CURVE_GF2M
677         EC_F_EC_GROUP_SET_CURVE_GFP
678         EC_F_EC_GROUP_SET_EXTRA_DATA
679         EC_F_EC_GROUP_SET_GENERATOR
680         EC_F_EC_KEY_CHECK_KEY
681         EC_F_EC_KEY_COPY
682         EC_F_EC_KEY_GENERATE_KEY
683         EC_F_EC_KEY_NEW
684         EC_F_EC_KEY_PRINT
685         EC_F_EC_KEY_PRINT_FP
686         EC_F_EC_POINTS_MAKE_AFFINE
687         EC_F_EC_POINT_ADD
688         EC_F_EC_POINT_CMP
689         EC_F_EC_POINT_COPY
690         EC_F_EC_POINT_DBL
691         EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2Mg
692         EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP
693         EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP
694         EC_F_EC_POINT_INVERT
695         EC_F_EC_POINT_IS_AT_INFINITY
696         EC_F_EC_POINT_IS_ON_CURVE
697         EC_F_EC_POINT_MAKE_AFFINE
698         EC_F_EC_POINT_MUL
699         EC_F_EC_POINT_NEW
700         EC_F_EC_POINT_OCT2POINT
701         EC_F_EC_POINT_POINT2OCT
702         EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M
703         EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP
704         EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M
705         EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP
706         EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP
707         EC_F_EC_POINT_SET_TO_INFINITY
708         EC_F_EC_PRE_COMP_DUP
709         EC_F_EC_PRE_COMP_NEW
710         EC_F_EC_WNAF_MUL
711         EC_F_EC_WNAF_PRECOMPUTE_MULT
712         EC_F_I2D_ECPARAMETERS
713         EC_F_I2D_ECPKPARAMETERS
714         EC_F_I2D_ECPRIVATEKEY
715         EC_F_I2O_ECPUBLICKEY
716         EC_F_O2I_ECPUBLICKEY
717         EC_F_OLD_EC_PRIV_DECODE
718         EC_F_PKEY_EC_CTRL
719         EC_F_PKEY_EC_CTRL_STR
720         EC_F_PKEY_EC_DERIVE
721         EC_F_PKEY_EC_KEYGEN
722         EC_F_PKEY_EC_PARAMGEN
723         EC_F_PKEY_EC_SIGN
724         EC_PKEY_NO_PARAMETERS
725         EC_PKEY_NO_PUBKEY
726         EC_R_ASN1_ERROR
727         EC_R_ASN1_UNKNOWN_FIELD
728         EC_R_BUFFER_TOO_SMALL
729         EC_R_D2I_ECPKPARAMETERS_FAILURE
730         EC_R_DECODE_ERROR
731         EC_R_DISCRIMINANT_IS_ZERO
732         EC_R_EC_GROUP_NEW_BY_NAME_FAILURE
733         EC_R_FIELD_TOO_LARGE
734         EC_R_GROUP2PKPARAMETERS_FAILURE
735         EC_R_I2D_ECPKPARAMETERS_FAILURE
736         EC_R_INCOMPATIBLE_OBJECTS
737         EC_R_INVALID_ARGUMENT
738         EC_R_INVALID_COMPRESSED_POINT
739         EC_R_INVALID_COMPRESSION_BIT
740         EC_R_INVALID_CURVE
741         EC_R_INVALID_DIGEST_TYPE
742         EC_R_INVALID_ENCODING
743         EC_R_INVALID_FIELD
744         EC_R_INVALID_FORM
745         EC_R_INVALID_GROUP_ORDER
746         EC_R_INVALID_PENTANOMIAL_BASIS
747         EC_R_INVALID_PRIVATE_KEY
748         EC_R_INVALID_TRINOMIAL_BASIS
749         EC_R_KEYS_NOT_SET
750         EC_R_MISSING_PARAMETERS
751         EC_R_MISSING_PRIVATE_KEY
752         EC_R_NOT_A_NIST_PRIME
753         EC_R_NOT_A_SUPPORTED_NIST_PRIME
754         EC_R_NOT_IMPLEMENTED
755         EC_R_NOT_INITIALIZED
756         EC_R_NO_FIELD_MOD
757         EC_R_NO_PARAMETERS_SET
758         EC_R_PASSED_NULL_PARAMETER
759         EC_R_PKPARAMETERS2GROUP_FAILURE
760         EC_R_POINT_AT_INFINITY
761         EC_R_POINT_IS_NOT_ON_CURVE
762         EC_R_SLOT_FULL
763         EC_R_UNDEFINED_GENERATOR
764         EC_R_UNDEFINED_ORDER
765         EC_R_UNKNOWN_GROUP
766         EC_R_UNKNOWN_ORDER
767         EC_R_UNSUPPORTED_FIELD
768         EC_R_WRONG_ORDER
769         EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID
770         OPENSSL_ECC_MAX_FIELD_BITS
771         OPENSSL_EC_NAMED_CURVE
772         POINT_CONVERSION_COMPRESSED
773         POINT_CONVERSION_HYBRID
774         POINT_CONVERSION_UNCOMPRESSED
775

SEE ALSO

777       Crypt::OpenSSL::Bignum
778
779       OpenSSL
780

AUTHOR

782       Mike McCauley, <mikem@airspayce.com>
783
785       Copyright (C) 2012 by Mike McCauley
786
787       This library is free software; you can redistribute it and/or modify it
788       under the same terms as Perl itself, either Perl version 5.14.2 or, at
789       your option, any later version of Perl 5 you may have available.
790
791
792
793perl v5.38.0                      2023-07-20             Crypt::OpenSSL::EC(3)
Impressum