home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 1: Collection A
/
17Bit_Collection_A.iso
/
files
/
1112.dms
/
1112.adf
/
Encrypt
/
Encrypt.src
< prev
next >
Wrap
Text File
|
1988-07-25
|
8KB
|
361 lines
opt D-
; Assembly settings should be executable. Change D- to D+ for debugging
; and use M+ to expand MACROs into listing during debugging
; compiled DEVPAC software (works on all versions).
;******************************************************************
;* *
;* Data Encryption program by Steve Meredith 1991. The program *
;* prevents unauthorised reading or use of a file. Encryption *
;* does not support FASTMEM (ie. Extra memory). *
;* Assembled with DEVPAC 1 or 2. *
;* *
;* Letters, questions and general stuff to me at : *
;* 74 Pemberton Road, Winstanley, Wigan, WN3 6DA, UK *
;* or 28 Seaton Street, Middlesbrough, Cleveland, TS1 3NQ, UK *
;******************************************************************
;----- DOS calls --------------------
_LVOOpen EQU -30
_LVOClose EQU -36
_LVORead EQU -42
_LVOWrite EQU -48
_LVOOutput EQU -60
_LVOLock EQU -84
_LVOUnLock EQU -90
_LVOExamine EQU -102
_LVOInfo EQU -114
;----- EXEC calls -------------------
_LVOAllocMem EQU -198
_LVOFreeMem EQU -210
_LVOOpenLibrary EQU -552
_LVOCloseLibrary EQU -414
;----- MISC Equates -----------------
_SysBase EQU 4
MEMF_CHIP EQU 1<<1
MEMF_CLEAR EQU 1<<16
MODE_OLDFILE EQU 1005
MODE_NEWFILE EQU 1006
;----- PRINT Macro equates ----------
Free EQU 2
Exit EQU 1
Comeback EQU 0
;----- CALL EXEC MACRO --------------
CALLEXEC MACRO
move.l (_SysBase).w,a6
jsr _LVO\1(a6)
ENDM
;----- CALL DOS MACRO ---------------
CALLDOS MACRO
move.l _DOSBase,a6
jsr _LVO\1(a6)
ENDM
;----- PRINT TEXT MACRO -------------
PRINT MACRO
CALLDOS Output
move.l #\1,d2
move.l #53,d3
CALLDOS Write
move.b #\2,d0
cmp.b #Exit,d0
beq clib
cmp.b #Free,d0
beq FreeMemory
ENDM
;----- MAIN PROGRAM BEGINS HERE -----
Open_Dos_Lib
move.l a0,a4
move.l d0,a0
move.l #dosname,a1
CALLEXEC OpenLibrary ; Open library
tst.l d0
beq Quit ; Whoops, error.
move.l d0,_DOSBase ; Ok. Keep DOSBase
move.l a4,a0
Check_Input
move.b (a0),d0 ; Check if user just presses
cmp.b #$0a,d0 ; [RETURN]
bne.s Split_Args
PRINT UsageTxt,Comeback
PRINT UsageTxt2,Exit ; Print usage and quit
Split_Args
PRINT Working,Comeback
move.l a4,a0
bsr StringSplit ; Get password
move.l d1,PassWORD
lea.l 2(a0),a0
bsr StringSplit ; Get passcode
move.l d1,PassCODE
lea.l 2(a0),a0
move.l a0,FileName ; Get filename
FindSpc lea.l 1(a0),a0 ; NULL terminate filename
cmp.b #$0A,(a0)
bne FindSpc
move.b #0,(a0)
Get_Lock
move.l FileName,d1 ; Check if file exists
move.l #-2,d2
CALLDOS Lock
move.l d0,MyLock
Alloc_InfoMem
move.l #256,d0
move.l #MEMF_CHIP!MEMF_CLEAR,d1 ; I want CHIP memory
CALLEXEC AllocMem ;
tst.l d0 ;
bne.s Get_DiskInfo ; Successful
PRINT NoMemory,Exit
Get_DiskInfo ; Check WRITEPROTECT ENABLED
move.l d0,TOP
move.l d0,d2
move.l MyLock,d1
CALLDOS Info
move.l TOP,a1
move.l 8(a1),a1
move.l a1,d0
cmp.b #$52,d0 ; Check ENABLED
beq.s Get_FileInfo
move.l TOP,a1
move.l #256,d0 ; Size of memory allocated
moveq #0,d1
CALLEXEC FreeMem
move.l MyLock,d1
CALLDOS UnLock
PRINT DiskErr,Exit ; WRITE PROTECTED exit
Get_FileInfo ; Get information on file
move.l TOP,a5
move.l MyLock,d1
move.l a5,d2
CALLDOS Examine
Free_Lock
move.l MyLock,d1
CALLDOS UnLock
Get_Size
move.l 124(a5),a5
move.l a5,FileSize ; Get filesize
Free_InfoMem
move.l TOP,a1
move.l #256,d0 ; Size of memory allocated
moveq #0,d1
CALLEXEC FreeMem
Allocate_Memory
move.l FileSize,d0
add.b #$10,d0
move.l d0,TotalSize
move.l #MEMF_CHIP!MEMF_CLEAR,d1 ; I want CHIP memory
CALLEXEC AllocMem ;
tst.l d0 ;
bne MemOK ; Successful
PRINT NoMemory,Exit
MemOK move.l d0,TOP ; Set save block addresses
add #16,d0 ;
move.l d0,MIDDLE ;
add #16,d0 ;
move.l d0,BOTTOM ;
; ***** OPEN DATAFILE *****
move.l #0,d0
move.l FileName,d1 ; Filename address to d1
move.l #MODE_OLDFILE,d2 ;
CALLDOS Open ;
tst.l d0
bne Readfle
PRINT Error1,Free ; Couldn't get file handle
; ***** READ DATAFILE INTO ALLOCATED MEMORY (at MIDDLE address) *****
Readfle move.l d0,FHandle
move.l MIDDLE,d2 ; Allocated-memory space to d2
move.l FileSize,d3 ; File size to d3
CALLDOS Read ; Read data
move.l d0,FileSize
move.l MIDDLE,a1 ; Old or New file?
cmp.l #'Cryp',(a1)
beq CheckPass ; old file, check pass
PrepNew PRINT NewTxt,Comeback
move.l TOP,a1
move.l #'Cryp',(a1)+
move.l #'t-2 ',(a1)+
move.l #'(c) ',(a1)+
lea.l PassWORD,a2 ; Create diskcode
move.l (a2),d1
lea.l PassCODE,a2
move.l (a2),d2
EOR.l d1,d2
not.l d2
move.l d2,(a1)
move.l MIDDLE,CryptAddress
move.l TOP,FileAddress
move.b #$10,ExtraBytes
bra Cr_DeCrypt
CheckPass
lea.l 12(a1),a1
move.l (a1),d0
lea.l PassCODE,a1
move.l (a1),d1
EOR.l d1,d0
not.l d0
lea.l PassWORD,a1
move.l (a1),d1
cmp.l d1,d0
beq PassOK
move.l FHandle,d1 ; FILEHANDLE to d1
CALLDOS Close ; Close file
PRINT UnAuth,Free ; Wrong code! exit.
PassOK PRINT OldTxt,Comeback
add.l #-$10,FileSize
move.l BOTTOM,CryptAddress
move.l BOTTOM,FileAddress
Cr_DeCrypt
lea.l PassWORD,a1
move.l (a1),d2
not.l d2
move.l CryptAddress,a1
move.l FileSize,d0
Crypt ; Crypt/DeCrypt datafile
eor.l d2,(a1) ; Xor password with data
add.l #4,a1 ; Encrypt every longword
sub.l #4,d0 ; Decrement file-size counter
tst.l d0
bgt.s Crypt
eor.l d2,(a1)
Save move.l FHandle,d1
CALLDOS Close
move.l FileName,d1 ; Filename address to a1
move.l #MODE_NEWFILE,d2 ;
CALLDOS Open ;
move.l d0,FHandle ; Store file handle.
move.l FHandle,d1
move.l FileAddress,d2
move.l FileSize,d3
add.b ExtraBytes,d3
CALLDOS Write
move.l FHandle,d1 ; FILEHANDLE to d1
CALLDOS Close ; Close file
PRINT Finished,Comeback
FreeMemory
move.l TOP,a1
move.l TotalSize,d0 ; Size of memory allocated
moveq #0,d1
CALLEXEC FreeMem
clib move.l _DOSBase,a1 ; Close DOS library
CALLEXEC CloseLibrary
Quit rts
;*********************************************************************
;* *
;* Sub-routine to split users CODE and PASS words and to extend the *
;* CODE or PASS to 4 characters if need be. *
;* *
;*********************************************************************
StringSplit
clr.l d2
clr.l d1
move.b (a0),-(sp)
moveq #3,d0
Push lea.l 1(a0),a0
cmp.b #$20,(a0)
beq Extend
move.b (a0),-(sp)
subq #1,d0
tst.b d0
bne Push
Zoom lea.l 1(a0),a0
cmp.b #$20,(a0)
bne Zoom
lea.l -1(a0),a0
bra Pullstk
Extend lea.l -1(a0),a0 ; pad last letter to 4 character word
Again move.b (a0),-(sp)
subq #1,d0
tst.b d0
bne Again
Pullstk move.l #0,d1 ; Pull characters from stack
move.b (sp)+,d1
mulu.w #$100,d1
move.b (sp)+,d1
swap.w d1
move.b (sp)+,d2
mulu.w #$100,d2
move.b (sp)+,d2
add.l d2,d1 ; 4 characters into d1
rts
;************************* STORAGE *********************************
dosname dc.b 'dos.library',0
_DOSBase dc.l 0 ; DOSbase address
PassWORD dc.l 0 ;
PassCODE dc.l 0 ;
FileName dc.l 0 ;
CryptAddress dc.l 0 ;
FileAddress dc.l 0 ;
FileSize dc.l 0 ;
FHandle dc.l 0 ;
MIDDLE dc.l 0 ;
TOP dc.l 0 ;
BOTTOM dc.l 0 ;
TotalSize dc.l 0 ;
ExtraBytes dc.b 0 ;
MyLock dc.l 0 ;
DiskErr dc.b 'Disk Error : Please Write-Enable?. ',10
NoMemory dc.b 'Cant Allocate Memory - Kill External Sources/ReBoot ',10
Error1 dc.b 'Unable to open file/incorrect parameters. ',10
UnAuth dc.b 'Operation Aborted - Incorrect keys. ',10
Finished dc.b 'Operation complete. ',10
UsageTxt2 dc.b 'PassCode : MAX 4 chars in length. No FASTMEM support',10
UsageTxt dc.b ' Usage : Crypt [PassWord] [PassCode] [filename] ',10
OldTxt dc.b '->De-Crypting file. ',10
NewTxt dc.b '->Crypting ',27,'[3mnewfile.',27,'[0m',' ',10
Working dc.b 27,'[7m',10,'Encryption by S.Meredith.',10,27,'[0m','->Checking File ',10
even