@@ -11,6 +11,12 @@ public enum Algorithm : Printable {
1111 /// HMAC using SHA-256 hash algorithm
1212 case HS256( String )
1313
14+ /// HMAC using SHA-384 hash algorithm
15+ case HS384( String )
16+
17+ /// HMAC using SHA-512 hash algorithm
18+ case HS512( String )
19+
1420 static func algorithm( name: String , key: String ? ) -> Algorithm ? {
1521 if name == " none " {
1622 if let key = key {
@@ -20,6 +26,10 @@ public enum Algorithm : Printable {
2026 } else if let key = key {
2127 if name == " HS256 " {
2228 return . HS256( key)
29+ } else if name == " HS384 " {
30+ return . HS384( key)
31+ } else if name == " HS512 " {
32+ return . HS512( key)
2333 }
2434 }
2535
@@ -32,21 +42,35 @@ public enum Algorithm : Printable {
3242 return " none "
3343 case . HS256( let key) :
3444 return " HS256 "
45+ case . HS384( let key) :
46+ return " HS384 "
47+ case . HS512( let key) :
48+ return " HS512 "
3549 }
3650 }
3751
3852 /// Sign a message using the algorithm
3953 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+
4062 switch self {
4163 case . None:
4264 return " "
4365
4466 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)
5074 }
5175 }
5276
0 commit comments