From 828604d0e5d0e408ac3c872a945ce6145559f114 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Sun, 2 May 2010 02:32:40 -0400 Subject: expose signature expiration times --- lib/GnuPG/Interface.pm | 41 +++++++++++++++++++++++++++++++---------- lib/GnuPG/Key.pm | 6 ++++-- lib/GnuPG/Signature.pm | 13 ++++++++++++- 3 files changed, 47 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm index a8bac99..5d25c61 100644 --- a/lib/GnuPG/Interface.pm +++ b/lib/GnuPG/Interface.pm @@ -428,11 +428,15 @@ sub get_keys { $usage_flags, ) = @fields[ 1 .. $#fields ]; - - # --fixed-list-mode uses epoch time for creation and expiration date strings. - # For backward compatibility, we convert them back using GMT; - my $creation_date_string = $self->_downrez_date($creation_date); - my $expiration_date_string = $self->_downrez_date($expiration_date); + # --fixed-list-mode uses epoch time for creation and expiration date strings. + # For backward compatibility, we convert them back using GMT; + my $expiration_date_string; + if ($expiration_date eq '') { + $expiration_date = undef; + } else { + $expiration_date_string = $self->_downrez_date($expiration_date); + } + my $creation_date_string = $self->_downrez_date($creation_date); $current_key = $current_fingerprinted_key = $record_type eq 'pub' @@ -461,15 +465,26 @@ sub get_keys { elsif ( $record_type eq 'sig' ) { my ( $algo_num, $hex_key_id, - $signature_date, $user_id_string - ) = @fields[ 3 .. 5, 9 ]; + $signature_date, + $expiration_date, + $user_id_string + ) = @fields[ 3 .. 6, 9 ]; + + my $expiration_date_string; + if ($expiration_date eq '') { + $expiration_date = undef; + } else { + $expiration_date_string = $self->_downrez_date($expiration_date); + } + my $signature_date_string = $self->_downrez_date($signature_date); - my $signature_date_string = $self->_downrez_date($signature_date); my $signature = GnuPG::Signature->new( algo_num => $algo_num, hex_id => $hex_key_id, date => $signature_date, date_string => $signature_date_string, + expiration_date => $expiration_date, + expiration_date_string => $expiration_date_string, user_id_string => unescape_string($user_id_string), ); @@ -502,8 +517,14 @@ sub get_keys { $usage_flags, ) = @fields[ 1 .. 11 ]; - my $creation_date_string = $self->_downrez_date($creation_date); - my $expiration_date_string = $self->_downrez_date($expiration_date); + my $expiration_date_string; + if ($expiration_date eq '') { + $expiration_date = undef; + } else { + $expiration_date_string = $self->_downrez_date($expiration_date); + } + my $creation_date_string = $self->_downrez_date($creation_date); + $current_signed_item = $current_fingerprinted_key = GnuPG::SubKey->new( validity => $validity, diff --git a/lib/GnuPG/Key.pm b/lib/GnuPG/Key.pm index d3fc5e1..bd27611 100644 --- a/lib/GnuPG/Key.pm +++ b/lib/GnuPG/Key.pm @@ -122,14 +122,16 @@ the short hex id, which is 8 hex characters. =item expiration_date_string -Formatted date of the key's creation and expiration. +Formatted date of the key's creation and expiration. If the key has +no expiration, expiration_date_string will return undef. =item creation_date =item expiration_date Date of the key's creation and expiration, stored as the number of -seconds since midnight 1970-01-01 UTC. +seconds since midnight 1970-01-01 UTC. If the key has no expiration, +expiration_date will return undef. =item fingerprint diff --git a/lib/GnuPG/Signature.pm b/lib/GnuPG/Signature.pm index fb1dd95..f0e200d 100644 --- a/lib/GnuPG/Signature.pm +++ b/lib/GnuPG/Signature.pm @@ -16,7 +16,7 @@ package GnuPG::Signature; use Any::Moose; -has [qw( algo_num hex_id user_id_string date date_string )] => ( +has [qw( algo_num hex_id user_id_string date date_string expiration_date expiration_date_string )] => ( isa => 'Any', is => 'rw', ); @@ -79,6 +79,17 @@ The formatted date the signature was performed on. The date the signature was performed, represented as the number of seconds since midnight 1970-01-01 UTC. +=item expiration_date_string + +The formatted date the signature will expire (signatures without +expiration return undef). + +=item expiration_date + +The date the signature will expire, represented as the number of +seconds since midnight 1970-01-01 UTC (signatures without expiration +return undef) + =back =head1 SEE ALSO -- cgit v1.2.3