Skip to content

Commit 38028ae

Browse files
committed
[_]: 1.0.9 Minor fixes
1 parent b205cb0 commit 38028ae

6 files changed

Lines changed: 102 additions & 27 deletions

File tree

ios/HMAC.swift

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,50 @@
77
//
88

99
import Foundation
10-
import IDZSwiftCommonCrypto
11-
10+
import CryptoKit
1211

1312
enum HashInput {
1413
case message ([UInt8])
1514
case messages (Array<[UInt8]>)
1615
}
16+
17+
@available(iOS 13.0, *)
1718
class RnCryptoHMAC {
18-
func sha256(inputs: Array<[UInt8]> ) -> [UInt8] {
19-
return toAlgorithm(inputs: inputs, algorithm: HMAC.Algorithm.sha256)
20-
}
19+
2120

2221
func sha512(inputs: Array<[UInt8]>) -> [UInt8] {
23-
return toAlgorithm(inputs: inputs, algorithm: HMAC.Algorithm.sha512)
22+
23+
var hash = SHA512.init()
24+
for (_, input) in inputs.enumerated() {
25+
hash.update(data: input)
26+
}
27+
28+
let digest = hash.finalize()
29+
var result = [UInt8]()
30+
digest.withUnsafeBytes {bytes in
31+
result.append(contentsOf: bytes)
32+
}
33+
34+
return result
2435
}
2536

26-
private func toAlgorithm(inputs: Array<[UInt8]>, algorithm: HMAC.Algorithm) -> [UInt8] {
27-
let hash = HMAC(algorithm: algorithm, key: inputs[0])
28-
for (index, message) in inputs.enumerated() {
29-
if index > 0 {
30-
_ = hash.update(message)
31-
}
37+
func sha256(inputs: Array<[UInt8]>) -> [UInt8] {
38+
39+
var hash = SHA256.init()
40+
for (_, input) in inputs.enumerated() {
41+
hash.update(data: input)
42+
}
43+
44+
let digest = hash.finalize()
45+
var result = [UInt8]()
46+
digest.withUnsafeBytes {bytes in
47+
result.append(contentsOf: bytes)
3248
}
33-
return hash.final()
49+
50+
return result
3451
}
52+
53+
54+
55+
3556
}

ios/RnCrypto.m

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,28 @@ @interface RCT_EXTERN_MODULE(RnCrypto, NSObject)
2121
RCT_EXTERN_METHOD(pbkdf2:
2222
(NSString*) password
2323
salt: (NSString*) salt
24-
rounds: (NSNumber*) rounds
25-
derivedKeyLength: (NSNumber*) derivedKeyLength
26-
resolver: (RCTResponseSenderBlock) resolve)
24+
rounds: (nonnull NSNumber*) rounds
25+
derivedKeyLength: (nonnull NSNumber*) derivedKeyLength
26+
resolve: (RCTPromiseResolveBlock) resolve
27+
reject: (RCTPromiseRejectBlock) reject
28+
)
2729

2830
RCT_EXTERN_METHOD(sha512:
2931
(NSArray*)inputs
30-
resolver:(RCTPromiseResolveBlock)resolve)
32+
resolve:(RCTPromiseResolveBlock)resolve
33+
reject: (RCTPromiseRejectBlock) reject
34+
)
3135

3236
RCT_EXTERN_METHOD(sha256:
3337
(NSArray*)inputs
34-
resolver:(RCTPromiseResolveBlock)resolve)
38+
resolve:(RCTPromiseResolveBlock)resolve
39+
reject: (RCTPromiseRejectBlock) reject
40+
)
3541

3642

3743
+ (BOOL)requiresMainQueueSetup
3844
{
3945
return NO;
4046
}
4147
@end
48+

ios/RnCrypto.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import IDZSwiftCommonCrypto
33

44

55

