Index: hash/trunk/KIDS.0
===================================================================
--- hash/trunk/KIDS.0	(revision 684)
+++ hash/trunk/KIDS.0	(revision 684)
@@ -0,0 +1,584 @@
+KIDS Distribution saved on Jan 12, 2010@09:43:23
+Tuesday Jan 12
+**KIDS**:VWHHS*00.1*5^
+
+**INSTALL NAME**
+VWHHS*00.1*5
+"BLD",7076,0)
+VWHHS*00.1*5^^0^3100112^n
+"BLD",7076,4,0)
+^9.64PA^^
+"BLD",7076,6.3)
+2
+"BLD",7076,"KRN",0)
+^9.67PA^8989.52^19
+"BLD",7076,"KRN",.4,0)
+.4
+"BLD",7076,"KRN",.401,0)
+.401
+"BLD",7076,"KRN",.402,0)
+.402
+"BLD",7076,"KRN",.403,0)
+.403
+"BLD",7076,"KRN",.5,0)
+.5
+"BLD",7076,"KRN",.84,0)
+.84
+"BLD",7076,"KRN",3.6,0)
+3.6
+"BLD",7076,"KRN",3.8,0)
+3.8
+"BLD",7076,"KRN",9.2,0)
+9.2
+"BLD",7076,"KRN",9.8,0)
+9.8
+"BLD",7076,"KRN",9.8,"NM",0)
+^9.68A^7^7
+"BLD",7076,"KRN",9.8,"NM",1,0)
+VWHSH0^^0^B4330045
+"BLD",7076,"KRN",9.8,"NM",2,0)
+VWHSH3^^0^B2878674
+"BLD",7076,"KRN",9.8,"NM",3,0)
+VWHSH8^^0^B1242378
+"BLD",7076,"KRN",9.8,"NM",4,0)
+VWHSHCLX^^0^B2011086
+"BLD",7076,"KRN",9.8,"NM",5,0)
+VWHSHCWN^^0^B1741215
+"BLD",7076,"KRN",9.8,"NM",6,0)
+VWHSHGTM^^0^B1519925
+"BLD",7076,"KRN",9.8,"NM",7,0)
+VWHSHTST^^0^B405235
+"BLD",7076,"KRN",9.8,"NM","B","VWHSH0",1)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSH3",2)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSH8",3)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSHCLX",4)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSHCWN",5)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSHGTM",6)
+
+"BLD",7076,"KRN",9.8,"NM","B","VWHSHTST",7)
+
+"BLD",7076,"KRN",19,0)
+19
+"BLD",7076,"KRN",19.1,0)
+19.1
+"BLD",7076,"KRN",101,0)
+101
+"BLD",7076,"KRN",409.61,0)
+409.61
+"BLD",7076,"KRN",771,0)
+771
+"BLD",7076,"KRN",870,0)
+870
+"BLD",7076,"KRN",8989.51,0)
+8989.51
+"BLD",7076,"KRN",8989.52,0)
+8989.52
+"BLD",7076,"KRN",8994,0)
+8994
+"BLD",7076,"KRN","B",.4,.4)
+
+"BLD",7076,"KRN","B",.401,.401)
+
+"BLD",7076,"KRN","B",.402,.402)
+
+"BLD",7076,"KRN","B",.403,.403)
+
+"BLD",7076,"KRN","B",.5,.5)
+
+"BLD",7076,"KRN","B",.84,.84)
+
+"BLD",7076,"KRN","B",3.6,3.6)
+
+"BLD",7076,"KRN","B",3.8,3.8)
+
+"BLD",7076,"KRN","B",9.2,9.2)
+
+"BLD",7076,"KRN","B",9.8,9.8)
+
+"BLD",7076,"KRN","B",19,19)
+
+"BLD",7076,"KRN","B",19.1,19.1)
+
+"BLD",7076,"KRN","B",101,101)
+
+"BLD",7076,"KRN","B",409.61,409.61)
+
+"BLD",7076,"KRN","B",771,771)
+
+"BLD",7076,"KRN","B",870,870)
+
+"BLD",7076,"KRN","B",8989.51,8989.51)
+
+"BLD",7076,"KRN","B",8989.52,8989.52)
+
+"BLD",7076,"KRN","B",8994,8994)
+
+"BLD",7076,"QUES",0)
+^9.62^^0
+"BLD",7076,"REQB",0)
+^9.611^^
+"MBREQ")
+0
+"QUES","XPF1",0)
+Y
+"QUES","XPF1","??")
+^D REP^XPDH
+"QUES","XPF1","A")
+Shall I write over your |FLAG| File
+"QUES","XPF1","B")
+YES
+"QUES","XPF1","M")
+D XPF1^XPDIQ
+"QUES","XPF2",0)
+Y
+"QUES","XPF2","??")
+^D DTA^XPDH
+"QUES","XPF2","A")
+Want my data |FLAG| yours
+"QUES","XPF2","B")
+YES
+"QUES","XPF2","M")
+D XPF2^XPDIQ
+"QUES","XPI1",0)
+YO
+"QUES","XPI1","??")
+^D INHIBIT^XPDH
+"QUES","XPI1","A")
+Want KIDS to INHIBIT LOGONs during the install
+"QUES","XPI1","B")
+NO
+"QUES","XPI1","M")
+D XPI1^XPDIQ
+"QUES","XPM1",0)
+PO^VA(200,:EM
+"QUES","XPM1","??")
+^D MG^XPDH
+"QUES","XPM1","A")
+Enter the Coordinator for Mail Group '|FLAG|'
+"QUES","XPM1","B")
+
+"QUES","XPM1","M")
+D XPM1^XPDIQ
+"QUES","XPO1",0)
+Y
+"QUES","XPO1","??")
+^D MENU^XPDH
+"QUES","XPO1","A")
+Want KIDS to Rebuild Menu Trees Upon Completion of Install
+"QUES","XPO1","B")
+NO
+"QUES","XPO1","M")
+D XPO1^XPDIQ
+"QUES","XPZ1",0)
+Y
+"QUES","XPZ1","??")
+^D OPT^XPDH
+"QUES","XPZ1","A")
+Want to DISABLE Scheduled Options, Menu Options, and Protocols
+"QUES","XPZ1","B")
+NO
+"QUES","XPZ1","M")
+D XPZ1^XPDIQ
+"QUES","XPZ2",0)
+Y
+"QUES","XPZ2","??")
+^D RTN^XPDH
+"QUES","XPZ2","A")
+Want to MOVE routines to other CPUs
+"QUES","XPZ2","B")
+NO
+"QUES","XPZ2","M")
+D XPZ2^XPDIQ
+"RTN")
+7
+"RTN","VWHSH0")
+0^1^B4330045
+"RTN","VWHSH0",1,0)
+VWHSH0 ;;GpZ; - ; IMPROVED HASHING UTILITY: MAIN INSTALL MODULE; 01/08/2010
+"RTN","VWHSH0",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSH0",3,0)
+ ;; VWHSH
+"RTN","VWHSH0",4,0)
+CHECK ;;
+"RTN","VWHSH0",5,0)
+ N %S,%D,%ZR,HSH,HASH,HASHLIST,MUMPS,OS,PATH,SCR,ZTOS
+"RTN","VWHSH0",6,0)
+ DO 
+"RTN","VWHSH0",7,0)
+ . IF $$EN^XUSHSH("TEST")="TEST" S HASH="NONE" QUIT
+"RTN","VWHSH0",8,0)
+ . S HASH=$P($G(^%ZOSF("HASHLIST")),"|")  ; ID installed HASH from earlier version.
+"RTN","VWHSH0",9,0)
+ . S HASH=$S($$EN^XUSHSH("TEST")="TEST":"NONE",$L($G(HASH))>0:HASH,1:"LEGACY")  ; query current XUSHSH
+"RTN","VWHSH0",10,0)
+ DO DEFHASH
+"RTN","VWHSH0",11,0)
+ IF HASHLIST'[" MD5 " S ABORT="gpg FAILURE; CHECK for gnupg dependency & its PATH" GOTO ABORT
+"RTN","VWHSH0",12,0)
+ S %S=$S(ZTOS=8:"VWHSHGTM",HASHLIST["Linux":"VWHSHCLX",1:"VWHSHCWN")
+"RTN","VWHSH0",13,0)
+ S %D="XUSHSH",U="^",SCR="I 1"
+"RTN","VWHSH0",14,0)
+ IF $T(^VWHSHLEG)="" S %S="XUSHSH^"_%S,%D="VWHSHLEG^"_%D
+"RTN","VWHSH0",15,0)
+ ; preserve old ^XUSHSH as ^VWHSHLEG
+"RTN","VWHSH0",16,0)
+ S U="^",SCR="I 1"
+"RTN","VWHSH0",17,0)
+ DO MOVE^ZTMGRSET
+"RTN","VWHSH0",18,0)
+ QUIT
+"RTN","VWHSH0",19,0)
+ ;
+"RTN","VWHSH0",20,0)
+DEFHASH ;; Entry point for changing default hash.
+"RTN","VWHSH0",21,0)
+ IF '$L($G(HASH)) DO
+"RTN","VWHSH0",22,0)
+ . S HASH=$P($G(^%ZOSF("HASHLIST")),"|")
+"RTN","VWHSH0",23,0)
+ . QUIT:$L($G(HASH))
+"RTN","VWHSH0",24,0)
+ . S:$T(^VWHSHLEG)>"" HASH=$S($$EN^VWHSHLEG("TEST")="TEST":"NONE",1:"LEGACY")
+"RTN","VWHSH0",25,0)
+ . QUIT:$L($G(HASH))
+"RTN","VWHSH0",26,0)
+ . S HASH="LEGACY"  ; hard-coded default hash is LEGACY
+"RTN","VWHSH0",27,0)
+ . QUIT
+"RTN","VWHSH0",28,0)
+ S HASH=$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
+"RTN","VWHSH0",29,0)
+ S MUMPS=^%ZOSF("OS"),ZTOS=$S(MUMPS["GT.M":8,MUMPS["OpenM":3)
+"RTN","VWHSH0",30,0)
+ ; SHOULD ERROR IF neither GTM nor Cache.
+"RTN","VWHSH0",31,0)
+ S HASHLIST=HASH_"||"_$$INIT^@("VWHSH"_ZTOS)()
+"RTN","VWHSH0",32,0)
+ S ^%ZOSF("HASHLIST")=HASHLIST
+"RTN","VWHSH0",33,0)
+ QUIT
+"RTN","VWHSH0",34,0)
+ ;
+"RTN","VWHSH0",35,0)
+ABORT ;; Failed to find gpg hashes.
+"RTN","VWHSH0",36,0)
+ U 0 W !,ABORT,! W $G(^%ZOSF("HASHLIST")),!
+"RTN","VWHSH3")
+0^2^B2878674
+"RTN","VWHSH3",1,0)
+VWHSH3 ;;GpZ; - ; IMPROVED HASHING UTILITY: INSTALL MODULE, OpenM; 01/08/2010
+"RTN","VWHSH3",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSH3",3,0)
+ ;
+"RTN","VWHSH3",4,0)
+ QUIT
+"RTN","VWHSH3",5,0)
+ ;
+"RTN","VWHSH3",6,0)
+INIT() S MUMPS=^%ZOSF("OS"),OS=$$OPENM("uname -o","Linux")
+"RTN","VWHSH3",7,0)
+ IF OS'["Linux" S OS=$$OPENM("Ver","Microsoft") DO
+"RTN","VWHSH3",8,0)
+ . S PIPE="PATH"
+"RTN","VWHSH3",9,0)
+ . OPEN PIPE:"Q" USE PIPE READ PATH CLOSE PIPE
+"RTN","VWHSH3",10,0)
+ . S PATH=PATH_";C:\""Program Files""\GNU\GnuPG\"
+"RTN","VWHSH3",11,0)
+ . F I=1:1:$L(PATH,";") Q:($P(PATH,";",I)["GnuPG")
+"RTN","VWHSH3",12,0)
+ . S PATH=$P(PATH,";",I)
+"RTN","VWHSH3",13,0)
+ ELSE  S PATH=$P($P($$OPENM("whereis gpg","gpg")," ",2),"gpg")
+"RTN","VWHSH3",14,0)
+ S ZUT=$ZUTIL(68,40,1)
+"RTN","VWHSH3",15,0)
+ S PIPE=$G(PATH)_"gpg --version"
+"RTN","VWHSH3",16,0)
+ OPEN PIPE:"Q"
+"RTN","VWHSH3",17,0)
+ F I=1:1:20 USE PIPE R HASHLIST QUIT:$ZEOF<0  D:HASHLIST["'gpg' is not recognized"  q:HASHLIST["Hash:"
+"RTN","VWHSH3",18,0)
+ . S HASHLIST="Hash:gpg_not_found:gpg_HASHES_not_available"
+"RTN","VWHSH3",19,0)
+ CLOSE PIPE
+"RTN","VWHSH3",20,0)
+ S ZUT=$ZUTIL(68,40,ZUT)
+"RTN","VWHSH3",21,0)
+ S HASHLIST=HASHLIST
+"RTN","VWHSH3",22,0)
+ S HASHLIST=$TR($P(HASHLIST,"Hash:",2),",")
+"RTN","VWHSH3",23,0)
+ S HASHLIST=HASHLIST_" ||"_PATH_"||"_MUMPS_OS_"||"
+"RTN","VWHSH3",24,0)
+ QUIT HASHLIST
+"RTN","VWHSH3",25,0)
+ ;
+"RTN","VWHSH3",26,0)
+OPENM(PIPE,SEEKING) ;;
+"RTN","VWHSH3",27,0)
+ N (PIPE,SEEKING)
+"RTN","VWHSH3",28,0)
+ S ZUT=$ZUTIL(68,40,1)
+"RTN","VWHSH3",29,0)
+ OPEN PIPE:"Q"
+"RTN","VWHSH3",30,0)
+ F I=1:1:4 USE PIPE READ X Q:$ZEOF<0  Q:X[SEEKING
+"RTN","VWHSH3",31,0)
+ CLOSE PIPE
+"RTN","VWHSH3",32,0)
+ S ZUT=$ZUTIL(68,40,ZUT)
+"RTN","VWHSH3",33,0)
+ QUIT X
+"RTN","VWHSH8")
+0^3^B1242378
+"RTN","VWHSH8",1,0)
+VWHSH8 ;;GpZ; - ; IMPROVED HASHING UTILITY: INSTALL MODULE, GT.M; 01/08/2010
+"RTN","VWHSH8",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSH8",3,0)
+ ;
+"RTN","VWHSH8",4,0)
+ QUIT
+"RTN","VWHSH8",5,0)
+ ;
+"RTN","VWHSH8",6,0)
+INIT() S MUMPS=^%ZOSF("OS"),OS=$$GTM("uname -o")
+"RTN","VWHSH8",7,0)
+ S PATH=$P($P($$GTM("whereis gpg")," ",2),"gpg")
+"RTN","VWHSH8",8,0)
+ S X=$TR("host:"_MUMPS_OS_":","^ ","-")
+"RTN","VWHSH8",9,0)
+ O "PIPE":(COMM="gpg --version|grep -E ^Hash:":READONLY)::"PIPE"
+"RTN","VWHSH8",10,0)
+ U "PIPE" R HASHLIST
+"RTN","VWHSH8",11,0)
+ C "PIPE" U 0
+"RTN","VWHSH8",12,0)
+ S HASHLIST=$TR($P(HASHLIST,"Hash:",2),",")
+"RTN","VWHSH8",13,0)
+ S HASHLIST=HASHLIST_" ||"_PATH_"||"_MUMPS_OS_"||"
+"RTN","VWHSH8",14,0)
+ QUIT HASHLIST
+"RTN","VWHSH8",15,0)
+ ;
+"RTN","VWHSH8",16,0)
+GTM(PIPE) ;
+"RTN","VWHSH8",17,0)
+ N (PIPE)
+"RTN","VWHSH8",18,0)
+ OPEN "PIPE":(command=PIPE)::"pipe"
+"RTN","VWHSH8",19,0)
+ S X="" F I=1:1:4 U "PIPE" R XX Q:$ZEOF  S X=X_XX
+"RTN","VWHSH8",20,0)
+ CLOSE "PIPE"
+"RTN","VWHSH8",21,0)
+ QUIT X
+"RTN","VWHSHCLX")
+0^4^B2011086
+"RTN","VWHSHCLX",1,0)
+XUSHSH ;;GpZ; - ; IMPROVED HASHING UTILITY: for Cache/Linux (VWHSHCLX); 01/08/2010
+"RTN","VWHSHCLX",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSHCLX",3,0)
+ ;;
+"RTN","VWHSHCLX",4,0)
+A S X=$$EN(X) Q
+"RTN","VWHSHCLX",5,0)
+ ;;
+"RTN","VWHSHCLX",6,0)
+EN(X,HASH) ;;
+"RTN","VWHSHCLX",7,0)
+ N (X,HASH)
+"RTN","VWHSHCLX",8,0)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+"RTN","VWHSHCLX",9,0)
+ S HASHLIST=^%ZOSF("HASHLIST")
+"RTN","VWHSHCLX",10,0)
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+"RTN","VWHSHCLX",11,0)
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+"RTN","VWHSHCLX",12,0)
+ Q:HASHLIST'[(" "_HASH_" ") X
+"RTN","VWHSHCLX",13,0)
+ S SED="sed -e 's/$/\r/'|"
+"RTN","VWHSHCLX",14,0)
+ N PIPE,ZUT,I
+"RTN","VWHSHCLX",15,0)
+ S ZUT=$ZUTIL(68,40,1)  ;; MSM-style End-of-File Handling
+"RTN","VWHSHCLX",16,0)
+ S PIPE=" echo "_X_"||"_SED_$P(HASHLIST,"||",3)_"gpg --print-md "_HASH
+"RTN","VWHSHCLX",17,0)
+ OPEN PIPE:"Q"
+"RTN","VWHSHCLX",18,0)
+ F I=1:1:4 USE PIPE R X Q:$ZEOF<0  S HASHOUT=$G(HASHOUT)_X
+"RTN","VWHSHCLX",19,0)
+ CLOSE PIPE
+"RTN","VWHSHCLX",20,0)
+ S ZUT=$ZUTIL(68,40,ZUT),X=HASHOUT
+"RTN","VWHSHCLX",21,0)
+ Q $TR(X," ")
+"RTN","VWHSHCWN")
+0^5^B1741215
+"RTN","VWHSHCWN",1,0)
+XUSHSH ;;GpZ;  ; IMPROVED HASHING UTILITY: Cache/Windows (VWHSHCWN);01/08/2010
+"RTN","VWHSHCWN",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSHCWN",3,0)
+ ;;
+"RTN","VWHSHCWN",4,0)
+A S X=$$EN(X) Q
+"RTN","VWHSHCWN",5,0)
+ ;;
+"RTN","VWHSHCWN",6,0)
+EN(X,HASH) ;;
+"RTN","VWHSHCWN",7,0)
+ N (X,HASH)
+"RTN","VWHSHCWN",8,0)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+"RTN","VWHSHCWN",9,0)
+ S HASHLIST=^%ZOSF("HASHLIST")
+"RTN","VWHSHCWN",10,0)
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+"RTN","VWHSHCWN",11,0)
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+"RTN","VWHSHCWN",12,0)
+ Q:HASHLIST'[(" "_HASH_" ") X
+"RTN","VWHSHCWN",13,0)
+ N PIPE,ZUT,I
+"RTN","VWHSHCWN",14,0)
+ S ZUT=$ZUTIL(68,40,1)
+"RTN","VWHSHCWN",15,0)
+ S PIPE=" echo "_X_"||"_$P(HASHLIST,"||",3)_"gpg --print-md "_HASH
+"RTN","VWHSHCWN",16,0)
+ OPEN PIPE:"Q"
+"RTN","VWHSHCWN",17,0)
+ F I=1:1:4 USE PIPE R X Q:$ZEOF<0  S HASHOUT=$G(HASHOUT)_X
+"RTN","VWHSHCWN",18,0)
+ CLOSE PIPE
+"RTN","VWHSHCWN",19,0)
+ S ZUT=$ZUTIL(68,40,ZUT),X=HASHOUT
+"RTN","VWHSHCWN",20,0)
+ Q $TR(X," ")
+"RTN","VWHSHGTM")
+0^6^B1519925
+"RTN","VWHSHGTM",1,0)
+XUSHSH ;;GpZ; - ; IMPROVED HASHING UTILITY: GT.M Version (VWHSHGTM); 01/08/2010
+"RTN","VWHSHGTM",2,0)
+V ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSHGTM",3,0)
+ ;;
+"RTN","VWHSHGTM",4,0)
+A S X=$$EN(X) Q
+"RTN","VWHSHGTM",5,0)
+ ;;
+"RTN","VWHSHGTM",6,0)
+EN(X,HASH) ;;
+"RTN","VWHSHGTM",7,0)
+ N (X,HASH)
+"RTN","VWHSHGTM",8,0)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+"RTN","VWHSHGTM",9,0)
+ S HASHLIST=^%ZOSF("HASHLIST")
+"RTN","VWHSHGTM",10,0)
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+"RTN","VWHSHGTM",11,0)
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+"RTN","VWHSHGTM",12,0)
+ Q:HASHLIST'[(" "_HASH_" ") X
+"RTN","VWHSHGTM",13,0)
+ S SED="sed -e 's/$/\r/'|"
+"RTN","VWHSHGTM",14,0)
+ OPEN "PIPE":(COMM=SED_"gpg --print-md "_HASH)::"PIPE"
+"RTN","VWHSHGTM",15,0)
+ USE "PIPE" W X,! W /EOF
+"RTN","VWHSHGTM",16,0)
+ F  R X Q:$ZEOF  S HASHOUT=$G(HASHOUT)_X
+"RTN","VWHSHGTM",17,0)
+ CLOSE "PIPE"
+"RTN","VWHSHGTM",18,0)
+ Q $TR(HASHOUT," ")
+"RTN","VWHSHTST")
+0^7^B405235
+"RTN","VWHSHTST",1,0)
+XUSHSH ;JL.Z; ROBUST PASSWORD HASH TEST xushsh; 11 SEPTEMBER 2009
+"RTN","VWHSHTST",2,0)
+ ;;8.0;KERNEL;**60**;Jul 10, 1995
+"RTN","VWHSHTST",3,0)
+ ;;
+"RTN","VWHSHTST",4,0)
+ ;;
+"RTN","VWHSHTST",5,0)
+ ;;SF-ISC/STAFF - PASSWORD ENCRYPTION ;3/23/89  15:09 ; 4/14/05 1:22pm
+"RTN","VWHSHTST",6,0)
+ ;;8.0;KERNEL;;Jul 10, 1995
+"RTN","VWHSHTST",7,0)
+ ;; Input in X
+"RTN","VWHSHTST",8,0)
+ ;; Output in X
+"RTN","VWHSHTST",9,0)
+ ;; Algorithm for VistA Office EHR encryption (BSL)
+"RTN","VWHSHTST",10,0)
+A ; 
+"RTN","VWHSHTST",11,0)
+ S X=$$EN(X)
+"RTN","VWHSHTST",12,0)
+ Q
+"RTN","VWHSHTST",13,0)
+ ;
+"RTN","VWHSHTST",14,0)
+EN(X)
+"RTN","VWHSHTST",15,0)
+ Q X
+"RTN","VWHSHTST",16,0)
+ 
+"RTN","VWHSHTST",17,0)
+ 
+"RTN","VWHSHTST",18,0)
+ 
+"RTN","VWHSHTST",19,0)
+ 
+"RTN","VWHSHTST",20,0)
+ 
+"RTN","VWHSHTST",21,0)
+ 
+"RTN","VWHSHTST",22,0)
+ 
+"RTN","VWHSHTST",23,0)
+ 
+"RTN","VWHSHTST",24,0)
+ 
+"RTN","VWHSHTST",25,0)
+ 
+"RTN","VWHSHTST",26,0)
+ 
+"RTN","VWHSHTST",27,0)
+ 
+"RTN","VWHSHTST",28,0)
+ 
+"RTN","VWHSHTST",29,0)
+ 
+"RTN","VWHSHTST",30,0)
+ 
+"RTN","VWHSHTST",31,0)
+ 
+"RTN","VWHSHTST",32,0)
+ 
+"RTN","VWHSHTST",33,0)
+ 
+"RTN","VWHSHTST",34,0)
+ 
+"RTN","VWHSHTST",35,0)
+ 
+"VER")
+8.0^22.0
+**END**
+**END**
Index: hash/trunk/VWHSH0.m
===================================================================
--- hash/trunk/VWHSH0.m	(revision 684)
+++ hash/trunk/VWHSH0.m	(revision 684)
@@ -0,0 +1,36 @@
+VWHSH0 ;;GpZ; - ; IMPROVED HASHING UTILITY: MAIN INSTALL MODULE; 01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;; VWHSH
+CHECK ;;
+ N %S,%D,%ZR,HSH,HASH,HASHLIST,MUMPS,OS,PATH,SCR,ZTOS
+ DO 
+ . IF $$EN^XUSHSH("TEST")="TEST" S HASH="NONE" QUIT
+ . S HASH=$P($G(^%ZOSF("HASHLIST")),"|")  ; ID installed HASH from earlier version.
+ . S HASH=$S($$EN^XUSHSH("TEST")="TEST":"NONE",$L($G(HASH))>0:HASH,1:"LEGACY")  ; query current XUSHSH
+ DO DEFHASH
+ IF HASHLIST'[" MD5 " S ABORT="gpg FAILURE; CHECK for gnupg dependency & its PATH" GOTO ABORT
+ S %S=$S(ZTOS=8:"VWHSHGTM",HASHLIST["Linux":"VWHSHCLX",1:"VWHSHCWN")
+ S %D="XUSHSH",U="^",SCR="I 1"
+ IF $T(^VWHSHLEG)="" S %S="XUSHSH^"_%S,%D="VWHSHLEG^"_%D
+ ; preserve old ^XUSHSH as ^VWHSHLEG
+ S U="^",SCR="I 1"
+ DO MOVE^ZTMGRSET
+ QUIT
+ ;
+DEFHASH ;; Entry point for changing default hash.
+ IF '$L($G(HASH)) DO
+ . S HASH=$P($G(^%ZOSF("HASHLIST")),"|")
+ . QUIT:$L($G(HASH))
+ . S:$T(^VWHSHLEG)>"" HASH=$S($$EN^VWHSHLEG("TEST")="TEST":"NONE",1:"LEGACY")
+ . QUIT:$L($G(HASH))
+ . S HASH="LEGACY"  ; hard-coded default hash is LEGACY
+ . QUIT
+ S HASH=$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
+ S MUMPS=^%ZOSF("OS"),ZTOS=$S(MUMPS["GT.M":8,MUMPS["OpenM":3)
+ ; SHOULD ERROR IF neither GTM nor Cache.
+ S HASHLIST=HASH_"||"_$$INIT^@("VWHSH"_ZTOS)()
+ S ^%ZOSF("HASHLIST")=HASHLIST
+ QUIT
+ ;
+ABORT ;; Failed to find gpg hashes.
+ U 0 W !,ABORT,! W $G(^%ZOSF("HASHLIST")),!
Index: hash/trunk/VWHSH3.m
===================================================================
--- hash/trunk/VWHSH3.m	(revision 684)
+++ hash/trunk/VWHSH3.m	(revision 684)
@@ -0,0 +1,33 @@
+VWHSH3 ;;GpZ; - ; IMPROVED HASHING UTILITY: INSTALL MODULE, OpenM; 01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;
+ QUIT
+ ;
+INIT() S MUMPS=^%ZOSF("OS"),OS=$$OPENM("uname -o","Linux")
+ IF OS'["Linux" S OS=$$OPENM("Ver","Microsoft") DO
+ . S PIPE="PATH"
+ . OPEN PIPE:"Q" USE PIPE READ PATH CLOSE PIPE
+ . S PATH=PATH_";C:\""Program Files""\GNU\GnuPG\"
+ . F I=1:1:$L(PATH,";") Q:($P(PATH,";",I)["GnuPG")
+ . S PATH=$P(PATH,";",I)
+ ELSE  S PATH=$P($P($$OPENM("whereis gpg","gpg")," ",2),"gpg")
+ S ZUT=$ZUTIL(68,40,1)
+ S PIPE=$G(PATH)_"gpg --version"
+ OPEN PIPE:"Q"
+ F I=1:1:20 USE PIPE R HASHLIST QUIT:$ZEOF<0  D:HASHLIST["'gpg' is not recognized"  q:HASHLIST["Hash:"
+ . S HASHLIST="Hash:gpg_not_found:gpg_HASHES_not_available"
+ CLOSE PIPE
+ S ZUT=$ZUTIL(68,40,ZUT)
+ S HASHLIST=HASHLIST
+ S HASHLIST=$TR($P(HASHLIST,"Hash:",2),",")
+ S HASHLIST=HASHLIST_" ||"_PATH_"||"_MUMPS_OS_"||"
+ QUIT HASHLIST
+ ;
+OPENM(PIPE,SEEKING) ;;
+ N (PIPE,SEEKING)
+ S ZUT=$ZUTIL(68,40,1)
+ OPEN PIPE:"Q"
+ F I=1:1:4 USE PIPE READ X Q:$ZEOF<0  Q:X[SEEKING
+ CLOSE PIPE
+ S ZUT=$ZUTIL(68,40,ZUT)
+ QUIT X
Index: hash/trunk/VWHSH8.m
===================================================================
--- hash/trunk/VWHSH8.m	(revision 684)
+++ hash/trunk/VWHSH8.m	(revision 684)
@@ -0,0 +1,21 @@
+VWHSH8 ;;GpZ; - ; IMPROVED HASHING UTILITY: INSTALL MODULE, GT.M; 01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;
+ QUIT
+ ;
+INIT() S MUMPS=^%ZOSF("OS"),OS=$$GTM("uname -o")
+ S PATH=$P($P($$GTM("whereis gpg")," ",2),"gpg")
+ S X=$TR("host:"_MUMPS_OS_":","^ ","-")
+ O "PIPE":(COMM="gpg --version|grep -E ^Hash:":READONLY)::"PIPE"
+ U "PIPE" R HASHLIST
+ C "PIPE" U 0
+ S HASHLIST=$TR($P(HASHLIST,"Hash:",2),",")
+ S HASHLIST=HASHLIST_" ||"_PATH_"||"_MUMPS_OS_"||"
+ QUIT HASHLIST
+ ;
+GTM(PIPE) ;
+ N (PIPE)
+ OPEN "PIPE":(command=PIPE)::"pipe"
+ S X="" F I=1:1:4 U "PIPE" R XX Q:$ZEOF  S X=X_XX
+ CLOSE "PIPE"
+ QUIT X
Index: hash/trunk/VWHSHCLX.m
===================================================================
--- hash/trunk/VWHSHCLX.m	(revision 684)
+++ hash/trunk/VWHSHCLX.m	(revision 684)
@@ -0,0 +1,21 @@
+XUSHSH ;;GpZ; - ; IMPROVED HASHING UTILITY: for Cache/Linux (VWHSHCLX); 01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;;
+A S X=$$EN(X) Q
+ ;;
+EN(X,HASH) ;;
+ N (X,HASH)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+ S HASHLIST=^%ZOSF("HASHLIST")
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+ Q:HASHLIST'[(" "_HASH_" ") X
+ S SED="sed -e 's/$/\r/'|"
+ N PIPE,ZUT,I
+ S ZUT=$ZUTIL(68,40,1)  ;; MSM-style End-of-File Handling
+ S PIPE=" echo "_X_"||"_SED_$P(HASHLIST,"||",3)_"gpg --print-md "_HASH
+ OPEN PIPE:"Q"
+ F I=1:1:4 USE PIPE R X Q:$ZEOF<0  S HASHOUT=$G(HASHOUT)_X
+ CLOSE PIPE
+ S ZUT=$ZUTIL(68,40,ZUT),X=HASHOUT
+ Q $TR(X," ")
Index: hash/trunk/VWHSHCWN.m
===================================================================
--- hash/trunk/VWHSHCWN.m	(revision 684)
+++ hash/trunk/VWHSHCWN.m	(revision 684)
@@ -0,0 +1,20 @@
+XUSHSH ;;GpZ;  ; IMPROVED HASHING UTILITY: Cache/Windows (VWHSHCWN);01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;;
+A S X=$$EN(X) Q
+ ;;
+EN(X,HASH) ;;
+ N (X,HASH)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+ S HASHLIST=^%ZOSF("HASHLIST")
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+ Q:HASHLIST'[(" "_HASH_" ") X
+ N PIPE,ZUT,I
+ S ZUT=$ZUTIL(68,40,1)
+ S PIPE=" echo "_X_"||"_$P(HASHLIST,"||",3)_"gpg --print-md "_HASH
+ OPEN PIPE:"Q"
+ F I=1:1:4 USE PIPE R X Q:$ZEOF<0  S HASHOUT=$G(HASHOUT)_X
+ CLOSE PIPE
+ S ZUT=$ZUTIL(68,40,ZUT),X=HASHOUT
+ Q $TR(X," ")
Index: hash/trunk/VWHSHGTM.m
===================================================================
--- hash/trunk/VWHSHGTM.m	(revision 684)
+++ hash/trunk/VWHSHGTM.m	(revision 684)
@@ -0,0 +1,18 @@
+XUSHSH ;;GpZ; - ; IMPROVED HASHING UTILITY: GT.M Version (VWHSHGTM); 01/08/2010
+V ;;8.0;KERNEL;;Jul 10, 1995
+ ;;
+A S X=$$EN(X) Q
+ ;;
+EN(X,HASH) ;;
+ N (X,HASH)
+ D:'$L($G(^%ZOSF("HASHLIST"))) DEFHASH^VWHSH0
+ S HASHLIST=^%ZOSF("HASHLIST")
+ S HASH=$S('$L($G(HASH)):$P(HASHLIST,"|",1),1:$TR(HASH,"abcdefghijklmnopqrstuvwxyz- ","ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+ IF HASH="LEGACY" QUIT $$EN^VWHSHLEG(X)
+ Q:HASHLIST'[(" "_HASH_" ") X
+ S SED="sed -e 's/$/\r/'|"
+ OPEN "PIPE":(COMM=SED_"gpg --print-md "_HASH)::"PIPE"
+ USE "PIPE" W X,! W /EOF
+ F  R X Q:$ZEOF  S HASHOUT=$G(HASHOUT)_X
+ CLOSE "PIPE"
+ Q $TR(HASHOUT," ")
Index: hash/trunk/VWHSHLEG.m
===================================================================
--- hash/trunk/VWHSHLEG.m	(revision 684)
+++ hash/trunk/VWHSHLEG.m	(revision 684)
@@ -0,0 +1,35 @@
+XUSHSH ;JL.Z; ROBUST PASSWORD HASH TEST xushsh; 11 SEPTEMBER 2009
+ ;;8.0;KERNEL;**60**;Jul 10, 1995
+ ;;
+ ;;
+ ;;SF-ISC/STAFF - PASSWORD ENCRYPTION ;3/23/89  15:09 ; 4/14/05 1:22pm
+ ;;8.0;KERNEL;;Jul 10, 1995
+ ;; Input in X
+ ;; Output in X
+ ;; Algorithm for VistA Office EHR encryption (BSL)
+A ; 
+ S X=$$EN(X)
+ Q
+ ;
+EN(X)
+ Q X
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: hash/trunk/VWHSHTST.m
===================================================================
--- hash/trunk/VWHSHTST.m	(revision 684)
+++ hash/trunk/VWHSHTST.m	(revision 684)
@@ -0,0 +1,38 @@
+XUSHSH ;JL.Z; ROBUST PASSWORD HASH TEST xushsh; 11 SEPTEMBER 2009
+V ;;8.0;KERNEL;**60**;Jul 10, 1995
+ ;;
+ ;; This is intended as a replacement XUSHSH for testing purposes only.
+ ;; This version returns a NULL (unhashed) result, like openvista's XUSHSH.
+ ;; Probably not to be part of a final KIDS release.
+ ;;
+ ;;SF-ISC/STAFF - PASSWORD ENCRYPTION ;3/23/89  15:09 ; 4/14/05 1:22pm
+ ;;8.0;KERNEL;;Jul 10, 1995
+ ;; Input in X
+ ;; Output in X
+ ;; Algorithm for VistA Office EHR encryption (BSL)
+A ; 
+ S X=$$EN(X)
+ Q
+ ;
+EN(X)
+ Q X
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
