Crypt-ZCert
view release on metacpan or search on metacpan
README.mkdn view on Meta::CPAN
$zcert->metadata->set(foo => 'bar');
# Commit certificate to disk
# (as '/foo/mycert', '/foo/mycert_secret' pair)
# Without '->new(adjust_permissions => 0)', _secret becomes chmod 0600:
$zcert->commit;
# Retrieve a public/secret ZCert file pair (as ZPL) without writing:
my $certdata = $zcert->export_zcert;
my $pubdata = $certdata->public;
my $secdata = $certdata->secret;
# Retrieve a newly-generated key pair (no certificate):
my $keypair = Crypt::ZCert->new->generate_keypair;
my $pub_z85 = $keypair->public;
my $sec_z85 = $keypair->secret;
# DESCRIPTION
A module for managing ZeroMQ "ZCert" certificates and calling
[zmq\_curve\_keypair(3)](http://man.he.net/man3/zmq_curve_keypair) from [libzmq](http://www.zeromq.org) to generate CURVE
lib/Crypt/ZCert.pm view on Meta::CPAN
if ($self->public_file && !$self->public_file->exists) {
warn "Found 'secret_file' but not 'public_file': ".$self->public_file,
" -- you may want to call a commit()"
}
if (!$self->public_file) {
warn "No 'public_file' specified; commit() will fail!"
}
my $secdata = decode_zpl( $self->secret_file->slurp );
$secdata->{curve} ||= +{};
my $pubkey = $secdata->{curve}->{'public-key'};
my $seckey = $secdata->{curve}->{'secret-key'};
unless ($pubkey && $seckey) {
confess "Invalid ZCert; ".
"expected 'curve' section containing 'public-key' & 'secret-key'"
}
$self->_set_public_key_z85($pubkey);
$self->_set_secret_key_z85($seckey);
$self->metadata->set(%{ $secdata->{metadata} })
if $secdata->{metadata} and keys %{ $secdata->{metadata} };
}
sub generate_keypair {
my ($self) = blessed $_[0] ? $_[0] : $_[0]->new;
my ($pub, $sec) = (
FFI::Raw::memptr(41), FFI::Raw::memptr(41)
);
if ( $self->_zmq_curve_keypair->($pub, $sec) == -1 ) {
lib/Crypt/ZCert.pm view on Meta::CPAN
$zcert->metadata->set(foo => 'bar');
# Commit certificate to disk
# (as '/foo/mycert', '/foo/mycert_secret' pair)
# Without '->new(adjust_permissions => 0)', _secret becomes chmod 0600:
$zcert->commit;
# Retrieve a public/secret ZCert file pair (as ZPL) without writing:
my $certdata = $zcert->export_zcert;
my $pubdata = $certdata->public;
my $secdata = $certdata->secret;
# Retrieve a newly-generated key pair (no certificate):
my $keypair = Crypt::ZCert->new->generate_keypair;
my $pub_z85 = $keypair->public;
my $sec_z85 = $keypair->secret;
=head1 DESCRIPTION
A module for managing ZeroMQ "ZCert" certificates and calling
L<zmq_curve_keypair(3)> from L<libzmq|http://www.zeromq.org> to generate CURVE
'public_key from loaded cert';
cmp_ok $zcert->secret_key, 'eq', decode_z85($zcert->secret_key_z85),
'secret_key from loaded cert';
cmp_ok $zcert->metadata->get('foo'), 'eq', 'bar', 'metadata';
ok $zcert->metadata->keys->count == 1, '1 key in metadata';
}
{ # public_file + secret_file, extant
my $pubdata = decode_zpl( path('t/inc/zcert')->slurp );
my $secdata = decode_zpl( path('t/inc/zcert_secret')->slurp );
my $zcert = Crypt::ZCert->new(
public_file => 't/inc/zcert',
secret_file => 't/inc/zcert_secret',
);
cmp_ok $zcert->public_key_z85, 'eq', $pubdata->{curve}->{'public-key'},
'public_key_z85 matches public_file';
cmp_ok $zcert->public_key_z85, 'eq', $secdata->{curve}->{'public-key'},
'public_key_z85 matches secret_file';
cmp_ok $zcert->secret_key_z85, 'eq', $secdata->{curve}->{'secret-key'},
'secret_key_z85 matches secret_file';
}
{ # public_file, nonextant
my $tempdir = Path::Tiny->tempdir(CLEANUP => 1);
my $zcert = Crypt::ZCert->new(
public_file => $tempdir .'/zcert',
);
ok $zcert->commit == $zcert, 'commit returned invocant';
my $reloaded = Crypt::ZCert->new(
( run in 0.535 second using v1.01-cache-2.11-cpan-454fe037f31 )