1
1
import random, base64, strutils, types, hmac
2
2
from md5 import MD5Digest
3
3
from sha1 import Sha1Digest
4
- from nimSHA2 import Sha256Digest , Sha512Digest
4
+ from nimSHA2 import Sha224Digest , Sha256Digest , Sha384Digest , Sha512Digest
5
5
6
6
randomize ()
7
7
8
- proc `$%` * [T: MD5Digest | Sha1Digest | SHA256Digest | SHA512Digest ](input: T): string =
8
+ proc `$%` * [T](input: T): string =
9
9
result = newString (input.len)
10
10
for i in 0 ..< input.len:
11
11
result [i] = input[i].char
@@ -15,7 +15,7 @@ template makeNonce*(): string =
15
15
16
16
template `^=` * [T](a, b: T) =
17
17
for x in 0 ..< a.len:
18
- when T is Sha1Digest :
18
+ when T is Sha1Digest or T is Keccak512Digest :
19
19
a[x] = (a[x].int32 xor b[x].int32 ).uint8
20
20
else :
21
21
a[x] = (a[x].int32 xor b[x].int32 ).char
@@ -25,20 +25,32 @@ proc HMAC*[T](password, salt: string): T =
25
25
result = hmac_md5 (password, salt)
26
26
elif T is Sha1Digest :
27
27
result = hmac_sha1 (password, salt)
28
+ elif T is Sha224Digest :
29
+ result = hmac_sha224 (password, salt)
28
30
elif T is Sha256Digest :
29
31
result = hmac_sha256 (password, salt)
32
+ elif T is Sha384Digest :
33
+ result = hmac_sha384 (password, salt)
30
34
elif T is Sha512Digest :
31
35
result = hmac_sha512 (password, salt)
36
+ elif T is Keccak512Digest :
37
+ result = hmac_keccak512 (password, salt)
32
38
33
39
proc HASH * [T](s: string ): T =
34
40
when T is MD5Digest :
35
41
result = hash_md5 (s)
36
42
elif T is Sha1Digest :
37
43
result = hash_sha1 (s)
44
+ elif T is Sha224Digest :
45
+ result = hash_sha224 (s)
38
46
elif T is Sha256Digest :
39
47
result = hash_sha256 (s)
48
+ elif T is Sha384Digest :
49
+ result = hmac_sha384 (s)
40
50
elif T is Sha512Digest :
41
51
result = hash_sha512 (s)
52
+ elif T is Keccak512Digest :
53
+ result = hash_keccak512 (s)
42
54
43
55
proc debug [T](s: T): string =
44
56
result = " "
0 commit comments