fsh-shell/includes/lib/crypto/rot.asm

141 lines
2.1 KiB
NASM

;;rotletencrypt
;;Encrypts a string in rot-x (uses $41 to $5B)
;;Inputs:
;; HL: string pointer
;; A: x
;;Notes:
;; Changes string in place.
rotletencrypt:
push hl
push bc
ld c, 0
ld c, a
rotletencryptLoop:
ld a, (hl)
cp 0
jr z, rotletencryptEnd
add a, c
cp 0
jr nz, rotletencryptLd
inc a
rotletencryptLd:
ld (hl), a
inc hl
cp a, $5c
jr c, rotletencryptLoop
dec hl
sub a, 'Z' + 1 - 'A'
ld (hl), a
inc hl
jr rotletencryptLoop
rotletencryptEnd:
ld (hl), $00
pop bc
pop hl
ret
;;rotletdecrypt
;;Encrypts a string in rot-x (uses $41 to $5B)
;;Inputs:
;; HL: string pointer
;; A: x
;;Notes:
;; Changes string in place.
rotletdecrypt:
push hl
push bc
ld c, 0
ld c, a
rotletdecryptLoop:
ld a, (hl)
cp 0
jr z, rotletdecryptEnd
sub a, c
rotletdecryptLd:
ld (hl), a
inc hl
cp a, $5c
jr c, rotletdecryptLoop
dec hl
add a, 'Z' + 1 - 'A'
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