Search code examples
javaswiftbase64hmachmacsha1

Converting string in Base64 and HMAC sha1


I need help with making a signature in swift 3 with HMAC SHA1 for a web request. I have an example in Java but really do not know how to do it in swift.

Java formula:

signature = Base64.encode(HMAC_SHA1.digest(data,Base64.decode(client_secret))

signature = +t2GOKtZt1hU+C7OGBKZbDOKxds=

Solution

  • Problem solved

    extension String {
        func hmac(algorithm: kCCHmacAlgSHA1, key: NSData) -> String {
            let cKey = key
            let cData = self.cString(using: String.Encoding.ascii)
            var cHMAC = [CC_SHA1_DIGEST_LENGTH]
            CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), cKey.bytes, cKey.length, cData, Int(strlen(cData!)), &cHMAC)
            let hmacData:NSData = NSData(bytes: cHMAC, length: cHMAC)
            let hmacBase64 = hmacData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
            return String(hmacBase64)
        }
    }
    
    let hmacResult: String = cData.hmac(algorithm: HMACAlgorithm.SHA1, key: keyData)