From 7a8caa04bfdb807808636d094391c60fdef9dbbc Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Sat, 17 Oct 2020 18:31:37 +0300 Subject: Encrypter refactored. --- encrypt.sts | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/encrypt.sts b/encrypt.sts index a472e57..7762b3a 100644 --- a/encrypt.sts +++ b/encrypt.sts @@ -1,20 +1,13 @@ module ia32/elf/begin.sts module cipher.sts -defarr passwd 3 - -defword encrypt - top as pos - do sys_read 0 = until - passwd 3 pos cipher sys_write - od drop -exit - set_entry - 31 passwd ! - 32 passwd 1 + ! - 33 passwd 2 + ! - 0 encrypt drop + 31 32 33 local password + 3 as passlen + passlen 1 - local pos + do sys_read 0 = until + password passlen pos cipher sys_write + od sys_exit module ia32/elf/end.sts -- cgit v1.2.3 From bb541944e4249cc30612056b64f15e593e58966c Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Sat, 17 Oct 2020 20:13:56 +0300 Subject: . --- main.sts | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/main.sts b/main.sts index 8613909..906cbbb 100644 --- a/main.sts +++ b/main.sts @@ -1,6 +1,14 @@ module ia32/elf/begin.sts module cipher.sts +defword checktext + 1 +exit + +defword keygen + drop 31 32 33 3 +exit + set_entry ; read file into stack 0 do sys_read 0 = until @@ -8,25 +16,30 @@ set_entry od drop as length local ciphertext - ; -= MAIN LOOP BEGIN =- ; - ; place password ontop of stack - 31 32 33 local password - 3 as passlen - - ; decipher text (length is the same as for ciphertext) - passlen 1 - length do 1 - - as pos local cipos - pos word_size mul ciphertext + @ - password - passlen - cipos - cipher - swap pos - dup 0 = untilod drop drop - local plaintext - - ; todo: check deciphering attempt, exit if Ok - ; -= MAIN LOOP END =- ; + 0 ; initial key is empty + do + ; generate next key to try + keygen as keylen local key + + ; decipher text (length is the same as for ciphertext) + keylen 1 - length do 1 - + as textpos local pos + textpos word_size mul ciphertext + @ + key + keylen + pos + cipher + swap textpos + dup 0 = untilod drop drop + local plaintext + + ; check deciphering attempt, exit if Ok + length checktext until + ; else remove the text from stack and place keylen back + 0 do dup length = until + swap drop 1 + + od drop keylen + od ; output text (todo: and language) length do 1 - -- cgit v1.2.3