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 )