aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cipher.sts8
-rw-r--r--main.sts17
2 files changed, 13 insertions, 12 deletions
diff --git a/cipher.sts b/cipher.sts
index cdcdc30..c87b67a 100644
--- a/cipher.sts
+++ b/cipher.sts
@@ -3,8 +3,10 @@ defword cipher
2 get as cipher.password
1 get as cipher.len
0 get as cipher.pos
- cipher.pos @ cipher.password + @ cipher.byte @ xor cipher.byte !
- cipher.pos @ 1 + cipher.pos !
- cipher.pos @ cipher.len = if 0 cipher.pos ! fi
+ cipher.pos @ word_size mul cipher.password + @
+ cipher.byte @ xor
+ cipher.byte !
+ cipher.pos @ 0 = if cipher.len cipher.pos ! fi
+ cipher.pos @ 1 - cipher.pos !
drop drop drop
exit
diff --git a/main.sts b/main.sts
index b4cf8a9..8613909 100644
--- a/main.sts
+++ b/main.sts
@@ -5,34 +5,33 @@ set_entry
; read file into stack
0 do sys_read 0 = until
swap 1 +
- od as length
+ od drop as length
local ciphertext
; -= MAIN LOOP BEGIN =- ;
; place password ontop of stack
- 33 32 31 local password
+ 31 32 33 local password
3 as passlen
; decipher text (length is the same as for ciphertext)
- 0 0 do dup length = until
- 2 print_stack newline sys_write
+ passlen 1 - length do 1 -
as pos local cipos
- pos ciphertext + @
+ pos word_size mul ciphertext + @
password
passlen
cipos
cipher
swap pos
- 1 + od drop drop
+ dup 0 = untilod drop drop
local plaintext
; todo: check deciphering attempt, exit if Ok
; -= MAIN LOOP END =- ;
; output text (todo: and language)
- 0 do dup length = until
- dup plaintext + @ sys_write
- 1 + od
+ length do 1 -
+ dup word_size mul plaintext + @ sys_write
+ dup 0 = untilod
sys_exit
module ia32/elf/end.sts