6+
@available(iOS 13.0, *)
67
@objc(RnCrypto)
78
class RnCrypto: NSObject {
89
var encryptionQueue = OperationQueue()
@@ -19,22 +20,25 @@ class RnCrypto: NSObject {
1920

2021
@objc func sha256(
2122
_ inputs: NSArray,
22-
resolve: RCTPromiseResolveBlock
23+
resolve: RCTPromiseResolveBlock,
24+
reject: RCTPromiseRejectBlock
2325
) {
2426
let byteInputs = inputs.map {
2527
guard let input = $0 as? String else {return []}
26-
28+
2729
return utils.hexStringToBytes(input)
2830
} as Array<[UInt8]>
29-
31+
3032
let result = HMAC.sha256(inputs: byteInputs)
31-
33+
3234
return resolve(result.description.hex)
3335
}
3436

37+
@available(iOS 13.0, *)
3538
@objc func sha512(
3639
_ inputs: NSArray,
37-
resolve: RCTPromiseResolveBlock
40+
resolve: RCTPromiseResolveBlock,
41+
reject: RCTPromiseRejectBlock
3842
) {
3943
let byteInputs = inputs.map {
4044
guard let input = $0 as Any as? String else {
@@ -48,12 +52,19 @@ class RnCrypto: NSObject {
4852
return resolve(result.description.hex)
4953
}
5054

51-
@objc func pbkdf2(_ password: String, salt: String, rounds: Int, derivedKeyLength: Int, resolve: RCTPromiseResolveBlock) {
55+
@objc func pbkdf2(
56+
_ password: String,
57+
salt: String,
58+
rounds: NSNumber,
59+
derivedKeyLength: NSNumber,
60+
resolve: RCTPromiseResolveBlock,
61+
reject: RCTPromiseRejectBlock
62+
) {
5263
let result = keyDerivation.pbkdf2(
5364
password: password,
5465
salt: salt,
55-
rounds: rounds,
56-
derivedKeyLength: derivedKeyLength
66+
rounds: rounds.intValue,
67+
derivedKeyLength: derivedKeyLength.intValue
5768
)
5869
return resolve(utils.bytesToHexString(_:result))
5970
}
@@ -118,3 +129,4 @@ class RnCrypto: NSObject {
118129
return false
119130
}
120131
}
132+

ios/RnCrypto.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
E1378B8628460D4500BBE5B4 /* DecryptFileOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1955FC72844A9E500774290 /* DecryptFileOperation.swift */; };
1818
E1378B8728460D4800BBE5B4 /* EncryptFileOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1955FC92844A9FF00774290 /* EncryptFileOperation.swift */; };
1919
E1378B8828460D4C00BBE5B4 /* RnCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* RnCrypto.swift */; };
20+
E15997C12873966400A43714 /* HMACTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15997C02873966400A43714 /* HMACTest.swift */; };
2021
E160A3422847AB0800B59260 /* RnCryptoUtilsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E160A3412847AB0800B59260 /* RnCryptoUtilsTest.swift */; };
2122
E160A3432847D43E00B59260 /* IDZSwiftCommonCrypto.framework in Sources */ = {isa = PBXBuildFile; fileRef = E136EF30284559AF0002609B /* IDZSwiftCommonCrypto.framework */; };
2223
E170E623286F33B10014EF09 /* KeyDerivationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E170E622286F33B10014EF09 /* KeyDerivationTest.swift */; };
@@ -59,6 +60,7 @@
5960
E136EF30284559AF0002609B /* IDZSwiftCommonCrypto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = IDZSwiftCommonCrypto.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6061
E136EF3428456AF30002609B /* AesCipher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AesCipher.swift; sourceTree = "<group>"; };
6162
E136EF3A28456DFE0002609B /* AesCipherTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AesCipherTest.swift; sourceTree = "<group>"; };
63+
E15997C02873966400A43714 /* HMACTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMACTest.swift; sourceTree = "<group>"; };
6264
E160A3412847AB0800B59260 /* RnCryptoUtilsTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RnCryptoUtilsTest.swift; sourceTree = "<group>"; };
6365
E170E622286F33B10014EF09 /* KeyDerivationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyDerivationTest.swift; sourceTree = "<group>"; };
6466
E1778808286B61480000BE60 /* HMAC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = "<group>"; };
@@ -162,6 +164,7 @@
162164
E1E09E1E2844E235001050F7 /* RnCryptoTests */ = {
163165
isa = PBXGroup;
164166
children = (
167+
E15997C02873966400A43714 /* HMACTest.swift */,
165168
E170E622286F33B10014EF09 /* KeyDerivationTest.swift */,
166169
E160A3412847AB0800B59260 /* RnCryptoUtilsTest.swift */,
167170
E136EF3A28456DFE0002609B /* AesCipherTest.swift */,
@@ -348,6 +351,7 @@
348351
E170E623286F33B10014EF09 /* KeyDerivationTest.swift in Sources */,
349352
E160A3432847D43E00B59260 /* IDZSwiftCommonCrypto.framework in Sources */,
350353
E160A3422847AB0800B59260 /* RnCryptoUtilsTest.swift in Sources */,
354+
E15997C12873966400A43714 /* HMACTest.swift in Sources */,
351355
E136EF3B28456DFE0002609B /* AesCipherTest.swift in Sources */,
352356
);
353357
runOnlyForDeploymentPostprocessing = 0;

ios/RnCryptoTests/HMACTest.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// HMACTest.swift
3+
// RnCryptoTests
4+
//
5+
// Created by Robert on 4/7/22.
6+
// Copyright © 2022 Facebook. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import RnCrypto
11+
12+
class HMACTest: XCTestCase {
13+
let sut = RnCryptoHMAC()
14+
let utils = RnCryptoUtils()
15+
16+
func testSha512OneInput() throws {
17+
let result = sut.sha512(inputs: [utils.hexStringToBytes("95a242c82502cd2e4e791be67b3ebc4da8dd848cd2a9b42320a4eab72cc5d3b2f49662b088e652d8b2dd3916ad311b06bda7c70d5e0ed9b63d0bf6d1c164c9ec")])
18+
19+
XCTAssertEqual(utils.bytesToHexString(result), "a5d4e36cd393aebd5dda84d2c207e9cd59f85016800303f710c25df7559556655e5ddaa4c91f47e63228f743a0fffa367972ae831e832ba75987fbe46aefb34c")
20+
}
21+
22+
func testSha512MultipleInput() throws {
23+
let result = sut.sha512(inputs: [utils.hexStringToBytes("95a242c82502cd2e4e791be67b3ebc4da8dd848cd2a9b42320a4eab72cc5d3b2f49662b088e652d8b2dd3916ad311b06bda7c70d5e0ed9b63d0bf6d1c164c9ec"),utils.hexStringToBytes("95a242c82502cd2e4e791be67b3ebc4da8dd848cd2a9b42320a4eab72cc5d3b2f49662b088e652d8b2dd3916ad311b06bda7c70d5e0ed9b63d0bf6d1c164c9ec")])
24+
25+
26+
XCTAssertEqual(utils.bytesToHexString(result), "c681abb62f0af0fe21c175450d3844b32a3eb16ec52041b3acbdce9182eef685a0c2c04b560c9c1cbc2255cf63f56de9c4ba8bd42915291c414f1dc6b6323e3c")
27+
}
28+
29+
30+
31+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@internxt/rn-crypto",
3-
"version": "0.1.8",
3+
"version": "0.1.9",
44
"description": "A library for using crypto in native modules",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

0 commit comments

Comments
 (0)