|
@@ -13,10 +13,27 @@
|
|
|
return hexStr;
|
|
|
}
|
|
|
|
|
|
++ (NSMutableData *) fromHex:(NSString *)str {
|
|
|
+ const char *chars = [str UTF8String];
|
|
|
+ int i = 0, len = str.length;
|
|
|
+
|
|
|
+ NSMutableData *data = [NSMutableData dataWithCapacity:len / 2];
|
|
|
+ char byteChars[3] = {'\0','\0','\0'};
|
|
|
+ unsigned long wholeByte;
|
|
|
+
|
|
|
+ while (i < len) {
|
|
|
+ byteChars[0] = chars[i++];
|
|
|
+ byteChars[1] = chars[i++];
|
|
|
+ wholeByte = strtoul(byteChars, NULL, 16);
|
|
|
+ [data appendBytes:&wholeByte length:1];
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+}
|
|
|
+
|
|
|
+ (NSString *) derivationKey:(NSString *)password salt: (NSString *)salt iterations: (nonnull int *)iterations {
|
|
|
// Data of String to generate Hash key(hexa decimal string).
|
|
|
- NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
- NSData *saltData = [salt dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ NSData *passwordData = [self fromHex:password];
|
|
|
+ NSData *saltData = [self fromHex:salt];
|
|
|
|
|
|
// Hash key (hexa decimal) string data length.
|
|
|
NSMutableData *hashKeyData = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
|