App-OATH

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

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

META.yml  view on Meta::CPAN

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,

dist.ini  view on Meta::CPAN

[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 0.896 second using v1.01-cache-2.11-cpan-e1769b4cff6 )