-1

i want to transform this method that created Swift3 to Objective C.

func HMAC_CREATOR(MIX_STR mixStr:String,KEY_DATA_UINT8 keyDataUint8:Array<UInt8>) -> String {
        let signatureData : Data = mixStr.data(using: .utf8)!
        let digest = UnsafeMutablePointer<UInt8>.allocate(capacity:Int(CC_SHA256_DIGEST_LENGTH))
        var hmacContext = CCHmacContext()
        CCHmacInit(&hmacContext, CCHmacAlgorithm(kCCHmacAlgSHA256), (keyDataUint8), (keyDataUint8.count))
        CCHmacUpdate(&hmacContext, [UInt8](signatureData), [UInt8](signatureData).count)
        CCHmacFinal(&hmacContext, digest)
        let macData = Data(bytes: digest, count: Int(CC_SHA256_DIGEST_LENGTH))
        return  macData.hexEncodedString()
    }
reza_khalafi
  • 6,230
  • 7
  • 56
  • 82

1 Answers1

1

A fairly straight translation of your code into Objective-C is:

#include <CommonCrypto/CommonCrypto.h>

NSString *HMAC_CREATOR(NSString *mixStr, UInt8 *keyData, size_t keyDataLength) {
    NSData *signatureData = [mixStr dataUsingEncoding: NSUTF8StringEncoding];

    CCHmacContext hmacContext;
    CCHmacInit(&hmacContext, kCCHmacAlgSHA256, keyData, keyDataLength);
    CCHmacUpdate(&hmacContext, signatureData.bytes, signatureData.length);

    NSMutableData *digest = [[NSMutableData alloc] initWithCapacity: CC_SHA256_DIGEST_LENGTH];
    CCHmacFinal(&hmacContext, digest.mutableBytes);

    // hexEncodedString is not a member of NSData so I'm not sure what this is supposed to be.
    // Probably added in Swift by an extension
    return [digest hexEncodedString];
}

The tricky part is right there at the end. Evidently you Swift code includes a function (perhaps in an extension) that adds a method called hexEncodedString to NSData.

Scott Thompson
  • 22,629
  • 4
  • 32
  • 34