summaryrefslogtreecommitdiff
path: root/lib/GnuPG/UserId.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/GnuPG/UserId.pm')
-rw-r--r--lib/GnuPG/UserId.pm148
1 files changed, 148 insertions, 0 deletions
diff --git a/lib/GnuPG/UserId.pm b/lib/GnuPG/UserId.pm
new file mode 100644
index 0000000..8c4124f
--- /dev/null
+++ b/lib/GnuPG/UserId.pm
@@ -0,0 +1,148 @@
+# UserId.pm
+# - providing an object-oriented approach to GnuPG user ids
+#
+# Copyright (C) 2000 Frank J. Tobin <ftobin@cpan.org>
+#
+# This module is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# $Id: UserId.pm,v 1.7 2001/08/21 13:31:50 ftobin Exp $
+#
+
+package GnuPG::UserId;
+use Moo;
+use MooX::late;
+
+has [qw( validity as_string )] => (
+ isa => 'Any',
+ is => 'rw',
+);
+
+has signatures => (
+ isa => 'ArrayRef',
+ is => 'rw',
+ default => sub { [] },
+);
+has revocations => (
+ isa => 'ArrayRef',
+ is => 'rw',
+ default => sub { [] },
+);
+
+sub push_signatures {
+ my $self = shift;
+ push @{ $self->signatures }, @_;
+}
+sub push_revocations {
+ my $self = shift;
+ push @{ $self->revocations }, @_;
+}
+
+sub compare {
+ my ( $self, $other, $deep ) = @_;
+
+ my @comparison_ints = qw( validity as_string );
+
+ foreach my $field ( @comparison_ints ) {
+ return 0 unless $self->$field() eq $other->$field();
+ }
+
+ return 0 unless @{$self->signatures} == @{$other->signatures};
+ return 0 unless @{$self->revocations} == @{$other->revocations};
+
+ # FIXME: is it actually wrong if the associated signatures come out
+ # in a different order on the two compared designated revokers?
+ if (defined $deep && $deep) {
+ for ( my $i = 0; $i < scalar(@{$self->signatures}); $i++ ) {
+ return 0
+ unless $self->signatures->[$i]->compare($other->signatures->[$i], 1);
+ }
+ for ( my $i = 0; $i < scalar(@{$self->revocations}); $i++ ) {
+ return 0
+ unless $self->revocations->[$i]->compare($other->revocations->[$i], 1);
+ }
+ }
+
+ return 1;
+}
+
+
+# DEPRECATED
+sub user_id_string {
+ my ( $self, $v ) = @_;
+ $self->as_string($v) if defined $v;
+ return $self->as_string();
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+GnuPG::UserId - GnuPG User ID Objects
+
+=head1 SYNOPSIS
+
+ # assumes a GnuPG::PublicKey object in $publickey
+ my $user_id = $publickey->user_ids_ref->[0]->as_string;
+
+=head1 DESCRIPTION
+
+GnuPG::UserId objects are generally not instantiated on their
+own, but rather as part of GnuPG::PublicKey or GnuPG::SecretKey
+objects.
+
+=head1 OBJECT METHODS
+
+=over 4
+
+=item new( I<%initialization_args> )
+
+This methods creates a new object. The optional arguments are
+initialization of data members;
+
+=item compare( I<$other>, I<$deep> )
+
+Returns non-zero only when this User ID is identical to the other
+GnuPG::UserID. If $deep is present and non-zero, the User ID's
+signatures and revocations will also be compared.
+
+=back
+
+=head1 OBJECT DATA MEMBERS
+
+=over 4
+
+=item as_string
+
+A string of the user id.
+
+=item validity
+
+A scalar holding the value GnuPG reports for the trust of authenticity
+(a.k.a.) validity of a key.
+See GnuPG's DETAILS file for details.
+
+=item signatures
+
+A list of GnuPG::Signature objects embodying the signatures
+on this user id.
+
+=item revocations
+
+A list of revocations associated with this User ID, stored as
+GnuPG::Signature objects (since revocations are a type of
+certification as well).
+
+=back
+
+=head1 SEE ALSO
+
+L<GnuPG::Signature>,
+
+=cut