Metabrik-Repository
view release on metacpan or search on metacpan
lib/Metabrik/Crypto/Gpg.pm view on Meta::CPAN
#
# $Id$
#
# crypto::gpg Brik
#
package Metabrik::Crypto::Gpg;
use strict;
use warnings;
use base qw(Metabrik::System::Package);
sub brik_properties {
return {
revision => '$Revision$',
tags => [ qw(unstable pgp gnupg) ],
author => 'GomoR <GomoR[at]metabrik.org>',
license => 'http://opensource.org/licenses/BSD-3-Clause',
attributes => {
public_keyring => [ qw(file.gpg) ],
secret_keyring => [ qw(file.gpg) ],
passphrase => [ qw(passphrase) ],
type_key => [ qw(RSA|DSA) ],
type_subkey => [ qw(RSA|ELG-E) ],
length_key => [ qw(1024|2048|3072|4096) ],
length_subkey => [ qw(1024|2048|3072|4096) ],
expire_key => [ qw(count_y|0) ],
_gnupg => [ qw(INTERNAL) ],
},
attributes_default => {
public_keyring => $ENV{HOME}."/.gnupg/pubring.gpg",
secret_keyring => $ENV{HOME}."/.gnupg/secring.gpg",
type_key => 'DSA',
type_subkey => 'ELG-E',
length_key => 2048,
length_subkey => 3072,
expire_key => '5y',
},
commands => {
install => [ ], # Inherited
list_public_keys => [ ],
list_secret_keys => [ ],
get_public_keys => [ qw(keys_list) ],
get_secret_keys => [ qw(keys_list) ],
import_keys => [ qw(file) ],
delete_key => [ qw(key_id) ],
generate_key => [ qw(email description|OPTIONAL comment|OPTIONAL) ],
encrypt => [ qw($data email_recipient_list) ],
decrypt => [ qw($data) ],
decrypt_from_file => [ qw(file) ],
export_keys => [ qw(key_id) ],
},
require_modules => {
'IO::Handle' => [ ],
'GnuPG::Interface' => [ ],
'GnuPG::Handles' => [ ],
'Metabrik::File::Text' => [ ],
'Metabrik::String::Random' => [ ],
'Metabrik::String::Password' => [ ],
},
require_binaries => {
'rngd' => [ ],
},
need_packages => {
ubuntu => [ qw(rng-tools) ],
debian => [ qw(rng-tools) ],
kali => [ qw(rng-tools) ],
},
};
}
sub brik_init {
my $self = shift;
my $gnupg = GnuPG::Interface->new;
if (! $gnupg) {
return $self->log->error("brik_init: GnuPG::Interface failed");
}
$gnupg->options->hash_init(armor => 1);
$self->_gnupg($gnupg);
return $self->SUPER::brik_init;
}
sub generate_key {
my $self = shift;
my ($email, $description, $comment) = @_;
$self->brik_help_run_undef_arg('generate_key', $email) or return;
my $passphrase = $self->passphrase;
lib/Metabrik/Crypto/Gpg.pm view on Meta::CPAN
waitpid($pid, 0);
return \@lines;
}
sub decrypt_from_file {
my $self = shift;
my ($file) = @_;
$self->brik_help_run_undef_arg('decrypt_from_file', $file) or return;
$self->brik_help_run_file_not_found('decrypt_from_file', $file) or return;
my $ft = Metabrik::File::Text->new_from_brik_init($self) or return;
my $data = $ft->read($file) or return;
return $self->decrypt($data);
}
sub export_keys {
my $self = shift;
my ($key_id) = @_;
$self->brik_help_run_undef_arg('export_keys', $key_id) or return;
my $gnupg = $self->_gnupg;
my $stdin = IO::Handle->new;
my $stdout = IO::Handle->new;
my $stderr = IO::Handle->new;
my $handles = GnuPG::Handles->new(
stdin => $stdin,
stdout => $stdout,
stderr => $stderr,
);
my $pid = $gnupg->export_keys(
handles => $handles,
command_args => $key_id,
);
if (! $pid) {
return $self->log->error("export_keys: export_keys failed");
}
my @lines = ();
while (<$stdout>) {
chomp;
push @lines, $_;
}
close($stdout);
waitpid($pid, 0);
return \@lines;
}
1;
__END__
=head1 NAME
Metabrik::Crypto::Gpg - crypto::gpg Brik
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2014-2022, Patrice E<lt>GomoRE<gt> Auffret
You may distribute this module under the terms of The BSD 3-Clause License.
See LICENSE file in the source distribution archive.
=head1 AUTHOR
Patrice E<lt>GomoRE<gt> Auffret
=cut
( run in 0.453 second using v1.01-cache-2.11-cpan-df04353d9ac )