diff --git a/libSAEDEA.nimble b/libSAEDEA.nimble index c71f6211224362c6cacb204ba156e2f361d4929b..e240774a48d0a1b5838d1b36ac5e4905d4c3f844 100644 --- a/libSAEDEA.nimble +++ b/libSAEDEA.nimble @@ -1,8 +1,8 @@ # Package -version = "0.9.4" +version = "0.9.5" author = "m33" -description = "Library implementing a variation of Simple And Efficient Data Encryption Algorithm (INTERNATIONAL JOURNAL OF SCIENTIFIC & TECHNOLOGY RESEARCH VOLUME 8, ISSUE 12, DECEMBER 2019 ISSN 2277-8616)" +description = "Library implementing a variation of the Simple And Efficient Data Encryption Algorithm (INTERNATIONAL JOURNAL OF SCIENTIFIC & TECHNOLOGY RESEARCH VOLUME 8, ISSUE 12, DECEMBER 2019 ISSN 2277-8616)" license = "MIT" srcDir = "src" binDir = "bin" diff --git a/src/libSAEDEA/saedea.nim b/src/libSAEDEA/saedea.nim index adaec24d875cb669e23c0580ff85cca96739ae5c..04b53196b0abefe2c64cc645f5b4803fea048e34 100644 --- a/src/libSAEDEA/saedea.nim +++ b/src/libSAEDEA/saedea.nim @@ -17,7 +17,7 @@ proc gen_iv*(random_data: string): string = # -# encrypt_stage1(secret, iv): string +# encrypt_stage1(secret, iv, length): string # # First pass of string encryption, xor the secret key and initialization vector # @@ -38,7 +38,28 @@ proc encrypt_stage1(secret: string, iv: string, len: int): string = # -# decrypt_stage1(secret, iv): string +# encrypt_stage1(secret, iv): string +# +# First pass of string encryption, xor the secret key and initialization vector +# +proc encrypt_light_stage1(secret: string, iv: string): string = + var hidden_str: string + var i = 0 + + # xor on repeated secret text and iv up to cleartext length + while i < secret.len: + hidden_str.add(cast[char]( + cast[int32]( + secret[i]) xor + cast[int32]( + iv[(i mod iv.len)]))) + i+=1 + return hidden_str +#endproc + + +# +# decrypt_stage1(secret, iv, length): string # # First pass of string decryption, xor secret,initialization vector, then cypertext and the product # @@ -58,6 +79,27 @@ proc decrypt_stage1(hidden: string, iv: string, len: int): string = #endproc +# +# decrypt_stage1(secret, iv): string +# +# First pass of string decryption, xor secret,initialization vector, then cypertext and the product +# +proc decrypt_light_stage1(hidden: string, iv: string): string = + var product: string + var i = 0 + + # xor on repeated ciphertext and iv up to cleartext length + while i < hidden.len: + product.add(cast[char]( + cast[int32]( + hidden[i]) xor + cast[int32]( + iv[(i mod iv.len)]))) + i+=1 + return product +#endproc + + # # encrypt(text, secret, initialization vector, text length): string # @@ -67,21 +109,19 @@ proc decrypt_stage1(hidden: string, iv: string, len: int): string = # proc encrypt*(text: string, secret: string, iv: string, len: int): string = let intermediate = encrypt_stage1(secret, iv, len) - #return encode(encrypt_stage1(text, intermediate, text.len)) return encrypt_stage1(text, intermediate, len) #endproc # -# encrypt(text, secret, initialization vector): string +# encrypt_light(text, secret, initialization vector): string # # Light version # Simple encryption for text, using secret and a random initialization vector # -proc encrypt*(text: string, secret: string, iv: string): string = - let intermediate = encrypt_stage1(secret, iv, text.len) - #return encode(encrypt_stage1(text, intermediate, text.len)) - return encrypt_stage1(text, intermediate, intermediate.len) +proc encrypt_light*(text: string, secret: string, iv: string): string = + let intermediate = encrypt_light_stage1(secret, iv) + return encrypt_light_stage1(text, intermediate) #endproc # @@ -92,18 +132,16 @@ proc encrypt*(text: string, secret: string, iv: string): string = # proc decrypt*(hidden_str: string, secret: string, iv: string, len: int): string = let intermediate = decrypt_stage1(secret, iv, len) - #return decrypt_stage1(decode(hidden_str), intermediate, len) return decrypt_stage1(hidden_str, intermediate, len) #endproc # -# decrypt(hidden, secret, initialization vector): string +# decrypt_light(hidden, secret, initialization vector): string # # Light version # Simple decryption for ciphertext, using secret and a random initialization vector # -proc decrypt*(hidden_str: string, secret: string, iv: string): string = - let intermediate = decrypt_stage1(secret, iv, hidden_str.len) - #return decrypt_stage1(decode(hidden_str), intermediate, len) - return decrypt_stage1(hidden_str, intermediate, intermediate.len) +proc decrypt_light*(hidden_str: string, secret: string, iv: string): string = + let intermediate = decrypt_light_stage1(secret, iv) + return decrypt_light_stage1(hidden_str, intermediate) #endproc diff --git a/tests/test1 b/tests/test1 index f2edaab11976af99a75f06cb1dddf37078c6880f..94a08e3effcf35f0ca67af03b594d9aac845a48e 100755 Binary files a/tests/test1 and b/tests/test1 differ diff --git a/tests/test1.nim b/tests/test1.nim index 63ada14f7c559848ae5985c73dc43505197f8c1d..5fdbdc8938fe3e5170cb56637b4bf7d512168a20 100644 --- a/tests/test1.nim +++ b/tests/test1.nim @@ -3,6 +3,7 @@ import unittest import times import libSAEDEA +import std/sha1 proc cmpStrChars(s1: string, s2: string): bool = if s1.len != s2.len: @@ -19,14 +20,18 @@ let iv = gen_iv("some random data" & $getTime()) var encrypted = encrypt(text, secret, iv, text.len) var decrypted = decrypt(encrypted, secret, iv, text.len) -var encrypted_light = encrypt(text, secret, iv) -var decrypted_light = decrypt(encrypted, secret, iv) - #echo "Secret:", secret - #echo "IV:", iv - #echo "Cleartext:", text - #echo "Decrypted:", decrypted - #echo "Encrypted:", encrypted - #echo "Decrypted_light:", decrypted_light +var encrypted_light = encrypt_light(text, secret, iv) +var decrypted_light = decrypt_light(encrypted_light, secret, iv) + +echo "Secret:", secret +echo "IV:", iv +echo "Cleartext :", text +echo "Decrypted :", decrypted +echo "Decrypted_light :", decrypted_light +#echo "Encrypted :", encrypted +echo "Encrypted sha1 :", secureHash(encrypted) +#echo "Encrypted_light :", encrypted_light +echo "Encrpted_light sha1:", secureHash(encrypted_light) echo "Matching test" check cmpStrChars(text, decrypted) == true @@ -51,13 +56,13 @@ echo "Matching test with light encryption" check cmpStrChars(text, decrypted_light) == true echo "Wrong secret test with light encryption" -decrypted_light = decrypt(encrypted, "wrong secret", iv) +decrypted_light = decrypt_light(encrypted_light, "wrong secret", iv) check cmpStrChars(text, decrypted_light) == false echo "Wrong IV test with light encryption" -decrypted_light = decrypt(encrypted, secret, "wrong iv") +decrypted_light = decrypt_light(encrypted_light, secret, "wrong iv") check cmpStrChars(text, decrypted_light) == false echo "All wrong test with light encryption" -decrypted_light = decrypt(encrypted, "wrong secret", "wrong iv") +decrypted_light = decrypt_light(encrypted_light, "wrong secret", "wrong iv") check cmpStrChars(text, decrypted_light) == false