| line |
true |
false |
branch |
|
132
|
9 |
1 |
unless $options->{'dictionary_file_encoding'} |
|
136
|
0 |
10 |
if ($_CLASS->module_config('DEBUG')) |
|
143
|
1 |
9 |
if ($options->{'dictionary'}) { } |
|
|
1 |
8 |
elsif ($options->{'dictionary_list'}) { } |
|
|
2 |
6 |
elsif ($options->{'dictionary_file'}) { } |
|
155
|
1 |
9 |
if ($options->{'config'}) { } |
|
|
1 |
8 |
elsif ($options->{'config_json'}) { } |
|
|
2 |
6 |
elsif ($options->{'preset'}) { } |
|
167
|
1 |
9 |
if ($options->{'rng'}) { } |
|
233
|
0 |
11 |
if ($config_key eq 'LOG_STREAM') { } |
|
|
0 |
11 |
elsif ($config_key eq 'LOG_ERRORS') { } |
|
|
10 |
1 |
elsif ($config_key eq 'DEBUG') { } |
|
|
0 |
1 |
elsif ($config_key eq 'ENTROPY_MIN_BLIND') { } |
|
|
0 |
1 |
elsif ($config_key eq 'ENTROPY_MIN_SEEN') { } |
|
|
1 |
0 |
elsif ($config_key eq 'ENTROPY_WARNINGS') { } |
|
235
|
0 |
0 |
if (defined $new_value) |
|
237
|
0 |
0 |
unless &FileHandle()->check($new_value) |
|
248
|
0 |
0 |
if (defined $new_value) |
|
250
|
0 |
0 |
unless &TrueFalse()->check($new_value) |
|
261
|
0 |
10 |
if (defined $new_value) |
|
263
|
0 |
0 |
unless &TrueFalse()->check($new_value) |
|
273
|
0 |
0 |
if (defined $new_value) |
|
275
|
0 |
0 |
unless &PositiveInteger()->check($new_value) |
|
285
|
0 |
0 |
if (defined $new_value) |
|
287
|
0 |
0 |
unless &PositiveInteger()->check($new_value) |
|
297
|
1 |
0 |
if (defined $new_value) |
|
299
|
0 |
1 |
unless &EntropyWarningLevel()->check($new_value) |
|
422
|
0 |
0 |
unless $preset_name |
|
480
|
0 |
10 |
unless $preset_name |
|
489
|
1 |
9 |
if (defined $overrides) |
|
495
|
0 |
1 |
unless (&Config()->check($config)) |
|
538
|
0 |
0 |
unless (eval {
do {
$json_string = 'JSON'->new->encode($return_object);
1
}
}) |
|
602
|
0 |
1 |
if (not $options->{'suppress_warnings'} and $options->{'warn_invalid_key_names'}) |
|
611
|
0 |
0 |
unless ($defined_keys_lookup{$test_key}) |
|
620
|
9 |
8 |
if (defined $hashref->{$key}) |
|
621
|
9 |
0 |
if (&ConfigKeyAssignment()->check({$key, $hashref->{$key}})) { } |
|
624
|
0 |
0 |
unless $options->{'suppress_warnings'} |
|
660
|
108 |
0 |
if (&Symbol()->check($potential_symbol)) { } |
|
663
|
0 |
0 |
if ($warn or _do_debug()) |
|
665
|
0 |
0 |
if ($warn) { } |
|
726
|
0 |
0 |
if (not $is_valid and $options->{'croak'}) |
|
757
|
0 |
1 |
unless (eval {
do {
$ans = &encode_json($config);
1
}
}) |
|
791
|
56 |
114 |
unless defined $config->{$key} |
|
794
|
108 |
6 |
if (ref $config->{$key} eq '') { } |
|
|
6 |
0 |
elsif (ref $config->{$key} eq 'ARRAY') { } |
|
|
0 |
0 |
elsif (ref $config->{$key} eq 'HASH') { } |
|
843
|
0 |
0 |
unless $preset |
|
889
|
0 |
0 |
if ($stats{'length_min'} == $stats{'length_max'}) { } |
|
923
|
12 |
23 |
if ($config->{'case_transform'} eq 'RANDOM') |
|
926
|
23 |
12 |
if ($config->{'separator_character'} eq 'RANDOM') |
|
929
|
23 |
12 |
if (defined $config->{'padding_character'} and $config->{'padding_character'} eq 'RANDOM') |
|
972
|
0 |
20 |
if ($config->{'padding_type'} eq 'ADAPTIVE') { } |
|
977
|
12 |
8 |
if ($config->{'padding_type'} eq 'FIXED') |
|
981
|
12 |
8 |
if ($config->{'padding_digits_before'} > 0) |
|
983
|
12 |
0 |
if ($config->{'separator_character'} ne 'NONE') |
|
987
|
12 |
8 |
if ($config->{'padding_digits_after'} > 0) |
|
989
|
12 |
0 |
if ($config->{'separator_character'} ne 'NONE') |
|
993
|
20 |
0 |
if ($config->{'separator_character'} ne 'NONE') |
|
1006
|
10 |
10 |
if ($config->{'padding_type'} ne 'ADAPTIVE' and not $suppres_warnings) |
|
1007
|
0 |
10 |
if (defined $config->{'character_substitutions'}) |
|
1010
|
0 |
0 |
if (length $config->{'character_substitutions'}{$char} > 1) |
|
1066
|
10 |
0 |
unless $encoding |
|
1069
|
0 |
10 |
unless (defined $dictionary_source) |
|
1076
|
0 |
10 |
unless (defined $self->{'_CONFIG'}{'word_length_min'} and $self->{'_CONFIG'}{'word_length_max'}) |
|
1082
|
10 |
0 |
if (&blessed($dictionary_source) and $dictionary_source->isa($_DICTIONARY_BASE_CLASS)) { } |
|
|
0 |
0 |
elsif (ref $dictionary_source eq '' or ref $dictionary_source eq 'ARRAY') { } |
|
1105
|
0 |
10 |
if ($self->{'_CONFIG'}{'allow_accents'}) { } |
|
1147
|
0 |
10 |
unless (defined $config_raw) |
|
1155
|
9 |
1 |
if (ref $config_raw eq 'HASH') { } |
|
|
1 |
0 |
elsif (ref $config_raw eq '') { } |
|
1166
|
0 |
1 |
unless (eval {
do {
$config_from_json = &decode_json($config_raw);
1
}
}) |
|
1174
|
0 |
1 |
unless (&Config()->check($config)) |
|
1258
|
0 |
0 |
unless defined $new_keys->{$key} |
|
1271
|
0 |
0 |
unless (&Config()->check($new_config)) |
|
1278
|
0 |
0 |
if ($new_config->{'word_length_min'} ne $self->{'_CONFIG'}{'word_length_min'} or $new_config->{'word_length_max'} ne $self->{'_CONFIG'}{'word_length_max'}) |
|
1316
|
0 |
10 |
unless (defined $rng) |
|
1392
|
5 |
4 |
if ($self->{'_CONFIG'}{'padding_digits_before'} > 0) |
|
1395
|
5 |
4 |
if ($self->{'_CONFIG'}{'padding_digits_after'} > 0) |
|
1402
|
5 |
4 |
if ($self->{'_CONFIG'}{'padding_type'} eq 'FIXED') { } |
|
|
0 |
4 |
elsif ($self->{'_CONFIG'}{'padding_type'} eq 'ADAPTIVE') { } |
|
1404
|
5 |
0 |
if ($self->{'_CONFIG'}{'padding_characters_before'} > 0) |
|
1409
|
5 |
0 |
if ($self->{'_CONFIG'}{'padding_characters_after'} > 0) |
|
1417
|
0 |
0 |
if ($pwlen < $self->{'_CONFIG'}{'pad_to_length'}) { } |
|
|
0 |
0 |
elsif ($pwlen > $self->{'_CONFIG'}{'pad_to_length'}) { } |
|
1429
|
1 |
9 |
unless (eval {
do {
_debug('starting to generate random words');
my(@words) = $self->_random_words;
_debug('got random words=' . join(', ', @words));
$self->_transform_case(\@words);
$self->_substitute_characters(\@words);
my $separator = $self->_separator;
_debug("got separator=$separator");
my $pad_char = $self->_padding_char($separator);
_debug("got pad_char=$pad_char");
$password = join($separator, @words);
_debug("assembled base password: $password");
if ($self->{'_CONFIG'}{'padding_digits_before'} > 0) {
$password = $self->_random_digits($self->{'_CONFIG'}{'padding_digits_before'}) . $separator . $password;
};
if ($self->{'_CONFIG'}{'padding_digits_after'} > 0) {
$password = $password . $separator . $self->_random_digits($self->{'_CONFIG'}{'padding_digits_after'});
};
_debug("added random digits (as configured): $password");
if ($self->{'_CONFIG'}{'padding_type'} eq 'FIXED') {
if ($self->{'_CONFIG'}{'padding_characters_before'} > 0) {
foreach my $c (1 .. $self->{'_CONFIG'}{'padding_characters_before'}) {
$password = $pad_char . $password;
};
};
if ($self->{'_CONFIG'}{'padding_characters_after'} > 0) {
foreach my $c (1 .. $self->{'_CONFIG'}{'padding_characters_after'}) {
$password .= $pad_char;
};
};
}
elsif ($self->{'_CONFIG'}{'padding_type'} eq 'ADAPTIVE') {
my $pwlen = length $password;
if ($pwlen < $self->{'_CONFIG'}{'pad_to_length'}) {
while (length $password < $self->{'_CONFIG'}{'pad_to_length'}) {
$password .= $pad_char;
};
}
elsif ($pwlen > $self->{'_CONFIG'}{'pad_to_length'}) {
$password = substr($password, 0, $self->{'_CONFIG'}{'pad_to_length'});
};
};
_debug("added padding (as configured): $password");
1
}
}) |
|
1520
|
0 |
0 |
unless (eval {
do {
$json_string = 'JSON'->new->encode($response_obj);
1
}
}) |
|
1660
|
0 |
10 |
$stats{'dictionary_contains_accents'} ? : |
|
1673
|
0 |
10 |
if ($stats{'password_length_min'} == $stats{'password_length_max'}) { } |
|
1681
|
0 |
10 |
if ($stats{'password_length_min'} == $stats{'password_length_max'}) { } |
|
1691
|
0 |
10 |
if ($_Types_CLASS::_DEBUG) |
|
1693
|
0 |
0 |
if ($_Types_CLASS::_CAN_STACK_TRACE) { } |
|
1724
|
0 |
10 |
unless (eval {
do {
$hsxkpasswd = $_CLASS->new(@constructor_args);
1
}
}) |
|
1753
|
0 |
0 |
if ($self->{'debug'}) |
|
1754
|
0 |
0 |
unless &Config()->check($clone) |
|
1779
|
6 |
4 |
if ($config->{'symbol_alphabet'}) |
|
1782
|
0 |
10 |
if ($config->{'padding_alphabet'}) |
|
1785
|
0 |
10 |
if ($config->{'separator_alphabet'}) |
|
1821
|
0 |
10 |
unless ($max_len >= $min_len) |
|
1833
|
0 |
11334 |
if $grapheme_length < $min_len |
|
1836
|
585 |
10749 |
if $grapheme_length > $max_len |
|
1839
|
10749 |
0 |
unless ($allow_accents) |
|
1875
|
0 |
0 |
unless ($word eq $word_accents_stripped) |
|
1958
|
15 |
76 |
unless (defined $num) |
|
1968
|
0 |
90 |
unless (defined $num and $num =~ /^\d+([.]\d+)?$/sux and $num >= 0 and $num <= 1) |
|
1995
|
0 |
15 |
unless (scalar @random_numbers) |
|
1999
|
1 |
135 |
unless ($num =~ /^1|(0([.]\d+)?)$/sux) |
|
2057
|
0 |
9 |
if ($sep eq 'NONE') { } |
|
|
5 |
4 |
elsif ($sep eq 'RANDOM') { } |
|
2060
|
0 |
5 |
if (defined $self->{'_CONFIG'}{'separator_alphabet'}) { } |
|
2090
|
9 |
0 |
if ($sep) |
|
2091
|
0 |
9 |
unless (&Symbol()->check($sep)) |
|
2097
|
4 |
5 |
if ($self->{'_CONFIG'}{'padding_type'} eq 'NONE') |
|
2103
|
0 |
5 |
if ($padc eq 'SEPARATOR') { } |
|
|
5 |
0 |
elsif ($padc eq 'RANDOM') { } |
|
2106
|
0 |
5 |
if (defined $self->{'_CONFIG'}{'padding_alphabet'}) { } |
|
2138
|
0 |
9 |
if ($self->{'_CONFIG'}{'case_transform'} eq 'NONE') |
|
2144
|
0 |
9 |
if ($self->{'_CONFIG'}{'case_transform'} eq 'UPPER') { } |
|
|
0 |
9 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'LOWER') { } |
|
|
0 |
9 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'CAPITALISE') { } |
|
|
0 |
9 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'INVERT') { } |
|
|
5 |
4 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'ALTERNATE') { } |
|
|
4 |
0 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'RANDOM') { } |
|
2162
|
5 |
0 |
$self->_random_int(2) % 2 == 0 ? : |
|
2165
|
5 |
10 |
if (($i + $rand_bias) % 2 == 0) { } |
|
2175
|
8 |
12 |
if ($self->_random_int(2) % 2 == 0) { } |
|
2208
|
9 |
0 |
unless (defined $self->{'_CONFIG'}{'character_substitutions'} and scalar keys %{$$self{'_CONFIG'}{'character_substitutions'};}) |
|
2244
|
0 |
17 |
unless (&ConfigKeyDefinition()->check($key_definitions->{$key_name})) |
|
2249
|
1 |
0 |
if ($num_problems == 0) { } |
|
2277
|
0 |
8 |
unless (&PresetDefinition()->check($preset_defs->{$preset_name})) |
|
2282
|
1 |
0 |
if ($num_problems == 0) { } |
|
2320
|
0 |
9 |
unless (eval {
do {
$rng = 'Crypt::HSXKPasswd::RNG::Math_Random_Secure'->new
}
}) |
|
2323
|
9 |
0 |
if $rng |
|
2326
|
0 |
0 |
unless (eval {
do {
$rng = 'Crypt::HSXKPasswd::RNG::Data_Entropy'->new
}
}) |
|
2329
|
0 |
0 |
if $rng |
|
2332
|
0 |
0 |
unless (eval {
do {
$rng = 'Crypt::HSXKPasswd::RNG::DevUrandom'->new
}
}) |
|
2335
|
0 |
0 |
if $rng |
|
2387
|
10 |
0 |
if ($self->{'_CONFIG'}{'case_transform'} =~ /^(ALTERNATE)|(CAPITALISE)|(INVERT)|(RANDOM)$/sux) |
|
2390
|
6 |
4 |
if ($self->{'_CONFIG'}{'padding_digits_before'} > 0 or $self->{'_CONFIG'}{'padding_digits_after'} > 0) |
|
2393
|
10 |
0 |
if ($self->_passwords_will_contain_symbol or $self->{'_CACHE_CONTAINS_ACCENTS'}) |
|
2412
|
4 |
6 |
if ($self->{'_CONFIG'}{'case_transform'} eq 'RANDOM') { } |
|
|
6 |
0 |
elsif ($self->{'_CONFIG'}{'case_transform'} eq 'ALTERNATE') { } |
|
2422
|
6 |
4 |
if ($self->{'_CONFIG'}{'separator_character'} eq 'RANDOM') |
|
2423
|
0 |
6 |
if (defined $self->{'_CONFIG'}{'separator_alphabet'}) { } |
|
2430
|
6 |
4 |
if ($self->{'_CONFIG'}{'padding_type'} ne 'NONE' and $self->{'_CONFIG'}{'padding_character'} eq 'RANDOM') |
|
2431
|
0 |
6 |
if (defined $self->{'_CONFIG'}{'padding_alphabet'}) { } |
|
2520
|
6 |
4 |
if ($self->{'_CONFIG'}{'padding_type'} ne 'NONE') |
|
2521
|
6 |
0 |
if ($self->{'_CONFIG'}{'padding_character'} eq 'RANDOM') { } |
|
2522
|
0 |
6 |
if (defined $self->{'_CONFIG'}{'padding_alphabet'}) { } |
|
2524
|
0 |
0 |
if ($all_pad_chars =~ /[^0-9a-zA-Z]/sux) |
|
2529
|
6 |
0 |
if ($all_pad_chars =~ /[^0-9a-zA-Z]/sux) |
|
2534
|
0 |
0 |
if ($self->{'_CONFIG'}{'padding_character'} =~ /[^0-9a-zA-Z]/sux) |
|
2541
|
10 |
0 |
if ($self->{'_CONFIG'}{'separator_character'} ne 'NONE') |
|
2542
|
6 |
4 |
if ($self->{'_CONFIG'}{'separator_character'} eq 'RANDOM') { } |
|
2543
|
0 |
6 |
if (defined $self->{'_CONFIG'}{'separator_alphabet'}) { } |
|
2545
|
0 |
0 |
if ($all_sep_chars =~ /[^0-9a-zA-Z]/sux) |
|
2550
|
6 |
0 |
if ($all_sep_chars =~ /[^0-9a-zA-Z]/sux) |
|
2555
|
4 |
0 |
if ($self->{'_CONFIG'}{'separator_character'} =~ /[^0-9a-zA-Z]/sux) |
|
2583
|
10 |
10 |
unless $self->{'_DICTIONARY_SOURCE'} and &blessed($self->{'_DICTIONARY_SOURCE'}) and $self->{'_DICTIONARY_SOURCE'}->isa($_DICTIONARY_BASE_CLASS) |
|
2590
|
0 |
10 |
unless (uc $_ENTROPY_WARNINGS eq 'NONE') |
|
2592
|
0 |
0 |
if ($self->{'_CACHE_ENTROPYSTATS'}{'entropy_blind_min'} < $_ENTROPY_MIN_BLIND) |
|
2597
|
0 |
0 |
unless (uc $_ENTROPY_WARNINGS eq 'BLIND') |
|
2598
|
0 |
0 |
if ($self->{'_CACHE_ENTROPYSTATS'}{'entropy_seen'} < $_ENTROPY_MIN_SEEN) |
|
2630
|
0 |
40 |
if (scalar @chars < 3) |