Generando HMAC-SHA256 a partir de Byte-Array en Swift

Quiero crear una firma para myJD REST-API. Pero el primer fragmento no funciona. Hablé con el soporte y me dijeron que necesitaba elno hechizado clave para crear el hash correcto. Así que creé una matriz de bytes del valor hexadecimal y cambié el código para que funcione nuevamente (vea el segundo fragmento). Ambos métodos tienen el mismo resultado. Enlace a la documentación de la API:https://docs.google.com/document/d/1IGeAwg8bQyaCTeTl_WyjLyBPh4NBOayO0_MAmvP5Mu4/edit?pref=2&pli=1

Primero:

import Foundation

extension String{    
    func hmacSHA256(key: String) -> String {
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = Int(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_SHA256_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
        let keyStr = key.cStringUsingEncoding(NSUTF8StringEncoding)!
        let keyLen = Int(key.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))

        CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), keyStr, keyLen, str!, strLen, result)

        let digest = stringFromResult(result, length: digestLen)

        result.dealloc(digestLen)

        return digest
    }

    private func stringFromResult(result: UnsafeMutablePointer<CUnsignedChar>, length: Int) -> String {
        let hash = NSMutableString()
        for i in 0..<length {
            hash.appendFormat("%02x", result[i])
        }
        return String(hash)
    }
}

Segundo:

func hmacSHA256_2(key: String) -> String {
    //let cKey = key.dataUsingEncoding(NSUTF8StringEncoding)!
    let bKey = Array(key.utf8)
    let bData = Array(self.utf8)
    //let cData = self.dataUsingEncoding(NSUTF8StringEncoding)!

    var cHMAC = [CUnsignedChar](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), bKey, Int(bKey.count), bData, Int(bData.count), &cHMAC)

    let output = NSMutableString(capacity: Int(CC_SHA256_DIGEST_LENGTH))

    for byte in cHMAC {
        output.appendFormat("%02hhx", byte)
    }

    return output as String
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta