App-OATH
view release on metacpan or search on metacpan
LICENSE
MANIFEST
META.yml
Makefile.PL
README
README.md
bin/oath
dist.ini
lib/App/OATH.pm
lib/App/OATH/Crypt.pm
lib/App/OATH/Crypt/CBC.pm
lib/App/OATH/Crypt/Rijndael.pm
t/001-test.t
t/qr.out
dynamic_config: 1
generated_by: 'Dist::Zilla version 6.037, CPAN::Meta::Converter version 2.150012'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: App-OATH
requires:
Convert::Base32: '0'
Crypt::Blowfish: '0'
Crypt::CBC: '0'
Crypt::Rijndael: '0'
Digest::HMAC_SHA1: '0'
Digest::MD5: '0'
English: '0'
Fcntl: '0'
File::HomeDir: '0'
JSON: '0'
POSIX: '0'
String::Random: '0'
Term::ANSIColor: '0'
Makefile.PL view on Meta::CPAN
},
"DISTNAME" => "App-OATH",
"EXE_FILES" => [
"bin/oath"
],
"LICENSE" => "perl",
"NAME" => "App::OATH",
"PREREQ_PM" => {
"Convert::Base32" => 0,
"Crypt::Blowfish" => 0,
"Crypt::CBC" => 0,
"Crypt::Rijndael" => 0,
"Digest::HMAC_SHA1" => 0,
"Digest::MD5" => 0,
"English" => 0,
"Fcntl" => 0,
"File::HomeDir" => 0,
"JSON" => 0,
"POSIX" => 0,
"String::Random" => 0,
"Term::ANSIColor" => 0,
Makefile.PL view on Meta::CPAN
"VERSION" => "1.20260324",
"test" => {
"TESTS" => "t/*.t"
}
);
my %FallbackPrereqs = (
"Convert::Base32" => 0,
"Crypt::Blowfish" => 0,
"Crypt::CBC" => 0,
"Crypt::Rijndael" => 0,
"Devel::Cover" => 0,
"Digest::HMAC_SHA1" => 0,
"Digest::MD5" => 0,
"English" => 0,
"Fcntl" => 0,
"File::HomeDir" => 0,
"File::Temp" => 0,
"JSON" => 0,
"POSIX" => 0,
[ShareDir]
[MakeMaker]
[Manifest]
[TestRelease]
[ConfirmRelease]
[UploadToCPAN]
[Prereqs]
Convert::Base32 = 0
Crypt::Blowfish = 0
Crypt::CBC = 0
Crypt::Rijndael = 0
Digest::HMAC_SHA1 = 0
Digest::MD5 = 0
English = 0
Fcntl = 0
File::HomeDir = 0
JSON = 0
POSIX = 0
String::Random = 0
URL::Encode = 0
lib/App/OATH/Crypt.pm view on Meta::CPAN
package App::OATH::Crypt;
our $VERSION = '1.20260324'; # VERSION
use strict;
use warnings;
use App::OATH::Crypt::Rijndael;
use App::OATH::Crypt::CBC;
use String::Random qw{ random_string };
sub new {
my ( $class, $password ) = @_;
my $self = {
'workers' => {
'rijndael' => App::OATH::Crypt::Rijndael->new({ 'password' => $password }),
'cbcrijndael' => App::OATH::Crypt::CBC->new({ 'password' => $password, 'type' => 'Rijndael', }),
'cbcblowfish' => App::OATH::Crypt::CBC->new({ 'password' => $password, 'type' => 'Blowfish', }),
},
'type' => q{},
'check' => 'oath',
};
bless $self, $class;
return $self;
}
sub get_workers_list {
my ( $self ) = @_;
lib/App/OATH/Crypt/CBC.pm view on Meta::CPAN
package App::OATH::Crypt::CBC;
our $VERSION = '1.20260324'; # VERSION
use strict;
use warnings;
use Convert::Base32;
use Crypt::CBC;
use Digest::MD5;
sub new {
my ( $class, $args ) = @_;
my $self = {
'password' => $args->{'password'},
'type' => $args->{'type'},
};
bless $self, $class;
return $self;
}
sub _get_crypt_object {
my ( $self ) = @_;
my $password = $self->{'password'};
my $crypt = Crypt::CBC->new({
'key' => $password,
'cipher' => $self->{'type'},
'salt' => 1,
});
return $crypt;
}
sub encrypt {
my ( $self, $data ) = @_;
my $worker = $self->_get_crypt_object();
lib/App/OATH/Crypt/CBC.pm view on Meta::CPAN
my $u = $worker->decrypt($e);
return $u;
}
1;
__END__
=head1 NAME
App::OATH::Crypt::CBC - Crypto modules for Simple OATH authenticator
=head1 DESCRIPTION
Crypto modules for CBC methods, this includes Rijndael and Blowfish
=head1 SYNOPSIS
Handles encryption and decryption for CBC Rijndael and Blowfish ciphers
=head1 METHODS
=over
=item I<new()>
Instantiate a new object
=item I<encrypt($data)>
lib/App/OATH/Crypt/CBC.pm view on Meta::CPAN
=item I<decrypt($data)>
Decrypt the given data
=back
=head1 DEPENDENCIES
Convert::Base32
Crypt::Blowfish
Crypt::CBC
Crypt::Rijndael
Digest::MD5
String::Random
=head1 AUTHORS
Marc Bradshaw E<lt>marc@marcbradshaw.netE<gt>
=head1 COPYRIGHT
lib/App/OATH/Crypt/Rijndael.pm view on Meta::CPAN
}
sub _get_crypt_object {
my ( $self ) = @_;
my $password = $self->{'password'};
my $md5 = Digest::MD5->new();
$md5->add( $password );
my $crypt_key = $md5->digest();
my $crypt = Crypt::Rijndael->new( $crypt_key, Crypt::Rijndael::MODE_CBC() );
return $crypt;
}
sub encrypt {
my ( $self, $data ) = @_;
my $worker = $self->_get_crypt_object();
my $pad = random_string( '.' x ( 16 - ( length( $data ) % 16 ) ) );
my $e = $worker->encrypt( $pad . $data );
$e = encode_base32( $e );
lib/App/OATH/Crypt/Rijndael.pm view on Meta::CPAN
=head1 NAME
App::OATH::Crypt::Rijndael - Crypto modules for Simple OATH authenticator
=head1 DESCRIPTION
Crypto modules for basic Rijndael
=head1 SYNOPSIS
Handles encryption and decryption for the basic Rijndael (not CBC) ciphers
=head1 METHODS
=over
=item I<new()>
Instantiate a new object
=item I<encrypt($data)>
t/001-test.t view on Meta::CPAN
use Test::Exception;
use Test::MockObject::Extends;
use Test::More;
use Test::Pod::Coverage;
#use Test::TestCoverage;
use Test::Trap;
#test_coverage( 'App::OATH' );
#test_coverage( 'App::OATH::Crypt' );
#test_coverage( 'App::OATH::Crypt::Rijndael' );
#test_coverage( 'App::OATH::Crypt::CBC' );
use_ok( 'App::OATH' );
use_ok( 'App::OATH::Crypt' );
use_ok( 'App::OATH::Crypt::Rijndael' );
use_ok( 'App::OATH::Crypt::CBC' );
my $app = App::OATH->new();
subtest 'Instantiate' => sub {
isa_ok( $app, 'App::OATH' );
};
subtest 'Usage' => sub {
my @usage = trap{ $app->usage(); };
is( $trap->exit, 0, 'Exits with 0' );
t/001-test.t view on Meta::CPAN
my $invalid_filename = $filename . '/invalid';
$app->set_filename( $invalid_filename );
dies_ok( sub{ $app->save_data(); }, 'Dies on invalid filename save' );
$app->set_filename( $filename );
};
subtest 'Pod Coverage' => sub {
pod_coverage_ok( 'App::OATH' );
pod_coverage_ok( 'App::OATH::Crypt' );
pod_coverage_ok( 'App::OATH::Crypt::Rijndael' );
pod_coverage_ok( 'App::OATH::Crypt::CBC' );
};
#subtest 'Coverage' => sub {
# ok_test_coverage( 'App::OATH' );
# ok_test_coverage( 'App::OATH::Crypt' );
# ok_test_coverage( 'App::OATH::Crypt::CBC' );
# ok_test_coverage( 'App::OATH::Crypt::Rijndael' );
#};
done_testing();
( run in 1.345 second using v1.01-cache-2.11-cpan-e1769b4cff6 )