Authen-NTLM-HTTP
view release on metacpan or search on metacpan
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: 1.4
name: Authen-NTLM-HTTP
no_index:
directory:
- inc
- t
recommends:
Crypt::DES: 2.03
Digest::MD4: 1.1
requires:
Crypt::DES_PP: 1.00
Digest::Perl::MD4: 1.0
MIME::Base64: 0
resources:
license: http://dev.perl.org/licenses/
version: 0.33
Makefile.PL view on Meta::CPAN
#!/usr/bin/env perl
use inc::Module::Install 0.91;
use strict;
use warnings;
name 'Authen-NTLM-HTTP';
all_from 'lib/Authen/NTLM/HTTP.pm';
requires 'MIME::Base64';
requires 'Crypt::DES_PP' => '1.00';
recommends 'Crypt::DES' => '2.03';
requires 'Digest::Perl::MD4' => '1.0';
recommends 'Digest::MD4' => '1.1';
test_requires 'Test';
license 'perl';
WriteAll;
lib/Authen/NTLM/HTTP.pm view on Meta::CPAN
require Exporter;
*import = \&Exporter::import;
use base qw/Authen::NTLM::HTTP::Base/;
@EXPORT = qw ();
@EXPORT_OK = qw ();
$VERSION = '0.33';
# Stolen from Crypt::DES.
sub usage {
my ($package, $filename, $line, $subr) = caller (1);
$Carp::CarpLevel = 2;
croak "Usage: $subr (@_)";
}
# Flags to indicate whether we are talking to web server or proxy
use constant NTLMSSP_HTTP_WWW => "WWW";
use constant NTLMSSP_HTTP_PROXY => "Proxy";
lib/Authen/NTLM/HTTP/Base.pm view on Meta::CPAN
# I will add the corresponding server side functions in the next version.
#
package Authen::NTLM::HTTP::Base;
use strict;
use POSIX;
use Carp;
$Authen::NTLM::HTTP::Base::PurePerl = undef; # a flag to see if we load pure perl
# DES and MD4 modules
eval "require Crypt::DES && require Digest::MD4";
if ($@) {
eval "require Crypt::DES_PP && require Digest::Perl::MD4";
if ($@) {
die "Required DES and/or MD4 module doesn't exist!\n";
}
else {
$Authen::NTLM::HTTP::Base::PurePerl = 1;
}
}
else {
$Authen::NTLM::HTTP::Base::PurePerl = 0;
}
if ($Authen::NTLM::HTTP::Base::PurePerl == 1) {
require Crypt::DES_PP;
Crypt::DES_PP->import;
require Digest::Perl::MD4;
import Digest::Perl::MD4 qw(md4);
}
else {
require Crypt::DES;
Crypt::DES->import;
require Digest::MD4;
import Digest::MD4;
}
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
require Exporter;
require DynaLoader;
*import = \&Exporter::import;
@ISA = qw (Exporter DynaLoader);
@EXPORT = qw ();
@EXPORT_OK = qw (nt_hash lm_hash calc_resp);
$VERSION = '0.32';
# Stolen from Crypt::DES.
sub usage {
my ($package, $filename, $line, $subr) = caller (1);
$Carp::CarpLevel = 2;
croak "Usage: $subr (@_)";
}
# These constants are stolen from samba-2.2.4 and other sources
use constant NTLMSSP_SIGNATURE => 'NTLMSSP';
# NTLMSSP Message Types
lib/Authen/NTLM/HTTP/Base.pm view on Meta::CPAN
my $cipher1;
my $cipher2;
my $magic = pack("H16", "4B47532140232425"); # magical string to be encrypted for the LM password hash
while (length($passwd) < 14) {
$passwd .= chr(0);
}
my $lm_pw = substr($passwd, 0, 14);
$lm_pw = uc($lm_pw); # change the password to upper case
my $key = convert_key(substr($lm_pw, 0, 7)) . convert_key(substr($lm_pw, 7, 7));
if ($Authen::NTLM::HTTP::Base::PurePerl) {
$cipher1 = Crypt::DES_PP->new(substr($key, 0, 8));
$cipher2 = Crypt::DES_PP->new(substr($key, 8, 8));
}
else {
$cipher1 = Crypt::DES->new(substr($key, 0, 8));
$cipher2 = Crypt::DES->new(substr($key, 8, 8));
}
return $cipher1->encrypt($magic) . $cipher2->encrypt($magic) . pack("H10", "0000000000");
}
##########################################################################
# nt_hash calculates the NT hash to be used to calculate the NT response #
# It takes a password and return the 21 bytes NT password hash. #
##########################################################################
sub nt_hash($)
{
lib/Authen/NTLM/HTTP/Base.pm view on Meta::CPAN
###########################################################################
sub calc_resp($$)
{
my ($key, $nonce) = @_;
my $cipher1;
my $cipher2;
my $cipher3;
usage("key must be 21-bytes long") unless length($key) == 21;
usage("nonce must be 8-bytes long") unless length($nonce) == 8;
if ($Authen::NTLM::HTTP::Base::PurePerl) {
$cipher1 = Crypt::DES_PP->new(convert_key(substr($key, 0, 7)));
$cipher2 = Crypt::DES_PP->new(convert_key(substr($key, 7, 7)));
$cipher3 = Crypt::DES_PP->new(convert_key(substr($key, 14, 7)));
}
else {
$cipher1 = Crypt::DES->new(convert_key(substr($key, 0, 7)));
$cipher2 = Crypt::DES->new(convert_key(substr($key, 7, 7)));
$cipher3 = Crypt::DES->new(convert_key(substr($key, 14, 7)));
}
return $cipher1->encrypt($nonce) . $cipher2->encrypt($nonce) . $cipher3->encrypt($nonce);
}
#########################################################################
# un_unicodify takes a unicode string and turns it into an ASCII string.
# CAUTION: This function is intended to be used with unicodified ASCII
# strings.
#########################################################################
sub un_unicodify
lib/Authen/NTLM/HTTP/Base.pm view on Meta::CPAN
This module was written without the knowledge of Mark Bush's (MARKBUSH)
NTLM implementation. It was used by Yee Man Chan to implement a Perl
DCOM client.
=head1 DEPENDENCIES
To use this module, please install the one of the following two sets of
DES and MD4 modules:
1) Crypt::DES module by Dave Paris (DPARIS) and Digest::MD4 module by
Mike McCauley (MIKEM) first. These two modules are implemented in C.
2) Crypt::DES_PP module by Guido Flohr (GUIDO) and Digest::Perl::MD4
module by Ted Anderson (OTAKA). These two modules are implemented
in Perl.
The first set of modules will be preferred by NTLM because they are
supposedly faster.
=head1 TO-DO
1) A function to compute session key.
lib/Authen/NTLM/HTTP/Base.pm view on Meta::CPAN
=head1 AUTHOR
This implementation was written by Yee Man Chan (ymc@yahoo.com).
Copyright (c) 2002 Yee Man Chan. All rights reserved. This program
is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
=head1 SEE ALSO
Digest::MD4(3), Crypt::DES(3), perl(1), m4(1).
=cut
Local Variables:
mode: perl
perl-indent-level: 4
perl-continued-statement-offset: 4
perl-continued-brace-offset: 0
perl-brace-offset: -4
perl-brace-imaginary-offset: 0
( run in 0.251 second using v1.01-cache-2.11-cpan-9a3d99fc6dc )