--- filter_nnrpd.pl.orig 2021-02-09 07:47:09.000000000 +0100 +++ filter_nnrpd.pl 2021-02-09 07:59:46.000000000 +0100 @@ -1,10 +1,7 @@ # # Do any initialization steps. # -use Digest::MD5 qw(md5_base64); -use Digest::SHA1(); -use Digest::HMAC_SHA1(); -use MIME::Base64(); +use Digest::SHA qw( sha256_base64 hmac_sha256_base64 ); $CANCEL_LOCK = 'secretword'; @@ -36,18 +33,26 @@ sub add_cancel_item($$$) { my ( $r_hdr, $name, $value ) = @_; my $prefix = $r_hdr->{$name}; - $prefix = defined($prefix) ? $prefix . ' sha1:' : 'sha1:'; + $prefix = defined($prefix) ? $prefix . ' sha256:' : 'sha256:'; $r_hdr->{$name} = $prefix . $value; } sub calc_cancel_key($$) { my ( $user, $message_id ) = @_; - return MIME::Base64::encode(Digest::HMAC_SHA1::hmac_sha1($message_id, $user . $CANCEL_LOCK), ''); + return pad_b64digest(hmac_sha256_base64($message_id, $user . $CANCEL_LOCK)); } sub add_cancel_lock($$) { my ( $r_hdr, $user ) = @_; my $key = calc_cancel_key($user, $r_hdr->{'Message-ID'}); - my $lock = MIME::Base64::encode(Digest::SHA1::sha1($key), ''); + my $lock = pad_b64digest(sha256_base64($key)); add_cancel_item($r_hdr, 'Cancel-Lock', $lock); } + +sub pad_b64digest($) { + my ($b64_digest) = @_; + while (length($b64_digest) % 4) { + $b64_digest .= '='; + } + return $b64_digest; +}