File Coverage

blib/lib/Mail/DKIM/Algorithm/ed25519_sha256.pm
Criterion Covered Total %
statement 36 36 100.0
branch 4 6 66.6
condition n/a
subroutine 10 10 100.0
pod 2 4 50.0
total 52 56 92.8


line stmt bran cond sub pod time code
1             package Mail::DKIM::Algorithm::ed25519_sha256;
2 15     15   99 use strict;
  15         96  
  15         648  
3 15     15   96 use warnings;
  15         33  
  15         1299  
4             our $VERSION = '1.20240923'; # VERSION
5             # ABSTRACT: ed25519 sha256 algorithm class
6              
7             # Copyright 2005-2006 Messiah College. All rights reserved.
8             # Jason Long
9              
10             # Copyright (c) 2004 Anthony D. Urso. All rights reserved.
11             # This program is free software; you can redistribute it and/or
12             # modify it under the same terms as Perl itself.
13              
14 15     15   127 use base 'Mail::DKIM::Algorithm::Base';
  15         44  
  15         2055  
15 15     15   118 use Carp;
  15         32  
  15         1325  
16 15     15   111 use MIME::Base64;
  15         59  
  15         1030  
17 15     15   92 use Digest::SHA;
  15         34  
  15         5901  
18              
19             sub init_digests {
20 8     8 0 19 my $self = shift;
21              
22             # initialize a SHA-256 Digest
23 8         75 $self->{header_digest} = new Digest::SHA(256);
24 8         165 $self->{body_digest} = new Digest::SHA(256);
25             }
26              
27             sub sign {
28 2     2 1 5 my $self = shift;
29 2 50       2124 croak 'wrong number of arguments' unless ( @_ == 1 );
30 2         10 my ($private_key) = @_;
31              
32 2         19 my $digest = $self->{header_digest}->digest;
33 2         11 my $signature = $private_key->sign_digest( 'SHA-256', $digest );
34              
35 2         18 return encode_base64( $signature, '' );
36             }
37              
38             sub verify {
39 3     3 1 8 my $self = shift;
40 3 50       14 croak 'wrong number of arguments' unless ( @_ == 0 );
41              
42 3         15 my $base64 = $self->signature->data;
43 3         13 my $public_key = $self->signature->get_public_key;
44              
45 3         34 my $digest = $self->{header_digest}->digest;
46 3         15 my $sig = decode_base64($base64);
47              
48 3 100       17 return unless $public_key->verify_digest( 'SHA-256', $digest, $sig );
49 2         24 return $self->check_body_hash;
50             }
51              
52             sub wants_pre_signature_headers {
53 6     6 0 24 return 1;
54             }
55              
56             1;
57              
58             __END__