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 )