RDF-Crypt
view release on metacpan or search on metacpan
lib/RDF/Crypt/Decrypter.pm view on Meta::CPAN
BEGIN {
$RDF::Crypt::Decrypter::AUTHORITY = 'cpan:TOBYINK';
$RDF::Crypt::Decrypter::VERSION = '0.002';
}
sub decrypt_bytes
{
my ($self, $text) = @_;
$text = decode_base64($text);
my $key = $self->private_key;
my $block_size = $key->size - 16;
my $iv = substr($text, 0, $block_size);
my $removal_chars = unpack('n', substr($text, $block_size, 2));
my $scrambled = substr($text, $block_size + 2);
$text = '';
my $v = $iv;
while (length $scrambled)
{
lib/RDF/Crypt/Decrypter.pm view on Meta::CPAN
$text .= substr($unxor, 0, $block_size);
}
return substr($text, 0, (length $text) - $removal_chars);
}
sub encrypt_bytes
{
my ($self, $text) = @_;
encode_base64(
$self->private_key->private_encrypt($text)
);
}
1;
__END__
=head1 NAME
RDF::Crypt::Decrypter - decrypts encrypted RDF graphs
lib/RDF/Crypt/Role/ToString.pm view on Meta::CPAN
}
sub to_string
{
my ($self, $title) = @_;
$title //= ref $self;
my $str;
$str .= ('=' x $self->_LENGTH) . "\n";
$str .= $title . "\n";
if ($self->can('private_key'))
{
$str .= $self->_key_to_string($self->private_key, 'Private Key');
}
if ($self->can('public_keys'))
{
my @keys = @{ $self->public_keys || [] };
$str .= $self->_key_to_string($keys[$_], "Public Key $_") for 0 .. $#keys;
}
$str .= ('=' x $self->_LENGTH) . "\n";
return $str;
}
lib/RDF/Crypt/Role/WithPrivateKey.pm view on Meta::CPAN
use Crypt::OpenSSL::RSA qw[];
use File::Slurp qw[slurp];
use namespace::clean;
BEGIN {
$RDF::Crypt::Role::WithPrivateKey::AUTHORITY = 'cpan:TOBYINK';
$RDF::Crypt::Role::WithPrivateKey::VERSION = '0.002';
}
has private_key => (
is => 'ro',
isa => 'Crypt::OpenSSL::RSA',
required => 1,
);
sub new_from_file
{
my ($class, $key_file) = @_;
return $class->new_from_string(scalar slurp($key_file));
}
sub new_from_string
{
my ($class, $key_string) = @_;
my $key = Crypt::OpenSSL::RSA->new_private_key($key_string);
return $class->new_from_privkey($key);
}
sub new_from_privkey
{
my ($class, $key) = @_;
$key->use_pkcs1_padding;
# OpenSSL command-line tool defaults to this...
$key->use_md5_hash;
$class->new(private_key => $key);
}
1;
__END__
=head1 NAME
RDF::Crypt::Role::WithPublicKeys - role for objects that have public keys
=head1 DESCRIPTION
=head2 Attribute
=over
=item C<< private_key >>
Read only; Crypt::OpenSSL::RSA; required.
=back
=head2 Additional Constructor Methods
=over
=item C<< new_from_file($file) >>
lib/RDF/Crypt/Signer.pm view on Meta::CPAN
BEGIN {
$RDF::Crypt::Signer::AUTHORITY = 'cpan:TOBYINK';
$RDF::Crypt::Signer::VERSION = '0.002';
}
sub sign_bytes
{
my ($self, $text) = @_;
encode_base64(
$self->private_key->sign($text),
q(),
);
}
sub verify_bytes
{
my ($self, $text, $signature) = @_;
!!$self->private_key->verify(
$text,
decode_base64($signature),
);
}
1;
__END__
=head1 NAME
t/02encryption.t view on Meta::CPAN
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very long string. A lot more than 512 bits.';
push @strings, 'SchloÃ';
my $key = Crypt::OpenSSL::RSA->generate_key(512);
my $E = RDF::Crypt::Encrypter->new_from_string($key->get_public_key_string);
my $D = RDF::Crypt::Decrypter->new_from_string($key->get_private_key_string);
is(
$D->decrypt_text( $E->encrypt_text($_) ),
$_,
) for @strings;
t/03signing.t view on Meta::CPAN
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very, very, very, very, very, very, very, ' .
'very, very, very, very, very, very long string. A lot more than 512 bits.';
push @strings, 'SchloÃ';
my $key = Crypt::OpenSSL::RSA->generate_key(1024);
my $V = RDF::Crypt::Verifier->new_from_string($key->get_public_key_string);
my $S = RDF::Crypt::Signer->new_from_string($key->get_private_key_string);
ok(
$V->verify_text($_, $S->sign_text($_)),
) for @strings;
ok(
not $V->verify_text($_, uc $S->sign_text($_)),
) for @strings;
t/04encryption-rdf.t view on Meta::CPAN
use utf8;
use Test::More tests => 1;
use RDF::Crypt;
use RDF::TrineX::Functions -all;
use RDF::Query;
my $key = Crypt::OpenSSL::RSA->generate_key(1024);
my $E = RDF::Crypt::Encrypter->new_from_string($key->get_public_key_string);
my $D = RDF::Crypt::Decrypter->new_from_string($key->get_private_key_string);
my $data = parse <<'EXAMPLE', as => 'Turtle', base => 'http://example.com/';
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix contact: <http://www.w3.org/2000/10/swap/pim/contact#>.
_:b1
rdf:type contact:Person;
contact:fullName "Eric Miller";
contact:mailbox <mailto:em@w3.org>;
contact:personalTitle "Dr.".
t/05signing-rdf.t view on Meta::CPAN
use utf8;
use Test::More tests => 10;
use RDF::Crypt;
use RDF::TrineX::Functions -all;
my $key = Crypt::OpenSSL::RSA->generate_key(1024);
my $V = RDF::Crypt::Verifier->new_from_string($key->get_public_key_string);
my $S = RDF::Crypt::Signer->new_from_string($key->get_private_key_string);
my $data1 = <<'EXAMPLE';
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix contact: <http://www.w3.org/2000/10/swap/pim/contact#>.
_:b1 #
rdf:type contact:Person;
contact:fullName "Eric Miller";
contact:mailbox <mailto:em@w3.org>;
contact:personalTitle "Dr.".
t/06manifests.t view on Meta::CPAN
eval { require Test::HTTP::Server; 1; }
or plan skip_all => "Could not use Test::HTTP::Server: $@";
plan tests => 6;
my $server = Test::HTTP::Server->new();
my $baseuri = $server->uri;
my $key = Crypt::OpenSSL::RSA->generate_key(1024);
my $V = RDF::Crypt::Verifier->new_from_string($key->get_public_key_string);
my $S = RDF::Crypt::Signer->new_from_string($key->get_private_key_string);
my $manifest = $S->generate_manifest(
'http://www.example.com/signer',
[map { join q(), $baseuri, 'test', $_ } 1..3],
);
isa_ok $manifest, 'RDF::Trine::Model';
note serialize $manifest, as => 'Turtle';
my @results =
( run in 0.306 second using v1.01-cache-2.11-cpan-4d50c553e7e )