Merge branch 'crypto' into 'master'
Crypto See merge request stephentoth/fsh-shell!1
This commit is contained in:
commit
9a2845dd12
1
FSHa.asm
1
FSHa.asm
|
|
@ -70,6 +70,7 @@ FshFlags: .DB %00000000
|
|||
|
||||
#include "includes/lib/std/std.inc"
|
||||
#include "includes/lib/fsh/fsh.inc"
|
||||
#include "includes/lib/crypto/crypto.inc"
|
||||
|
||||
#include "includes/man-db.asm"
|
||||
#include "includes/Command.asm"
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ Download it from the link and then follow the instructions below for different o
|
|||
* Linux
|
||||
1. Clone, make, and install spasm-ng <https://github.com/alberthdev/spasm-ng>
|
||||
2. Run the `build` script
|
||||
|
||||
```
|
||||
./build
|
||||
```
|
||||
|
|
@ -43,4 +44,4 @@ Please include:
|
|||
2. What you were doing when the issue occurred.
|
||||
3. Possible cause/fixes? (optional)
|
||||
|
||||
Thank you!
|
||||
Thank you!
|
||||
|
|
|
|||
BIN
bin/FSHa.8xp
BIN
bin/FSHa.8xp
Binary file not shown.
File diff suppressed because it is too large
Load Diff
2
build
2
build
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/bash
|
||||
date
|
||||
spasm -ETA "FSHa.asm" "bin/FSHa.8xp"
|
||||
spasm -E -T "FSHa.asm" "bin/FSHa.8xp"
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
SPASM.exe -ETA "FSHa.asm" "bin\FSHa.8xp"
|
||||
SPASM.exe -E -T "FSHa.asm" "bin\FSHa.8xp"
|
||||
pause
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
;; Sets (DE) with command op code
|
||||
commanddecode:
|
||||
call fshcmddecode
|
||||
call cryptocmddecode
|
||||
;Extention Point
|
||||
|
||||
ret
|
||||
|
|
@ -17,6 +18,7 @@ commanddecode:
|
|||
;; HL: Op code mem loc
|
||||
commandroute:
|
||||
call fshcmdroute
|
||||
call cryptocmdroute
|
||||
;Extention Point
|
||||
|
||||
ld hl, ErrCmdNotFoundo
|
||||
|
|
@ -26,3 +28,4 @@ commandroute:
|
|||
jp Err
|
||||
|
||||
#include "includes/FshCommands/FshCommand.asm"
|
||||
#include "includes/CryptoCommands/CryptoCommand.asm"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
cryptocmddecode:
|
||||
decodecmdopt(cryptocmdENCRYPT, cryptocmdENCRYPTo)
|
||||
decodecmdopt(cryptocmdDECRYPT, cryptocmdDECRYPTo)
|
||||
ret
|
||||
|
||||
cryptocmdroute:
|
||||
pop bc
|
||||
routeoptjp(cryptocmdENCRYPTo, cryptocmdENCRYPTf)
|
||||
routeoptjp(cryptocmdDECRYPTo, cryptocmdDECRYPTf)
|
||||
push bc
|
||||
ret
|
||||
|
||||
cryptocmdmanroute:
|
||||
pop bc
|
||||
subroutestrjp(cryptocmdENCRYPT, cryptocmdROT, cryptocmdROTm)
|
||||
subroutestrjp(cryptocmdDECRYPT, cryptocmdunROT, cryptocmdunROTm)
|
||||
|
||||
subroutestrjp(cryptocmdENCRYPT, cryptocmdXOR, cryptocmdXORm)
|
||||
subroutestrjp(cryptocmdDECRYPT, cryptocmdunXOR, cryptocmdunXORm)
|
||||
|
||||
subroutestrjp(cryptocmdENCRYPT, cryptocmdHELP, cryptocmdHELPm)
|
||||
subroutestrjp(cryptocmdDECRYPT, cryptocmdunHELP, cryptocmdunHELPm)
|
||||
|
||||
routestrjp(cryptocmdENCRYPT, cryptocmdENCRYPTm)
|
||||
routestrjp(cryptocmdDECRYPT, cryptocmdDECRYPTm)
|
||||
|
||||
push bc
|
||||
ret
|
||||
|
||||
|
||||
cryptocmdmanrouteu:
|
||||
pop bc
|
||||
subrouteustrjp(cryptocmdENCRYPT, cryptocmdROT, cryptocmdROTu)
|
||||
subrouteustrjp(cryptocmdDECRYPT, cryptocmdunROT, cryptocmdunROTu)
|
||||
|
||||
subrouteustrjp(cryptocmdENCRYPT, cryptocmdXOR, cryptocmdXORu)
|
||||
subrouteustrjp(cryptocmdDECRYPT, cryptocmdunXOR, cryptocmdunXORu)
|
||||
|
||||
subrouteustrjp(cryptocmdENCRYPT, cryptocmdHELP, cryptocmdHELPu)
|
||||
subrouteustrjp(cryptocmdDECRYPT, cryptocmdunHELP, cryptocmdunHELPu)
|
||||
|
||||
routeustrjp(cryptocmdENCRYPT, cryptocmdENCRYPTu)
|
||||
routeustrjp(cryptocmdDECRYPT, cryptocmdDECRYPTu)
|
||||
|
||||
push bc
|
||||
ret
|
||||
|
||||
#include "includes/CryptoCommands/CryptoCommands.inc"
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
#include "includes/CryptoCommands/ENCRYPT.asm"
|
||||
#include "includes/CryptoCommands/ROT.asm"
|
||||
#include "includes/CryptoCommands/XOR.asm"
|
||||
#include "includes/CryptoCommands/HELP.asm"
|
||||
|
||||
#include "includes/CryptoCommands/DECRYPT.asm"
|
||||
#include "includes/CryptoCommands/unROT.asm"
|
||||
#include "includes/CryptoCommands/unXOR.asm"
|
||||
#include "includes/CryptoCommands/unHELP.asm"
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
cryptocmdDECRYPT: .db "DECRYPT", 0
|
||||
cryptocmdDECRYPTo: .db $41
|
||||
cryptocmdDECRYPTm: .db "Decrypts a string using a cypher. see 'DECRYPT HELP' for info on cyphers", 0
|
||||
cryptocmdDECRYPTu: .db "DECRYPT <Crypt Command> <Crypt Args>", 0
|
||||
cryptocmdDECRYPTf:
|
||||
cryptocmdDECRYPTfArg0:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 0, (hl)
|
||||
jr z, cryptocmdDECRYPTfArg0Get
|
||||
bit 1, (hl)
|
||||
jr z, cryptocmdDECRYPTfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdDECRYPTfArg0Get:
|
||||
ld hl, cryptocmdDECRYPTfSCypher
|
||||
call printprompt
|
||||
ld hl, FshCmdArg0
|
||||
ld de, FshCmdInptSize
|
||||
call inputstr
|
||||
call _NewLine
|
||||
cryptocmdDECRYPTfExe:
|
||||
|
||||
#macro cryptocmdDECRYPTcmpjp(cmdX, cmdXf)
|
||||
ld hl, FshCmdArg0
|
||||
ld de, CmdX
|
||||
call strcmp
|
||||
jp z, cmdXf
|
||||
#endmacro
|
||||
|
||||
cryptocmdDECRYPTcmpjp(cryptocmdunROT, cryptocmdunROTf)
|
||||
cryptocmdDECRYPTcmpjp(cryptocmdunXOR, cryptocmdunXORf)
|
||||
cryptocmdDECRYPTcmpjp(cryptocmdunHELP, cryptocmdunHELPf)
|
||||
|
||||
ld hl, FshCmdArg0
|
||||
ld de, FshCmd
|
||||
call strcpy
|
||||
|
||||
ld hl, ErrCmdNotFoundo
|
||||
ld de, FshCmdErrCode
|
||||
call bytecpy
|
||||
call ErrSet
|
||||
jp Err
|
||||
|
||||
cryptocmdDECRYPTfSCypher: .db "Cypher= ", 0
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
cryptocmdENCRYPT: .db "ENCRYPT", 0
|
||||
cryptocmdENCRYPTo: .db $40
|
||||
cryptocmdENCRYPTm: .db "Encrypts a string using a cypher. see 'ENCRYPT HELP' for info on cyphers", 0
|
||||
cryptocmdENCRYPTu: .db "ENCRYPT <Crypt Command> <Crypt Args>", 0
|
||||
cryptocmdENCRYPTf:
|
||||
cryptocmdENCRYPTfArg0:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 0, (hl)
|
||||
jr z, cryptocmdENCRYPTfArg0Get
|
||||
bit 1, (hl)
|
||||
jr z, cryptocmdENCRYPTfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdENCRYPTfArg0Get:
|
||||
ld hl, cryptocmdENCRYPTfSCypher
|
||||
call printprompt
|
||||
ld hl, FshCmdArg0
|
||||
ld de, FshCmdInptSize
|
||||
call inputstr
|
||||
call _NewLine
|
||||
cryptocmdENCRYPTfExe:
|
||||
|
||||
#macro cryptocmdENCRYPTcmpjp(cmdX, cmdXf)
|
||||
ld hl, FshCmdArg0
|
||||
ld de, CmdX
|
||||
call strcmp
|
||||
jp z, cmdXf
|
||||
#endmacro
|
||||
|
||||
cryptocmdENCRYPTcmpjp(cryptocmdROT, cryptocmdROTf)
|
||||
cryptocmdENCRYPTcmpjp(cryptocmdXOR, cryptocmdXORf)
|
||||
cryptocmdENCRYPTcmpjp(cryptocmdHELP, cryptocmdHELPf)
|
||||
|
||||
ld hl, FshCmdArg0
|
||||
ld de, FshCmd
|
||||
call strcpy
|
||||
|
||||
ld hl, ErrCmdNotFoundo
|
||||
ld de, FshCmdErrCode
|
||||
call bytecpy
|
||||
call ErrSet
|
||||
jp Err
|
||||
|
||||
cryptocmdENCRYPTfSCypher: .db "Cypher= ", 0
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
cryptocmdHELP: .db "HELP", 0
|
||||
cryptocmdHELPm: .db "Help for cyphers", 0
|
||||
cryptocmdHELPu: .db "ENCRYPT HELP", 0
|
||||
cryptocmdHELPf:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdHELPfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdHELPfExe:
|
||||
ld hl, cryptocmdHELPfLine1
|
||||
call _PutS
|
||||
call _NewLine
|
||||
|
||||
#macro cryptocmdHELPmRow1(cmdXs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdHELPmRowU(cmdXs, cmdXu)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, ':'
|
||||
call _PutC
|
||||
ld a, ' '
|
||||
call _PutC
|
||||
ld hl, cmdXu
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdHELPmRow2(cmdXs, cmdYs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, 9
|
||||
ld (curcol), a
|
||||
ld hl, cmdYs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdHELPmRow3(cmdXs, cmdYs, cmdZs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, 9
|
||||
ld (curcol), a
|
||||
ld hl, cmdYs
|
||||
call _PutS
|
||||
ld a, 19
|
||||
ld (curcol), a
|
||||
ld hl, cmdZs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
|
||||
cryptocmdHELPmRowU(cryptocmdROT, cryptocmdROTu)
|
||||
cryptocmdHELPmRowU(cryptocmdXOR, cryptocmdXORu)
|
||||
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdHELPfLine1: .db "Available Cryptos:", 0
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
cryptocmdROT: .db "ROT", 0
|
||||
cryptocmdROTm: .db "ROT: Cypher, rotates the alphabet and encodes a string", 0
|
||||
cryptocmdROTu: .db "ENCRYPT ROT <shift#> <message>", 0
|
||||
cryptocmdROTf:
|
||||
cryptocmdROTfArg1:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 3, (hl)
|
||||
jr nz, cryptocmdROTfArg2
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdROTfArg1Get
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdROTfArg1Get:
|
||||
ld hl, cryptocmdROTfDShift
|
||||
call printprompt
|
||||
ld hl, FshCmdArg1
|
||||
ld de, 3
|
||||
call inputnumstr
|
||||
call strtow
|
||||
ld de, FshCmdArg1
|
||||
ex de, hl
|
||||
ld (hl), e
|
||||
call _NewLine
|
||||
cryptocmdROTfArg2:
|
||||
ld hl, FshCmdArg2
|
||||
ld de, FshScratch
|
||||
call strcpy
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 4, (hl)
|
||||
jr z, cryptocmdROTfArg2Get
|
||||
bit 5, (hl)
|
||||
jr z, cryptocmdROTfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdROTfArg2Get:
|
||||
ld hl, cryptocmdROTfDMessage
|
||||
call printprompt
|
||||
ld hl, FshScratch
|
||||
ld de, FshScratchSize - 4
|
||||
call inputcharstr
|
||||
call _NewLine
|
||||
cryptocmdROTfExe:
|
||||
ld hl, FshCmdArg1
|
||||
ld a, (hl)
|
||||
ld hl, FshScratch
|
||||
call rotletencrypt
|
||||
push hl
|
||||
ld hl, cryptocmdROTfDResult
|
||||
call _PutS
|
||||
pop hl
|
||||
call _PutS
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdROTfDShift: .db "Shift= ", 0
|
||||
cryptocmdROTfDMessage: .db "Message= ", 0
|
||||
cryptocmdROTfDResult: .db "Result: ", 0
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
cryptocmdXOR: .db "XOR", 0
|
||||
cryptocmdXORm: .db "XOR: Cypher, and encodes a string", 0
|
||||
cryptocmdXORu: .db "ENCRYPT XOR <key> <message>", 0
|
||||
cryptocmdXORf:
|
||||
cryptocmdXORfArg1:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdXORfArg1Get
|
||||
bit 3, (hl)
|
||||
jr z, cryptocmdXORfArg2
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdXORfArg1Get:
|
||||
ld hl, cryptocmdXORfDKey
|
||||
call printprompt
|
||||
ld hl, FshCmdArg1
|
||||
ld de, FshCmdCmdSize
|
||||
call inputstr
|
||||
call _NewLine
|
||||
cryptocmdXORfArg2:
|
||||
ld hl, FshCmdArg2
|
||||
ld de, FshScratch
|
||||
call strcpy
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 4, (hl)
|
||||
jr z, cryptocmdXORfArg2Get
|
||||
bit 5, (hl)
|
||||
jr z, cryptocmdXORfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdXORfArg2Get:
|
||||
ld hl, cryptocmdXORfDMessage
|
||||
call printprompt
|
||||
ld hl, FshScratch
|
||||
ld de, FshScratchSize - 1 / 2
|
||||
call inputcharstr
|
||||
call _NewLine
|
||||
cryptocmdXORfExe:
|
||||
ld hl, FshScratch
|
||||
ld de, FshCmdArg1
|
||||
call xorcrypt
|
||||
ld hl, cryptocmdXORfDResult
|
||||
call _PutS
|
||||
ld hl, FshScratch
|
||||
cryptocmdXORfPrint:
|
||||
ld a, (hl)
|
||||
or a, a
|
||||
jr z, cryptocmdXORfPrintEnd
|
||||
push hl
|
||||
call bytetohexstr
|
||||
ld a, (hl)
|
||||
call _PutC
|
||||
inc hl
|
||||
ld a, (hl)
|
||||
call _PutC
|
||||
pop hl
|
||||
inc hl
|
||||
jr cryptocmdXORfPrint
|
||||
cryptocmdXORfPrintEnd:
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdXORfDKey: .db "Key= ", 0
|
||||
cryptocmdXORfDMessage: .db "Message= ", 0
|
||||
cryptocmdXORfDResult: .db "Result: ", 0
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
cryptocmdunHELP: .db "HELP", 0
|
||||
cryptocmdunHELPm: .db "Help for cyphers", 0
|
||||
cryptocmdunHELPu: .db "DECRYPT HELP", 0
|
||||
cryptocmdunHELPf:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdunHELPfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdunHELPfExe:
|
||||
ld hl, cryptocmdunHELPfLine1
|
||||
call _PutS
|
||||
call _NewLine
|
||||
|
||||
#macro cryptocmdunHELPmRow1(cmdXs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdunHELPmRowU(cmdXs, cmdXu)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, ':'
|
||||
call _PutC
|
||||
ld a, ' '
|
||||
call _PutC
|
||||
ld hl, cmdXu
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdunHELPmRow2(cmdXs, cmdYs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, 9
|
||||
ld (curcol), a
|
||||
ld hl, cmdYs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
#macro cryptocmdunHELPmRow3(cmdXs, cmdYs, cmdZs)
|
||||
xor a
|
||||
ld (curCol), a
|
||||
ld hl, cmdXs
|
||||
call _PutS
|
||||
ld a, 9
|
||||
ld (curcol), a
|
||||
ld hl, cmdYs
|
||||
call _PutS
|
||||
ld a, 19
|
||||
ld (curcol), a
|
||||
ld hl, cmdZs
|
||||
call _PutS
|
||||
call _NewLine
|
||||
#endmacro
|
||||
|
||||
cryptocmdunHELPmRowU(cryptocmdunROT, cryptocmdunROTu)
|
||||
cryptocmdunHELPmRowU(cryptocmdunXOR, cryptocmdunXORu)
|
||||
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdunHELPfLine1: .db "Available Cryptos:", 0
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
cryptocmdunROT: .db "ROT", 0
|
||||
cryptocmdunROTm: .db "ROT: Cypher, rotates the alphabet and Decodes a string", 0
|
||||
cryptocmdunROTu: .db "DECRYPT ROT <shift#>", 0
|
||||
cryptocmdunROTf:
|
||||
cryptocmdunROTfArg1:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 3, (hl)
|
||||
jr nz, cryptocmdunROTfArg2
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdunROTfArg1Get
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdunROTfArg1Get:
|
||||
ld hl, cryptocmdunROTfDShift
|
||||
call printprompt
|
||||
ld hl, FshCmdArg1
|
||||
ld de, 3
|
||||
call inputnumstr
|
||||
call strtow
|
||||
ld de, FshCmdArg1
|
||||
ex de, hl
|
||||
ld (hl), e
|
||||
call _NewLine
|
||||
cryptocmdunROTfArg2:
|
||||
ld hl, FshCmdArg2
|
||||
ld de, FshScratch
|
||||
call strcpy
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 4, (hl)
|
||||
jr z, cryptocmdunROTfArg2Get
|
||||
bit 5, (hl)
|
||||
jr z, cryptocmdunROTfExe
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdunROTfArg2Get:
|
||||
ld hl, cryptocmdunROTfDMessage
|
||||
call printprompt
|
||||
ld hl, FshScratch
|
||||
ld de, FshScratchSize - 4
|
||||
call inputcharstr
|
||||
call _NewLine
|
||||
cryptocmdunROTfExe:
|
||||
ld hl, FshCmdArg1
|
||||
ld a, (hl)
|
||||
ld hl, FshScratch
|
||||
call rotletdecrypt
|
||||
push hl
|
||||
ld hl, cryptocmdunROTfDResult
|
||||
call _PutS
|
||||
pop hl
|
||||
call _PutS
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdunROTfDShift: .db "Shift= ", 0
|
||||
cryptocmdunROTfDMessage: .db "CypherText= ", 0
|
||||
cryptocmdunROTfDResult: .db "Result: ", 0
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
cryptocmdunXOR: .db "XOR", 0
|
||||
cryptocmdunXORm: .db "XOR: Cypher, and decodes a string", 0
|
||||
cryptocmdunXORu: .db "DECRYPT XOR <key>", 0
|
||||
cryptocmdunXORf:
|
||||
cryptocmdunXORfArg1:
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 2, (hl)
|
||||
jr z, cryptocmdunXORfArg1Get
|
||||
bit 3, (hl)
|
||||
jr z, cryptocmdunXORfArg2
|
||||
ld hl, ErrUsageo
|
||||
call ErrSet
|
||||
call ErrCatch
|
||||
cryptocmdunXORfArg1Get:
|
||||
ld hl, cryptocmdunXORfDKey
|
||||
call printprompt
|
||||
ld hl, FshCmdArg1
|
||||
ld de, FshCmdCmdSize
|
||||
call inputstr
|
||||
call _NewLine
|
||||
cryptocmdunXORfArg2:
|
||||
ld hl, FshCmdArg2
|
||||
ld de, FshScratch
|
||||
call strcpy
|
||||
ld hl, FshCmdArgFlags
|
||||
bit 4, (hl)
|
||||
jr nz, cryptocmdunXORfExe
|
||||
cryptocmdunXORfArg2Get:
|
||||
ld hl, cryptocmdunXORfStringPBuffer
|
||||
ld b, $0F
|
||||
ld a, $00
|
||||
call memset
|
||||
ld hl, cryptocmdunXORfDMessage
|
||||
call printprompt
|
||||
ld hl, FshScratch
|
||||
ld de, FshScratchSize - 4
|
||||
call inputstr
|
||||
ld bc, cryptocmdunXORfStringPBuffer
|
||||
cryptocmdunXORfArg2GetLoop:
|
||||
ld a, (hl)
|
||||
or a, a
|
||||
jr z, cryptocmdunXORfArg2GetLoopEnd
|
||||
ld (cryptocmdunXORfStringBuffer), a
|
||||
inc hl
|
||||
ld a, (hl)
|
||||
ld (cryptocmdunXORfStringBuffer + 1), a
|
||||
push hl
|
||||
ld hl, cryptocmdunXORfStringBuffer
|
||||
call hexToA
|
||||
pop hl
|
||||
ld (bc), a
|
||||
inc hl
|
||||
inc bc
|
||||
jr cryptocmdunXORfArg2GetLoop
|
||||
cryptocmdunXORfArg2GetLoopEnd:
|
||||
call _NewLine
|
||||
cryptocmdunXORfExe:
|
||||
ld hl, cryptocmdunXORfStringPBuffer
|
||||
ld de, FshCmdArg1
|
||||
call xorcrypt
|
||||
ld hl, cryptocmdunXORfDResult
|
||||
call _PutS
|
||||
ld hl, cryptocmdunXORfStringPBuffer
|
||||
call _PutS
|
||||
call _NewLine
|
||||
jp Fin
|
||||
|
||||
cryptocmdunXORfDKey: .db "Key= ", 0
|
||||
cryptocmdunXORfDMessage: .db "CypherText= ", 0
|
||||
cryptocmdunXORfDResult: .db "Result: ", 0
|
||||
cryptocmdunXORfStringBuffer: .db $00, $00, $00, $00
|
||||
cryptocmdunXORfStringPBuffer: .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
|
||||
|
|
@ -52,6 +52,7 @@ fshcmdHELPfExe:
|
|||
fshcmdHELPmRow3(fshcmdMOVE, fshcmdCLS, fshcmdVAR)
|
||||
fshcmdHELPmRow3(fshcmdVARS, fshcmdSLEEP, fshcmdINFO)
|
||||
fshcmdHELPmRow2(fshcmdHELP, fshcmdMAN)
|
||||
fshcmdHELPmRow2(cryptocmdENCRYPT, cryptocmdDECRYPT)
|
||||
; Extention Point
|
||||
|
||||
call _NewLine
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ FshVVars: .db "64w", 0
|
|||
FshVMajor: .db "0", 0
|
||||
FshVMinor: .db "1", 0
|
||||
FshVPatch: .db "0", 0
|
||||
FshVBuild: .db "205", 0
|
||||
FshVBuild: .db "490", 0
|
||||
FshVSeparator: .db ".", 0
|
||||
FshMotd2nd: .db "Press 2nd for numbers", 0
|
||||
FshMotdHelp: .db "Type 'HELP' for help", 0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,146 @@
|
|||
;;rotletencrypt
|
||||
;;Encrypts a string in rot-n (uses $41 to $5B)
|
||||
;;Inputs:
|
||||
;; HL: string pointer
|
||||
;; A: rot-n
|
||||
;;Notes:
|
||||
;; Changes string in place.
|
||||
rotletencrypt:
|
||||
push hl
|
||||
push bc
|
||||
rotletencryptMod:
|
||||
push hl
|
||||
ld h, a
|
||||
ld l, 'Z' + 1 - 'A' - 1
|
||||
call modHL
|
||||
ld b, h
|
||||
pop hl
|
||||
rotletencryptLoop:
|
||||
ld a, (hl)
|
||||
cp a, $00
|
||||
jr z, rotletencryptEnd
|
||||
cp a, ' '
|
||||
jr z, rotletencryptLD
|
||||
add a, b
|
||||
cp a, 'Z' + 2
|
||||
jr c , rotletencryptLD
|
||||
sub a, 'Z' + 2 - 'A'
|
||||
rotletencryptLD:
|
||||
ld (hl), a
|
||||
inc hl
|
||||
jr rotletencryptLoop
|
||||
rotletencryptEnd:
|
||||
ld (hl), $00
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
;;rotletdecrypt
|
||||
;;Decrypts a string in rot-n (uses $41 to $5B)
|
||||
;;Inputs:
|
||||
;; HL: string pointer
|
||||
;; A: rot-n
|
||||
;;Notes:
|
||||
;; Changes string in place.
|
||||
rotletdecrypt:
|
||||
push hl
|
||||
push bc
|
||||
rotletdecryptMod:
|
||||
push hl
|
||||
ld h, a
|
||||
ld l, 'Z' + 1 - 'A' - 1
|
||||
call modHL
|
||||
ld b, h
|
||||
pop hl
|
||||
rotletdecryptLoop:
|
||||
ld a, (hl)
|
||||
cp a, $00
|
||||
jr z, rotletdecryptEnd
|
||||
cp a, ' '
|
||||
jr z, rotletdecryptLD
|
||||
sub a, b
|
||||
cp a, 'A'
|
||||
jr nc , rotletdecryptLD
|
||||
add a, 'Z' + 2 - 'A'
|
||||
rotletdecryptLD:
|
||||
ld (hl), a
|
||||
inc hl
|
||||
jr rotletdecryptLoop
|
||||
rotletdecryptEnd:
|
||||
ld (hl), $00
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
;;rotasciiencrypt
|
||||
;;Encrypts a string in rot-x (uses $00 to $EF)
|
||||
;;Inputs:
|
||||
;; HL: string pointer
|
||||
;; A: x
|
||||
;;Notes:
|
||||
;; Changes string in place.
|
||||
rotasciiencrypt:
|
||||
push hl
|
||||
push bc
|
||||
ld c, 0
|
||||
ld c, a
|
||||
rotasciiencryptLoop:
|
||||
ld a, (hl)
|
||||
cp 0
|
||||
jr z, rotasciiencryptEnd
|
||||
add a, c
|
||||
cp 0
|
||||
jr nz, rotasciiencryptLd
|
||||
inc a
|
||||
rotasciiencryptLd:
|
||||
ld (hl), a
|
||||
inc hl
|
||||
cp a, $EF
|
||||
jr c, rotasciiencryptLoop
|
||||
dec hl
|
||||
sub a, $0F
|
||||
ld (hl), a
|
||||
inc hl
|
||||
jr rotasciiencryptLoop
|
||||
rotasciiencryptEnd:
|
||||
ld (hl), $00
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
;;rotasciidecrypt
|
||||
;;Encrypts a string in rot-x (uses $00 to $EF)
|
||||
;;Inputs:
|
||||
;; HL: string pointer
|
||||
;; A: x
|
||||
;;Notes:
|
||||
;; Changes string in place.
|
||||
rotasciidecrypt:
|
||||
push hl
|
||||
push bc
|
||||
ld c, 0
|
||||
ld c, a
|
||||
rotasciidecryptLoop:
|
||||
ld a, (hl)
|
||||
cp 0
|
||||
jr z, rotasciidecryptEnd
|
||||
sub a, c
|
||||
cp 0
|
||||
jr nz, rotasciidecryptLd
|
||||
dec a
|
||||
rotasciidecryptLd:
|
||||
ld (hl), a
|
||||
inc hl
|
||||
cp a, $EF
|
||||
jr c, rotasciidecryptLoop
|
||||
dec hl
|
||||
add a, $0F
|
||||
ld (hl), a
|
||||
inc hl
|
||||
jr rotasciidecryptLoop
|
||||
rotasciidecryptEnd:
|
||||
ld (hl), $00
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
;;xorcrypt
|
||||
;;<en><de>crypts a string using xor
|
||||
;;Inputs:
|
||||
;; HL: string pointer
|
||||
;; DE: seed pointer (shorter)
|
||||
;;Notes:
|
||||
;; Changes string in place.
|
||||
xorcrypt:
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
call strlen
|
||||
push de
|
||||
push hl
|
||||
ld hl, 0
|
||||
ld h, b
|
||||
ld l, c
|
||||
ex de, hl
|
||||
call strlen
|
||||
ex de, hl
|
||||
ld a, l ;C = len(seed) l=len(string)
|
||||
sub a,c
|
||||
jp nc, xorcryptNSmaller
|
||||
ld c, $01
|
||||
ld a, 0
|
||||
ld l, 0
|
||||
xorcryptNSmaller:
|
||||
dec c
|
||||
jp nc, xorcryptNSmaller2
|
||||
ld c, 0
|
||||
xorcryptNSmaller2:
|
||||
ld b, c
|
||||
ld c, l ;b=len(seed) c=len(string)
|
||||
pop hl
|
||||
or a, a
|
||||
pop de
|
||||
jr z, xorcryptEnd
|
||||
push de
|
||||
ex de, hl; hl=seed
|
||||
pop hl
|
||||
push bc
|
||||
push de
|
||||
ld de, 0
|
||||
ld e, b
|
||||
ld bc, 0
|
||||
ld c, e
|
||||
add hl, bc
|
||||
pop de
|
||||
pop bc
|
||||
inc hl
|
||||
ld (hl), %10000000
|
||||
push bc
|
||||
dec b
|
||||
ld a, $FF
|
||||
cp a, b
|
||||
jr z, xorcryptPadLoopEnd
|
||||
ld a, $00
|
||||
cp a, b
|
||||
jr nz, xorcryptPadLoop
|
||||
inc b
|
||||
xorcryptPadLoop:
|
||||
inc hl
|
||||
ld (hl), 'e'
|
||||
djnz xorcryptPadLoop
|
||||
xorcryptPadLoopEnd:
|
||||
pop bc
|
||||
ld (hl), b
|
||||
inc hl
|
||||
ld (hl), $00
|
||||
xorcryptEnd:
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
;push hl
|
||||
;xorcryptRandLoop:
|
||||
;ld a, (hl)
|
||||
;or a, a
|
||||
;jr z, xorcryptRandLoopEnd
|
||||
;call randomint
|
||||
;or a, a
|
||||
;jr nz, xorcryptRandLoopLD
|
||||
;ld a, '/'
|
||||
;xorcryptRandLoopLD:
|
||||
;ld (hl), a
|
||||
;inc hl
|
||||
;jr xorcryptRandLoop
|
||||
;xorcryptRandLoopEnd:
|
||||
;pop hl
|
||||
call strxor
|
||||
ret
|
||||
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
#include "includes/lib/crypto/Rot.asm"
|
||||
#include "includes/lib/crypto/Xor.asm"
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
;;bytetohexstr
|
||||
;;converts byte to hex string
|
||||
;;Inputs:
|
||||
;; A: input byte
|
||||
;;Outputs:
|
||||
;; hl: output string location
|
||||
bytetohexstr:
|
||||
push hl
|
||||
push bc
|
||||
ld bc, 0
|
||||
ld c, a
|
||||
ld b, $0F
|
||||
and a, b
|
||||
ld b, a
|
||||
ld a, c
|
||||
ld c, b
|
||||
ld b, 0
|
||||
ld hl, hexLUT
|
||||
add hl, bc
|
||||
ld b, (hl)
|
||||
ld hl, bytetohexstrBuf + 1
|
||||
ld (hl), b
|
||||
pop bc
|
||||
push bc
|
||||
ld bc, 0
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
ld b, a
|
||||
ld a, c
|
||||
ld c, b
|
||||
ld b, 0
|
||||
ld hl, hexLUT
|
||||
add hl, bc
|
||||
ld b, (hl)
|
||||
ld hl, bytetohexstrBuf
|
||||
ld (hl), b
|
||||
pop bc
|
||||
ld hl, bytetohexstrBuf + 2
|
||||
ld (hl), $00
|
||||
pop hl
|
||||
ld hl, bytetohexstrBuf
|
||||
ret
|
||||
|
||||
bytetohexstrBuf: .db $00, $00, $00, $00
|
||||
|
||||
#include "includes/tables/hexLUT.asm"
|
||||
|
||||
;;hexToA
|
||||
;;Converts a hexadecimal string to a number.
|
||||
;;Inputs:
|
||||
;; HL: String pointer
|
||||
;;Outputs:
|
||||
;; A: Value
|
||||
hexToA:
|
||||
push bc
|
||||
push hl
|
||||
ld b, 0
|
||||
_: ld a, (hl)
|
||||
or a
|
||||
jr z, hexToA_ret
|
||||
rl b \ rl b \ rl b \ rl b
|
||||
call hexToA_doConvert
|
||||
or b
|
||||
ld b, a
|
||||
inc hl
|
||||
jr -_
|
||||
hexToA_ret:
|
||||
ld a, b
|
||||
pop hl
|
||||
pop bc
|
||||
ret
|
||||
|
||||
hexToA_doConvert:
|
||||
cp 'a' ; Convert to lowercase
|
||||
jr c, _
|
||||
sub 'a' - 'A'
|
||||
_: cp 'A' ; Close gap between numbers and letter
|
||||
jr c, _
|
||||
sub 'A'-('9'+1)
|
||||
_: sub '0' ; To number
|
||||
ret
|
||||
|
|
@ -181,14 +181,14 @@ inputstrCurRowBuf: .db $00
|
|||
inputcharstr:
|
||||
push de
|
||||
push hl
|
||||
ld (inputstrSizeBuf), de
|
||||
ld (inputcharstrSizeBuf), de
|
||||
push hl
|
||||
push de
|
||||
ld hl, CurCol
|
||||
ld de, inputstrCurColBuf
|
||||
ld de, inputcharstrCurColBuf
|
||||
call bytecpy
|
||||
ld hl, CurRow
|
||||
ld de, inputstrCurRowBuf
|
||||
ld de, inputcharstrCurRowBuf
|
||||
call bytecpy
|
||||
pop de
|
||||
pop hl
|
||||
|
|
|
|||
|
|
@ -71,7 +71,28 @@ mulAbyHLEnd:
|
|||
pop bc
|
||||
ret
|
||||
|
||||
|
||||
;;modHL
|
||||
;;H % L => H
|
||||
;;Inputs:
|
||||
;; H:
|
||||
;; L:
|
||||
modHL:
|
||||
push bc
|
||||
ld b, h
|
||||
ld a, 0
|
||||
modHLLoop:
|
||||
inc a
|
||||
cp a, l
|
||||
jr nz, modHLLoopEnd
|
||||
ld a, 0
|
||||
modHLLoopEnd:
|
||||
djnz modHLLoop
|
||||
ld h, a
|
||||
pop bc
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;;mul32By8
|
||||
;;Performs an unsigned multiplication of DEHL and A.
|
||||
;;Outputs:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
;;randomint
|
||||
;;Gets an 8-bit random number.
|
||||
;;Inputs:
|
||||
;; A: Seed
|
||||
;;Outputs:
|
||||
;; A: Random number (0-255)
|
||||
;;Notes:
|
||||
;; This is not cryptographically random.
|
||||
randomint:
|
||||
ld (randomintSeed), a
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld hl, (randomintSeed)
|
||||
ld de, (randomintSeed+2)
|
||||
ld b, h
|
||||
ld c, l
|
||||
add hl, hl \ rl e \ rl d
|
||||
add hl, hl \ rl e \ rl d
|
||||
inc l
|
||||
add hl, bc
|
||||
ld (randomintSeed), hl
|
||||
ld hl, (randomintSeed+2)
|
||||
adc hl, de
|
||||
ld (randomintSeed+3), hl
|
||||
ex de, hl
|
||||
ld hl, (randomintSeed)
|
||||
ld de, (randomintSeed+4)
|
||||
ld bc, 63838
|
||||
add hl, hl \ rl c \ rl b
|
||||
ld (randomintSeed+6), bc
|
||||
sbc a, a
|
||||
and %11110001
|
||||
xor l
|
||||
ld l, a
|
||||
ld (randomintSeed+7), hl
|
||||
ld a, d
|
||||
add a, b
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
;Actual random bytes
|
||||
randomintSeed: .db $28, $BE, $B3, $BB, $a3, $f1, $97, $af, $87, $50, $26, $91, $46, $cc, $5f, $c7
|
||||
|
|
@ -258,6 +258,36 @@ strtowExit:
|
|||
pop bc
|
||||
ret
|
||||
|
||||
;;strxor
|
||||
;;xor 2 strings together
|
||||
;;Inputs:
|
||||
;; HL: string 1
|
||||
;; DE: string 2
|
||||
;;Outputs:
|
||||
;; HL: Xor String Pointer
|
||||
strxor:
|
||||
push hl
|
||||
push de
|
||||
ex de, hl
|
||||
strxorLoop:
|
||||
ld a, (de)
|
||||
or a, a
|
||||
jr z, strxorEnd
|
||||
xor (hl)
|
||||
or a, a
|
||||
jr nz, strxorLoopLD
|
||||
ld a, (hl)
|
||||
strxorLoopLD:
|
||||
ld (de), a
|
||||
inc de
|
||||
inc hl
|
||||
jr strxorLoop
|
||||
strxorEnd:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
||||
;;toLower [Strings]
|
||||
;;Converts every alpha character of a string to lowercase.
|
||||
;;Inputs:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "includes/lib/std/Math.asm"
|
||||
#include "includes/lib/std/Random.asm"
|
||||
#include "includes/lib/std/Byte.asm"
|
||||
#include "includes/lib/std/Mem.asm"
|
||||
#include "includes/lib/std/Char.asm"
|
||||
|
|
@ -6,6 +7,7 @@
|
|||
#include "includes/lib/std/Print.asm"
|
||||
#include "includes/lib/std/Draw.asm"
|
||||
#include "includes/lib/std/Array.asm"
|
||||
#include "includes/lib/std/Hex.asm"
|
||||
|
||||
#include "includes/lib/std/String.asm"
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,23 @@ manroute:
|
|||
jp z, manrouteReturn
|
||||
#endmacro
|
||||
|
||||
#macro subroutestrjp(cmdXs, cmdYs, cmdYm)
|
||||
push hl
|
||||
ld de, cmdXs
|
||||
call strcmp
|
||||
ld hl, 0
|
||||
jr nz, +_
|
||||
ld hl, FshCmdArg1
|
||||
_:
|
||||
ld de, cmdYs
|
||||
call strcmp
|
||||
pop hl
|
||||
ld de, cmdYm
|
||||
jp z, manrouteReturn
|
||||
#endmacro
|
||||
|
||||
call fshcmdmanroute
|
||||
call cryptocmdmanroute
|
||||
;Extention Point
|
||||
|
||||
ld hl, FshCmdErrCode
|
||||
|
|
@ -40,7 +56,23 @@ manrouteu:
|
|||
jp z, manrouteuReturn
|
||||
#endmacro
|
||||
|
||||
#macro subrouteustrjp(cmdXs, cmdYs, cmdYu)
|
||||
push hl
|
||||
ld de, cmdXs
|
||||
call strcmp
|
||||
ld hl, 0
|
||||
jr nz, +_
|
||||
ld hl, FshCmdArg1
|
||||
_:
|
||||
ld de, cmdYs
|
||||
call strcmp
|
||||
pop hl
|
||||
ld de, cmdYu
|
||||
jp z, manrouteuReturn
|
||||
#endmacro
|
||||
|
||||
call fshcmdmanrouteu
|
||||
call cryptocmdmanrouteu
|
||||
;Extention Point
|
||||
|
||||
ld hl, FshCmdErrCode
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
.nolist
|
||||
|
||||
; Included for Assembler Compatibility
|
||||
;------------------------------------
|
||||
#define equ .equ
|
||||
|
|
@ -11,6 +10,7 @@
|
|||
#define FshCmdSize 64 ;64 bytes | 44 chars , 5 qwords (CMD + args) , + 4 0's| 1 byte null | 2 byte optcode | 1 byte arg flags |1 byte (err code) | 6 unused
|
||||
#define FshCmdInptSize 44
|
||||
#define FshCmdCmdSize 8
|
||||
#define FshScratchSize FshCmdSize - FshCmdInptSize
|
||||
#define FshPrgmSize 1024
|
||||
|
||||
RamVars equ 0D0EA1Fh ;saveSScreen | 21945 bytes
|
||||
|
|
@ -26,3 +26,7 @@ FshCmdArg2 equ FshCmdArg1 + 9
|
|||
FshCmdArg3 equ FshCmdArg2 + 9
|
||||
FshCmdArgFlags equ FshCmdArg3 + 10
|
||||
FshCmdErrCode equ FshCmdArgFlags + 1
|
||||
|
||||
FshScratch equ FshCmdErrCode + 1
|
||||
|
||||
.list
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
hexLUT: .db "0123456789ABCDEF", 0
|
||||
Loading…
Reference in New Issue