File Coverage

blib/lib/JSON/WebToken/Crypt/RSA.pm
Criterion Covered Total %
statement 22 22 100.0
branch 1 2 50.0
condition n/a
subroutine 6 6 100.0
pod 0 2 0.0
total 29 32 90.6


line stmt bran cond sub pod time code
1             package JSON::WebToken::Crypt::RSA;
2              
3 2     2   1759 use strict;
  2         4  
  2         87  
4 2     2   12 use warnings;
  2         4  
  2         69  
5 2     2   12 use parent 'JSON::WebToken::Crypt';
  2         4  
  2         15  
6              
7 2     2   89 use Crypt::OpenSSL::RSA ();
  2         4  
  2         405  
8              
9             our $ALGORITHM2SIGNING_METHOD_MAP = {
10             RS256 => 'use_sha256_hash',
11             RS384 => 'use_sha384_hash',
12             RS512 => 'use_sha512_hash',
13             RSA1_5 => 'use_pkcs1_padding',
14             };
15              
16             sub sign {
17 4     4 0 10 my ($class, $algorithm, $message, $key) = @_;
18              
19 4         171 my $private_key = Crypt::OpenSSL::RSA->new_private_key($key);
20 4         24 my $method = $ALGORITHM2SIGNING_METHOD_MAP->{$algorithm};
21 4         22 $private_key->$method;
22 4         11422 return $private_key->sign($message);
23             }
24              
25             sub verify {
26 4     4 0 9 my ($class, $algorithm, $message, $key, $signature) = @_;
27              
28 4         103 my $public_key = Crypt::OpenSSL::RSA->new_public_key($key);
29 4         1466 my $method = $ALGORITHM2SIGNING_METHOD_MAP->{$algorithm};
30 4         20 $public_key->$method;
31 4 50       462 return $public_key->verify($message, $signature) ? 1 : 0;
32             }
33              
34             1;
35             __END__