@@ -11,6 +11,12 @@ public enum Algorithm : Printable {
11
11
/// HMAC using SHA-256 hash algorithm
12
12
case HS256( String )
13
13
14
+ /// HMAC using SHA-384 hash algorithm
15
+ case HS384( String )
16
+
17
+ /// HMAC using SHA-512 hash algorithm
18
+ case HS512( String )
19
+
14
20
static func algorithm( name: String , key: String ? ) -> Algorithm ? {
15
21
if name == " none " {
16
22
if let key = key {
@@ -20,6 +26,10 @@ public enum Algorithm : Printable {
20
26
} else if let key = key {
21
27
if name == " HS256 " {
22
28
return . HS256( key)
29
+ } else if name == " HS384 " {
30
+ return . HS384( key)
31
+ } else if name == " HS512 " {
32
+ return . HS512( key)
23
33
}
24
34
}
25
35
@@ -32,21 +42,35 @@ public enum Algorithm : Printable {
32
42
return " none "
33
43
case . HS256( let key) :
34
44
return " HS256 "
45
+ case . HS384( let key) :
46
+ return " HS384 "
47
+ case . HS512( let key) :
48
+ return " HS512 "
35
49
}
36
50
}
37
51
38
52
/// Sign a message using the algorithm
39
53
func sign( message: String ) -> String {
54
+ func signHS( key: String , variant: CryptoSwift . HMAC . Variant ) -> String {
55
+ let keyData = key. dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false ) !
56
+ let messageData = message. dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false ) !
57
+ let mac = Authenticator . HMAC ( key: keyData. arrayOfBytes ( ) , variant: variant)
58
+ let result = mac. authenticate ( messageData. arrayOfBytes ( ) ) !
59
+ return base64encode ( NSData . withBytes ( result) )
60
+ }
61
+
40
62
switch self {
41
63
case . None:
42
64
return " "
43
65
44
66
case . HS256( let key) :
45
- let keyData = key. dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false ) !
46
- let messageData = message. dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false ) !
47
- let mac = Authenticator . HMAC ( key: keyData. arrayOfBytes ( ) , variant: . sha256)
48
- let result = mac. authenticate ( messageData. arrayOfBytes ( ) ) !
49
- return base64encode ( NSData . withBytes ( result) )
67
+ return signHS ( key, . sha256)
68
+
69
+ case . HS384( let key) :
70
+ return signHS ( key, . sha384)
71
+
72
+ case . HS512( let key) :
73
+ return signHS ( key, . sha512)
50
74
}
51
75
}
52
76
0 commit comments