2017-05-13 3 views
-1

Ich möchte diese Methode, Swift3 zu Objective C transformieren.Wie CCHmacContext() in iOS Objective C zu simulieren?

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() 
    } 
+0

Haben Sie das versucht: http://stackoverflow.com/a/756538/5329717? –

+0

Es ist falsch @ Kamil.S –

+1

Sie müssen genauer sein, was * genau * falsch ist. –

Antwort

1

Eine ziemlich gerade Übersetzung Ihres Code in Objective-C ist:

#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]; 
} 

Der schwierige Teil ist am Ende recht. Offensichtlich enthält Swift-Code eine Funktion (vielleicht in einer Erweiterung), die eine Methode namens hexEncodedString zu NSData hinzufügt.

+0

How to hex @ scott-thompson –

+0

Kann ich Digest wie folgt festlegen: uint8_t Digest [CC_SHA256_DIGEST_LENGTH] = {0}; @ scott-thompson –

+0

Was ist die Idee über diesen Code, den ich geschrieben habe? https://paste.laravel.io/An94l#12 –