Skip to content

Commit 41584ec

Browse files
author
Huy Doan
committed
add SHA224, SHA384 and SHA3-512 (aka Keccak512) supports, refs #11
1 parent 0c08694 commit 41584ec

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

scram.nimble

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
version = "0.1.13"
1+
version = "0.1.14"
22
author = "Huy Doan"
33
description = "Salted Challenge Response Authentication Mechanism (SCRAM) "
44
license = "MIT"
55

6-
requires "nim >= 0.19.4", "hmac >= 0.1.9"
6+
requires "nim >= 0.19.4", "hmac >= 0.2.0"

scram/client.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import base64, pegs, strutils, hmac, sha1, nimSHA2, md5, private/[utils,types]
22

3-
export MD5Digest, SHA1Digest, SHA256Digest, SHA512Digest
3+
export MD5Digest, SHA1Digest, SHA224Digest, SHA256Digest, SHA384Digest, SHA512Digest, Keccak512Digest
44

55
type
66
ScramClient[T] = ref object of RootObj

scram/private/utils.nim

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import random, base64, strutils, types, hmac
22
from md5 import MD5Digest
33
from sha1 import Sha1Digest
4-
from nimSHA2 import Sha256Digest, Sha512Digest
4+
from nimSHA2 import Sha224Digest, Sha256Digest, Sha384Digest, Sha512Digest
55

66
randomize()
77

8-
proc `$%`*[T: MD5Digest|Sha1Digest|SHA256Digest|SHA512Digest](input: T): string =
8+
proc `$%`*[T](input: T): string =
99
result = newString(input.len)
1010
for i in 0..<input.len:
1111
result[i] = input[i].char
@@ -15,7 +15,7 @@ template makeNonce*(): string =
1515

1616
template `^=`*[T](a, b: T) =
1717
for x in 0..<a.len:
18-
when T is Sha1Digest:
18+
when T is Sha1Digest or T is Keccak512Digest:
1919
a[x] = (a[x].int32 xor b[x].int32).uint8
2020
else:
2121
a[x] = (a[x].int32 xor b[x].int32).char
@@ -25,20 +25,32 @@ proc HMAC*[T](password, salt: string): T =
2525
result = hmac_md5(password, salt)
2626
elif T is Sha1Digest:
2727
result = hmac_sha1(password, salt)
28+
elif T is Sha224Digest:
29+
result = hmac_sha224(password, salt)
2830
elif T is Sha256Digest:
2931
result = hmac_sha256(password, salt)
32+
elif T is Sha384Digest:
33+
result = hmac_sha384(password, salt)
3034
elif T is Sha512Digest:
3135
result = hmac_sha512(password, salt)
36+
elif T is Keccak512Digest:
37+
result = hmac_keccak512(password, salt)
3238

3339
proc HASH*[T](s: string): T =
3440
when T is MD5Digest:
3541
result = hash_md5(s)
3642
elif T is Sha1Digest:
3743
result = hash_sha1(s)
44+
elif T is Sha224Digest:
45+
result = hash_sha224(s)
3846
elif T is Sha256Digest:
3947
result = hash_sha256(s)
48+
elif T is Sha384Digest:
49+
result = hmac_sha384(s)
4050
elif T is Sha512Digest:
4151
result = hash_sha512(s)
52+
elif T is Keccak512Digest:
53+
result = hash_keccak512(s)
4254

4355
proc debug[T](s: T): string =
4456
result = ""

0 commit comments

Comments
 (0)