Authen-DecHpwd-2.006000755001750001750 011561302070 14207 5ustar00zeframzefram000000000000Authen-DecHpwd-2.006/META.yml000444001750001750 177711561302063 15633 0ustar00zeframzefram000000000000--- abstract: 'DEC VMS password hashing' author: - 'Shawn Clifford' - 'Davide Casale' - 'Mario Ambrogetti' - 'Terence Lee' - 'Jean-loup Gailly' - 'Solar Designer' - 'Mike McCauley ' - 'Andrew Main (Zefram) ' build_requires: Module::Build: 0 Scalar::String: 0 Test::More: 0 perl: 5.006 strict: 0 warnings: 0 configure_requires: Module::Build: 0 perl: 5.006 strict: 0 warnings: 0 dynamic_config: 1 generated_by: 'Module::Build version 0.38, CPAN::Meta::Converter version 2.110580' license: gpl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Authen-DecHpwd provides: Authen::DecHpwd: file: lib/Authen/DecHpwd.pm version: 2.006 recommends: XSLoader: 0 requires: Data::Integer: 0.003 Digest::CRC: 0.14 Exporter: 0 Scalar::String: 0 constant: 0 parent: 0 perl: 5.006 strict: 0 warnings: 0 resources: license: http://www.gnu.org/licenses/old-licenses/gpl-1.0.txt version: 2.006 Authen-DecHpwd-2.006/SIGNATURE000644001750001750 441511561302070 15636 0ustar00zeframzefram000000000000This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.66. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SHA1 34c481cb2456e7c438729e5ffe47fa4ee48cac13 .cvsignore SHA1 36d9a1cc3dc972d4194c80bf2c278874615290a8 Build.PL SHA1 cc866d014b2776a03d4a0d28098198baa87121e6 Changes SHA1 c3cc5da825f8df10b51844de2c0f83e32bd9d750 MANIFEST SHA1 895ed53852c915640ec6aa2ccd54e97794000e31 META.json SHA1 1e98a31999bcee33232a02bad5200fc49046b83e META.yml SHA1 2157ae40589595d6cc1585fd7279b25bcf8f5852 Makefile.PL SHA1 33252596b5db378b8990528c2993509ab6c3c187 README SHA1 e6329de2cc61d37633dbeae6a76de2a6c0db4d1c lib/Authen/.cvsignore SHA1 3f1d891c4ead1e9f41b628b5d33c7463c9803469 lib/Authen/DecHpwd.pm SHA1 84b1bc108a7e96d074e8fe9e7a4d326f8ab2482a lib/Authen/DecHpwd.xs SHA1 ec9d474d408610cc407a7a6acd6a57290ca1ffde t/ad_ii.t SHA1 e35855e0647f540961d852bc08375a55f79c4c46 t/ad_ii_pp.t SHA1 0c878ae29b417db5507ba73cb8003a9fe7d872eb t/error.t SHA1 fc008cb61eb02798d6ec02df230ef4d59bcdca12 t/error_pp.t SHA1 904d9a4f76525e2303e4b0c168c68230f223c8de t/pod_cvg.t SHA1 3f447b1d0b8a6247c3a311087f8d66da1c3ca5db t/pod_cvg_pp.t SHA1 65c75abdef6f01a5d1588a307f2ddfe2333dc961 t/pod_syn.t SHA1 02c3802728e0dd4191669855cd6fd83bcfebefdf t/purdy.t SHA1 a26610bddb1c5182c039b3b3efec9872e3d829fd t/purdy_pp.t SHA1 184c9273e3473ac7e08830e6b83b607bc4f40fb5 t/purdy_s.t SHA1 f3481010321f8d330a916d7df959adca2b7667dd t/purdy_s_pp.t SHA1 c44b75ae3c2a2ded3d620e8d7a9cc240f0f870d5 t/purdy_v.t SHA1 b609e9e46fec79dd78108d71961d331ca2bfa0fd t/purdy_v_pp.t SHA1 39855833b066d96722c23f00b99b17ea750db360 t/setup_pp.pl SHA1 296fe58b26077980410206b30534093e302f90c5 t/vms_pass.t SHA1 5a5c9c0be3c3e92a91d1d655f93e4ab0e805b116 t/vms_user.t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAk3FhDMACgkQOV9mt2VyAVFdKQCfYYF/Z2FIBaxdcDR4DWIb2bb0 fuMAoKh6Fz+rQLAAaVg5Ch828psQKyKX =mwGN -----END PGP SIGNATURE----- Authen-DecHpwd-2.006/MANIFEST000444001750001750 60011561302063 15453 0ustar00zeframzefram000000000000.cvsignore Build.PL Changes MANIFEST META.json META.yml Makefile.PL README lib/Authen/.cvsignore lib/Authen/DecHpwd.pm lib/Authen/DecHpwd.xs t/ad_ii.t t/ad_ii_pp.t t/error.t t/error_pp.t t/pod_cvg.t t/pod_cvg_pp.t t/pod_syn.t t/purdy.t t/purdy_pp.t t/purdy_s.t t/purdy_s_pp.t t/purdy_v.t t/purdy_v_pp.t t/setup_pp.pl t/vms_pass.t t/vms_user.t SIGNATURE Added here by Module::Build Authen-DecHpwd-2.006/Changes000444001750001750 623211561302063 15644 0ustar00zeframzefram000000000000version 2.006; 2011-05-07 * implement AUTODIN-II CRC hashing, delegating to Digest::CRC to perform the actual CRC calculation * in documentation, refer to the VMS function principally as "SYS$HASH_PASWORD" (which seems to be its primary name) and only secondarily as "LGI$HPWD" * in XS, use save stack to clean up temporarily allocated memory * in XS, declare "PROTOTYPES: DISABLE" to prevent automatic generation of unintended prototypes * in t/setup_pp.pl, avoid a warning that occurs if XSLoader::load() is given no arguments, which is now a valid usage * slightly reformat some C code to avoid exceeding 80 columns * include META.json in distribution * add MYMETA.json to .cvsignore version 2.005; 2010-07-30 * in XS, use the correct "PREINIT:" instead of "INIT:" to introduce variable declarations * in XS, use PERL_NO_GET_CONTEXT for efficiency * use simpler "parent" pragma in place of "base" * check for required Perl version at runtime * use full stricture in test suite * also test POD coverage of pure Perl implementation * correct spelling of "build_recommends" in Build.PL * in Build.PL, explicitly set needs_compiler to avoid bogus auto-dependency on ExtUtils::CBuilder * in Build.PL, explicitly declare configure-time requirements * remove bogus "exit 0" from Build.PL * add MYMETA.yml to .cvsignore version 2.004; 2009-03-15 * add a (hideously slow) pure Perl backup implementation for systems that can't handle XS modules * comprehensive UTF-8 tests, with non-ASCII test vectors, testing all vectors both downgraded and upgraded, in a way that also works on perl v5.6 * add casts for pointer target signedness, and other small changes to the C code, to avoid compiler warnings * small POD markup changes version 2.003; 2009-03-02 * bugfix: avoid memory leak when croaking * bugfix: ensure appropriate alignment of qword struct for 64-bit arithmetic on strict-alignment 64-bit systems * add backward-compatibility definition of bytes_from_utf8() function * disable, pending further analysis, assembler versions of the code that have been observed to result in compilation failures on some systems * remove ununsed dword_t and qword_t structs from the C code * use full stricture in Build.PL version 2.002; 2007-09-17 * bugfix: correctly handle UTF8-encoded scalars * don't use ppport.h, because it wasn't doing anything for perl v5.6+ * test POD syntax and coverage * build with Module::Build instead of ExtUtils::MakeMaker * rearrange source tree to fit Module::Build convention * complete dependency list * include signature in distribution * in documentation, separate "license" section from "copyright" section version 2.001; 2006-08-30 * add vms_username() and vms_password() functions for syntax checking and canonicalisation version 2.0; 2006-08-27 * rewrite by Zefram: based on a newer branch of Shawn Clifford's C code; proper Perlish error handling; allow arbitrary byte strings (including embedded NULs); new documentation; many test vectors version 1.0; 2003-09-11 * original version by Authen-DecHpwd-2.006/README000444001750001750 272311561302063 15232 0ustar00zeframzefram000000000000NAME Authen::DecHpwd - DEC VMS password hashing DESCRIPTION This module implements the SYS$HASH_PASSWORD password hashing function from VMS (also known as LGI$HPWD), and some associated VMS username and password handling functions. The password hashing function is implemented in XS, with a hideously slow pure Perl backup version for systems that can't handle XS. INSTALLATION perl Build.PL ./Build ./Build test ./Build install AUTHOR The original C implementation of LGI$HPWD was written by Shawn Clifford. The code has since been developed by Davide Casale, Mario Ambrogetti, Terence Lee, Jean-loup Gailly, Solar Designer, and Andrew Main (Zefram). Mike McCauley created the first version of "Authen::DecHpwd", establishing the Perl interface. This was based on Shawn Clifford's code without the later developments. Andrew Main (Zefram) created a new "Authen::DecHpwd" based on the more developed C code presently used, and added ancillary functions. COPYRIGHT Copyright (C) 2002 Jean-loup Gailly Based in part on code from John the Ripper, Copyright (C) 1996-2002 Solar Designer Copyright (C) 2006, 2007, 2009, 2010, 2011 Andrew Main (Zefram) LICENSE This module is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Authen-DecHpwd-2.006/Makefile.PL000444001750001750 233311561302063 16321 0ustar00zeframzefram000000000000# Note: this file was auto-generated by Module::Build::Compat version 0.3800 require 5.006; unless (eval "use Module::Build::Compat 0.02; 1" ) { print "This module requires Module::Build to install itself.\n"; require ExtUtils::MakeMaker; my $yn = ExtUtils::MakeMaker::prompt (' Install Module::Build now from CPAN?', 'y'); unless ($yn =~ /^y/i) { die " *** Cannot install without Module::Build. Exiting ...\n"; } require Cwd; require File::Spec; require CPAN; # Save this 'cause CPAN will chdir all over the place. my $cwd = Cwd::cwd(); CPAN::Shell->install('Module::Build::Compat'); CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate or die "Couldn't install Module::Build, giving up.\n"; chdir $cwd or die "Cannot chdir() back to $cwd: $!"; } eval "use Module::Build::Compat 0.02; 1" or die $@; use lib '_build/lib'; Module::Build::Compat->run_build_pl(args => \@ARGV); my $build_script = 'Build'; $build_script .= '.com' if $^O eq 'VMS'; exit(0) unless(-e $build_script); # cpantesters convention require MyModuleBuilder; Module::Build::Compat->write_makefile(build_class => 'MyModuleBuilder'); Authen-DecHpwd-2.006/.cvsignore000444001750001750 15411561302063 16326 0ustar00zeframzefram000000000000Build Makefile _build blib META.json META.yml MYMETA.json MYMETA.yml Makefile.PL SIGNATURE Authen-DecHpwd-* Authen-DecHpwd-2.006/META.json000444001750001750 332711561302063 15774 0ustar00zeframzefram000000000000{ "abstract" : "DEC VMS password hashing", "author" : [ "Shawn Clifford", "Davide Casale", "Mario Ambrogetti", "Terence Lee", "Jean-loup Gailly", "Solar Designer", "Mike McCauley ", "Andrew Main (Zefram) " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.110580", "license" : [ "gpl_1" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Authen-DecHpwd", "prereqs" : { "build" : { "requires" : { "Module::Build" : 0, "Scalar::String" : 0, "Test::More" : 0, "perl" : "5.006", "strict" : 0, "warnings" : 0 } }, "configure" : { "requires" : { "Module::Build" : 0, "perl" : "5.006", "strict" : 0, "warnings" : 0 } }, "runtime" : { "recommends" : { "XSLoader" : 0 }, "requires" : { "Data::Integer" : "0.003", "Digest::CRC" : "0.14", "Exporter" : 0, "Scalar::String" : 0, "constant" : 0, "parent" : 0, "perl" : "5.006", "strict" : 0, "warnings" : 0 } } }, "provides" : { "Authen::DecHpwd" : { "file" : "lib/Authen/DecHpwd.pm", "version" : "2.006" } }, "release_status" : "stable", "resources" : { "license" : [ "http://www.gnu.org/licenses/old-licenses/gpl-1.0.txt" ] }, "version" : "2.006" } Authen-DecHpwd-2.006/Build.PL000444001750001750 414311561302063 15644 0ustar00zeframzefram000000000000{ use 5.006; } use warnings; use strict; use Module::Build; Module::Build->subclass(code => q{ unless(__PACKAGE__->can("cbuilder")) { *cbuilder = sub { $_[0]->_cbuilder or die "no C support" }; } unless(__PACKAGE__->can("have_c_compiler")) { *have_c_compiler = sub { my $cb = eval { $_[0]->cbuilder }; return $cb && $cb->have_compiler; }; } if($Module::Build::VERSION < 0.33) { # Older versions of Module::Build have a bug where if the # cbuilder object is used at Build.PL time (which it will # be for this distribution due to the logic in # ->find_xs_files) then that object can be dumped to the # build_params file, and then at Build time it will # attempt to use the dumped blessed object without loading # the ExtUtils::CBuilder class that is needed to make it # work. *write_config = sub { delete $_[0]->{properties}->{_cbuilder}; return $_[0]->SUPER::write_config; }; } sub find_xs_files { my($self) = @_; return {} unless $self->have_c_compiler; return $self->SUPER::find_xs_files; } })->new( module_name => "Authen::DecHpwd", license => "gpl", dist_author => [ "Shawn Clifford", "Davide Casale", "Mario Ambrogetti", "Terence Lee", "Jean-loup Gailly", "Solar Designer", "Mike McCauley ", "Andrew Main (Zefram) ", ], configure_requires => { "Module::Build" => 0, "perl" => "5.006", "strict" => 0, "warnings" => 0, }, configure_recommends => { "ExtUtils::CBuilder" => "0.15", }, build_requires => { "Module::Build" => 0, "Scalar::String" => 0, "Test::More" => 0, "perl" => "5.006", "strict" => 0, "warnings" => 0, }, build_recommends => { "ExtUtils::CBuilder" => "0.15", }, requires => { "Data::Integer" => "0.003", "Digest::CRC" => "0.14", "Exporter" => 0, "Scalar::String" => 0, "constant" => 0, "parent" => 0, "perl" => "5.006", "strict" => 0, "warnings" => 0, }, recommends => { "XSLoader" => 0, }, needs_compiler => 0, dynamic_config => 1, meta_add => { distribution_type => "module" }, create_makefile_pl => "passthrough", sign => 1, )->create_build_script; 1; Authen-DecHpwd-2.006/lib000755001750001750 011561302063 14757 5ustar00zeframzefram000000000000Authen-DecHpwd-2.006/lib/Authen000755001750001750 011561302063 16203 5ustar00zeframzefram000000000000Authen-DecHpwd-2.006/lib/Authen/DecHpwd.xs000444001750001750 5453111561302063 20262 0ustar00zeframzefram000000000000#define PERL_NO_GET_CONTEXT 1 #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifndef Newx # define Newx(v,n,t) New(0,v,n,t) #endif /* !Newx */ #ifndef bytes_from_utf8 /* 5.6.0 has UTF-8 scalars, but lacks the utility bytes_from_utf8() */ static U8 * bytes_from_utf8(U8 *orig, STRLEN *len_p, bool *is_utf8_p) { STRLEN orig_len = *len_p; U8 *orig_end = orig + orig_len; STRLEN new_len = orig_len; U8 *new; U8 *p, *q; if(!*is_utf8_p) return orig; for(p = orig; p != orig_end; ) { U8 fb = *p++, sb; if(fb <= 0x7f) continue; if(p == orig_end || !(fb >= 0xc2 && fb <= 0xc3)) return orig; sb = *p++; if(!(sb >= 0x80 && sb <= 0xbf)) return orig; new_len--; } if(new_len == orig_len) { *is_utf8_p = 0; return orig; } Newx(new, new_len+1, U8); for(p = orig, q = new; p != orig_end; ) { U8 fb = *p++; *q++ = fb <= 0x7f ? fb : ((fb & 0x03) << 6) | (*p++ & 0x3f); } *q = 0; *len_p = new_len; *is_utf8_p = 0; return new; } #endif /* !bytes_from_utf8 */ /* * A VAX assembler version of this algorithm is available at * http://www.phreak.org/archives/The_Hacker_Chronicles_II/phun/phun303.txt * * Original C implementation by Shawn Clifford in February 1993. * * This file is adapted from hpwd.c in VMSCRACK 1.0. * Code from VMSCRACK by Davide Casale. * * Code optimizations by Mario Ambrogetti in June 1994. * * Code fixes with the help of Terence Lee. * * VMS patch 5 for John the Ripper version 1.6.32 * (C) 2002 Jean-loup Gailly http://gailly.net * license: GPL * This file is based on code from John the Ripper, * Copyright (c) 1996-2002 by Solar Designer. * * Modified for Perl by Andrew Main (Zefram) in * August 2006, with further development in September 2007 and * March 2009. */ #include #include /* byte type must be exactly 8 bits */ #if CHAR_BIT != 8 # error require CHAR_BIT == 8 #endif typedef unsigned char byte; /* word type must be exactly 16 bits */ #if USHRT_MAX != 65535U # error require USHRT_MAX == 65535U #endif typedef unsigned short word; /* dword type must be exactly 32 bits */ #if UINT_MAX == 4294967295U typedef unsigned int dword; #elif ULONG_MAX == 4294967295UL typedef unsigned long dword; #else # error no 32-bit type #endif /* optional ul64 type must be at least 64 bits, which is difficult to check * for when we're only guaranteed 32 bit arithmetic */ #if ((ULONG_MAX >> 16) & 0xffff0000UL) == 0xffff0000UL && \ (((ULONG_MAX >> 16) >> 16) & 0xffff0000UL) == 0xffff0000UL # define ul64 unsigned long #elif defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || \ defined(__INT64_MAX) || defined(__GNUC__) # define ul64 unsigned long long #endif #if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 # define ARCH_LITTLE_ENDIAN 1 #elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 # define ARCH_LITTLE_ENDIAN 0 #else # error not a recognised endianness #endif #define UAIC_AD_II 0 /* AUTODIN-II 32 bit crc code */ #define UAIC_PURDY 1 /* Purdy polynomial over salted input */ #define UAIC_PURDY_V 2 /* Purdy polynomial + variable length username */ #define UAIC_PURDY_S 3 /* PURDY_V + additional bit rotation */ typedef union { struct { #if ARCH_LITTLE_ENDIAN dword dd_low; dword dd_high; #else dword dd_high; dword dd_low; #endif } d; #ifdef ul64 ul64 q; #endif } qword; #define d_low d.dd_low #define d_high d.dd_high /* To simplify the code we do not take advantage of cpus allowing unaligned * access. On modern cpus, it cheaper anyway to make aligned accesses. */ /* Convert an unaligned little-endian integer to a host integer */ #define unalignedWord(p) (((byte *)(p))[0] | (((byte *)(p))[1] << 8)) #define unalignedDword(p) \ (unalignedWord(p) | (unalignedWord(((byte *)(p))+2) << 16)) /* Add a short value to an unaligned little-endian short. */ #define addUnalignedWord(p, x) \ { word w = unalignedWord(p) + (x); \ ((byte *)(p))[0] = w & 0xff; \ ((byte *)(p))[1] = w >> 8; \ } #if ARCH_LITTLE_ENDIAN # define qwordConstant(low, high) { { (low), (high) } } /* qword in host format */ # define normalizeQword(q) /* do not reverse order on little-endian systems */ #else # define qwordConstant(low, high) { { (high), (low) } } /* reverse a qword from little-endian to big-endian or vice-versa */ # define normalizeQword(q) \ { dword temp = unalignedDword(&(q)->d_low); \ (q)->d_low = unalignedDword(&(q)->d_high); \ (q)->d_high = temp; \ } #endif #define PURDY_USERNAME_LENGTH 12 /* must be exactly 12 chars, space padded */ /* 2^64 - 59 is the biggest quadword prime */ #define A 59 #define DWORD_MAX 0xFFFFFFFFUL #define P_D_LOW (DWORD_MAX-A+1UL) #define P_D_HIGH DWORD_MAX /* These exponents are prime, but this is not required by the algorithm * N0 = 2^24 - 3; N1 = 2^24 - 63; N0-N1 = 60 * Na and Nb are factors of N1-1 (see comments on function Purdy below) */ #define N0 0xFFFFFDUL #define N1 0xFFFFC1UL #define Na 448 #define Nb 37449 #define MASK (sizeof(qword)-1) /* mask for COLLAPSE_R2 */ static void COLLAPSE_R2(char *s, size_t len, qword *output, int isPurdyS); static void Purdy(qword *); static void PQEXP_R3 (qword *U, unsigned long n, qword *result); /* U^n cmod P */ static void PQMUL_R2 (qword *U, qword *Y, qword *result); /* U * Y cmod P */ static void PQLSH_R0 (qword *U, qword *result); /* 2^32*U cmod P */ /* The following table of coefficients is used by the Purdy polynmial * algorithm. They are prime, but the algorithm does not require this. */ static qword C1 = qwordConstant(0xFFFFFFADUL, 0xFFFFFFFFUL); static qword C2 = qwordConstant(0xFFFFFF4DUL, 0xFFFFFFFFUL); static qword C3 = qwordConstant(0xFFFFFEFFUL, 0xFFFFFFFFUL); static qword C4 = qwordConstant(0xFFFFFEBDUL, 0xFFFFFFFFUL); static qword C5 = qwordConstant(0xFFFFFE95UL, 0xFFFFFFFFUL); /* ============================================================================ PQMOD_R0(qword U) This routine replaces the quadword U with U cmod P, where P is of the form P = 2^64 - a (a = 59) = FFFFFFFF.FFFFFFFF - 3B + 1 (DWORD_MAX = FFFFFFFF = 4,294,967,295) = FFFFFFFF.FFFFFFC5 Method: Since P is very nearly the maximum integer you can specify in a quadword (ie. P = FFFFFFFFFFFFFFC5, there will be only 58 choices for U that are larger than P (ie. U MOD P > 0). So we check the high longword in the quadword and see if all its bits are set (-1). If not, then U can not possibly be larger than P, and U MOD P = U. If U is larger than DWORD_MAX - 59,then U MOD P is the differential between (DWORD_MAX - 59) and U, else U MOD P = U. If U equals P, then U MOD P = 0 = (P + 59). WARNING: several operations described below as "modulo P" are actually "mod P or without overflow"; the notation "cmod P" is used to denote this conditional mod P operation (do the modulo if an overflow occurs). We do a real "mod P" right at the end because of this optimisation. */ #define PQMOD_R0(U) \ if ((U).d_high == P_D_HIGH && (U).d_low >= P_D_LOW) { \ (U).d_low += A; \ (U).d_high = 0UL; \ } /* ============================================================================ * Inline versions of QROL1, EMULQ and PQADD_R0 for Watcom on i386 and above */ #if defined(Q_USE_ASSEMBLER) && defined(__WATCOMC__) && defined(__i386__) /* void QROL1(qword *p) * Rotate left both long words by one bit but independently */ #pragma aux QROL1 = 0xD1 0x00 /* rol dword ptr [eax],1 */ \ 0xD1 0x40 0x04 /* rol dword ptr [eax+4],1 */ \ parm [eax]; /* void emulq(dword a, dword b, qword *result) * result = a * b (32x32 -> 64 multiplication) */ #pragma aux EMULQ = 0xF7 0xE2 /* mul edx */ \ 0x89 0x03 /* mov [ebx],eax */ \ 0x89 0x53 0x04 /* mov [ebx+4],edx */ \ parm [eax] [edx] [ebx] modify [eax edx]; /* void PQADD_R0(qword *U, qword *Y, qword *result) * result = (U + Y) cmod P where P = 2^64 - A. * Warning: U and Y might both be >= P so we can still have an overflow * after subtracting P from the sum, in which case we subtract P again. */ #pragma aux PQADD_R0 = 0x8B 0x03 /* mov eax,[ebx] */ \ 0x8B 0x53 0x04 /* mov edx,[ebx+4] */ \ 0x03 0x01 /* add eax,[ecx] */ \ 0x13 0x51 0x04 /* adc edx,[ecx+4] */ \ 0x73 0x06 /* jnc NC */ \ 0x83 0xC0 A /* C: add eax,A */ \ 0x83 0xD2 0x00 /* adc edx,0 */ \ 0x72 0xFA /* jc C */ \ 0x89 0x06 /* NC:mov [esi],eax */ \ 0x89 0x56 0x04 /* mov [esi+4],edx */ \ parm [ebx] [ecx] [esi] modify [eax edx]; /* ============================================================================ * Inline versions of QROL1, EMULQ and PQADD_R0 for gcc on i386 and above */ #elif defined(Q_USE_ASSEMBLER) && defined(__GNUC__) && defined(__i386__) /* Rotate left both long words by one bit but independently */ static __inline__ void QROL1(qword* p) { __asm__("roll $1,%0" : "=m" (p->d_low) : "m" (p->d_low)); __asm__("roll $1,%0" : "=m" (p->d_high) : "m" (p->d_high)); } /* p = x * y (32x32->64) */ static __inline__ void EMULQ(dword x, dword y, qword *p) { dword dummy; __asm__("mull %3 # mull y (x in eax)\n\t" \ "movl %%eax,%0 # movl eax,p->d_low\n\t" \ "movl %%edx,%1 # movl edx,p->d_high" : "=m" (p->d_low), "=m" (p->d_high), "=a" (dummy) : "rm" (y), "2" (x) : "edx"); } /* result = (U + Y) cmod P where P = 2^64 - A. * Warning: U and Y might both be >= P so we can still have an overflow * after subtracting P from the sum, in which case we subtract P again. */ static __inline__ void PQADD_R0(qword *U, qword *Y, qword *result) { dword low, high; __asm__("movl %4,%2 # movl U->d_low,low\n\t" \ "movl %5,%3 # movl U->d_high,high\n\t" \ "addl %6,%2 # addl Y->d_low,low\n\t" \ "adcl %7,%3 # adcl Y->d_high,high\n\t" \ "jnc .LL%= # jnc label\n\t" \ ".LM%=: # label2:\n\t" \ "addl $59,%2 # addl 59,low\n\t" \ "adcl $0,%3 # adcl 0,high\n" \ "jc .LM%= # jc label2\n\t" \ ".LL%=: # label:\n\t" \ "movl %2,%0 # movl low,result->d_low\n\t" \ "movl %3,%1 # movl high,result->d_high" : "=m" (result->d_low), "=m" (result->d_high), "=&r" (low), "=&r" (high) : "m" (U->d_low), "m" (U->d_high), "m" (Y->d_low), "m" (Y->d_high)); } /* ============================================================================ * Default versions of QROL1, EMULQ and PQADD_R0 */ #else /* rotate little-endian dword *p left by one bit */ #define ROL1(p) { *(p) = (*(p) >> 31) | (*(p) << 1); } /* void QROL1(qword *p) * Rotate left both long words by one bit but independently. * On big-endian systems we must reverse all bytes to make sure * that bits propagate from more significant to least significant bytes. */ #define QROL1(p) \ { normalizeQword(p); \ ROL1(&((p)->d_low)); \ ROL1(&((p)->d_high)); \ normalizeQword(p); \ } # ifdef ul64 /* result = a * b (32x32 -> 64 multiplication) */ #define EMULQ(a, b, result) { (result)->q = (ul64)(a) * (ul64)(b); } /* result = (U + Y) cmod P where P = 2^64 - A. * Warning: U and Y might both be >= P so we can still have an overflow * after subtracting P from the sum, in which case we subtract P again. */ #define PQADD_R0(U, Y, result) \ { \ *(ul64*)(result) = *(ul64*)(U) + *(ul64*)(Y); \ if (~*(ul64*)(U) < *(ul64*)(Y)) do { \ *(ul64*)(result) += (ul64)A; \ } while (*(ul64*)(result) < (ul64)A); \ } # else /* result = a * b (32x32 -> 64 multiplication) */ static void EMULQ(dword a, dword b, qword *result) { dword lo, hi, t, p; hi = (a >> 16) * (b >> 16); t = lo = (a & 0xffff) * (b & 0xffff); p = (a >> 16) * (b & 0xffff); lo += p << 16; hi += (p >> 16) + (lo < t); t = lo; p = (a & 0xffff) * (b >> 16); lo += p << 16; hi += (p >> 16) + (lo < t); result->d_low = lo; result->d_high = hi; } /* result = (U + Y) cmod P where P is of the form P = 2^64 - a. * Warning: U and Y might both be >= P so we can still have an overflow * after subtracting P from the sum, in which case we subtract P again. */ static void PQADD_R0(qword *U, qword *Y, qword *result) { register dword carry; result->d_low = U->d_low + Y->d_low; /* Add the high longwords, checking for carry out */ carry = ~U->d_low < Y->d_low; result->d_high = Y->d_high + carry; carry = (result->d_high < Y->d_high) + (~result->d_high < U->d_high); result->d_high += U->d_high; if (!carry) return; /* no overflow */ /* In case of overflow, we may have to subtract P twice if at least * one operand was already above P. */ do { result->d_low += A; carry = result->d_low < A; result->d_high += carry; carry = result->d_high < carry; } while (carry); } # endif /* ul64 */ #endif /* asm */ /* ============================================================================ Portable C version of DEC's Purdy password hashing algorithms. output = 8 byte output buffer in host format password = up to 32 characters, upper case, without spaces encrypt = determines algorithm to use 1 -> Purdy algorithm 2 -> Purdy_V 3 -> Purdy_S (Hickory algorithm) salt = 2 byte random number username = up to 31 characters username, upper case. */ static void lgihpwd_purdy(qword *output, char *password, size_t password_len, int encrypt, word salt, char *username, size_t username_len) { int isPurdyS = (encrypt == UAIC_PURDY_S); char uname[PURDY_USERNAME_LENGTH]; /* output is kept in little-endian format until the call of Purdy() */ output->d_low = output->d_high = 0UL; if (encrypt == UAIC_PURDY) { /* Purdy algorithm requires a fixed-length username */ if(username_len < PURDY_USERNAME_LENGTH) { memcpy(uname, username, username_len); memset(uname + username_len, ' ', PURDY_USERNAME_LENGTH - username_len); username = uname; } username_len = PURDY_USERNAME_LENGTH; } else if (encrypt == UAIC_PURDY_S) { /* Hickory algorithm; Purdy_V with rotation */ addUnalignedWord(((char *)output), password_len); /* Bytes 0-1 => length */ } /* Collapse the password to the output quadword: */ COLLAPSE_R2(password, password_len, output, isPurdyS); /* Add random salt into the middle of output (unaligned access) */ addUnalignedWord(((char *)output)+3, salt); /* Collapse the username into the quadword */ COLLAPSE_R2(username, username_len, output, isPurdyS); /* Purdy() needs input in host format: */ normalizeQword(output); /* Run output through the polynomial mod P */ Purdy(output); } /* ============================================================================ This routine takes a string s of bytes and collapses them into an output quadword. It does this by cycling around the bytes of the output buffer adding in the bytes of the input string. Additionally, when the top output byte is updated, each longword in the resultant hash is rotated left by one bit (PURDY_S only). The input/output is an unsigned quadword in little-endian format. */ static void COLLAPSE_R2(char *s, size_t len, qword *output, int isPurdyS) { int r0, r1; byte *out = (byte*)output; /* Loop until input string exhausted */ for (r0 = len; r0 != 0; r0--) { out[r1 = r0 & MASK] += *s++; if (isPurdyS && (r1 == MASK)) { /* If Purdy_S and top byte */ QROL1(output); } } } /* ============================================================================ This routine computes f(U) MOD P where P = 2^64 - A. The input/output U is an unsigned quadword in host format. The function f is the following polynomial: X^n0 + X^n1*C1 + X^3*C2 + X^2*C3 + X*C4 + C5 To minimize the number of multiplications, we evaluate f(U) = ((U^(n0-n1) + C1)*U^(n1-1) + (U*C2 + C3)*U + C4)*U + C5 ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ part1 part2 To minimize the cost of U^(n1-1) we note that n1-1= 448 * 37449 where the two factors have been chosen to have the minimum of bits set in their binary expansion. So U^(n1-1) = (U^448)^37449. 448 has 3 bits set, 37449 has 6 bits set, 448*37449 has 18 bits set. */ static void Purdy(qword *U) { qword T1, T2, T3; /* intermediate values */ PQEXP_R3 (U, Na, &T1); /* T1 = U^Na */ PQEXP_R3 (&T1, Nb, &T2); /* T2 = (U^Na)^Nb = U^(n1-1) */ PQEXP_R3 (U, (N0-N1), &T1); /* T1 = U^(N0-N1) */ PQADD_R0(&T1, &C1, &T3); /* T3 = U^(n0-n1) + C1 */ PQMUL_R2 (&T2, &T3, &T1); /* T1 = U^(n0-1) + U^(n1-1)*C1 */ PQMUL_R2(U, &C2, &T2); /* T2 = U*C2 */ PQADD_R0(&T2, &C3, &T3); /* T3 = U*C2 + C3 */ PQMUL_R2 (U, &T3, &T2); /* T2 = U^2*C2 + U*C3 */ PQADD_R0(&T2, &C4, &T3); /* T3 = U^2*C2 + U*C3 + C4 */ PQADD_R0(&T1, &T3, &T2); /* T2 = part1 + part2 */ PQMUL_R2 (U, &T2, &T1); /* T1 = (part1 + part2)*U */ PQADD_R0(&T1, &C5, U); /* T1 = (part1 + part2)*U + C5 */ /* Since we did all computations with a pseudo mod P (only avoiding * overflows) we have to do a real mod P now: */ PQMOD_R0(*U); } /* ============================================================================ This routine returns U^n cmod P where P = 2^64-A. The method comes from Knuth, "The Art of Computer Programing, Vol. 2", section 4.6.3, "Evaluation of Powers." This algorithm computes U^n with fewer than (n-1) multiplies. The result is U^n cmod P only because the multiplication routine is cmod P. Knuth's example is from Pingala's Hindu algorithm in the Chandah-sutra. */ static void PQEXP_R3 (qword *U, unsigned long n, qword *result) { qword Y, Z, Z1; /* Intermediate factors for U */ int Yok = 0; /* set if Y is initialized (to avoid an extra multiply) */ Z = *U; while (n != 0) { if (n & 1) { /* If n is odd, then we need an extra x (U) */ if (Yok) { PQMUL_R2 (&Y, &Z, result); } else { *result = Z; Yok = 1; } if (n == 1) return; Y = *result; /* Copy for next pass */ } n >>= 1; Z1 = Z; PQMUL_R2 (&Z1, &Z1, &Z); /* Square Z */ } result->d_low = 1UL; /* U^0 = 1 */ result->d_high = 0UL; } /* ============================================================================ Computes the product U*Y cmod P where P = 2^64 - A. The product may be formed as the sum of four longword multiplications which are scaled by powers of 2^32 by evaluating: 2^64*v*z + 2^32*(v*y + u*z) + u*y ^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^ part1 part2 & part3 part4 The result is computed such that division by the modulus P is avoided. u is the low longword of U; u = U.l_low v is the high longword of U; v = U.l_high y is the low longword of Y; y = Y.l_low z is the high longword of Y; z = Y.l_high */ static void PQMUL_R2 (qword *U, qword *Y, qword *result) { qword stack; qword part1; qword part2; qword part3; EMULQ(U->d_high, Y->d_high, &stack); /* stack = v*z */ /*** 1st term ***/ PQLSH_R0(&stack, &part1); /* part1 = 2^32*(v*z) cmod P */ EMULQ(U->d_high, Y->d_low, &stack); /* stack = v*y */ EMULQ(U->d_low, Y->d_high, &part2); /* part2 = u*z */ PQADD_R0(&stack, &part2, &part3); /* part3 = (v*y + u*z) */ PQADD_R0(&part1, &part3, &stack); /* stack = 2^32*(v*z) + (v*y + u*z) */ /*** 1st & 2nd terms ***/ PQLSH_R0(&stack, &part1); /* part1 = 2^64*(v*z) + 2^32*(v*y + u*z) */ EMULQ(U->d_low, Y->d_low, &stack); /* stack = u*y */ /*** Last term ***/ PQADD_R0(&part1, &stack, result); /* Whole thing */ } /* ============================================================================ Computes the product 2^32*U cmod P where P = 2^64 - A. This routine is used by PQMUL in the formation of quadword products in such a way as to avoid division by the modulus P. The product 2^64*v + 2^32*u is congruent a*v + 2^32*U cmod P. u is the low longword in U v is the high longword in U */ static void PQLSH_R0 (qword *U, qword *result) { qword stack; qword X; EMULQ(U->d_high, A, &stack); /* stack = A*v */ X.d_high = U->d_low; /* X = 2^32 * u */ X.d_low = 0UL; PQADD_R0(&X, &stack, result); /* result = 2^32*u + A*v cmod P */ } MODULE = Authen::DecHpwd PACKAGE = Authen::DecHpwd PROTOTYPES: DISABLE SV * lgi_hpwd(SV *username_sv, SV *password_sv, unsigned alg, unsigned salt) PROTOTYPE: $$$$ PREINIT: STRLEN username_len, password_len; U8 *username_str, *password_str, *username_octs, *password_octs; bool is_utf8; qword hash; CODE: if(alg > UAIC_PURDY_S) croak("algorithm value %u is not recognised", alg); username_str = (U8*)SvPV(username_sv, username_len); is_utf8 = !!SvUTF8(username_sv); username_octs = bytes_from_utf8(username_str, &username_len, &is_utf8); if(username_octs != username_str) SAVEFREEPV(username_octs); if(is_utf8) croak("input must contain only octets"); password_str = (U8*)SvPV(password_sv, password_len); is_utf8 = !!SvUTF8(password_sv); password_octs = bytes_from_utf8(password_str, &password_len, &is_utf8); if(is_utf8) croak("input must contain only octets"); if(password_octs != password_str) SAVEFREEPV(password_octs); if(alg == UAIC_AD_II) { PUSHMARK(SP); XPUSHs(password_octs == password_str ? password_sv : sv_2mortal(newSVpvn((char*)password_octs, password_len))); PUTBACK; call_pv("Digest::CRC::crc32", G_SCALAR); SPAGAIN; hash.d_low = POPu ^ 0xffffffffUL; hash.d_high = 0; } else { lgihpwd_purdy(&hash, (char *)password_octs, password_len, alg, salt & 0xffff, (char *)username_octs, username_len); } normalizeQword(&hash); RETVAL = newSVpvn((char *)&hash, 8); OUTPUT: RETVAL Authen-DecHpwd-2.006/lib/Authen/.cvsignore000444001750001750 1211561302063 20271 0ustar00zeframzefram000000000000DecHpwd.c Authen-DecHpwd-2.006/lib/Authen/DecHpwd.pm000444001750001750 2667611561302063 20255 0ustar00zeframzefram000000000000=head1 NAME Authen::DecHpwd - DEC VMS password hashing =head1 SYNOPSIS use Authen::DecHpwd qw( UAI_C_AD_II UAI_C_PURDY UAI_C_PURDY_V UAI_C_PURDY_S lgi_hpwd ); $hash = lgi_hpwd("JRANDOM", "PASSWORD", UAI_C_PURDY_S, 1234); use Authen::DecHpwd qw(vms_username vms_password); $username = vms_username($username); $password = vms_password($password); =head1 DESCRIPTION This module implements the C password hashing function from VMS (also known as C), and some associated VMS username and password handling functions. The password hashing function is implemented in XS, with a hideously slow pure Perl backup version for systems that can't handle XS. =cut package Authen::DecHpwd; { use 5.006; } use warnings; use strict; use Digest::CRC 0.14 qw(crc32); our $VERSION = "2.006"; use parent "Exporter"; our @EXPORT_OK = qw( UAI_C_AD_II UAI_C_PURDY UAI_C_PURDY_V UAI_C_PURDY_S lgi_hpwd vms_username vms_password ); eval { local $SIG{__DIE__}; require XSLoader; XSLoader::load(__PACKAGE__, $VERSION); }; =head1 FUNCTIONS =over =item UAI_C_AD_II =item UAI_C_PURDY =item UAI_C_PURDY_V =item UAI_C_PURDY_S These constants are used to identify the four password hashing algorithms used by VMS. They are the C constants in VMS. C refers to a 32-bit CRC algorithm. The CRC polynomial used is the IEEE CRC-32 polynomial, as used in Ethernet, and in this context is known as "AUTODIN-II". The hash is merely the CRC of the password. C, C, and C refer to successive refinements of an algorithm based on Purdy polynomials. All of these algorithms use the salt and username parameters as salt, use the whole password, and return an eight-byte (64-bit) hash. The main part of the algorithm, the Purdy polynomial, is identical in all three. They differ in the pre-hashing, particularly in the treatment of the username parameter. In C the username is truncated or space-padded to 12 characters before being hashed in. C accepts a variable-length username. C accepts a variable-length username and also includes the password length in the hash. C also does some extra bit rotations when hashing in the username and password strings, in order to avoid aliasing. =cut use constant UAI_C_AD_II => 0; use constant UAI_C_PURDY => 1; use constant UAI_C_PURDY_V => 2; use constant UAI_C_PURDY_S => 3; =item lgi_hpwd(USERNAME, PASSWORD, ALGORITHM, SALT) This is the C function from VMS (also known as C), but with the parameters in a different order. It hashes the PASSWORD string in a manner determined by the other parameters, and returns the hash as a string of bytes. ALGORITHM determines which hashing algorithm will be used. It must be the value of one of the algorithm constants supplied by this module (see above). SALT must be an integer in the range [0, 2^16). It modifies the hashing so that the same password does not always produce the same hash. USERNAME is a string that is used as more salt. In VMS it is the username of the account to which the password controls access. VMS usernames and passwords are constrained in character set and length, and are case-insensitive. This function does not enforce these restrictions, nor perform canonicalisation. If restrictions and canonicalisation are desired then they must be applied separately. The functions C and C described below may be useful. =cut unless(defined &lgi_hpwd) { { local $SIG{__DIE__}; eval q{ use warnings; use strict; use Data::Integer 0.003 qw( natint_bits uint_shl uint_shr uint_rol uint_and uint_or uint_madd uint_cadd ); use Scalar::String 0.000 qw(sclstr_is_downgraded sclstr_downgraded); my $u32_mask = 0xffffffff; sub _u32_shl($$) { if(natint_bits == 32) { return &uint_shl; } else { return uint_and(&uint_shl, $u32_mask); } } *_u32_shr = \&uint_shr; *_u32_and = \&uint_and; sub _u32_rol($$) { if(natint_bits == 32) { return &uint_rol; } else { return $_[0] if $_[1] == 0; return uint_and(uint_or(uint_shl($_[0], $_[1]), uint_shr($_[0], 32-$_[1])), $u32_mask); } } sub _u32_madd($$) { uint_and(&uint_madd, $u32_mask) } sub _u32_cadd($$$) { if(natint_bits == 32) { return &uint_cadd; } else { my(undef, $val) = uint_cadd($_[0], $_[1], $_[2]); return (uint_and(uint_shr($val, 32), 1), uint_and($val, $u32_mask)); } } my $u16_mask = 0xffff; sub _u16_madd($$) { uint_and(&uint_madd, $u16_mask) } my $u8_mask = 0xff; sub _u8_madd($$) { uint_and(&uint_madd, $u8_mask) } sub _addUnalignedWord($$) { $_[0] = pack("v", _u16_madd(unpack("v", $_[0]), $_[1])); } use constant _PURDY_USERNAME_LENGTH => 12; use constant _A => 59; use constant _DWORD_MAX => 0xffffffff; use constant _P_D_LOW => _DWORD_MAX - _A + 1; use constant _P_D_HIGH => _DWORD_MAX; use constant _N0 => 0xfffffd; use constant _N1 => 0xffffc1; use constant _Na => 448; use constant _Nb => 37449; use constant _MASK => 7; use constant _C1 => pack("VV", 0xffffffad, 0xffffffff); use constant _C2 => pack("VV", 0xffffff4d, 0xffffffff); use constant _C3 => pack("VV", 0xfffffeff, 0xffffffff); use constant _C4 => pack("VV", 0xfffffebd, 0xffffffff); use constant _C5 => pack("VV", 0xfffffe95, 0xffffffff); sub _PQMOD_R0($) { my($low, $high) = unpack("VV", $_[0]); if($high == _P_D_HIGH && $low >= _P_D_LOW) { $_[0] = pack("VV", _u32_madd($low, _A), 0); } } sub _ROL1($) { $_[0] = pack("V", _u32_rol(unpack("V", $_[0]), 1)); } sub _QROL1($) { _ROL1(substr($_[0], 0, 4)); _ROL1(substr($_[0], 4, 4)); } sub _EMULQ($$$) { my($a, $b, undef) = @_; my $hi = _u32_shr($a, 16) * _u32_shr($b, 16); my $lo = _u32_and($a, 0xffff) * _u32_and($b, 0xffff); my $carry; my $p = _u32_shr($a, 16) * _u32_and($b, 0xffff); ($carry, $lo) = _u32_cadd($lo, _u32_shl($p, 16), 0); ($carry, $hi) = _u32_cadd($hi, _u32_shr($p, 16), $carry); $p = _u32_and($a, 0xffff) * _u32_shr($b, 16); ($carry, $lo) = _u32_cadd($lo, _u32_shl($p, 16), 0); ($carry, $hi) = _u32_cadd($hi, _u32_shr($p, 16), $carry); $_[2] = pack("VV", $lo, $hi); } sub _PQADD_R0($$$) { my($u, $y, undef) = @_; my($ulo, $uhi) = unpack("VV", $u); my($ylo, $yhi) = unpack("VV", $y); my($carry, $rlo, $rhi); ($carry, $rlo) = _u32_cadd($ulo, $ylo, 0); ($carry, $rhi) = _u32_cadd($uhi, $yhi, $carry); while($carry) { ($carry, $rlo) = _u32_cadd($rlo, _A, 0); ($carry, $rhi) = _u32_cadd($rhi, 0, $carry); } $_[2] = pack("VV", $rlo, $rhi); } sub _COLLAPSE_R2($$$) { my($s, undef, $isPurdyS) = @_; for(my $p = length($s); $p != 0; $p--) { my $pp = $p & _MASK; substr($_[1], $pp, 1) = pack("C", _u8_madd(unpack("C", substr($_[1], $pp, 1)), unpack("C", substr($s, -$p, 1)))); if($isPurdyS && $pp == _MASK) { _QROL1($_[1]); } } } sub _PQLSH_R0($$) { my($u, undef) = @_; my($ulo, $uhi) = unpack("VV", $u); my $stack = pack("VV", 0, 0); my $x = pack("VV", 0, 0); _EMULQ($uhi, _A, $stack); $x = pack("VV", 0, $ulo); _PQADD_R0($x, $stack, $_[1]); } sub _PQMUL_R2($$$) { my($u, $y, undef) = @_; my($ulo, $uhi) = unpack("VV", $u); my($ylo, $yhi) = unpack("VV", $y); my $stack = pack("VV", 0, 0); my $part1 = pack("VV", 0, 0); my $part2 = pack("VV", 0, 0); my $part3 = pack("VV", 0, 0); _EMULQ($uhi, $yhi, $stack); _PQLSH_R0($stack, $part1); _EMULQ($uhi, $ylo, $stack); _EMULQ($ulo, $yhi, $part2); _PQADD_R0($stack, $part2, $part3); _PQADD_R0($part1, $part3, $stack); _PQLSH_R0($stack, $part1); _EMULQ($ulo, $ylo, $stack); _PQADD_R0($part1, $stack, $_[2]); } sub _PQEXP_R3($$$) { my($u, $n, undef) = @_; my $y = pack("VV", 0, 0); my $z = pack("VV", 0, 0); my $z1 = pack("VV", 0, 0); my $yok = 0; $z = $u; while($n != 0) { if($n & 1) { if($yok) { _PQMUL_R2($y, $z, $_[2]); } else { $_[2] = $z; $yok = 1; } if($n == 1) { return; } $y = $_[2]; } $n >>= 1; $z1 = $z; _PQMUL_R2($z1, $z1, $z); } $_[2] = pack("VV", 1, 0); } sub _Purdy($) { my $t1 = pack("VV", 0, 0); my $t2 = pack("VV", 0, 0); my $t3 = pack("VV", 0, 0); _PQEXP_R3($_[0], _Na, $t1); _PQEXP_R3($t1, _Nb, $t2); _PQEXP_R3($_[0], (_N0 - _N1), $t1); _PQADD_R0($t1, _C1, $t3); _PQMUL_R2($t2, $t3, $t1); _PQMUL_R2($_[0], _C2, $t2); _PQADD_R0($t2, _C3, $t3); _PQMUL_R2($_[0], $t3, $t2); _PQADD_R0($t2, _C4, $t3); _PQADD_R0($t1, $t3, $t2); _PQMUL_R2($_[0], $t2, $t1); _PQADD_R0($t1, _C5, $_[0]); _PQMOD_R0($_[0]); } sub lgi_hpwd($$$$) { my($username, $password, $alg, $salt) = @_; if($alg > UAI_C_PURDY_S) { die "algorithm value $alg is not recognised"; } $salt = uint_and($salt, 0xffff); # This string downgrading is necessary for correct behaviour on # perl 5.6 and 5.8. It is not necessary on 5.10, but will still # slightly improve performance. $username = sclstr_downgraded($username, 1); $password = sclstr_downgraded($password, 1); die "input must contain only octets" unless sclstr_is_downgraded($username) && sclstr_is_downgraded($password); if($alg == UAI_C_AD_II) { return pack("VV", Digest::CRC::crc32($password)^0xffffffff, 0); } my $isPurdyS = $alg == UAI_C_PURDY_S; my $output = pack("VV", 0, 0); if($alg == UAI_C_PURDY) { $username .= " " x 12; $username = substr($username, 0, _PURDY_USERNAME_LENGTH); } elsif($alg == UAI_C_PURDY_S) { _addUnalignedWord(substr($output, 0, 2), length($password)); } _COLLAPSE_R2($password, $output, $isPurdyS); _addUnalignedWord(substr($output, 3, 2), $salt); _COLLAPSE_R2($username, $output, $isPurdyS); _Purdy($output); return $output; } 1; }; } die $@ if $@ ne "" } =item vms_username(USERNAME) Checks whether the USERNAME string matches VMS username syntax, and canonicalises it. VMS username syntax is 1 to 31 characters from case-insensitive alphanumerics, "B<_>", and "B<$>". If the string has correct username syntax then the username is returned in canonical form (uppercase). If the string is not a username then C is returned. =cut sub vms_username($) { return $_[0] =~ /\A[_\$0-9A-Za-z]{1,31}\z/ ? uc("$_[0]") : undef; } =item vms_password(PASSWORD) Checks whether the PASSWORD string is an acceptable VMS password, and canonicalises it. VMS password syntax is 1 to 32 characters from case-insensitive alphanumerics, "B<_>", and "B<$>". If the string is an acceptable password then the password is returned in canonical form (uppercase). If the string is not an acceptable password then C is returned. =cut sub vms_password($) { return $_[0] =~ /\A[_\$0-9A-Za-z]{1,32}\z/ ? uc("$_[0]") : undef; } =back =head1 SEE ALSO L =head1 AUTHOR The original C implementation of C was written by Shawn Clifford. The code has since been developed by Davide Casale, Mario Ambrogetti, Terence Lee, Jean-loup Gailly, Solar Designer, and Andrew Main (Zefram). Mike McCauley created the first version of C, establishing the Perl interface. This was based on Shawn Clifford's code without the later developments. Andrew Main (Zefram) created a new C based on the more developed C code presently used, and added ancillary functions. =head1 COPYRIGHT Copyright (C) 2002 Jean-loup Gailly Based in part on code from John the Ripper, Copyright (C) 1996-2002 Solar Designer Copyright (C) 2006, 2007, 2009, 2010, 2011 Andrew Main (Zefram) =head1 LICENSE This module is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. =cut 1; Authen-DecHpwd-2.006/t000755001750001750 011561302063 14454 5ustar00zeframzefram000000000000Authen-DecHpwd-2.006/t/pod_cvg_pp.t000444001750001750 14511561302063 17076 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/pod_cvg.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/setup_pp.pl000444001750001750 32711561302063 16767 0ustar00zeframzefram000000000000require XSLoader; my $orig_load = \&XSLoader::load; no warnings "redefine"; *XSLoader::load = sub { die "XS loading disabled for Authen::DecHpwd" if ($_[0] || "") eq "Authen::DecHpwd"; goto &$orig_load; }; 1; Authen-DecHpwd-2.006/t/pod_cvg.t000444001750001750 27311561302063 16401 0ustar00zeframzefram000000000000use warnings; use strict; use Test::More; plan skip_all => "Test::Pod::Coverage not available" unless eval "use Test::Pod::Coverage; 1"; Test::Pod::Coverage::all_pod_coverage_ok(); 1; Authen-DecHpwd-2.006/t/purdy.t000444001750001750 3630211561302063 16165 0ustar00zeframzefram000000000000use warnings; use strict; use Scalar::String qw(sclstr_downgraded sclstr_upgraded); use Test::More tests => 401; BEGIN { use_ok "Authen::DecHpwd", qw(lgi_hpwd UAI_C_PURDY); } while() { my($salt, $username, $password, $hash) = split; $username = pack("H*", $username) if $username =~ s/\A\*//; $password = pack("H*", $password) if $password =~ s/\A\*//; $hash = pack("H*", $hash); is lgi_hpwd(sclstr_downgraded($username), sclstr_downgraded($password), UAI_C_PURDY, $salt), $hash; is lgi_hpwd(sclstr_upgraded($username), sclstr_upgraded($password), UAI_C_PURDY, $salt), $hash; } 1; __DATA__ 50917 unclasping eviscerate 2173ea3940b990c5 50482 jams daylight 2bb8a232fbc3e299 32451 regurgitation Portsmouth 32afa55e2701240b 37825 Sukarno orthodoxes 43dc30df1e8b1756 23197 cartridge spliced 18ec4c4f4200bf1b 59499 solubles assassinate 4d32bec044939111 58414 upsurge Phoenix ca283c9c87cdd433 59512 Casablanca emasculating 3d48b1a76bac2a72 26962 Yenisei growing 99654fa7406d346d 3755 Avicenna demolishing 8c99f82e714f87ee 10311 instantaneous prized bf9b06436508459f 41216 dreamer punchy 152dbb5aba1c37f1 40670 Barber dowelled 4bbe28dfeb876aed 6353 unlearned eloping 41c3bebf40033458 54771 farm disturbingly e7bfae8ca773a9da 43455 philosophizes paperback 79f6ba0aa558e019 58091 caesareans Banjarmasin 01104cecd35d70d6 41077 plaints conceited 4c05359668752fee 47365 debris drown 749dd3cca2e8fb0c 10135 huffier uniforms 4b17506ff6d3fdc3 23234 replying repatriate e92f02b7840d166b 11450 minimum exampled d5f398a84c235e79 28980 subtitle Edinburgh 258ddb4b5ca5bfd0 10298 sailboats prying b4d68355676365fc 48333 heterosexuals librettists 52be595fe7df0640 54741 esters Annette d0ea41036531b43c 34699 catechism cable ad20518d562c34d7 12678 celebrities patientest b7bd3da75850290e 2480 autistics blockade 4d858b7ef7e4ae09 14234 Azazel uncorrelated 24b4a1f72a8841dc 8583 pretender grows f6219a31895058bd 32132 Cinderellas Everest bf1600d28364e567 43566 traded spectacles ac98ec43215bd993 27717 elate spry 307f785aa90c55c5 33771 declined contumely b792dfdd9f295353 45449 bewildered refed 653b12f15e49973e 48546 orchestra snitch 766b3e2151426ef6 65349 unashamed terror a52e6d43679edacf 10783 squadding perspicacious 952f7ee350fd15ef 23600 croaks righteous 72b7013b685edc7d 24897 sunning budding b48ac99f4f5f6161 11302 fazing pinpricks 1f74f437fd5a296f 59473 confluent enfolded 0c2a6a9c6e5404da 5081 branches speechless e50b6a3d67bac1e2 43679 limpid redwood dcc3be4296bd10db 43103 legislation Acheson 11f965bfd4c50222 57810 candelabra certainest 7fae0fdf20d26895 25919 xenon tonsillitis 883081735692e435 49158 subpoenaed Yellowstone bdd8adf8695d8904 15030 fleeter reconnoiters 2ecef5e8561c4ca0 12828 cerebellums payoffs a94936398c312bf3 30462 independents archers 2a474319d7af3e21 50444 nationalities telltale bcd5b7987b2f0b16 37992 magnetized camper e31a50ed3a355f0f 5249 Piedmont naiads 585ca8aac2fb1301 29915 airways Mexicans 3d786383fbb4ca9b 4014 compelling snorkeled 412c33d896369888 7080 swindlers corporals f0b4ae14e617ba78 61910 build outriders 721f44a234d6ba09 49483 shanties tryouts 4f224ff06f671034 48962 presets firestorms 402674708a7dbd98 24032 clack Theresa 6cc9d24178b08380 49908 Afghans speckles 1c81362f9d344a54 8309 Gila functional 3a4331f579fccdb5 16585 localing innovative d40fcc7b479d78fe 53946 reapportioned spaniel a2028831ef5dabcb 29849 sequined corporations 88e0129d9813f71d 36043 misquote anniversaries 5a332e09f26e1037 58509 studded emulating cfd5e9f0654f50d7 18025 unclasps Minolta d06a815a8ea2af1f 46623 upheld binging 21ba4c1e410f0b2f 62399 decompose sonatas 9f5695a57b629496 61285 packet wan 41e180375f081529 16030 heartaches maturation d3b4e4abc7cf1c50 26741 banquets razed ddc8624e02d74cc7 38398 caulked unassigned 76f73995c28b11aa 53377 demagogs branding d3b5c73fce49fa05 32981 hydraulics fleshier 2e16dafb217c97d6 18206 tourists anyhow 8bbf1a205bc2e3d3 52705 trickiness Poe bd1de4903d9a80e8 63160 rig lactate f15f9bcb8631440d 4129 portability Kayla 88ae53fb9ebfc921 62274 laze dolloped 178f242cce7a00d8 1222 palimony Nanchang 97245ba080badd08 35741 chatters traumatizing 5edcc3c484346d2f 48874 rugging Trujillo db5e24c74129efb2 56315 detoxing contour c2181e40ca8a5739 65215 stridently swamping 8cadcf6b4c376f65 51574 sensor tributes 108c235708572ae5 59724 insurgences swaddled 78515450c5128345 25998 notations skillets 16c12ebe78617044 37111 rain Bridget 318f9bcee17253ea 54267 burdening Salerno ac9672930aeefbb9 16499 Cerf revived 664f851dd8f61b99 24056 stuffy bourgeois 22a9828be0159bbe 4479 stars creak f3d8359b416470b7 3410 mushes westerners bedbf5073d92d030 59737 Chappaquiddick repudiated e5ff41bcf60c1573 29704 ids clomped 0a911a5f08240917 365 mullah drivel 4e710db11447581e 1309 *7c5d15969f7568e89c49c58e00c342da43a7ab883b247051a1a3aa91 *39d833548294a077f4656d93b2206eb4 e4bb6344e73c4310 2644 *a5ce954374c4e698d92d5a493adca9835da2a166ef484050119dda22ff00456ee74b1c8f27d4bb *f418127f4870a887c9106fc6782287a8f863c75b83117d5b7802c9e54aef0606f8492eb7312c 8d4e9007e40389d6 63778 *52ec0f82328a66318e25 *b917c57e46455827e5264061e6 39784b6daa533245 64825 *1f84af8a3310e3fbefef9c *677d4531d1483ff8d697e04b27c46b691dbd1cc5db4e25a920da541d27831b265d5704 2bcc67ba462b888c 4008 *6f56e9f3e10351c24c0b83ce9a9d37696d68fffff1d1dda0630172b7727b9ead324c48 *4866ee9492fe0eacb57f21b6e0e75263679441751874c8c9019af9f010c59f1c056fe6fd923ede 60210dbc58c03ffc 23588 *015cfcf26535 *92 f3a4c04a4d5da5af 19274 *8a39cbd8349fac1e9b712d221c73845d33b983e290bd0a6d8d648409cd45070b16ffb54f *c8f4eb9a92a28443b9dacda925f1b7 2117c115ea8ac651 14053 *9a3376f4bdb7b7e4ed7a2d2d7ac9cc70d9aed15dee6be59cdd *743a23c3beb32a8aefb417a42469300f85e809a5041bcf20ba478712bfdf3e09e1 ee52d1f3fe73e570 2283 *8e7f2ee57118ebbb17583c6474da939f *8744dd2418200045101ab6f91f8bed7216310124388ad1 4d956631d49791a3 7490 *24351ed636f9eaed6ea6a726ce6501f44e1a5cafd092e25a0efe97 *d78488f97628ae748441 2f60ba5d8329f14b 1693 *8e *99c1435884e19ba407c1ae1f2947a91d76 820b2764f4f932bc 61321 *7ad867e760f8d001b7877dce54bc8a99666d73fd11991d09ac5fcb313fcdaedf *5ef0f75f375950e566f6d757e622b19443741db8f72bf7e986e42babc2175b465d134d1493 76b86b713ac1cb38 44456 *fb *a2817784c806e7006677078e0a48dd989cc0 ba70ab71d02777ac 39270 *945b7e9a34810c8bdb401dce909fb608f92f34af2ac9 *dd61d728b60730134e08dedf1ec6959fd207af840b 7cb68d590c0b36fc 25617 *30c4bfd6a992 *887d62e9fd7b8ff6f7afa2c747b71ac521057e3beced0ce29fce7f13f134fa7e0394c3 d3586341614868b8 25362 *87ef1991e36468e84798b9c086adc681813cd46a *39 bbfccad4337d357c 41450 *1f90ac5ca0d77ef58964c543e8 *f7f4ea3fcd802c8df66bb1ea42b4807c 322fc0fb5c975831 62262 *a7fc2db715ff2104dedf89ee * 32975accf82f3671 5735 *f64881709c999604d3ea15fd69d98e8cfa5e72f3d1d1 *c7d86e c65f252ef03bee51 28320 *b7a559b2033a3d097c1025bd92880e6459a2411323 *72c5844ef656 9cd2a2c3842082a9 24597 *edf57a35717fab9421 *36c8cba0a0bda1b7ff1890156e3c3c6a2f7ce0d78f93b1a9e4e7d332 a83d7a7a7a04e40e 50069 *861af199434770e4 *ab2c86ea5e18 cf1e6aaad6daa23b 17152 *02633a819035813235df214b90e84794047a9544c75fad0b2f4e2ffbfea82ff02243930b927bcc *cca6a8b77a36a98867630dcfdd1df2bcbe54110b4a2f96a0dbc93813405f9d6162a10ca5f531b8 ef0d65570fffe313 27302 *8dd87c81e273ade84eb9f596448172b8900a3c12e8df402e421d9d466a7b262337e18f *c201da658943837370519fb8ecdac311df98e2083eb9efb24562e3b03fa5f0590fb20f95dc121a 4c20e60449d1ad14 18241 *7574dc952049108be4a9f68c4c7269797d *33374b2bccb44f01a0c0807ca3c39430e7a9be182d133c0af30d478f80063c672f0a8efbc356d5 897852904358c569 54687 *b743e02b25bb1e69690968b7f0dd211c6a80cd0eebc058ff9e7f3f362aa4a8c39e66 *dd132868486576706e2c6f95429f162abe2eb0d83bd7478c870444522a4c1ffb16 c9ff305055f31dee 27356 *2d509445f251f3408c1af500b7567d8a19d806c1 *a16e513770a3ba9337085e2f33afcc7d94576106a9aeef50ac190e16 3720c6d8793fb8f3 23623 *539c7aa99a3c63c41b423a02e3da617dd3672a98250bc71627fd7d *d26eb59a1370a55a369df40f62c1499f177ef38df2d2ff387d736b3a95f7156664 495e7dd95919f26b 40851 *cb3fd90c0bc545d776af70eac7bd96 *8883c4e7eb 2309bf41b03518f6 566 *c2729de86ca2b2c77d0c48e51f60e79d394b70ec5ea94aaa7796a10985402eb5 *a9e0678237db62bfb6920a6cd8adcc620a9c6a67858aa540a1 41a16a7b4ea5b850 63818 *9a32036bf4afff24fcd600661f817485c2 * 8c8c621458484e8b 49387 *68be012990bb2c0229478eace809f64417c462c0d752cefda5 *af89831b6dfc1679af ea7d3661d2f44f2f 13315 *c9f785ea92f01d424ed69cb03648699cab6c21dac680 *b525c1faf2dbb8719d1b3516f1d6c2cc98ab69541a258649 187c429f9929b2c5 30206 *39 *49cd11d5fc6a2bdc68d3584a0e92cb78315bbe562a3cbab2 fc7a4f70eaaf9f01 45942 *23 *5c51e2d3 1306c0e4e85abc02 22736 *ccc7d845466d61be9a5971e0a55de0b5b16e87ba121c6f44 *906bdcf51b6112dc1c05d5e6bb e77edf5580a2ac81 62601 *33ddeda859 *3c68d76cb96b1738a948d8d60da98769f426b6d50f86ec 9b711c2645b960a0 37938 *7e2d0b94b312ce476bd61331f810f5956bab1baeed13ac0d069ab8b56406e3 *bad377af15de12127d bac8799da9af28bf 16581 *ac312bee0d3fd8814be16489a4931313be *05aa3f9fe0c399e14470f1f64887b51fa38f9f 609c12cb12ad34db 15653 *0ce145500eae256a2c20ecbdbdf52b2a6b80e5737a670bb3d0839650910f9f1d20 *4c3ee52ebf1cd46848f77888f368b36c54b58742003b1047dd39656f07b42b680b1284b09dfa 06841347360ce834 6277 *c6893f277f8f0ca84913a1d4c3b8a63993c472ead14e73c093b2 *aad25c24c5fc679cf33ffaa1fbff3915bda977ecf0b3a76f28195f 267698d5631fb5f0 7054 *407c804963b77c73f95fffc3a8062b56d923be0dd076a8667aebee294794d7 *715bda23f39964359bc0 b74bfce3d701cc95 32870 *01f8df4d727b639bf4907cf0f1 *027d1ca4daf80d35461799f00972563b19b3689e1166a0121a9f0e0743bd0462 70bd0126f9e7b7d5 56693 *842eaa9d85c6 *2d212d440015d1b9d95b7a8a153262dd5d80efcc 9ab087d8236964e0 59726 *5e222dfa41 *91d25df8b529b0eefc2fd0f018dfed8589daba765b6f1f7d49e586c5b6c64719c1 f27743bce0dbde49 38241 *e824d32fc615838ef51c4bc1aab3e325c649 *1c48cc9f476bd4874c229b110918bf939cd12bdf8da839a5d739b9e94b665badc8c8f0fabf1b bfb7f11ff1e82e70 18013 *5e *59522949fd17ef13aff50af1532f946a134deb919c b95b08449eb07570 44143 *891ce9077a607e28ac9adca4993b8c23ff5be604258ee674201bd6a498796ed3 *7cfa0088 f07d66df8b630c27 12822 *5ef8f765865e31a533b41670743fc83aabfa27f1e6159c23 *06d4d7161bff2d6fc498a9efbe5ce08b1e6c89470384d8bddfee 7a73017b21cd63eb 46758 *2dfcc3407bb658781dfcae9cbad6d89aa722c2 *0cdf55318582c20eef938ed223b0ba5c6e41 10e0f16f3cbf258d 10214 *04d03a53ef7cffff48 *f842595d d3142bf3d89080bb 28171 *5028f20bfbb87c *bf9606cea79b8e3df637b35d7f12e9e3 c6b929f9d913ca91 15346 *5f97f438c482cd73c50845e132ced839f46f6c2bc10619fe660fe5f8e612e59112163d07 *4ec58241e1ca3e80af25b65486e3746e8811acb3820f89958cb12c59f14e1dd02881b057c43e adc38a6c38a1d511 53284 *39831a78c784063dd836b76ba5008f41 *e6cb8a2354674c53caef1a7afaca2c 77ef3a47c1131f53 15557 *38dd2066f930eb5d9de73a7e3a1ccfe2266eeabdfb46df74c248e240a7469d26 *7722c0bfde0a4b899062b0 b1aa9e84824d3924 26467 *6640456d6682921d20edafd0959f69 *703856c1e2cf746cdbf324df bae3252a1aae2375 18831 *5c6cc0f0595b0936da9eae *de0c27052f7fceaa2ce94b5be3953370d6b3922c3d69bc98a4dba58b d0a2aafb636997ff 17507 *08a87475a5d017645a8d8e5d6f5c71ef1524ef05c508d953bf9433b97ef2 *1e663a22b77d8d3a1afaf2fe7c7f3c603befe445fa0136be65543a161a69a4dfe0483b26 fa288d80ce8a2409 9052 *0f11784ed432ff6133f146 *76a8125c0f011f78af6a1253d9179fc37942bbb7024f10543dcadbdd77a5ad40f5cd1a8f7b 03a8ccca939e5b3e 14899 *24ec2cb26dee05334b1ae7299487f3abd6f0a06e26fc679845ebf9e9276102624dff7ed6d929a5 *e36834b238c392a1a40f780df3fa0e7ad1888f7a9d651829f5d3f3dcc08b872bd3b3fa1023 ee35844fee17a057 60053 * *a3023b5e194a59fd738651cc7d0d6ec0dfa6226da7 b216b37d601fccab 22976 *3ca18b18899b494cb435adeb59627fe5a3877cce4b61860512d9c9067c73a42d2d3c7ae5 *fa898d4b150018579aa0ad7d e794fd633f86b621 54496 *7de90322ef4eb737b35866c11aa1838c963ec143f607 *294b acf95eb8b2848774 52965 *25ffe151457ef83a7ce8f7118fa8b3ad2ccdb1ac *7e37d5fa79ca678951e54f1d30384cc2b954f50bd37c11 499e70ab0da02882 33116 *0f2492016ce746fb299fb026edbc *36c67ec91ce160605a2f0ecb859479d13adea777a46b3c31 e5a4179f16c28db5 52698 *8eed6a1c5b1677767ba5a05e369e6794af6487c5a1ac67269bc3 *6fe97359fe6a0da4bcea8d ce53456980584652 34485 *4b745f538b *0dd33c806f0059a0c99b12016712855fe74b2535cf9c96e693ee b5bf11a039bb2f22 18911 *b002322c7428088dacf4b2b5429c74f2dcbbb476532c1c4b3ff2 *684363a440ffa019ba4f07574edcf3 774f1188ad741c1a 62230 *18df730441280bfa37d5cb00d6b584822849f7fc76ac16e10d4aca571f *981495f01747dc76b242962cb67de72b5b680613f21c25897642f91e7b08de87ff6084 f2c1efa3187807a4 7776 *69d695a0e1b2df4e022204 *302a916653e763b4e9cd08 4c694080f6ab4a97 10162 *e5228563fc247919 * a7e04a5d5ebd9e4c 27782 *2651fa304fbd8a3d1d7d51d2cbe16a *d46040ed2bdedebfc16b0e66f5c29f7c8ac6e90d1a5ae5fc4210b80e917ef1aa34 d812275979debdc5 58763 *81b580 *f79a6c07760f2e231a30a4a0b61263b461e35d91666f3a544da3ec62f2845d1c08 53c8e2e84c49323a 19530 *add4d92f2beaa0319d437d06c19784904adcb6adccfe97def2c11ca80d1f6ade5989d78b *114768d7144cf59fb6 e353825dcbe0287c 56592 *e8bbb3bd29c387ff2337bbeec8705715b6f3 *f6aa600e77fe99b846dd977eef6a0bf1172deb5b76c6 f2f6405b0abbd072 43466 *81191387b4da8895 *63196f0c3dad77f9ae0bf92a5410ee258df74c1e3203d5829adc01c4db085f1d01db0a 11b20c40b51509d4 1553 *f99f7bb19eab125574b7c525 *a1623c4a5368fb1a922057 84d510a3bbd41f7d 23802 *86e5994768b64d557faee7f9e5271316225367074ebb04a9ab07 *4f2057e6d90cb73453381e80b6c13ac579609e725bc351 63d529e5f950ede3 19605 *8acb008de1d5fbf4250a15337d0914fae5d1b898 *f150b5f67972880c5f1acc365056474da8f2151bd9c928b9092e03e87e2390e856d2eb cc2017090b2a173c 23265 *c3c5dfd37c72545f099c518bc9a3936288a586fecc17449861ec2dcc5b19 *886f9dd491628ca77e56e0e2d31106a4745a284eef63346f13205f16667dbdb86d1887 4cb1b281f2374d17 12048 *3b2dcfdac267dca916aaccab4f67b2929547a4cca9c81dac927485f3059001b6a63dbfbe5e *49d7298fd23847 a5fdd6c416d41d96 55316 *4f3217a4 *949bebdf86945c541f36f8d213d8ecb7aa4c178eeee5d570 c4aa20834c4bbc83 45626 *4c6778fd9519cce964c143d3 *85ae11168d33005c1e646e6db5a69392d76f03bdaa 88002731ab235121 27480 *5faac851a5a98807b5245d148a9a0b3ca9cef083f0 *538e81521f243409a220d6fab162c6451572a1157a289d78 3259ba099e077af9 55366 *973b36254412ee469ec646fbca091cf1fd9daf0ca281923f55e39a *2e875b62b13509526e1d32cacd49b81296dc237fb6 c0f8a0d6d17f2799 43807 *bfab37ce52940dc483069b1ec45a0d1254df4a595c2df133ad0b00229f *c6658d06ccec 5d15affcf73f933b 51967 *ff233a3f6b3cb585999733788c4f31942b *7a4de9865f1af6facfaf7830107a0446e83b8c66af1cc104d2ad0e26c3dc5b f1872faa016b6dd2 57373 *39ba99dffb70bbc93e12522f6a2d5b42 * 8bc54595e5a214d9 31665 *7bba2c155ac59470fe39d02ad88ef611c9c32ced62f64c9e2d90 *830925e2f3e9 ab9968b8591338a4 30781 *43afdf60d4f7a31f03489d29a69f58517bf2914eaa1081d20a4efc4bc4bbb89272419507 *6bd448a0bec921cee8f171a796d1bcee1694296534253020cc3f4d835220 2474bbe23bb94f8d 50480 *bbb941b0a35c9c29f0ed6ee24d2efb28a4e8b58b3f6c6dcccb558a1c07 *cf4a131ac0cc4acb063088f2c891961d3b0882b647e5436e741317de d05ed024c3c22753 32392 *556d187a7a698585de9a300151fd28df2d6c7fee3c421c43ea *da38f662c3798863aa5952a0bde5bdb412054e422eb9170d08240cda3d40013f8bcba414291fd6 da3b2b0449a58731 44001 *f12efacf73213f9615155f *0542418b3e21c0495de8339aa0807490b83d63d8d01d3d2e78e71eaf85192a94633b579188 602e637cbc5af65d 20767 *c09f94082dfa82592499c354051f02a0aa2157783169ce61a7c95cbfc4ce9595eeea92451577 *d4e8b12e7784b3a32ef2498a53f9854d 7d33784638bd7d2f 45816 *8b9b255a04a950a58c23 *e003f14b5aae14161c271d1368c2b7e9c10c0ce65872f5 1aafeb8549ce9f19 40573 *36ec723856946821242e33f0 *4db844e97166 f1a8c96e79a39433 62064 *b7e7ebbe01d95dc144b94aa186ef1f89efcb19f7184e7210cf4f94f6144133b6c73e1138a9f6f8 *7fbd7e67a04131ab0e75f00c56c4c5570f132096402498f300dfd12f85b2 da1d029a0a65e35d 19479 *3945dd7c00f94db5d75ebb1d94e45cd0da *3ce7d5ce8134f1949da3e51a0ca55435550c 63138ddac7d37b58 56282 *99f450ef73aa38fb49ad74e49f0476b8566ac561e6664d2906528a64 *413422ea581df62334f0a2e8558c0c74fc887698a6dacb 34f83f6ee3def29a 6822 *cd9615d919ce8dd5 *9686bce6cc80 4d6d436d4732ea2b Authen-DecHpwd-2.006/t/vms_user.t000444001750001750 121511561302063 16640 0ustar00zeframzefram000000000000use warnings; use strict; use Test::More tests => 16; BEGIN { use_ok "Authen::DecHpwd", qw(vms_username); } is vms_username(''), undef; is vms_username('a'), 'A'; is vms_username('A'), 'A'; is vms_username('AbC'), 'ABC'; is vms_username('a!'), undef; is vms_username('a '), undef; is vms_username('!a'), undef; is vms_username(' a'), undef; is vms_username('a b'), undef; is vms_username('a_b'), 'A_B'; is vms_username('a$b'), 'A$B'; is vms_username('0'), '0'; is vms_username('abc123'), 'ABC123'; is vms_username('abcdefghijklmnopqrstuvwxyz01234'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ01234'; is vms_username('abcdefghijklmnopqrstuvwxyz012345'), undef; 1; Authen-DecHpwd-2.006/t/ad_ii_pp.t000444001750001750 14311561302063 16520 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/ad_ii.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/vms_pass.t000444001750001750 135011561302063 16630 0ustar00zeframzefram000000000000use warnings; use strict; use Test::More tests => 17; BEGIN { use_ok "Authen::DecHpwd", qw(vms_password); } is vms_password(''), undef; is vms_password('a'), 'A'; is vms_password('A'), 'A'; is vms_password('AbC'), 'ABC'; is vms_password('a!'), undef; is vms_password('a '), undef; is vms_password('!a'), undef; is vms_password(' a'), undef; is vms_password('a b'), undef; is vms_password('a_b'), 'A_B'; is vms_password('a$b'), 'A$B'; is vms_password('0'), '0'; is vms_password('abc123'), 'ABC123'; is vms_password('abcdefghijklmnopqrstuvwxyz01234'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ01234'; is vms_password('abcdefghijklmnopqrstuvwxyz012345'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345'; is vms_password('abcdefghijklmnopqrstuvwxyz0123456'), undef; 1; Authen-DecHpwd-2.006/t/purdy_v.t000444001750001750 3631011561302063 16511 0ustar00zeframzefram000000000000use warnings; use strict; use Scalar::String qw(sclstr_downgraded sclstr_upgraded); use Test::More tests => 401; BEGIN { use_ok "Authen::DecHpwd", qw(lgi_hpwd UAI_C_PURDY_V); } while() { my($salt, $username, $password, $hash) = split; $username = pack("H*", $username) if $username =~ s/\A\*//; $password = pack("H*", $password) if $password =~ s/\A\*//; $hash = pack("H*", $hash); is lgi_hpwd(sclstr_downgraded($username), sclstr_downgraded($password), UAI_C_PURDY_V, $salt), $hash; is lgi_hpwd(sclstr_upgraded($username), sclstr_upgraded($password), UAI_C_PURDY_V, $salt), $hash; } 1; __DATA__ 50917 unclasping eviscerate 21001389884c2012 50482 jams daylight be51b11ee79c3f3c 32451 regurgitation Portsmouth f650e53db17033d2 37825 Sukarno orthodoxes cfd81d5f0bd4793a 23197 cartridge spliced e54743a7367b75f8 59499 solubles assassinate a369920a93b1f42c 58414 upsurge Phoenix 1fd2bee0f8822b2d 59512 Casablanca emasculating 131f0c727cfb2047 26962 Yenisei growing 62ba5c2d11df14f8 3755 Avicenna demolishing b5ab4adb494ad548 10311 instantaneous prized 8dc8c5380ec55f94 41216 dreamer punchy 7f32ef23593829fa 40670 Barber dowelled da9b93d858d06a92 6353 unlearned eloping c80caad73e742f5d 54771 farm disturbingly 3db83db0fe6df9d6 43455 philosophizes paperback 166b7b2274cbb7c4 58091 caesareans Banjarmasin a01b2f058933cd62 41077 plaints conceited a239d812093a40ae 47365 debris drown 9b93dae818428250 10135 huffier uniforms 65293fb967a58cc2 23234 replying repatriate 42b55e6b5c38581f 11450 minimum exampled 1e23769d176b996f 28980 subtitle Edinburgh 7222a9271ba4f33d 10298 sailboats prying 68721f5b5237e833 48333 heterosexuals librettists b60a284245ddbfbb 54741 esters Annette ae5e0566fb86d63d 34699 catechism cable 1339591d681b73ee 12678 celebrities patientest a49aed074967dbc8 2480 autistics blockade 2bc959bf7b86ad9d 14234 Azazel uncorrelated 825f0845a9c69354 8583 pretender grows 27d64f0b3c6298f7 32132 Cinderellas Everest 4c7218fddcc58e92 43566 traded spectacles 8c2ca3768014de05 27717 elate spry 774f4210617bcc6b 33771 declined contumely 3d73997d8919d70c 45449 bewildered refed 6c9ef62b2f98a21c 48546 orchestra snitch 8efbb267a85117b4 65349 unashamed terror c438c8d25539ac6d 10783 squadding perspicacious 2fc1b409569dd729 23600 croaks righteous 9d7373796d7fb66c 24897 sunning budding 6277a750d13ba3f4 11302 fazing pinpricks 49d2f47ce9d70c20 59473 confluent enfolded 33f6cd877cfb27d1 5081 branches speechless 5ee953b1d7ef8c2d 43679 limpid redwood 652204a39d28deee 43103 legislation Acheson 96f9dddbe75a09bb 57810 candelabra certainest abbfbf8d9d40ba02 25919 xenon tonsillitis 87676ac1b454a341 49158 subpoenaed Yellowstone ce0329a13f30d075 15030 fleeter reconnoiters 0c79fea4003a29e3 12828 cerebellums payoffs 608e7272ec1c1141 30462 independents archers 2a474319d7af3e21 50444 nationalities telltale 597dddde8f89ce3a 37992 magnetized camper eddf9c6a9b8bf890 5249 Piedmont naiads 68433a546b98a7a0 29915 airways Mexicans baa8858ca4b6bdd9 4014 compelling snorkeled 6876069d85f8af53 7080 swindlers corporals 7c3240f87841ff4b 61910 build outriders 6f18b40c7f3e398a 49483 shanties tryouts 399ddb59c0a9cde2 48962 presets firestorms 169f6446ec092727 24032 clack Theresa 5dfcfe0cd513c153 49908 Afghans speckles 10914508aca3b16e 8309 Gila functional 4e57fdad3d061fc4 16585 localing innovative 2953830df2e9e206 53946 reapportioned spaniel 1dd238357e7576c1 29849 sequined corporations 38f52e181051d8c2 36043 misquote anniversaries 6a104352118268fa 58509 studded emulating 09aba88cc9b21b16 18025 unclasps Minolta 6bbb684193382f84 46623 upheld binging f24db918c180188e 62399 decompose sonatas 2c2efab308bdfe6a 61285 packet wan ef194fc7875d54c1 16030 heartaches maturation 8f3daf9f5b11c7ad 26741 banquets razed 35d6d76c33ce69e7 38398 caulked unassigned e07d59ddb0024a2b 53377 demagogs branding b7545de591b64ef9 32981 hydraulics fleshier 5718df3a778aa23c 18206 tourists anyhow b100d514d66841ac 52705 trickiness Poe 74613ddd2fdda465 63160 rig lactate 8513ae1109c34c51 4129 portability Kayla 6231086969e4905a 62274 laze dolloped 2b36aba82f6633c0 1222 palimony Nanchang eb34cffcc4905fa1 35741 chatters traumatizing db9b2a0378655ed8 48874 rugging Trujillo a8d99ee58439077b 56315 detoxing contour 88592091f7520443 65215 stridently swamping 52699cd7c15d30d8 51574 sensor tributes 5e65b05238b2c4b8 59724 insurgences swaddled ae4753084a3de474 25998 notations skillets eadab2bf320bd680 37111 rain Bridget 2b285818676d38b6 54267 burdening Salerno 5e088a891d979dd2 16499 Cerf revived 3123b4d0dd1124da 24056 stuffy bourgeois 26b2256c42f56a84 4479 stars creak 4e157644622cc0c6 3410 mushes westerners 7528734a877e5bab 59737 Chappaquiddick repudiated b01f3fa64b19b6ff 29704 ids clomped 7c04a09c1a2fd525 365 mullah drivel d4982b580c0c6bc4 1309 *7c5d15969f7568e89c49c58e00c342da43a7ab883b247051a1a3aa91 *39d833548294a077f4656d93b2206eb4 d4ff386b933e4793 2644 *a5ce954374c4e698d92d5a493adca9835da2a166ef484050119dda22ff00456ee74b1c8f27d4bb *f418127f4870a887c9106fc6782287a8f863c75b83117d5b7802c9e54aef0606f8492eb7312c 09b0b0927afdb5b1 63778 *52ec0f82328a66318e25 *b917c57e46455827e5264061e6 34c44393bb7fbe08 64825 *1f84af8a3310e3fbefef9c *677d4531d1483ff8d697e04b27c46b691dbd1cc5db4e25a920da541d27831b265d5704 faed9b158c19d39a 4008 *6f56e9f3e10351c24c0b83ce9a9d37696d68fffff1d1dda0630172b7727b9ead324c48 *4866ee9492fe0eacb57f21b6e0e75263679441751874c8c9019af9f010c59f1c056fe6fd923ede ad0f3d50ffe2e2eb 23588 *015cfcf26535 *92 cc8521fb65b3ba45 19274 *8a39cbd8349fac1e9b712d221c73845d33b983e290bd0a6d8d648409cd45070b16ffb54f *c8f4eb9a92a28443b9dacda925f1b7 56bc6f67561f97d7 14053 *9a3376f4bdb7b7e4ed7a2d2d7ac9cc70d9aed15dee6be59cdd *743a23c3beb32a8aefb417a42469300f85e809a5041bcf20ba478712bfdf3e09e1 c0a0547bf4e1aa45 2283 *8e7f2ee57118ebbb17583c6474da939f *8744dd2418200045101ab6f91f8bed7216310124388ad1 398347501ae8aa29 7490 *24351ed636f9eaed6ea6a726ce6501f44e1a5cafd092e25a0efe97 *d78488f97628ae748441 5181620430f4f428 1693 *8e *99c1435884e19ba407c1ae1f2947a91d76 c2ffba27a76e9b32 61321 *7ad867e760f8d001b7877dce54bc8a99666d73fd11991d09ac5fcb313fcdaedf *5ef0f75f375950e566f6d757e622b19443741db8f72bf7e986e42babc2175b465d134d1493 1cb26e1e3cbfb884 44456 *fb *a2817784c806e7006677078e0a48dd989cc0 47cfd5281ba0fede 39270 *945b7e9a34810c8bdb401dce909fb608f92f34af2ac9 *dd61d728b60730134e08dedf1ec6959fd207af840b 9a99da07e9686292 25617 *30c4bfd6a992 *887d62e9fd7b8ff6f7afa2c747b71ac521057e3beced0ce29fce7f13f134fa7e0394c3 ff1436d61609835a 25362 *87ef1991e36468e84798b9c086adc681813cd46a *39 b342221136386a59 41450 *1f90ac5ca0d77ef58964c543e8 *f7f4ea3fcd802c8df66bb1ea42b4807c 40aca4e1a2bd9d7d 62262 *a7fc2db715ff2104dedf89ee * 32975accf82f3671 5735 *f64881709c999604d3ea15fd69d98e8cfa5e72f3d1d1 *c7d86e a0c3a180d72a756c 28320 *b7a559b2033a3d097c1025bd92880e6459a2411323 *72c5844ef656 4fb460c6ecc7b6b1 24597 *edf57a35717fab9421 *36c8cba0a0bda1b7ff1890156e3c3c6a2f7ce0d78f93b1a9e4e7d332 0fc0ea4a85d7fd97 50069 *861af199434770e4 *ab2c86ea5e18 b1b48fd1ca9fce42 17152 *02633a819035813235df214b90e84794047a9544c75fad0b2f4e2ffbfea82ff02243930b927bcc *cca6a8b77a36a98867630dcfdd1df2bcbe54110b4a2f96a0dbc93813405f9d6162a10ca5f531b8 8ead56e81722abcd 27302 *8dd87c81e273ade84eb9f596448172b8900a3c12e8df402e421d9d466a7b262337e18f *c201da658943837370519fb8ecdac311df98e2083eb9efb24562e3b03fa5f0590fb20f95dc121a cead0bca10c14463 18241 *7574dc952049108be4a9f68c4c7269797d *33374b2bccb44f01a0c0807ca3c39430e7a9be182d133c0af30d478f80063c672f0a8efbc356d5 c2f3a6d8925d16cb 54687 *b743e02b25bb1e69690968b7f0dd211c6a80cd0eebc058ff9e7f3f362aa4a8c39e66 *dd132868486576706e2c6f95429f162abe2eb0d83bd7478c870444522a4c1ffb16 bf63e621a323a34c 27356 *2d509445f251f3408c1af500b7567d8a19d806c1 *a16e513770a3ba9337085e2f33afcc7d94576106a9aeef50ac190e16 d5713c92410d3b76 23623 *539c7aa99a3c63c41b423a02e3da617dd3672a98250bc71627fd7d *d26eb59a1370a55a369df40f62c1499f177ef38df2d2ff387d736b3a95f7156664 435508e8d4e0dbe1 40851 *cb3fd90c0bc545d776af70eac7bd96 *8883c4e7eb b4eb3d59d2a613a1 566 *c2729de86ca2b2c77d0c48e51f60e79d394b70ec5ea94aaa7796a10985402eb5 *a9e0678237db62bfb6920a6cd8adcc620a9c6a67858aa540a1 dcfe92e4332aa381 63818 *9a32036bf4afff24fcd600661f817485c2 * bcfa2b3e29fc6c00 49387 *68be012990bb2c0229478eace809f64417c462c0d752cefda5 *af89831b6dfc1679af af77874b929b915a 13315 *c9f785ea92f01d424ed69cb03648699cab6c21dac680 *b525c1faf2dbb8719d1b3516f1d6c2cc98ab69541a258649 f7e37dab91536a54 30206 *39 *49cd11d5fc6a2bdc68d3584a0e92cb78315bbe562a3cbab2 87ca9ea224a30884 45942 *23 *5c51e2d3 b13f6983b9494da2 22736 *ccc7d845466d61be9a5971e0a55de0b5b16e87ba121c6f44 *906bdcf51b6112dc1c05d5e6bb eab32422b300289f 62601 *33ddeda859 *3c68d76cb96b1738a948d8d60da98769f426b6d50f86ec 7d00609a637b337e 37938 *7e2d0b94b312ce476bd61331f810f5956bab1baeed13ac0d069ab8b56406e3 *bad377af15de12127d c87144e8b3c18e21 16581 *ac312bee0d3fd8814be16489a4931313be *05aa3f9fe0c399e14470f1f64887b51fa38f9f ac323f5161d4a1ed 15653 *0ce145500eae256a2c20ecbdbdf52b2a6b80e5737a670bb3d0839650910f9f1d20 *4c3ee52ebf1cd46848f77888f368b36c54b58742003b1047dd39656f07b42b680b1284b09dfa 49248fb1e191fc2a 6277 *c6893f277f8f0ca84913a1d4c3b8a63993c472ead14e73c093b2 *aad25c24c5fc679cf33ffaa1fbff3915bda977ecf0b3a76f28195f d3d836e7580aad61 7054 *407c804963b77c73f95fffc3a8062b56d923be0dd076a8667aebee294794d7 *715bda23f39964359bc0 fc67f429e6520e15 32870 *01f8df4d727b639bf4907cf0f1 *027d1ca4daf80d35461799f00972563b19b3689e1166a0121a9f0e0743bd0462 e0b763c039721bb8 56693 *842eaa9d85c6 *2d212d440015d1b9d95b7a8a153262dd5d80efcc 16636e9a208bd5bf 59726 *5e222dfa41 *91d25df8b529b0eefc2fd0f018dfed8589daba765b6f1f7d49e586c5b6c64719c1 14c191a47a2e45ee 38241 *e824d32fc615838ef51c4bc1aab3e325c649 *1c48cc9f476bd4874c229b110918bf939cd12bdf8da839a5d739b9e94b665badc8c8f0fabf1b 7c46db9d0ca32c50 18013 *5e *59522949fd17ef13aff50af1532f946a134deb919c 533395c2b611cbd2 44143 *891ce9077a607e28ac9adca4993b8c23ff5be604258ee674201bd6a498796ed3 *7cfa0088 e8cd4cfd45349b78 12822 *5ef8f765865e31a533b41670743fc83aabfa27f1e6159c23 *06d4d7161bff2d6fc498a9efbe5ce08b1e6c89470384d8bddfee 72a7b9cee593eedc 46758 *2dfcc3407bb658781dfcae9cbad6d89aa722c2 *0cdf55318582c20eef938ed223b0ba5c6e41 1627af68fd4e7822 10214 *04d03a53ef7cffff48 *f842595d c8bbcc90965f4c7a 28171 *5028f20bfbb87c *bf9606cea79b8e3df637b35d7f12e9e3 cdce3f0d4fdb1395 15346 *5f97f438c482cd73c50845e132ced839f46f6c2bc10619fe660fe5f8e612e59112163d07 *4ec58241e1ca3e80af25b65486e3746e8811acb3820f89958cb12c59f14e1dd02881b057c43e 93c2c109aa2aa592 53284 *39831a78c784063dd836b76ba5008f41 *e6cb8a2354674c53caef1a7afaca2c 6ca58fccf4dd6d34 15557 *38dd2066f930eb5d9de73a7e3a1ccfe2266eeabdfb46df74c248e240a7469d26 *7722c0bfde0a4b899062b0 bf81a783904d5333 26467 *6640456d6682921d20edafd0959f69 *703856c1e2cf746cdbf324df 7c5e11158247ab38 18831 *5c6cc0f0595b0936da9eae *de0c27052f7fceaa2ce94b5be3953370d6b3922c3d69bc98a4dba58b 96995b6237dc582c 17507 *08a87475a5d017645a8d8e5d6f5c71ef1524ef05c508d953bf9433b97ef2 *1e663a22b77d8d3a1afaf2fe7c7f3c603befe445fa0136be65543a161a69a4dfe0483b26 9bf4546763d54faf 9052 *0f11784ed432ff6133f146 *76a8125c0f011f78af6a1253d9179fc37942bbb7024f10543dcadbdd77a5ad40f5cd1a8f7b a63838230db84dcf 14899 *24ec2cb26dee05334b1ae7299487f3abd6f0a06e26fc679845ebf9e9276102624dff7ed6d929a5 *e36834b238c392a1a40f780df3fa0e7ad1888f7a9d651829f5d3f3dcc08b872bd3b3fa1023 f6aa74abe08ec21e 60053 * *a3023b5e194a59fd738651cc7d0d6ec0dfa6226da7 ecc307a37eefd23d 22976 *3ca18b18899b494cb435adeb59627fe5a3877cce4b61860512d9c9067c73a42d2d3c7ae5 *fa898d4b150018579aa0ad7d d4c5ce15ba15a793 54496 *7de90322ef4eb737b35866c11aa1838c963ec143f607 *294b c3bae9274b6cc531 52965 *25ffe151457ef83a7ce8f7118fa8b3ad2ccdb1ac *7e37d5fa79ca678951e54f1d30384cc2b954f50bd37c11 34fa6010f24f6d53 33116 *0f2492016ce746fb299fb026edbc *36c67ec91ce160605a2f0ecb859479d13adea777a46b3c31 fbbbc501557b427c 52698 *8eed6a1c5b1677767ba5a05e369e6794af6487c5a1ac67269bc3 *6fe97359fe6a0da4bcea8d 6f2f7affc3ffc1d3 34485 *4b745f538b *0dd33c806f0059a0c99b12016712855fe74b2535cf9c96e693ee a4a3bb1a4836a6f4 18911 *b002322c7428088dacf4b2b5429c74f2dcbbb476532c1c4b3ff2 *684363a440ffa019ba4f07574edcf3 5f31557083fa34ae 62230 *18df730441280bfa37d5cb00d6b584822849f7fc76ac16e10d4aca571f *981495f01747dc76b242962cb67de72b5b680613f21c25897642f91e7b08de87ff6084 139a347295c725de 7776 *69d695a0e1b2df4e022204 *302a916653e763b4e9cd08 37275ecd43513374 10162 *e5228563fc247919 * b3214dbe0313a9be 27782 *2651fa304fbd8a3d1d7d51d2cbe16a *d46040ed2bdedebfc16b0e66f5c29f7c8ac6e90d1a5ae5fc4210b80e917ef1aa34 46e05b4dd94fcb8b 58763 *81b580 *f79a6c07760f2e231a30a4a0b61263b461e35d91666f3a544da3ec62f2845d1c08 0c0782464f4a90fe 19530 *add4d92f2beaa0319d437d06c19784904adcb6adccfe97def2c11ca80d1f6ade5989d78b *114768d7144cf59fb6 1a0071472fb7ceb4 56592 *e8bbb3bd29c387ff2337bbeec8705715b6f3 *f6aa600e77fe99b846dd977eef6a0bf1172deb5b76c6 22ea8158208d18e5 43466 *81191387b4da8895 *63196f0c3dad77f9ae0bf92a5410ee258df74c1e3203d5829adc01c4db085f1d01db0a afc7506f98ef01bc 1553 *f99f7bb19eab125574b7c525 *a1623c4a5368fb1a922057 84d510a3bbd41f7d 23802 *86e5994768b64d557faee7f9e5271316225367074ebb04a9ab07 *4f2057e6d90cb73453381e80b6c13ac579609e725bc351 a879518abf1594f5 19605 *8acb008de1d5fbf4250a15337d0914fae5d1b898 *f150b5f67972880c5f1acc365056474da8f2151bd9c928b9092e03e87e2390e856d2eb 6aaa859238a91aac 23265 *c3c5dfd37c72545f099c518bc9a3936288a586fecc17449861ec2dcc5b19 *886f9dd491628ca77e56e0e2d31106a4745a284eef63346f13205f16667dbdb86d1887 69fa55f9cd163eae 12048 *3b2dcfdac267dca916aaccab4f67b2929547a4cca9c81dac927485f3059001b6a63dbfbe5e *49d7298fd23847 4bc648b97cbf242f 55316 *4f3217a4 *949bebdf86945c541f36f8d213d8ecb7aa4c178eeee5d570 2887fdf2d3150633 45626 *4c6778fd9519cce964c143d3 *85ae11168d33005c1e646e6db5a69392d76f03bdaa 88002731ab235121 27480 *5faac851a5a98807b5245d148a9a0b3ca9cef083f0 *538e81521f243409a220d6fab162c6451572a1157a289d78 8a43d995e2db3a6a 55366 *973b36254412ee469ec646fbca091cf1fd9daf0ca281923f55e39a *2e875b62b13509526e1d32cacd49b81296dc237fb6 6e619b1f8bd90f6f 43807 *bfab37ce52940dc483069b1ec45a0d1254df4a595c2df133ad0b00229f *c6658d06ccec 92d43756914340c2 51967 *ff233a3f6b3cb585999733788c4f31942b *7a4de9865f1af6facfaf7830107a0446e83b8c66af1cc104d2ad0e26c3dc5b db91f00960dfa6c2 57373 *39ba99dffb70bbc93e12522f6a2d5b42 * 73e0f2964e708f21 31665 *7bba2c155ac59470fe39d02ad88ef611c9c32ced62f64c9e2d90 *830925e2f3e9 3af9ad73bb252c63 30781 *43afdf60d4f7a31f03489d29a69f58517bf2914eaa1081d20a4efc4bc4bbb89272419507 *6bd448a0bec921cee8f171a796d1bcee1694296534253020cc3f4d835220 203d503e08499d05 50480 *bbb941b0a35c9c29f0ed6ee24d2efb28a4e8b58b3f6c6dcccb558a1c07 *cf4a131ac0cc4acb063088f2c891961d3b0882b647e5436e741317de e792e5017d57eb6f 32392 *556d187a7a698585de9a300151fd28df2d6c7fee3c421c43ea *da38f662c3798863aa5952a0bde5bdb412054e422eb9170d08240cda3d40013f8bcba414291fd6 121f040a1310c265 44001 *f12efacf73213f9615155f *0542418b3e21c0495de8339aa0807490b83d63d8d01d3d2e78e71eaf85192a94633b579188 86e615f7d0c20116 20767 *c09f94082dfa82592499c354051f02a0aa2157783169ce61a7c95cbfc4ce9595eeea92451577 *d4e8b12e7784b3a32ef2498a53f9854d cd53313f75f0db5c 45816 *8b9b255a04a950a58c23 *e003f14b5aae14161c271d1368c2b7e9c10c0ce65872f5 aa3b202bca5031f3 40573 *36ec723856946821242e33f0 *4db844e97166 f1a8c96e79a39433 62064 *b7e7ebbe01d95dc144b94aa186ef1f89efcb19f7184e7210cf4f94f6144133b6c73e1138a9f6f8 *7fbd7e67a04131ab0e75f00c56c4c5570f132096402498f300dfd12f85b2 d4c99c05c4cf11c9 19479 *3945dd7c00f94db5d75ebb1d94e45cd0da *3ce7d5ce8134f1949da3e51a0ca55435550c 1328cd487129e10e 56282 *99f450ef73aa38fb49ad74e49f0476b8566ac561e6664d2906528a64 *413422ea581df62334f0a2e8558c0c74fc887698a6dacb 2a3ae8d99171985f 6822 *cd9615d919ce8dd5 *9686bce6cc80 720175eb4205609d Authen-DecHpwd-2.006/t/purdy_s_pp.t000444001750001750 14511561302063 17142 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/purdy_s.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/purdy_v_pp.t000444001750001750 14511561302063 17145 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/purdy_v.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/purdy_s.t000444001750001750 3631011561302063 16506 0ustar00zeframzefram000000000000use warnings; use strict; use Scalar::String qw(sclstr_downgraded sclstr_upgraded); use Test::More tests => 401; BEGIN { use_ok "Authen::DecHpwd", qw(lgi_hpwd UAI_C_PURDY_S); } while() { my($salt, $username, $password, $hash) = split; $username = pack("H*", $username) if $username =~ s/\A\*//; $password = pack("H*", $password) if $password =~ s/\A\*//; $hash = pack("H*", $hash); is lgi_hpwd(sclstr_downgraded($username), sclstr_downgraded($password), UAI_C_PURDY_S, $salt), $hash; is lgi_hpwd(sclstr_upgraded($username), sclstr_upgraded($password), UAI_C_PURDY_S, $salt), $hash; } 1; __DATA__ 50917 unclasping eviscerate 605a4df627b21a08 50482 jams daylight d2134cc23c087a0a 32451 regurgitation Portsmouth 7c0638151bf11d22 37825 Sukarno orthodoxes 9f0a2393c3728f2a 23197 cartridge spliced 1253f9c261b70ef1 59499 solubles assassinate 7b68f462334c1ea9 58414 upsurge Phoenix 08b348e14d9fc339 59512 Casablanca emasculating d522199049ad8286 26962 Yenisei growing 32a9cff7d84ec3a6 3755 Avicenna demolishing 553fd16ce5cf3e1c 10311 instantaneous prized b2ebe77dbfb0ff0a 41216 dreamer punchy 87f7d67aef62f0df 40670 Barber dowelled 517315f8d1e38c1d 6353 unlearned eloping 1ecb31ef07e84317 54771 farm disturbingly 596140f78dabcd34 43455 philosophizes paperback 20c26b9a6fa806be 58091 caesareans Banjarmasin f6a759ebfcf514d4 41077 plaints conceited b06d6535ab27b44e 47365 debris drown 19585080bafc8598 10135 huffier uniforms 87bf8dc9fad7e40d 23234 replying repatriate 0b207ea86bad8f6d 11450 minimum exampled c202b6f7a5d074b5 28980 subtitle Edinburgh 24b39a562f4235e2 10298 sailboats prying 61f4d69db4507912 48333 heterosexuals librettists b0ff108f7458637c 54741 esters Annette d159157f477a1875 34699 catechism cable 497c18249051edaa 12678 celebrities patientest 60fe4ff7a3b4c074 2480 autistics blockade d897cce0a1fb870e 14234 Azazel uncorrelated 91d50ced7f8f31d7 8583 pretender grows bbe77568c62bfe64 32132 Cinderellas Everest 8ac8fa3e15286305 43566 traded spectacles 65d56b6bc0f8e88c 27717 elate spry fc8815babf1bf61f 33771 declined contumely b466a1f588f74cf9 45449 bewildered refed ff84d5c39fd55e06 48546 orchestra snitch 7d06f26e248a1060 65349 unashamed terror f00c309ec2ce47e4 10783 squadding perspicacious 7392ffda678d05dc 23600 croaks righteous 024a75d1c625695f 24897 sunning budding e7582c3c7a65be37 11302 fazing pinpricks 70eb4f3a973cbbe6 59473 confluent enfolded 3636a84f89c08818 5081 branches speechless 17999e649b4e1382 43679 limpid redwood 2c4c33891a4e8f24 43103 legislation Acheson 640aa9b040b41028 57810 candelabra certainest dd6db973910e2562 25919 xenon tonsillitis 42f120f86b6473ca 49158 subpoenaed Yellowstone 84df8c6cafb00f86 15030 fleeter reconnoiters 24a6c5b6bb4a9418 12828 cerebellums payoffs 4accaebc1d4901ae 30462 independents archers 7682597ca56af918 50444 nationalities telltale 9c244656831aca0e 37992 magnetized camper 60c1508a5654584d 5249 Piedmont naiads 4cda8ee3525e1877 29915 airways Mexicans 366638866e8d44fa 4014 compelling snorkeled adb0cdcb4df623ab 7080 swindlers corporals 728e675434bd3f7b 61910 build outriders f52dae2c052084d2 49483 shanties tryouts f75a7c05d1696548 48962 presets firestorms a602505091c051ed 24032 clack Theresa 1832622f7cd951ff 49908 Afghans speckles f0901a3679ba9626 8309 Gila functional 761b22cb0a961a8d 16585 localing innovative d63ee837907c7374 53946 reapportioned spaniel ee9536517261a6f4 29849 sequined corporations bf897037e4fffc6a 36043 misquote anniversaries 4b04ed9d430c052f 58509 studded emulating d7fcd6a907fb5afd 18025 unclasps Minolta c210073a72bd60cc 46623 upheld binging 51c491a76d779a02 62399 decompose sonatas 8c418ed1de047a77 61285 packet wan 1d33b0ba3143aa9f 16030 heartaches maturation cc6dcfaefe94cebf 26741 banquets razed ae893fc04a0f8510 38398 caulked unassigned 2355f1aefcc4b3db 53377 demagogs branding 04fc4878f3587ec9 32981 hydraulics fleshier 0fa673f61ba87d0f 18206 tourists anyhow e802da2e398c9810 52705 trickiness Poe d05edcf893902d45 63160 rig lactate 2a5d205997279ea1 4129 portability Kayla 1a37428d96d09c11 62274 laze dolloped dfd19fd715ae90f0 1222 palimony Nanchang 2567284a91a9a5a5 35741 chatters traumatizing fdc839f1a2e04eb0 48874 rugging Trujillo af8e5b8cdb992f85 56315 detoxing contour e5b1abbebe96f3f0 65215 stridently swamping feafacc3b7ac72d8 51574 sensor tributes 9fe1debfa71d71d3 59724 insurgences swaddled 782433275eb2ad47 25998 notations skillets ebb1bcc7ad538b04 37111 rain Bridget ba938cf04ec91a17 54267 burdening Salerno df32e9787acedec5 16499 Cerf revived 4c1d5a8fa910047c 24056 stuffy bourgeois af43ecf0e106eb3e 4479 stars creak 28630ccd24baff3a 3410 mushes westerners b5d96206efd8f2e8 59737 Chappaquiddick repudiated 487f866f0660fd33 29704 ids clomped 0acf1118cf300bb9 365 mullah drivel 49d7630fe06b3762 1309 *7c5d15969f7568e89c49c58e00c342da43a7ab883b247051a1a3aa91 *39d833548294a077f4656d93b2206eb4 e7a80f754cdbaea9 2644 *a5ce954374c4e698d92d5a493adca9835da2a166ef484050119dda22ff00456ee74b1c8f27d4bb *f418127f4870a887c9106fc6782287a8f863c75b83117d5b7802c9e54aef0606f8492eb7312c ec1268815d93e85f 63778 *52ec0f82328a66318e25 *b917c57e46455827e5264061e6 948cded0436227fa 64825 *1f84af8a3310e3fbefef9c *677d4531d1483ff8d697e04b27c46b691dbd1cc5db4e25a920da541d27831b265d5704 714aae9bf9c55328 4008 *6f56e9f3e10351c24c0b83ce9a9d37696d68fffff1d1dda0630172b7727b9ead324c48 *4866ee9492fe0eacb57f21b6e0e75263679441751874c8c9019af9f010c59f1c056fe6fd923ede 17e70a72222d60ad 23588 *015cfcf26535 *92 ff3448174596578a 19274 *8a39cbd8349fac1e9b712d221c73845d33b983e290bd0a6d8d648409cd45070b16ffb54f *c8f4eb9a92a28443b9dacda925f1b7 612c5a9211978cd6 14053 *9a3376f4bdb7b7e4ed7a2d2d7ac9cc70d9aed15dee6be59cdd *743a23c3beb32a8aefb417a42469300f85e809a5041bcf20ba478712bfdf3e09e1 76647cb6c25c7ee8 2283 *8e7f2ee57118ebbb17583c6474da939f *8744dd2418200045101ab6f91f8bed7216310124388ad1 21fed8dbfb425340 7490 *24351ed636f9eaed6ea6a726ce6501f44e1a5cafd092e25a0efe97 *d78488f97628ae748441 9fce61bccfc09073 1693 *8e *99c1435884e19ba407c1ae1f2947a91d76 be631d8696fa3f21 61321 *7ad867e760f8d001b7877dce54bc8a99666d73fd11991d09ac5fcb313fcdaedf *5ef0f75f375950e566f6d757e622b19443741db8f72bf7e986e42babc2175b465d134d1493 e7a4a4600be99943 44456 *fb *a2817784c806e7006677078e0a48dd989cc0 c9272fbc9331ff7f 39270 *945b7e9a34810c8bdb401dce909fb608f92f34af2ac9 *dd61d728b60730134e08dedf1ec6959fd207af840b 660dd3691e203e08 25617 *30c4bfd6a992 *887d62e9fd7b8ff6f7afa2c747b71ac521057e3beced0ce29fce7f13f134fa7e0394c3 291c9f303932585a 25362 *87ef1991e36468e84798b9c086adc681813cd46a *39 cfeb1b58e41afe8c 41450 *1f90ac5ca0d77ef58964c543e8 *f7f4ea3fcd802c8df66bb1ea42b4807c e5c2b940ba2aa11b 62262 *a7fc2db715ff2104dedf89ee * 42750ea08988444a 5735 *f64881709c999604d3ea15fd69d98e8cfa5e72f3d1d1 *c7d86e 430565d6077dd8ec 28320 *b7a559b2033a3d097c1025bd92880e6459a2411323 *72c5844ef656 a6ded426a475df1e 24597 *edf57a35717fab9421 *36c8cba0a0bda1b7ff1890156e3c3c6a2f7ce0d78f93b1a9e4e7d332 d71bbea685da2a23 50069 *861af199434770e4 *ab2c86ea5e18 67e0f51418068a05 17152 *02633a819035813235df214b90e84794047a9544c75fad0b2f4e2ffbfea82ff02243930b927bcc *cca6a8b77a36a98867630dcfdd1df2bcbe54110b4a2f96a0dbc93813405f9d6162a10ca5f531b8 1abda8aeb9dcc634 27302 *8dd87c81e273ade84eb9f596448172b8900a3c12e8df402e421d9d466a7b262337e18f *c201da658943837370519fb8ecdac311df98e2083eb9efb24562e3b03fa5f0590fb20f95dc121a 479cddc677215b1d 18241 *7574dc952049108be4a9f68c4c7269797d *33374b2bccb44f01a0c0807ca3c39430e7a9be182d133c0af30d478f80063c672f0a8efbc356d5 0f9c98cd5ed28602 54687 *b743e02b25bb1e69690968b7f0dd211c6a80cd0eebc058ff9e7f3f362aa4a8c39e66 *dd132868486576706e2c6f95429f162abe2eb0d83bd7478c870444522a4c1ffb16 83ed59edaa35708c 27356 *2d509445f251f3408c1af500b7567d8a19d806c1 *a16e513770a3ba9337085e2f33afcc7d94576106a9aeef50ac190e16 4d731501b6716c59 23623 *539c7aa99a3c63c41b423a02e3da617dd3672a98250bc71627fd7d *d26eb59a1370a55a369df40f62c1499f177ef38df2d2ff387d736b3a95f7156664 e1d27519f444b52e 40851 *cb3fd90c0bc545d776af70eac7bd96 *8883c4e7eb 48f0eb342816f40d 566 *c2729de86ca2b2c77d0c48e51f60e79d394b70ec5ea94aaa7796a10985402eb5 *a9e0678237db62bfb6920a6cd8adcc620a9c6a67858aa540a1 5d0b38fbb58bdc40 63818 *9a32036bf4afff24fcd600661f817485c2 * 45946248e7d02a83 49387 *68be012990bb2c0229478eace809f64417c462c0d752cefda5 *af89831b6dfc1679af cee492547f87fc0f 13315 *c9f785ea92f01d424ed69cb03648699cab6c21dac680 *b525c1faf2dbb8719d1b3516f1d6c2cc98ab69541a258649 b8cbc23dc7435b25 30206 *39 *49cd11d5fc6a2bdc68d3584a0e92cb78315bbe562a3cbab2 e7705ea2cdfacb18 45942 *23 *5c51e2d3 501cd81a7adc9c1a 22736 *ccc7d845466d61be9a5971e0a55de0b5b16e87ba121c6f44 *906bdcf51b6112dc1c05d5e6bb 54be9227efe8503e 62601 *33ddeda859 *3c68d76cb96b1738a948d8d60da98769f426b6d50f86ec cd399d5d36190db2 37938 *7e2d0b94b312ce476bd61331f810f5956bab1baeed13ac0d069ab8b56406e3 *bad377af15de12127d 150f810b9bd52e73 16581 *ac312bee0d3fd8814be16489a4931313be *05aa3f9fe0c399e14470f1f64887b51fa38f9f 875315438cca78e6 15653 *0ce145500eae256a2c20ecbdbdf52b2a6b80e5737a670bb3d0839650910f9f1d20 *4c3ee52ebf1cd46848f77888f368b36c54b58742003b1047dd39656f07b42b680b1284b09dfa ff6a4457314b6e96 6277 *c6893f277f8f0ca84913a1d4c3b8a63993c472ead14e73c093b2 *aad25c24c5fc679cf33ffaa1fbff3915bda977ecf0b3a76f28195f dd3c8e8eb2e60ca4 7054 *407c804963b77c73f95fffc3a8062b56d923be0dd076a8667aebee294794d7 *715bda23f39964359bc0 3f98123881f459c2 32870 *01f8df4d727b639bf4907cf0f1 *027d1ca4daf80d35461799f00972563b19b3689e1166a0121a9f0e0743bd0462 3d713cff308e1172 56693 *842eaa9d85c6 *2d212d440015d1b9d95b7a8a153262dd5d80efcc e8d0511d30685d40 59726 *5e222dfa41 *91d25df8b529b0eefc2fd0f018dfed8589daba765b6f1f7d49e586c5b6c64719c1 12c311b95e772bc1 38241 *e824d32fc615838ef51c4bc1aab3e325c649 *1c48cc9f476bd4874c229b110918bf939cd12bdf8da839a5d739b9e94b665badc8c8f0fabf1b ae8869a1754233e7 18013 *5e *59522949fd17ef13aff50af1532f946a134deb919c 3173bc8b9745e3a6 44143 *891ce9077a607e28ac9adca4993b8c23ff5be604258ee674201bd6a498796ed3 *7cfa0088 f8c020ed5e052aea 12822 *5ef8f765865e31a533b41670743fc83aabfa27f1e6159c23 *06d4d7161bff2d6fc498a9efbe5ce08b1e6c89470384d8bddfee 37b190feea13ad95 46758 *2dfcc3407bb658781dfcae9cbad6d89aa722c2 *0cdf55318582c20eef938ed223b0ba5c6e41 7279c6e97dd9e05b 10214 *04d03a53ef7cffff48 *f842595d cce439a910a3247b 28171 *5028f20bfbb87c *bf9606cea79b8e3df637b35d7f12e9e3 2108d7132b1bad7a 15346 *5f97f438c482cd73c50845e132ced839f46f6c2bc10619fe660fe5f8e612e59112163d07 *4ec58241e1ca3e80af25b65486e3746e8811acb3820f89958cb12c59f14e1dd02881b057c43e bc63b8b6ceaff927 53284 *39831a78c784063dd836b76ba5008f41 *e6cb8a2354674c53caef1a7afaca2c e96b784c8362c3f2 15557 *38dd2066f930eb5d9de73a7e3a1ccfe2266eeabdfb46df74c248e240a7469d26 *7722c0bfde0a4b899062b0 5be68d4f5183f90e 26467 *6640456d6682921d20edafd0959f69 *703856c1e2cf746cdbf324df ccccc00de93168ba 18831 *5c6cc0f0595b0936da9eae *de0c27052f7fceaa2ce94b5be3953370d6b3922c3d69bc98a4dba58b a9f28c5aca5feb91 17507 *08a87475a5d017645a8d8e5d6f5c71ef1524ef05c508d953bf9433b97ef2 *1e663a22b77d8d3a1afaf2fe7c7f3c603befe445fa0136be65543a161a69a4dfe0483b26 93db6e1d235d5788 9052 *0f11784ed432ff6133f146 *76a8125c0f011f78af6a1253d9179fc37942bbb7024f10543dcadbdd77a5ad40f5cd1a8f7b 056467cf5d673c9b 14899 *24ec2cb26dee05334b1ae7299487f3abd6f0a06e26fc679845ebf9e9276102624dff7ed6d929a5 *e36834b238c392a1a40f780df3fa0e7ad1888f7a9d651829f5d3f3dcc08b872bd3b3fa1023 868414a06bfa5fcd 60053 * *a3023b5e194a59fd738651cc7d0d6ec0dfa6226da7 2c83cd9aa2b2e7ad 22976 *3ca18b18899b494cb435adeb59627fe5a3877cce4b61860512d9c9067c73a42d2d3c7ae5 *fa898d4b150018579aa0ad7d 59ea50f9e9cc2d5f 54496 *7de90322ef4eb737b35866c11aa1838c963ec143f607 *294b d1e58ccb1b4ad1d9 52965 *25ffe151457ef83a7ce8f7118fa8b3ad2ccdb1ac *7e37d5fa79ca678951e54f1d30384cc2b954f50bd37c11 4fecd615dd37cb55 33116 *0f2492016ce746fb299fb026edbc *36c67ec91ce160605a2f0ecb859479d13adea777a46b3c31 febe6652add7593c 52698 *8eed6a1c5b1677767ba5a05e369e6794af6487c5a1ac67269bc3 *6fe97359fe6a0da4bcea8d 5ae20c65274049d8 34485 *4b745f538b *0dd33c806f0059a0c99b12016712855fe74b2535cf9c96e693ee a29c1784e95171b4 18911 *b002322c7428088dacf4b2b5429c74f2dcbbb476532c1c4b3ff2 *684363a440ffa019ba4f07574edcf3 29cd4b1d705162cb 62230 *18df730441280bfa37d5cb00d6b584822849f7fc76ac16e10d4aca571f *981495f01747dc76b242962cb67de72b5b680613f21c25897642f91e7b08de87ff6084 0e7ccda09b84be99 7776 *69d695a0e1b2df4e022204 *302a916653e763b4e9cd08 a03ce644d764938d 10162 *e5228563fc247919 * 1dce076d24dc60ec 27782 *2651fa304fbd8a3d1d7d51d2cbe16a *d46040ed2bdedebfc16b0e66f5c29f7c8ac6e90d1a5ae5fc4210b80e917ef1aa34 9a840f7981ee0b25 58763 *81b580 *f79a6c07760f2e231a30a4a0b61263b461e35d91666f3a544da3ec62f2845d1c08 e5af8b95a313aacd 19530 *add4d92f2beaa0319d437d06c19784904adcb6adccfe97def2c11ca80d1f6ade5989d78b *114768d7144cf59fb6 1d971c536f330f0b 56592 *e8bbb3bd29c387ff2337bbeec8705715b6f3 *f6aa600e77fe99b846dd977eef6a0bf1172deb5b76c6 913f52c45baa5990 43466 *81191387b4da8895 *63196f0c3dad77f9ae0bf92a5410ee258df74c1e3203d5829adc01c4db085f1d01db0a 52b75238d572f1da 1553 *f99f7bb19eab125574b7c525 *a1623c4a5368fb1a922057 50bd1bcfd2c987d2 23802 *86e5994768b64d557faee7f9e5271316225367074ebb04a9ab07 *4f2057e6d90cb73453381e80b6c13ac579609e725bc351 88effe6d653f6628 19605 *8acb008de1d5fbf4250a15337d0914fae5d1b898 *f150b5f67972880c5f1acc365056474da8f2151bd9c928b9092e03e87e2390e856d2eb c15c66377516f021 23265 *c3c5dfd37c72545f099c518bc9a3936288a586fecc17449861ec2dcc5b19 *886f9dd491628ca77e56e0e2d31106a4745a284eef63346f13205f16667dbdb86d1887 f4515b01bd513a04 12048 *3b2dcfdac267dca916aaccab4f67b2929547a4cca9c81dac927485f3059001b6a63dbfbe5e *49d7298fd23847 01fd749881dbe3a5 55316 *4f3217a4 *949bebdf86945c541f36f8d213d8ecb7aa4c178eeee5d570 ad2ac6edbdc7b4a4 45626 *4c6778fd9519cce964c143d3 *85ae11168d33005c1e646e6db5a69392d76f03bdaa 8efff6ed1f8fed81 27480 *5faac851a5a98807b5245d148a9a0b3ca9cef083f0 *538e81521f243409a220d6fab162c6451572a1157a289d78 c8090bedd8424a62 55366 *973b36254412ee469ec646fbca091cf1fd9daf0ca281923f55e39a *2e875b62b13509526e1d32cacd49b81296dc237fb6 e8c826db1e4543f8 43807 *bfab37ce52940dc483069b1ec45a0d1254df4a595c2df133ad0b00229f *c6658d06ccec 08a7b64c7b19a76e 51967 *ff233a3f6b3cb585999733788c4f31942b *7a4de9865f1af6facfaf7830107a0446e83b8c66af1cc104d2ad0e26c3dc5b 778863f34fd55e48 57373 *39ba99dffb70bbc93e12522f6a2d5b42 * a07b56d255de096e 31665 *7bba2c155ac59470fe39d02ad88ef611c9c32ced62f64c9e2d90 *830925e2f3e9 a00dfb6a950f0a09 30781 *43afdf60d4f7a31f03489d29a69f58517bf2914eaa1081d20a4efc4bc4bbb89272419507 *6bd448a0bec921cee8f171a796d1bcee1694296534253020cc3f4d835220 af41e94bff8757e0 50480 *bbb941b0a35c9c29f0ed6ee24d2efb28a4e8b58b3f6c6dcccb558a1c07 *cf4a131ac0cc4acb063088f2c891961d3b0882b647e5436e741317de a1b752f4575a14df 32392 *556d187a7a698585de9a300151fd28df2d6c7fee3c421c43ea *da38f662c3798863aa5952a0bde5bdb412054e422eb9170d08240cda3d40013f8bcba414291fd6 9bfe2f8c134dba6e 44001 *f12efacf73213f9615155f *0542418b3e21c0495de8339aa0807490b83d63d8d01d3d2e78e71eaf85192a94633b579188 3dbab673bf72aa87 20767 *c09f94082dfa82592499c354051f02a0aa2157783169ce61a7c95cbfc4ce9595eeea92451577 *d4e8b12e7784b3a32ef2498a53f9854d 28e5526edd91a053 45816 *8b9b255a04a950a58c23 *e003f14b5aae14161c271d1368c2b7e9c10c0ce65872f5 7b6211b483efa14d 40573 *36ec723856946821242e33f0 *4db844e97166 66f76eb04c5a973b 62064 *b7e7ebbe01d95dc144b94aa186ef1f89efcb19f7184e7210cf4f94f6144133b6c73e1138a9f6f8 *7fbd7e67a04131ab0e75f00c56c4c5570f132096402498f300dfd12f85b2 de1d911c4dd2ab37 19479 *3945dd7c00f94db5d75ebb1d94e45cd0da *3ce7d5ce8134f1949da3e51a0ca55435550c 589c33233fc6a6ae 56282 *99f450ef73aa38fb49ad74e49f0476b8566ac561e6664d2906528a64 *413422ea581df62334f0a2e8558c0c74fc887698a6dacb 6076cd0e747d684b 6822 *cd9615d919ce8dd5 *9686bce6cc80 b955aa905ad40fc7 Authen-DecHpwd-2.006/t/ad_ii.t000444001750001750 3630211561302063 16067 0ustar00zeframzefram000000000000use warnings; use strict; use Scalar::String qw(sclstr_downgraded sclstr_upgraded); use Test::More tests => 401; BEGIN { use_ok "Authen::DecHpwd", qw(lgi_hpwd UAI_C_AD_II); } while() { my($salt, $username, $password, $hash) = split; $username = pack("H*", $username) if $username =~ s/\A\*//; $password = pack("H*", $password) if $password =~ s/\A\*//; $hash = pack("H*", $hash); is lgi_hpwd(sclstr_downgraded($username), sclstr_downgraded($password), UAI_C_AD_II, $salt), $hash; is lgi_hpwd(sclstr_upgraded($username), sclstr_upgraded($password), UAI_C_AD_II, $salt), $hash; } 1; __DATA__ 50917 unclasping eviscerate 28f63c9b00000000 50482 jams daylight 653ea86200000000 32451 regurgitation Portsmouth 84e9b80500000000 37825 Sukarno orthodoxes 14b3be0f00000000 23197 cartridge spliced e98a19b600000000 59499 solubles assassinate a2ce40ed00000000 58414 upsurge Phoenix 666cd31a00000000 59512 Casablanca emasculating 57d533e800000000 26962 Yenisei growing e4c44ce800000000 3755 Avicenna demolishing f4cfffab00000000 10311 instantaneous prized 9e8f108b00000000 41216 dreamer punchy 5ce1b86100000000 40670 Barber dowelled c3371f9600000000 6353 unlearned eloping 9f8ed8db00000000 54771 farm disturbingly 253f7f0c00000000 43455 philosophizes paperback e76bdd8e00000000 58091 caesareans Banjarmasin 8fe5623000000000 41077 plaints conceited f0146b3600000000 47365 debris drown 0b9ea61d00000000 10135 huffier uniforms a23a02b100000000 23234 replying repatriate c51cbd1300000000 11450 minimum exampled 7dd7fc0700000000 28980 subtitle Edinburgh f3b8317400000000 10298 sailboats prying 594d94bf00000000 48333 heterosexuals librettists f7c20da800000000 54741 esters Annette d21798bd00000000 34699 catechism cable 2b3b16db00000000 12678 celebrities patientest 7fe7101000000000 2480 autistics blockade b2fb4efa00000000 14234 Azazel uncorrelated 4fba259000000000 8583 pretender grows 0288003900000000 32132 Cinderellas Everest 7292592400000000 43566 traded spectacles 8756c45e00000000 27717 elate spry 2d9510c700000000 33771 declined contumely d1381a6800000000 45449 bewildered refed 4d3138a800000000 48546 orchestra snitch 1441e6fd00000000 65349 unashamed terror e75a714500000000 10783 squadding perspicacious b66d3c4700000000 23600 croaks righteous d824d47a00000000 24897 sunning budding 9b120d9200000000 11302 fazing pinpricks d845f23600000000 59473 confluent enfolded cea4eb7000000000 5081 branches speechless e1adfd6500000000 43679 limpid redwood f668363000000000 43103 legislation Acheson 3bf5edb500000000 57810 candelabra certainest ec51165700000000 25919 xenon tonsillitis ec282e1900000000 49158 subpoenaed Yellowstone 80568d2900000000 15030 fleeter reconnoiters f7c5fed900000000 12828 cerebellums payoffs 8b12256c00000000 30462 independents archers 522ba1b300000000 50444 nationalities telltale 73ae651100000000 37992 magnetized camper 29b5335f00000000 5249 Piedmont naiads 30f9371f00000000 29915 airways Mexicans 2d916cd000000000 4014 compelling snorkeled 847f2fdf00000000 7080 swindlers corporals 5505039600000000 61910 build outriders 73252e9a00000000 49483 shanties tryouts 572bbc7b00000000 48962 presets firestorms 89763cab00000000 24032 clack Theresa 0882f1b100000000 49908 Afghans speckles 9808adae00000000 8309 Gila functional d4adf81800000000 16585 localing innovative 6250768300000000 53946 reapportioned spaniel 057b12d000000000 29849 sequined corporations 38c8c49000000000 36043 misquote anniversaries f844cad300000000 58509 studded emulating 36812baa00000000 18025 unclasps Minolta ab9bd81d00000000 46623 upheld binging 34671cbe00000000 62399 decompose sonatas 1eb43b0500000000 61285 packet wan 814eec8700000000 16030 heartaches maturation 2ce3b2ec00000000 26741 banquets razed 0efc663200000000 38398 caulked unassigned 90900cf600000000 53377 demagogs branding a871a44d00000000 32981 hydraulics fleshier 7c0b113900000000 18206 tourists anyhow f6ad60d700000000 52705 trickiness Poe e2eabfb300000000 63160 rig lactate 8b687ce800000000 4129 portability Kayla 66d7b93d00000000 62274 laze dolloped 105297f500000000 1222 palimony Nanchang 861848f800000000 35741 chatters traumatizing a82bab8800000000 48874 rugging Trujillo 993d8dab00000000 56315 detoxing contour 2f24f84c00000000 65215 stridently swamping a2d5563700000000 51574 sensor tributes 072ba6db00000000 59724 insurgences swaddled 813d0b9900000000 25998 notations skillets 20b739ff00000000 37111 rain Bridget 116af1d500000000 54267 burdening Salerno f7143a9200000000 16499 Cerf revived cdfcc87300000000 24056 stuffy bourgeois 3b73408300000000 4479 stars creak 9586e3ce00000000 3410 mushes westerners 873027be00000000 59737 Chappaquiddick repudiated e25a4d6f00000000 29704 ids clomped 6924717300000000 365 mullah drivel 45be961400000000 1309 *7c5d15969f7568e89c49c58e00c342da43a7ab883b247051a1a3aa91 *39d833548294a077f4656d93b2206eb4 8e05bbce00000000 2644 *a5ce954374c4e698d92d5a493adca9835da2a166ef484050119dda22ff00456ee74b1c8f27d4bb *f418127f4870a887c9106fc6782287a8f863c75b83117d5b7802c9e54aef0606f8492eb7312c ae7b6bc700000000 63778 *52ec0f82328a66318e25 *b917c57e46455827e5264061e6 bb46ed7600000000 64825 *1f84af8a3310e3fbefef9c *677d4531d1483ff8d697e04b27c46b691dbd1cc5db4e25a920da541d27831b265d5704 36c26ee300000000 4008 *6f56e9f3e10351c24c0b83ce9a9d37696d68fffff1d1dda0630172b7727b9ead324c48 *4866ee9492fe0eacb57f21b6e0e75263679441751874c8c9019af9f010c59f1c056fe6fd923ede 8d4a708b00000000 23588 *015cfcf26535 *92 1ae2fc3300000000 19274 *8a39cbd8349fac1e9b712d221c73845d33b983e290bd0a6d8d648409cd45070b16ffb54f *c8f4eb9a92a28443b9dacda925f1b7 4179262d00000000 14053 *9a3376f4bdb7b7e4ed7a2d2d7ac9cc70d9aed15dee6be59cdd *743a23c3beb32a8aefb417a42469300f85e809a5041bcf20ba478712bfdf3e09e1 15493ffc00000000 2283 *8e7f2ee57118ebbb17583c6474da939f *8744dd2418200045101ab6f91f8bed7216310124388ad1 a24163ef00000000 7490 *24351ed636f9eaed6ea6a726ce6501f44e1a5cafd092e25a0efe97 *d78488f97628ae748441 75bb8b6700000000 1693 *8e *99c1435884e19ba407c1ae1f2947a91d76 918bea6d00000000 61321 *7ad867e760f8d001b7877dce54bc8a99666d73fd11991d09ac5fcb313fcdaedf *5ef0f75f375950e566f6d757e622b19443741db8f72bf7e986e42babc2175b465d134d1493 6429604700000000 44456 *fb *a2817784c806e7006677078e0a48dd989cc0 d91549ea00000000 39270 *945b7e9a34810c8bdb401dce909fb608f92f34af2ac9 *dd61d728b60730134e08dedf1ec6959fd207af840b 6be4ee5500000000 25617 *30c4bfd6a992 *887d62e9fd7b8ff6f7afa2c747b71ac521057e3beced0ce29fce7f13f134fa7e0394c3 8ec1fff500000000 25362 *87ef1991e36468e84798b9c086adc681813cd46a *39 7a98f87200000000 41450 *1f90ac5ca0d77ef58964c543e8 *f7f4ea3fcd802c8df66bb1ea42b4807c 714ebdbb00000000 62262 *a7fc2db715ff2104dedf89ee * ffffffff00000000 5735 *f64881709c999604d3ea15fd69d98e8cfa5e72f3d1d1 *c7d86e 60a5b57700000000 28320 *b7a559b2033a3d097c1025bd92880e6459a2411323 *72c5844ef656 61a6f3f100000000 24597 *edf57a35717fab9421 *36c8cba0a0bda1b7ff1890156e3c3c6a2f7ce0d78f93b1a9e4e7d332 f5c5eec000000000 50069 *861af199434770e4 *ab2c86ea5e18 6929c46200000000 17152 *02633a819035813235df214b90e84794047a9544c75fad0b2f4e2ffbfea82ff02243930b927bcc *cca6a8b77a36a98867630dcfdd1df2bcbe54110b4a2f96a0dbc93813405f9d6162a10ca5f531b8 053daa4e00000000 27302 *8dd87c81e273ade84eb9f596448172b8900a3c12e8df402e421d9d466a7b262337e18f *c201da658943837370519fb8ecdac311df98e2083eb9efb24562e3b03fa5f0590fb20f95dc121a d7324d8500000000 18241 *7574dc952049108be4a9f68c4c7269797d *33374b2bccb44f01a0c0807ca3c39430e7a9be182d133c0af30d478f80063c672f0a8efbc356d5 9c0ff46900000000 54687 *b743e02b25bb1e69690968b7f0dd211c6a80cd0eebc058ff9e7f3f362aa4a8c39e66 *dd132868486576706e2c6f95429f162abe2eb0d83bd7478c870444522a4c1ffb16 1240aa6900000000 27356 *2d509445f251f3408c1af500b7567d8a19d806c1 *a16e513770a3ba9337085e2f33afcc7d94576106a9aeef50ac190e16 47c3d52600000000 23623 *539c7aa99a3c63c41b423a02e3da617dd3672a98250bc71627fd7d *d26eb59a1370a55a369df40f62c1499f177ef38df2d2ff387d736b3a95f7156664 911a5bbd00000000 40851 *cb3fd90c0bc545d776af70eac7bd96 *8883c4e7eb 238ae6f700000000 566 *c2729de86ca2b2c77d0c48e51f60e79d394b70ec5ea94aaa7796a10985402eb5 *a9e0678237db62bfb6920a6cd8adcc620a9c6a67858aa540a1 1253501b00000000 63818 *9a32036bf4afff24fcd600661f817485c2 * ffffffff00000000 49387 *68be012990bb2c0229478eace809f64417c462c0d752cefda5 *af89831b6dfc1679af 4d835db300000000 13315 *c9f785ea92f01d424ed69cb03648699cab6c21dac680 *b525c1faf2dbb8719d1b3516f1d6c2cc98ab69541a258649 fcfb3cb100000000 30206 *39 *49cd11d5fc6a2bdc68d3584a0e92cb78315bbe562a3cbab2 f3cd842b00000000 45942 *23 *5c51e2d3 7ec68c4100000000 22736 *ccc7d845466d61be9a5971e0a55de0b5b16e87ba121c6f44 *906bdcf51b6112dc1c05d5e6bb 29a174a400000000 62601 *33ddeda859 *3c68d76cb96b1738a948d8d60da98769f426b6d50f86ec 2460976200000000 37938 *7e2d0b94b312ce476bd61331f810f5956bab1baeed13ac0d069ab8b56406e3 *bad377af15de12127d 2741c2aa00000000 16581 *ac312bee0d3fd8814be16489a4931313be *05aa3f9fe0c399e14470f1f64887b51fa38f9f 7e51874800000000 15653 *0ce145500eae256a2c20ecbdbdf52b2a6b80e5737a670bb3d0839650910f9f1d20 *4c3ee52ebf1cd46848f77888f368b36c54b58742003b1047dd39656f07b42b680b1284b09dfa cb78e19100000000 6277 *c6893f277f8f0ca84913a1d4c3b8a63993c472ead14e73c093b2 *aad25c24c5fc679cf33ffaa1fbff3915bda977ecf0b3a76f28195f d95c562a00000000 7054 *407c804963b77c73f95fffc3a8062b56d923be0dd076a8667aebee294794d7 *715bda23f39964359bc0 c917544c00000000 32870 *01f8df4d727b639bf4907cf0f1 *027d1ca4daf80d35461799f00972563b19b3689e1166a0121a9f0e0743bd0462 b0e6046c00000000 56693 *842eaa9d85c6 *2d212d440015d1b9d95b7a8a153262dd5d80efcc 322e546700000000 59726 *5e222dfa41 *91d25df8b529b0eefc2fd0f018dfed8589daba765b6f1f7d49e586c5b6c64719c1 a22eff9300000000 38241 *e824d32fc615838ef51c4bc1aab3e325c649 *1c48cc9f476bd4874c229b110918bf939cd12bdf8da839a5d739b9e94b665badc8c8f0fabf1b a55bb29900000000 18013 *5e *59522949fd17ef13aff50af1532f946a134deb919c 07c6b5dd00000000 44143 *891ce9077a607e28ac9adca4993b8c23ff5be604258ee674201bd6a498796ed3 *7cfa0088 d3c262a400000000 12822 *5ef8f765865e31a533b41670743fc83aabfa27f1e6159c23 *06d4d7161bff2d6fc498a9efbe5ce08b1e6c89470384d8bddfee 87f0e9fd00000000 46758 *2dfcc3407bb658781dfcae9cbad6d89aa722c2 *0cdf55318582c20eef938ed223b0ba5c6e41 17c2786f00000000 10214 *04d03a53ef7cffff48 *f842595d 518cd49000000000 28171 *5028f20bfbb87c *bf9606cea79b8e3df637b35d7f12e9e3 88d6214400000000 15346 *5f97f438c482cd73c50845e132ced839f46f6c2bc10619fe660fe5f8e612e59112163d07 *4ec58241e1ca3e80af25b65486e3746e8811acb3820f89958cb12c59f14e1dd02881b057c43e 6315032500000000 53284 *39831a78c784063dd836b76ba5008f41 *e6cb8a2354674c53caef1a7afaca2c 8442677c00000000 15557 *38dd2066f930eb5d9de73a7e3a1ccfe2266eeabdfb46df74c248e240a7469d26 *7722c0bfde0a4b899062b0 03d4743b00000000 26467 *6640456d6682921d20edafd0959f69 *703856c1e2cf746cdbf324df 2e36fdbf00000000 18831 *5c6cc0f0595b0936da9eae *de0c27052f7fceaa2ce94b5be3953370d6b3922c3d69bc98a4dba58b dc9fc1c200000000 17507 *08a87475a5d017645a8d8e5d6f5c71ef1524ef05c508d953bf9433b97ef2 *1e663a22b77d8d3a1afaf2fe7c7f3c603befe445fa0136be65543a161a69a4dfe0483b26 98e4093f00000000 9052 *0f11784ed432ff6133f146 *76a8125c0f011f78af6a1253d9179fc37942bbb7024f10543dcadbdd77a5ad40f5cd1a8f7b ec046d2f00000000 14899 *24ec2cb26dee05334b1ae7299487f3abd6f0a06e26fc679845ebf9e9276102624dff7ed6d929a5 *e36834b238c392a1a40f780df3fa0e7ad1888f7a9d651829f5d3f3dcc08b872bd3b3fa1023 621357a000000000 60053 * *a3023b5e194a59fd738651cc7d0d6ec0dfa6226da7 d42137f100000000 22976 *3ca18b18899b494cb435adeb59627fe5a3877cce4b61860512d9c9067c73a42d2d3c7ae5 *fa898d4b150018579aa0ad7d 7314750600000000 54496 *7de90322ef4eb737b35866c11aa1838c963ec143f607 *294b f3ea6e1b00000000 52965 *25ffe151457ef83a7ce8f7118fa8b3ad2ccdb1ac *7e37d5fa79ca678951e54f1d30384cc2b954f50bd37c11 3ce3f05700000000 33116 *0f2492016ce746fb299fb026edbc *36c67ec91ce160605a2f0ecb859479d13adea777a46b3c31 91e0411e00000000 52698 *8eed6a1c5b1677767ba5a05e369e6794af6487c5a1ac67269bc3 *6fe97359fe6a0da4bcea8d 7fd98f4300000000 34485 *4b745f538b *0dd33c806f0059a0c99b12016712855fe74b2535cf9c96e693ee 1b97719100000000 18911 *b002322c7428088dacf4b2b5429c74f2dcbbb476532c1c4b3ff2 *684363a440ffa019ba4f07574edcf3 9532190d00000000 62230 *18df730441280bfa37d5cb00d6b584822849f7fc76ac16e10d4aca571f *981495f01747dc76b242962cb67de72b5b680613f21c25897642f91e7b08de87ff6084 7882d19600000000 7776 *69d695a0e1b2df4e022204 *302a916653e763b4e9cd08 09af45ac00000000 10162 *e5228563fc247919 * ffffffff00000000 27782 *2651fa304fbd8a3d1d7d51d2cbe16a *d46040ed2bdedebfc16b0e66f5c29f7c8ac6e90d1a5ae5fc4210b80e917ef1aa34 418a1d8f00000000 58763 *81b580 *f79a6c07760f2e231a30a4a0b61263b461e35d91666f3a544da3ec62f2845d1c08 ed7e842c00000000 19530 *add4d92f2beaa0319d437d06c19784904adcb6adccfe97def2c11ca80d1f6ade5989d78b *114768d7144cf59fb6 12bf011500000000 56592 *e8bbb3bd29c387ff2337bbeec8705715b6f3 *f6aa600e77fe99b846dd977eef6a0bf1172deb5b76c6 59109efd00000000 43466 *81191387b4da8895 *63196f0c3dad77f9ae0bf92a5410ee258df74c1e3203d5829adc01c4db085f1d01db0a 02f96ad800000000 1553 *f99f7bb19eab125574b7c525 *a1623c4a5368fb1a922057 f436076900000000 23802 *86e5994768b64d557faee7f9e5271316225367074ebb04a9ab07 *4f2057e6d90cb73453381e80b6c13ac579609e725bc351 fd0d1b2200000000 19605 *8acb008de1d5fbf4250a15337d0914fae5d1b898 *f150b5f67972880c5f1acc365056474da8f2151bd9c928b9092e03e87e2390e856d2eb 9a15c2a000000000 23265 *c3c5dfd37c72545f099c518bc9a3936288a586fecc17449861ec2dcc5b19 *886f9dd491628ca77e56e0e2d31106a4745a284eef63346f13205f16667dbdb86d1887 d7c2d17d00000000 12048 *3b2dcfdac267dca916aaccab4f67b2929547a4cca9c81dac927485f3059001b6a63dbfbe5e *49d7298fd23847 325efab400000000 55316 *4f3217a4 *949bebdf86945c541f36f8d213d8ecb7aa4c178eeee5d570 53679d4e00000000 45626 *4c6778fd9519cce964c143d3 *85ae11168d33005c1e646e6db5a69392d76f03bdaa b3fc126e00000000 27480 *5faac851a5a98807b5245d148a9a0b3ca9cef083f0 *538e81521f243409a220d6fab162c6451572a1157a289d78 f4d7b05100000000 55366 *973b36254412ee469ec646fbca091cf1fd9daf0ca281923f55e39a *2e875b62b13509526e1d32cacd49b81296dc237fb6 97a7e88000000000 43807 *bfab37ce52940dc483069b1ec45a0d1254df4a595c2df133ad0b00229f *c6658d06ccec 8d7f130d00000000 51967 *ff233a3f6b3cb585999733788c4f31942b *7a4de9865f1af6facfaf7830107a0446e83b8c66af1cc104d2ad0e26c3dc5b 7b25b9c700000000 57373 *39ba99dffb70bbc93e12522f6a2d5b42 * ffffffff00000000 31665 *7bba2c155ac59470fe39d02ad88ef611c9c32ced62f64c9e2d90 *830925e2f3e9 3be9c40000000000 30781 *43afdf60d4f7a31f03489d29a69f58517bf2914eaa1081d20a4efc4bc4bbb89272419507 *6bd448a0bec921cee8f171a796d1bcee1694296534253020cc3f4d835220 5750f66200000000 50480 *bbb941b0a35c9c29f0ed6ee24d2efb28a4e8b58b3f6c6dcccb558a1c07 *cf4a131ac0cc4acb063088f2c891961d3b0882b647e5436e741317de 7cb6837b00000000 32392 *556d187a7a698585de9a300151fd28df2d6c7fee3c421c43ea *da38f662c3798863aa5952a0bde5bdb412054e422eb9170d08240cda3d40013f8bcba414291fd6 d82f75d800000000 44001 *f12efacf73213f9615155f *0542418b3e21c0495de8339aa0807490b83d63d8d01d3d2e78e71eaf85192a94633b579188 7631902000000000 20767 *c09f94082dfa82592499c354051f02a0aa2157783169ce61a7c95cbfc4ce9595eeea92451577 *d4e8b12e7784b3a32ef2498a53f9854d 4118f9a200000000 45816 *8b9b255a04a950a58c23 *e003f14b5aae14161c271d1368c2b7e9c10c0ce65872f5 a9856bbc00000000 40573 *36ec723856946821242e33f0 *4db844e97166 a4acfcfd00000000 62064 *b7e7ebbe01d95dc144b94aa186ef1f89efcb19f7184e7210cf4f94f6144133b6c73e1138a9f6f8 *7fbd7e67a04131ab0e75f00c56c4c5570f132096402498f300dfd12f85b2 ee1f988600000000 19479 *3945dd7c00f94db5d75ebb1d94e45cd0da *3ce7d5ce8134f1949da3e51a0ca55435550c 5450f97000000000 56282 *99f450ef73aa38fb49ad74e49f0476b8566ac561e6664d2906528a64 *413422ea581df62334f0a2e8558c0c74fc887698a6dacb 41bcfc1f00000000 6822 *cd9615d919ce8dd5 *9686bce6cc80 62a898cb00000000 Authen-DecHpwd-2.006/t/error_pp.t000444001750001750 14311561302063 16604 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/error.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/pod_syn.t000444001750001750 23611561302063 16432 0ustar00zeframzefram000000000000use warnings; use strict; use Test::More; plan skip_all => "Test::Pod not available" unless eval "use Test::Pod 1.00; 1"; Test::Pod::all_pod_files_ok(); 1; Authen-DecHpwd-2.006/t/purdy_pp.t000444001750001750 14311561302063 16616 0ustar00zeframzefram000000000000use warnings; use strict; do "t/setup_pp.pl" or die $@ || $!; do "t/purdy.t" or die $@ || $!; 1; Authen-DecHpwd-2.006/t/error.t000444001750001750 53711561302063 16114 0ustar00zeframzefram000000000000use warnings; use strict; use Test::More tests => 3; BEGIN { use_ok "Authen::DecHpwd", qw(lgi_hpwd UAI_C_PURDY); } eval { lgi_hpwd("foo\x{100}bar", "foobar", UAI_C_PURDY, 123); }; like $@, qr/\Ainput must contain only octets\b/; eval { lgi_hpwd("foobar", "foo\x{100}bar", UAI_C_PURDY, 123); }; like $@, qr/\Ainput must contain only octets\b/; 1;