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 d1a009e..8347de2 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 c0ae6ec..adcdb6c 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();
-- 
EW

--
unsubscribe: meta+unsubscr...@public-inbox.org
archive: https://public-inbox.org/meta/

Reply via email to