File: drbl-sha1pass

package info (click to toggle)
drbl 5.7.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,984 kB
  • sloc: sh: 43,522; perl: 8,820; xml: 867; makefile: 131
file content (51 lines) | stat: -rwxr-xr-x 1,215 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl
# This script is from http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz
# Applied the patch in Ubuntu 12.04 so that Digest::SHA instead of Digest::SHA1 is used. For newer perl (>= 5.9), Digest::SHA is builtin.
# Ref: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=594273
# License: GPL

use bytes;
use MIME::Base64;
# Test if using Digest::SHA or Digest::SHA1 (perl <= 5.9)
if (eval {require Digest::SHA;}) {
  # printf "Use Digest::SHA;\n";
  $sha1_mod="SHA";
} else {
  # printf "Use Digest::SHA1;\n";
  require Digest::SHA1;
  $sha1_mod="SHA1";
}

sub random_bytes($) {
    my($n) = @_;
    my($v, $i);

    if ( open(RANDOM, '<', '/dev/random') ||
	 open(RANDOM, '<', '/dev/urandom') ) {
	read(RANDOM, $v, $n);
    } else {
	# No real RNG available...
	srand($$ ^ time);
	$v = '';
	for ( $i = 0 ; $i < $n ; $i++ ) {
	    $v .= ord(int(rand() * 256));
	}
    }

    return $v;
}


($pass, $salt) = @ARGV;

unless (defined($salt)) {
    $salt = MIME::Base64::encode(random_bytes(6), '');
}

if ( "$sha1_mod" eq "SHA" ) {
  $pass = Digest::SHA::sha1_base64($salt, $pass);
}else{
  $pass = Digest::SHA1::sha1_base64($salt, $pass);
}

print '$4$', $salt, '$', $pass, "\$\n";