OAuth-Lite
view release on metacpan or search on metacpan
examples/generate_rsa_keys.pl view on Meta::CPAN
use strict;
use warnings;
use Crypt::OpenSSL::RSA;
use Perl6::Say;
my $rsa = Crypt::OpenSSL::RSA->generate_key(1024);
say $rsa->get_public_key_string();
say $rsa->get_private_key_string();
lib/OAuth/Lite/SignatureMethod/RSA_SHA1.pm view on Meta::CPAN
__PACKAGE__->method_name('RSA-SHA1');
=head1 NAME
OAuth::Lite::SignatureMethod::RSA_SHA1 - RSA_SHA1 signature method class;
=head1 SYNOPSIS
# Consumer side
my $signer = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $rsa_private_key,
);
my $signature = $signer->sign($base_string);
# Service Provider side
my $verifier = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $rsa_public_key,
);
unless ($verifier->verify($base_string, $signature)) {
say "Signature is invalid!";
lib/OAuth/Lite/SignatureMethod/RSA_SHA1.pm view on Meta::CPAN
=head1 PRIVATE KEY AND PUBLIC KEY
RSA needs two keys that called public key and private key.
If you runs OAuth consumer application and want to use this RSA_SHA1 method
for signature on OAuth protocol, you have to prepare these keys.
To generate them in Perl, here is an example.
my $rsa = Crypt::OpenSSL::RSA->generate_key(1024);
my $public_key = $rsa->get_public_key_string();
my $private_key = $rsa->get_private_key_string();
And prior to use OAuth protocol with a service provider,
you have to register public key onto the service provider.
=head1 METHODS
=head2 method_name
Class method. Returns this method's name.
lib/OAuth/Lite/SignatureMethod/RSA_SHA1.pm view on Meta::CPAN
=head3 parameters
=over 4
=item consumer_secret
=back
my $signer = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $rsa_private_key,
);
my $verifier = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $rsa_public_key,
);
=head2 sign($base_string)
Generate signature from base string.
my $signature = $method->sign($base_string);
=cut
sub sign {
my ($self, $base_string) = @_;
my $private_key_pem = $self->{consumer_secret};
my $private_key = Crypt::OpenSSL::RSA->new_private_key($private_key_pem);
my $signature = MIME::Base64::encode_base64($private_key->sign($base_string));
chomp $signature;
$signature;
}
=head2 verify($base_string, $signature)
Verify signature with base string.
my $signature_is_valid = $method->verify($base_string, $signature);
unless ($signature_is_valid) {
t/03_signature_method_rsa_sha1.t view on Meta::CPAN
is(OAuth::Lite::SignatureMethod::RSA_SHA1->build_body_hash(qq{Hello World!}), q{Lve95gjOVATpfV8EL5X4nxwjKHE=});
my $public_key = <<__END_OF_PUBLIC__;
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAN4jFZ1OxLALdJcirP0eQ0ydoZ8Dc3yc/UfWMRP5Jc3rN0zwKSelZkog
I/cDdg/aXuZwdHFwwI2rfqrptkughT3pPJqmMx8zAx1nx9CRpjhLfoFbem+wa9hc
TXHlr9JvRoRAAnbdjvHE5DT+niQzp2E/H9B4a9N3thDitC/VTSFXAgMBAAE=
-----END RSA PUBLIC KEY-----
__END_OF_PUBLIC__
my $private_key = <<__END_OF_PRIVATE__;
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDeIxWdTsSwC3SXIqz9HkNMnaGfA3N8nP1H1jET+SXN6zdM8Ckn
pWZKICP3A3YP2l7mcHRxcMCNq36q6bZLoIU96TyapjMfMwMdZ8fQkaY4S36BW3pv
sGvYXE1x5a/Sb0aEQAJ23Y7xxOQ0/p4kM6dhPx/QeGvTd7YQ4rQv1U0hVwIDAQAB
AoGAQHpwmLO3dd4tXn1LN0GkiUWsFyr6R66N+l8a6dBE/+uJpsSDPaXN9jA0IEwZ
5eod58e2lQMEcVrZLqUeK/+RDOfVlZSVcPY0eBG+u+rxmUwPVqh9ghsC7JfdmQA6
cQ14Rf/Rmlm7N3+tF83CrlBnwaNEhvHk6cJrMSSyKRF5xFECQQD7rd23/SsWqLOP
uSSy9jkdSKadsDDbJ0pHgOaRSJ3WNgJbEwLdSu6AQwy6vB0Ell4p9ixJD4MbCW46
IBrPyKapAkEA4fNhWcaBawvVAJf33jyHdGVExkQUpo6JHkitU06g5Af++sFRo8rT
aj+ZImGFvGwGGMfNoMt9d3ttdoNKW6yH/wJARoHW84yBXb+1TjZYCarhJUsNInAR
t/03_signature_method_rsa_sha1.t view on Meta::CPAN
my $invalid_public_key = <<__END_OF_INVALID__;
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAMmsdxC0oP3E7yD9PX5vxUblyBEhUY9brNhJbJS55+8rxjBdo7iImoSd
lRxOVeest+mBRKqPrEgKYpsjiduIT0MiqHFdGR7DhYGtV1Sgn75+WoLj/S9t58wg
a5eBaoJl/UzNBxENLgWoI3TtdYiZoXFysMjqsFIqQKFo/fLCyZ3pAgMBAAE=
-----END RSA PUBLIC KEY-----
__END_OF_INVALID__
my $base = "hogehogehoge";
my $signer = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $private_key,
);
my $signature = $signer->sign($base);
my $expected = qq{rNZSaVtKK3Gkp6T9AwolAyMIng5xVr3TOYrTGGR8zAbUv4T4+oUQYecXf9dOBg0xrvNkkjKqJJda\nyFLYdqmK1d7JfGDzS5hzK65q2XghJjU7xlbgQQXKz0YPvk9KHSI9oO5XqlJPIGkrBNTRBn+iHeh8\npoNt4wYRZ/lICtjI/9I=};
is($signature, $expected);
my $verifier = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $public_key,
);
( run in 0.530 second using v1.01-cache-2.11-cpan-4d50c553e7e )