File Coverage

blib/lib/Crypt/Perl/ECDSA/EC/Curve.pm
Criterion Covered Total %
statement 26 28 92.8
branch 1 2 50.0
condition n/a
subroutine 9 10 90.0
pod 0 5 0.0
total 36 45 80.0


line stmt bran cond sub pod time code
1             package Crypt::Perl::ECDSA::EC::Curve;
2              
3             =encoding utf-8
4              
5             =head1 NAME
6              
7             Crypt::Perl::ECDSA::EC::Curve
8              
9             =head1 DISCUSSION
10              
11             This interface is undocumented for now.
12              
13             =cut
14              
15 9     9   547 use strict;
  9         21  
  9         293  
16 9     9   46 use warnings;
  9         31  
  9         236  
17              
18 9     9   3940 use Crypt::Perl::ECDSA::EC::FieldElement ();
  9         29  
  9         181  
19 9     9   4247 use Crypt::Perl::ECDSA::EC::Point ();
  9         26  
  9         193  
20 9     9   67 use Crypt::Perl::X ();
  9         21  
  9         2469  
21              
22             #All bigints
23             sub new {
24 359     359 0 2199 my ( $class, $q, $a, $b ) = @_;
25              
26 359 50       1551 die Crypt::Perl::X::create('Generic', 'Need q, a, and b!') if grep { !defined } $q, $a, $b;
  1077         3671  
27              
28 359         6233 my $self = {
29             q => $q,
30             a => $a,
31             b => $b,
32             infinity => Crypt::Perl::ECDSA::EC::Point->new_infinity(),
33             };
34              
35 359         2758 return bless $self, $class;
36             }
37              
38             sub keylen {
39 555     555 0 1861 my ($self) = @_;
40              
41 555         3747 return $self->{'q'}->bit_length();
42             }
43              
44             sub get_infinity {
45 0     0 0 0 my ($self) = @_;
46 0         0 return $self->{'infinity'};
47             }
48              
49             #Returns ECFieldElement
50             sub decode_point {
51 965     965 0 5074 my ($self, $x, $y) = @_;
52              
53             #if ( $self->as_hex() =~ m<\A0x0[467]> ) {
54             # die 'Only uncompressed generators!';
55             #}
56              
57 965         4228 return Crypt::Perl::ECDSA::EC::Point->new( $self, $self->from_bigint( $x ), $self->from_bigint( $y ) );
58             }
59              
60             #$x is a bigint
61             sub from_bigint {
62 1484190     1484190 0 2957199 my ($self, $x ) = @_;
63              
64 1484190         3621234 return Crypt::Perl::ECDSA::EC::FieldElement->new( $self->{'q'}, $x );
65             }
66              
67             1;