use strict;
use warnings;
use base qw/Exporter/;
-our @EXPORT_OK = qw/content_id/;
+our @EXPORT_OK = qw/content_id content_digest/;
use PublicInbox::MID qw(mids references);
# not sure if less-widely supported hash families are worth bothering with
# Content-* headers are often no-ops, so maybe we don't need them
my @ID_HEADERS = qw(Subject From Date To Cc);
-sub content_id ($;$) {
- my ($mime, $alg) = @_;
- $alg ||= 256;
- my $dig = Digest::SHA->new($alg);
+sub content_digest ($) {
+ my ($mime) = @_;
+ my $dig = Digest::SHA->new(256);
my $hdr = $mime->header_obj;
# References: and In-Reply-To: get used interchangeably
$dig->add("$h: $_") foreach @v;
}
$dig->add($mime->body_raw);
- 'SHA-' . $dig->algorithm . ':' . $dig->hexdigest;
+ $dig;
+}
+
+sub content_id ($) {
+ content_digest($_[0])->digest;
}
1;
body => "hello world\n",
);
-my $res = content_id($mime);
-like($res, qr/\ASHA-256:[a-f0-9]{64}\z/, 'cid in format expected');
+my $orig = content_id($mime);
+my $reload = content_id(Email::MIME->new($mime->as_string));
+is($orig, $reload, 'content_id matches after serialization');
done_testing();