Google
 

Trailing-Edge - PDP-10 Archives - tops20_version7_0_tools_tape_clock_tape - tools/kryptn/kryptn.mac
There are 4 other files named kryptn.mac in the archive. Click here to see a list.
	TITLE KRYPTN - Force File Structure Password Encryption - KWPaetzold

	SEARCH MONSYM,MACSYM
	.REQUIRE SYS:MACREL.REL
	SALL
	STDAC.
	.DIRECTIVE FLBLST

	DEFINE SYM(A,B),<A=B>
	DEFINE SYMS(A,B),<A==B>

				;VERSION INFO
	SYMS VWHO,0		;WHO LAST MODIFIED
	SYMS VMAJOR,1		;MAJOR VERSION NUMBER
	SYMS VMINOR,0		;MINOR VERSION NUMBER
	SYMS VEDIT,0		;EDIT NUMBER

	DEFINE TYPE(S),<
	HRROI T1,[ASCIZ\
S\]
	PSOUT>

	DEFINE TYPEN(S),<
	HRROI T1,[ASCIZ\S\]
	PSOUT>

	DEFINE NUMO(A,R,S),<
	MOVE T2,A
	MOVEI T1,.PRIOU
	MOVX T3,<S,,R>
	NOUT
	 JSYSF>

	DEFINE JSYSF,<ERCAL .JSYSF>
	DEFINE NOERR,<ERJMP .+1>

EVEC:				;ENTRY VECTOR
	JRST KRYPTN		;STARTING ADDRESS
	JRST KRYPTN 		;REENTER ADDRESS
	BYTE (3)VWHO(9)VMAJOR(6)VMINOR(18)VEDIT

KRYPTN:				;STARTING ADDRESS
	RESET			;STOP FORK POLUTION
	MOVE P,[IOWD PDLSIZ,PDL] ;GET A STACK POINTER
	MOVEI T1,.FHSLF		;THIS FORK
	RPCAP			;GET OUR PRIVS
	 JSYSF			;HANDLE ERRORS
	TXNN T3,<SC%OPR!SC%WHL>	;ARE WE SPECIAL?
	 JRST [	HALTF		;NO SO JUST STOP
		JRST .-1]	;NO CONTINUES
	TYPE < KRYPTN - Cause File Structure Directory Password Encryption>
	TYPE <>
	TYPE < ******* NOTICE *******>
	TYPE < This is a VERY dangerous program.  If you do not know what you>
	TYPE < are doing get out now!!!!>
	TYPE <>
KRYPT2:
	TYPE < Structure name:  > ;ASK FOR INPUT
	MOVEI T1,.PRIIN		;INPUT FROM TTY
	HRROI T2,STRSTR		;GET THE TARGET STRING POINTER
	MOVEI T3,STRSIZ*5-1	;GET MAX STRING LENGTH
	MOVEI T4,"J"-100	;TERMINATE ON A LINE FEED
	SIN			;STRING INPUT
	 ERJMP KRYPT2		;ASK AGAIN ON ERRORS
	TYPEN < Please Confirm: >
	MOVEI T1,.PRIIN		;INPUT FROM THE TTY
	HRROI T2,STRING		;PUT IT INTO STRING FOR NOW
	MOVEI T3,2		;TWO CHAR MAX
	MOVEI T4,"J"-100	;TERMINATE ON LF
	SIN			;INPUT CONFIRMATION
	 ERJMP KRYPT2		;HANDLE ERROS
	MOVX T1,<POINT 7,STRING> ;GET A POINTER
	ILDB T1,T1		;GET THE FIRST CHARACTER
	CAIE T1,"M"-100		;IS IT A CR?
	 JRST KRYPTN		;NO SO LETS DO IT OVER AGAIN
	MOVX T1,<POINT 7,STRING> ;GET TARGET POINTER
	MOVX T2,<POINT 7,STRSTR> ;GET SOURCE POINTER
	MOVEI T3,6		;SIX CHAR MAX
KRYPT3:				;STRUCTURE NAME LOOP
	ILDB T4,T2		;GET A BYTE
	CAIG T4," "		;CONTROL CHARACTER?
	 JRST KRYPT4		;NO SO WE ARE DONE
	CAIN T4,":"		;CHECK THE DELIMITOR
	 JRST KRYPT4		;THAT WAS IT
	IDPB T4,T1		;DEPOSIT THE BYTE
	SOJG T3,KRYPT3		;LOOP FOR SIX CHARACTERS MAX
KRYPT4:				;NOW APPEND THE REST OF THE STRING
	HRROI T2,[ASCIZ/:<*>/]	;ALL DIRECTORIES OF THIS STRING
	SETZB T3,T4		;NO WIERD LIMITS
	SOUT			;APPEND THE REST OF THE STRING
	 JSYSF
	SETZ T2,		;GET A NULL BYTE
	IDPB T2,T1		;APPEND THE NULL

;	NOW GET THE FIRST DIRECTORY

	MOVX T1,<RC%AWL>	;ALLOW WILD CARDS
	HRROI T2,STRING		;DIRECTORY STRING NAME
	RCDIR			;GET A DIRECTORY NUMBER
	 JSYSF
	MOVEM T3,DIRNUM		;SAVE THE DIRECTORY NUMBER
