App-bmkpasswd

 view release on metacpan or  search on metacpan

bin/bmkpasswd  view on Meta::CPAN

#!perl
use strictures 2;

BEGIN {
  pop @INC if $INC[-1] eq '.';
}

use POSIX ();

use IO::Handle;

use App::bmkpasswd -all;
use Time::HiRes    qw/ gettimeofday tv_interval /;
use Try::Tiny;

my $type    = 'bcrypt';
my $bcost   = 8;
my ($bench, $strong, $check);

use Pod::Usage;
use Getopt::Long;
GetOptions(

  'benchmark!'       => \$bench,
  'strong!'          => \$strong,
  'check=s'          => \$check,
  'm|method|type=s'  => \$type,
  'workcost=s'       => \$bcost,

  'available' => sub {
    print join("\n", mkpasswd_available), "\n";
    exit 0
  },
  
  'version' => sub {
     my $bvers = $App::bmkpasswd::VERSION || '(git)';
     print(
           "App::bmkpasswd $bvers\n\n",
           "  Using Crypt::Eksblowfish::Bcrypt-", 
            $Crypt::Eksblowfish::Bcrypt::VERSION, "\n",
     );

     my @avail;
     push @avail, 'SHA256' if mkpasswd_available('sha256');
     push @avail, 'SHA512' if mkpasswd_available('sha512');
     printf '  ' . join(', ', @avail) . " available (via %s)\n",
      App::bmkpasswd::have_passwd_xs() ? 'Crypt::Passwd::XS' : 'system crypt';
     
     exit 0
   },

  'help'   => sub { pod2usage(0) },
  'man'    => sub { 
    pod2usage(-verbose => 2, -noperldoc => 1, -exitval => 0)
  },
  'usage'  => sub { pod2usage(2) },
);

my $pwd;
if (@ARGV) {
  $pwd = $ARGV[0];
} else {
  my $posix_sucks = $] < 5.010 || $^O eq 'MSWin32';
  my $term;
  unless ($posix_sucks) { 
    $term = try {; POSIX::Termios->new }
      catch {; $posix_sucks = 1; undef };
  }

  my $has_readkey; 
  if ($posix_sucks) {
    $has_readkey = try {; require Term::ReadKey; 1 };
    warn 
       "WARNING: cannot disable terminal echo, password will be visible!\n"



( run in 2.201 seconds using v1.01-cache-2.11-cpan-bbc515a03b3 )