summaryrefslogtreecommitdiff
path: root/lib/GnuPG/PrimaryKey.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/GnuPG/PrimaryKey.pm')
-rw-r--r--lib/GnuPG/PrimaryKey.pm143
1 files changed, 143 insertions, 0 deletions
diff --git a/lib/GnuPG/PrimaryKey.pm b/lib/GnuPG/PrimaryKey.pm
new file mode 100644
index 0000000..e26cdc7
--- /dev/null
+++ b/lib/GnuPG/PrimaryKey.pm
@@ -0,0 +1,143 @@
+# PrimaryKey.pm
+# - objectified GnuPG primary keys (can have subkeys)
+#
+# 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: PrimaryKey.pm,v 1.4 2001/09/14 12:34:36 ftobin Exp $
+#
+
+package GnuPG::PrimaryKey;
+use Moo;
+use MooX::late;
+use MooX::HandlesVia;
+
+BEGIN { extends qw( GnuPG::Key ) }
+
+for my $list (qw(user_ids subkeys user_attributes)) {
+ my $ref = $list . "_ref";
+ has $ref => (
+ handles_via => 'Array',
+ is => 'rw',
+ default => sub { [] },
+ handles => {
+ "push_$list" => 'push',
+ },
+ );
+
+ no strict 'refs';
+ *{$list} = sub {
+ my $self = shift;
+ return wantarray ? @{$self->$ref(@_)} : $self->$ref(@_);
+ };
+}
+
+has $_ => (
+ isa => 'Any',
+ is => 'rw',
+ clearer => 'clear_' . $_,
+) for qw( local_id owner_trust );
+
+
+sub compare {
+ my ($self, $other, $deep) = @_;
+
+ my @comparison_fields = qw (
+ owner_trust
+ );
+
+ foreach my $field (@comparison_fields) {
+ return 0 unless $self->$field eq $other->$field;
+ }
+
+ if (defined $deep && $deep) {
+ my @lists = qw(
+ user_ids
+ subkeys
+ user_attributes
+ );
+
+ foreach my $list (@lists) {
+ return 0 unless @{$self->$list} == @{$other->$list};
+ for ( my $i = 0; $i < scalar(@{$self->$list}); $i++ ) {
+ return 0
+ unless $self->$list->[$i]->compare($other->$list->[$i], 1);
+ }
+ }
+ }
+
+ return $self->SUPER::compare($other, $deep);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+GnuPG::PrimaryKey - GnuPG Primary Key Objects
+
+=head1 SYNOPSIS
+
+ # assumes a GnuPG::Interface object in $gnupg
+ my @keys = $gnupg->get_public_keys( 'ftobin' );
+
+ # or
+
+ my @keys = $gnupg->get_secret_keys( 'ftobin' );
+
+ # now GnuPG::PrimaryKey objects are in @keys
+
+=head1 DESCRIPTION
+
+GnuPG::PrimaryKey objects are generally instantiated
+as GnuPG::PublicKey or GnuPG::SecretKey objects
+through various methods of GnuPG::Interface.
+They embody various aspects of a GnuPG primary key.
+
+This package inherits data members and object methods
+from GnuPG::Key, which is not described here, but rather
+in L<GnuPG::Key>.
+
+=head1 OBJECT DATA MEMBERS
+
+=over 4
+
+=item user_ids
+
+A list of GnuPG::UserId objects associated with this key.
+
+=item user_attributes
+
+A list of GnuPG::UserAttribute objects associated with this key.
+
+=item subkeys
+
+A list of GnuPG::SubKey objects associated with this key.
+
+=item local_id
+
+WARNING: DO NOT USE. This used to mean GnuPG's local id for the key,
+but modern versions of GnuPG do not produce it. Expect this to be the
+empty string or undef.
+
+=item owner_trust
+
+The scalar value GnuPG reports as the ownertrust for this key.
+See GnuPG's DETAILS file for details.
+
+=back
+
+=head1 SEE ALSO
+
+L<GnuPG::Key>,
+L<GnuPG::UserId>,
+L<GnuPG::SubKey>,
+
+=cut