KRYPT5:				;THIS IS THE LOOP
	TYPE < Converting >	;PROMPT THE OUTPUT
	HRROI T1,DIRNAM		;PUT DIRECTORY NAME INTO DIRNAM
	MOVE T2,DIRNUM		;GET THE NUMBER
	DIRST			;OUTPUT THE DIRECTORY STRING
	 JSYSF
	HRROI T1,DIRNAM		;GET POINTER TO THE NAME
	PSOUT			;AND OUTPUT IT
	MOVEI T1,.CDPEV+1	;GET ARG BLK LENGTH
	MOVEM T1,DIRBLK+.CDLEN	;SAVE THE LENGTH FOR THE MONITOR TO FIND
	MOVE T1,DIRNUM		;GET THE DIRECTORY NUMBER
	MOVEI T2,DIRBLK		;GET THE DIRECTORY BLOCK ADDRESS
	HRROI T3,DIRCOD		;PASSWORD STORAGE ADDRESS
	GTDIR			;GET THE DIRECTORY INFORMATION
	 JSYSF			;HANDLE ERRORS
	SKIPE .CDPEV+DIRBLK	;ALLREADY ENCRYPTED?
	 JRST KRYPT8		;YES SO DO NOT DO IT AGAIN
	HRROI T1,DIRCOD		;GET THE POOINTER TO THE PASSWORD STRING
	MOVEM T1,DIRBLK+.CDPSW	;AND STORE IT INTO THE BLOCK
	HRROI T1,DIRNAM		;GET POINTER TO THE NAME
	MOVX T2,<CD%PSW!<DIRBLK>B35> ;SET THE PASSWORD
	CRDIR			;ENCRYPT THE MOTHER
	 ERJMP KRYPT7		;HANDLE ERRORS

;	NOW GET THE NEXT DIRECTORY

	TYPEN < [OK]>		;TELL USER IT WORKED
	JRST KRYPT8		;JOIN FLOW

KRYPT7:				;HERE ON CRDIR ERRORS
	TYPEN < [FAILED]>	;TELL USER IT DID NOT WORK
KRYPT8:
	MOVX T1,<RC%STP!RC%AWL>	;ALLOW WILDCARDS AND STEP
	HRROI T2,STRING		;GET THE DIRECTORY STRING
	MOVE T3,DIRNUM		;GET THE LAST DIRECTORY NUMBER
	RCDIR			;GET THE NEXT DIRECTORY NUMBER
	 JSYSF
	JUMPE T3,KRYPT6		;IF ZERO THEN WE ARE ALL DONE
	MOVEM T3,DIRNUM		;SAVE THE DIRECTORY NUMBER
	JRST KRYPT5		;LOOP FOR ALL THE DIRECTORIES

KRYPT6:				;HERE WHEN WE ARE ALL DONE
	HALTF			;STOP
	JRST KRYPTN		;ON CONTINUE LETS DO IT AGAIN

.JSYSF:				;HERE FROM JSYSF MACRO
	MOVEM 17,ERRACS+17	;SAVE AC 17
	MOVEI 17,ERRACS		;GET BLT AC
	BLT 17,ERRACS+16	;SAVE ACS 0-16
	MOVE 17,ERRACS+17	;GET AC 17 BACK
	TYPE <?JSYS ERROR AT USER PC >
	HRRZ T2,0(P)		;GET THE ERROR PC
	MOVEM T2,ERRPC		;SAVE THE ERROR PC
	NUMO T2,10		;OUTPUT THE ERORR PC
	TYPE <?>		;PROMPT THE ERROR STRING
	MOVEI T1,.PRIOU		;OUTPUT TO TTY
	MOVX T2,<.FHSLF,,-1>	;MY LAST ERROR
	SETZB T3,T4		;NO FUNNY LIMITS
	ERSTR			;OUTPUT THE ERROR STRING
	 NOERR			;HANDLE ANY ERRORS
	 NOERR			;HANDLE ANY ERRORS
	HALTF			;STOP
	JRST .-1		;NO CONTINUES

	SYM PDLSIZ,10		;STACK SIZE
	SYM STRSIZ,10		;STRING SIZE
	SYM NAMSIZ,20		;DIRECTORY NAME STRING
	SYM CODSIZ,11		;PASSWORD STORAGE

PDL:	BLOCK PDLSIZ		;PDL STACK
STRSTR:	BLOCK STRSIZ		;STRUCTURE NAME
DIRNUM:	Z			;DIRECTORY NUMBER RETURNED BY RCDIR
DIRNAM:	BLOCK NAMSIZ		;DIRECTORY NAME STORAGE
DIRCOD:	BLOCK CODSIZ		;DIRECTORY PASSWORD STORAGE
DIRBLK:	BLOCK 100		;GTDIR BLOCK STORAGE
STRING:	BLOCK STRSIZ		;DIRECTORY STRING FOR RCDIR
ERRACS:	BLOCK 20		;ERROR AC STORAGE
ERRPC:	Z			;ERROR PC STORAGE

	END <3,,EVEC>		;THATS ALL FOLKS