Skip to content

Commit 95cc841

Browse files
author
Ruben Nine
committed
Implementing Data+base64MD5Digest() using CommonCrypto for a much more optimal performance.
1 parent 6801a15 commit 95cc841

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

FilestackSDK.xcodeproj/project.pbxproj

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
45513FFA1F0E9739006DB972 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45513FF91F0E9739006DB972 /* APIService.swift */; };
4343
4551400D1F0E97E2006DB972 /* NetworkingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4551400C1F0E97E2006DB972 /* NetworkingService.swift */; };
4444
455266311F1618E1009537D9 /* TransformCropMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 455266301F1618E1009537D9 /* TransformCropMode.swift */; };
45+
4566603324B49C6400C3EAF0 /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4566603224B49C6400C3EAF0 /* CryptoSwift.framework */; };
46+
4566603724B49CB600C3EAF0 /* CryptoSwift.framework in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = 4566603224B49C6400C3EAF0 /* CryptoSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
47+
4566603924B49FD200C3EAF0 /* DataExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4566603824B49FD200C3EAF0 /* DataExtensionsTests.swift */; };
4548
45690CD222A65FE800285F62 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CCC22A65FC500285F62 /* Alamofire.framework */; };
46-
45690CD322A65FE800285F62 /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CB922A65FC500285F62 /* CryptoSwift.framework */; };
4749
45690CD422A6600400285F62 /* OHHTTPStubs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CCD22A65FC500285F62 /* OHHTTPStubs.framework */; };
4850
456FF4C11F27799D00E9F192 /* CompleteUploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 456FF4C01F27799D00E9F192 /* CompleteUploadOperation.swift */; };
4951
456FF4C31F2790C800E9F192 /* large.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 456FF4C21F27902500E9F192 /* large.jpg */; };
@@ -110,7 +112,6 @@
110112
45E07AAA22AFA58000CD4573 /* SubmitPartRegularUploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E07AA822AFA58000CD4573 /* SubmitPartRegularUploadOperation.swift */; };
111113
45E07AAB22AFA58000CD4573 /* SubmitPartIntelligentUploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E07AA922AFA58000CD4573 /* SubmitPartIntelligentUploadOperation.swift */; };
112114
45E07AB022AFC15300CD4573 /* Alamofire.framework in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CCC22A65FC500285F62 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
113-
45E07AB122AFC15300CD4573 /* CryptoSwift.framework in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CB922A65FC500285F62 /* CryptoSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
114115
45E07AB222AFC15300CD4573 /* OHHTTPStubs.framework in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = 45690CCD22A65FC500285F62 /* OHHTTPStubs.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
115116
45F9B8C41F0B941300E04380 /* sample.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 45F9B8C31F0B941300E04380 /* sample.jpg */; };
116117
45F9B8C61F0BA02F00E04380 /* DataResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F9B8C51F0BA02F00E04380 /* DataResponse.swift */; };
@@ -180,8 +181,8 @@
180181
dstPath = "";
181182
dstSubfolderSpec = 10;
182183
files = (
184+
4566603724B49CB600C3EAF0 /* CryptoSwift.framework in Copy Embedded Frameworks */,
183185
45E07AB022AFC15300CD4573 /* Alamofire.framework in Copy Embedded Frameworks */,
184-
45E07AB122AFC15300CD4573 /* CryptoSwift.framework in Copy Embedded Frameworks */,
185186
45E07AB222AFC15300CD4573 /* OHHTTPStubs.framework in Copy Embedded Frameworks */,
186187
);
187188
name = "Copy Embedded Frameworks";
@@ -225,7 +226,9 @@
225226
45513FF91F0E9739006DB972 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = "<group>"; };
226227
4551400C1F0E97E2006DB972 /* NetworkingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkingService.swift; sourceTree = "<group>"; };
227228
455266301F1618E1009537D9 /* TransformCropMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransformCropMode.swift; sourceTree = "<group>"; };
228-
45690CB922A65FC500285F62 /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/iOS/CryptoSwift.framework; sourceTree = "<group>"; };
229+
4566603224B49C6400C3EAF0 /* CryptoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoSwift.framework; path = Carthage/Build/iOS/CryptoSwift.framework; sourceTree = "<group>"; };
230+
4566603424B49C9500C3EAF0 /* CryptoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/CryptoKit.framework; sourceTree = DEVELOPER_DIR; };
231+
4566603824B49FD200C3EAF0 /* DataExtensionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExtensionsTests.swift; sourceTree = "<group>"; };
229232
45690CCC22A65FC500285F62 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
230233
45690CCD22A65FC500285F62 /* OHHTTPStubs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OHHTTPStubs.framework; path = Carthage/Build/iOS/OHHTTPStubs.framework; sourceTree = "<group>"; };
231234
45690CFF22A6770D00285F62 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
@@ -360,8 +363,8 @@
360363
isa = PBXFrameworksBuildPhase;
361364
buildActionMask = 2147483647;
362365
files = (
366+
4566603324B49C6400C3EAF0 /* CryptoSwift.framework in Frameworks */,
363367
45690CD222A65FE800285F62 /* Alamofire.framework in Frameworks */,
364-
45690CD322A65FE800285F62 /* CryptoSwift.framework in Frameworks */,
365368
);
366369
runOnlyForDeploymentPostprocessing = 0;
367370
};
@@ -641,11 +644,11 @@
641644
isa = PBXGroup;
642645
children = (
643646
45B830CA1F03BB6D0053742A /* Cartfile */,
644-
457B17A5232826C80033BDB1 /* Cartfile.private */,
645-
457B17A6232826C80033BDB1 /* Cartfile.resolved */,
646647
45690CCC22A65FC500285F62 /* Alamofire.framework */,
647-
45690CB922A65FC500285F62 /* CryptoSwift.framework */,
648+
4566603224B49C6400C3EAF0 /* CryptoSwift.framework */,
648649
45690CCD22A65FC500285F62 /* OHHTTPStubs.framework */,
650+
457B17A5232826C80033BDB1 /* Cartfile.private */,
651+
457B17A6232826C80033BDB1 /* Cartfile.resolved */,
649652
);
650653
name = "Carthage Dependencies";
651654
sourceTree = "<group>";
@@ -683,13 +686,15 @@
683686
45107C9F1F4D6B0E00250ABE /* UploadTests.swift */,
684687
45FA0CCE1F0B8841008EDBCD /* Fixtures */,
685688
45113DD424B0AB490090C1DD /* BaseOperationTests.swift */,
689+
4566603824B49FD200C3EAF0 /* DataExtensionsTests.swift */,
686690
);
687691
path = FilestackSDKTests;
688692
sourceTree = "<group>";
689693
};
690694
45E2B7DE1FC3284600448ED2 /* Frameworks */ = {
691695
isa = PBXGroup;
692696
children = (
697+
4566603424B49C9500C3EAF0 /* CryptoKit.framework */,
693698
);
694699
name = Frameworks;
695700
sourceTree = "<group>";
@@ -990,6 +995,7 @@
990995
buildActionMask = 2147483647;
991996
files = (
992997
45B831191F03DA280053742A /* PolicyTests.swift in Sources */,
998+
4566603924B49FD200C3EAF0 /* DataExtensionsTests.swift in Sources */,
993999
4589A48C1F0A4DBC00C39405 /* FileLinkTests.swift in Sources */,
9941000
45C3BB261F0E9B3500856883 /* NetworkingServiceTest.swift in Sources */,
9951001
45113DD524B0AB490090C1DD /* BaseOperationTests.swift in Sources */,

FilestackSDK/Internal/Extensions/Data+base64MD5Digest.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66
// Copyright © 2017 Filestack. All rights reserved.
77
//
88

9-
import CryptoSwift
9+
import CommonCrypto
1010
import Foundation
1111

1212
extension Data {
1313
/// Base64-encoded 128-bit MD5 digest (according to RFC 1864)
1414
func base64MD5Digest() -> String {
15-
return md5().base64EncodedString(options: [])
15+
return Data((withUnsafeBytes { byte -> [UInt8] in
16+
var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
17+
18+
CC_MD5(byte.baseAddress, CC_LONG(count), &digest)
19+
20+
return digest
21+
})).base64EncodedString()
1622
}
1723
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// DataExtensionsTests.swift
3+
// FilestackSDKTests
4+
//
5+
// Created by Ruben Nine on 07/07/2020.
6+
// Copyright © 2020 Filestack. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import FilestackSDK
11+
12+
class DataExtensionsTests: XCTestCase {
13+
14+
func testMD5() throws {
15+
let data = String("foo").data(using: .utf8)!
16+
17+
XCTAssertEqual(data.base64MD5Digest(), "rL0Y20zC+Fzt72VPzMSk2A==")
18+
}
19+
}

0 commit comments

Comments
 (0)