From 9e9863aa5fb74358cd2b5960e4d8d16f1ee9fece Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Fri, 2 Mar 2018 18:27:54 +0000 Subject: content_id: no need to be human-friendly We merely use this for internal comparisons and do not store this in Xapian. So using a shorter, non-human readable digest is enough. Furthermore, introduce "content_digest" which returns the Digest::SHA object for extra changes. --- lib/PublicInbox/ContentId.pm | 15 +++++++++------ t/content_id.t | 5 +++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/ContentId.pm b/lib/PublicInbox/ContentId.pm index d1a009e7..8347de2d 100644 --- a/lib/PublicInbox/ContentId.pm +++ b/lib/PublicInbox/ContentId.pm @@ -5,7 +5,7 @@ package PublicInbox::ContentId; 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 @@ -14,10 +14,9 @@ use Digest::SHA; # 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 @@ -37,7 +36,11 @@ sub content_id ($;$) { $dig->add("$h: $_") foreach @v; } $dig->add($mime->body_raw); - 'SHA-' . $dig->algorithm . ':' . $dig->hexdigest; + $dig; +} + +sub content_id ($) { + content_digest($_[0])->digest; } 1; diff --git a/t/content_id.t b/t/content_id.t index c0ae6ecd..adcdb6c1 100644 --- a/t/content_id.t +++ b/t/content_id.t @@ -18,7 +18,8 @@ my $mime = Email::MIME->create( 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(); -- cgit v1.2.3-24-ge0c7