Przeglądaj źródła

Rewrite TTTDataTransformer into Swift

Norio Nomura 9 lat temu
rodzic
commit
a4817ad2e8

+ 4 - 10
Base32.xcodeproj/project.pbxproj

@@ -8,7 +8,6 @@
 
 /* Begin PBXBuildFile section */
 		6C10E90F1A753A6C006EED90 /* Base32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA0A79D1A74E80600AC539F /* Base32.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		6C10E91A1A754346006EED90 /* TTTDataTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C10E9141A7540B5006EED90 /* TTTDataTransformer.m */; };
 		6C122F7A1A85DC1E004FD458 /* Base16.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C122F791A85DC1E004FD458 /* Base16.swift */; };
 		6C122F7B1A85DC1E004FD458 /* Base16.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C122F791A85DC1E004FD458 /* Base16.swift */; };
 		6C122F7D1A85E52C004FD458 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C122F7C1A85E52C004FD458 /* StringExtension.swift */; };
@@ -27,6 +26,7 @@
 		6CA0A80C1A75135D00AC539F /* SecEncodeTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0A80B1A75135D00AC539F /* SecEncodeTransformTests.swift */; };
 		6CA0A80D1A75135D00AC539F /* Base32.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA0A7981A74E80600AC539F /* Base32.framework */; };
 		6CA0A8131A75138900AC539F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA0A7F71A7507CE00AC539F /* Security.framework */; };
+		6CBCAC4B1D96CE4B00900D4C /* TTTDataTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBCAC4A1D96CE4B00900D4C /* TTTDataTransformer.swift */; };
 		6CCCF1F31BC208C1003CE287 /* Base32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA0A79D1A74E80600AC539F /* Base32.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		6CCCF1F41BC208C7003CE287 /* Base32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0A7EF1A74ECEE00AC539F /* Base32.swift */; };
 		6CCCF1F51BC208CA003CE287 /* Base16.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C122F791A85DC1E004FD458 /* Base16.swift */; };
@@ -58,9 +58,6 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		6C10E9121A7540B4006EED90 /* SecEncodeTransformTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SecEncodeTransformTests-Bridging-Header.h"; sourceTree = "<group>"; };
-		6C10E9131A7540B5006EED90 /* TTTDataTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTDataTransformer.h; sourceTree = "<group>"; };
-		6C10E9141A7540B5006EED90 /* TTTDataTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTDataTransformer.m; sourceTree = "<group>"; };
 		6C122F791A85DC1E004FD458 /* Base16.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Base16.swift; sourceTree = "<group>"; };
 		6C122F7C1A85E52C004FD458 /* StringExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
 		6C122F7F1A85E885004FD458 /* Base16Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Base16Tests.swift; sourceTree = "<group>"; };
@@ -99,6 +96,7 @@
 		6CA0A8071A75135D00AC539F /* SecEncodeTransformTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SecEncodeTransformTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		6CA0A80A1A75135D00AC539F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		6CA0A80B1A75135D00AC539F /* SecEncodeTransformTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecEncodeTransformTests.swift; sourceTree = "<group>"; };
+		6CBCAC4A1D96CE4B00900D4C /* TTTDataTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TTTDataTransformer.swift; sourceTree = "<group>"; };
 		6CCCF1C41BC205D1003CE287 /* tvOS-Application.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-Application.xcconfig"; sourceTree = "<group>"; };
 		6CCCF1C51BC205D1003CE287 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-Base.xcconfig"; sourceTree = "<group>"; };
 		6CCCF1C61BC205D1003CE287 /* tvOS-Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-Framework.xcconfig"; sourceTree = "<group>"; };
@@ -307,11 +305,9 @@
 			isa = PBXGroup;
 			children = (
 				6CA0A80B1A75135D00AC539F /* SecEncodeTransformTests.swift */,
-				6C10E9131A7540B5006EED90 /* TTTDataTransformer.h */,
-				6C10E9141A7540B5006EED90 /* TTTDataTransformer.m */,
+				6CBCAC4A1D96CE4B00900D4C /* TTTDataTransformer.swift */,
 				6CA0A8091A75135D00AC539F /* Supporting Files */,
 				6CA0A8001A750A7F00AC539F /* Frameworks */,
-				6C10E9121A7540B4006EED90 /* SecEncodeTransformTests-Bridging-Header.h */,
 			);
 			path = SecEncodeTransformTests;
 			sourceTree = "<group>";
@@ -634,7 +630,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				6CA0A80C1A75135D00AC539F /* SecEncodeTransformTests.swift in Sources */,
-				6C10E91A1A754346006EED90 /* TTTDataTransformer.m in Sources */,
+				6CBCAC4B1D96CE4B00900D4C /* TTTDataTransformer.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -806,7 +802,6 @@
 				INFOPLIST_FILE = SecEncodeTransformTests/Info.plist;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.github.norio-nomura.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_OBJC_BRIDGING_HEADER = "SecEncodeTransformTests/SecEncodeTransformTests-Bridging-Header.h";
 			};
 			name = Debug;
 		};
@@ -817,7 +812,6 @@
 				INFOPLIST_FILE = SecEncodeTransformTests/Info.plist;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.github.norio-nomura.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_OBJC_BRIDGING_HEADER = "SecEncodeTransformTests/SecEncodeTransformTests-Bridging-Header.h";
 			};
 			name = Release;
 		};

+ 22 - 0
Base32.xcodeproj/xcshareddata/xcbaselines/6CA0A8061A75135D00AC539F.xcbaseline/E4DD7B6A-CCAA-41B9-9297-B611326DBD12.plist

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>classNames</key>
+	<dict>
+		<key>SecEncodeTransformTests</key>
+		<dict>
+			<key>test_RFC4648_Encode_UsingSecEncodeTransform()</key>
+			<dict>
+				<key>com.apple.XCTPerformanceMetric_WallClockTime</key>
+				<dict>
+					<key>baselineAverage</key>
+					<real>0.26991</real>
+					<key>baselineIntegrationDisplayName</key>
+					<string>Local Baseline</string>
+				</dict>
+			</dict>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 33 - 0
Base32.xcodeproj/xcshareddata/xcbaselines/6CA0A8061A75135D00AC539F.xcbaseline/Info.plist

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>runDestinationsByUUID</key>
+	<dict>
+		<key>E4DD7B6A-CCAA-41B9-9297-B611326DBD12</key>
+		<dict>
+			<key>localComputer</key>
+			<dict>
+				<key>busSpeedInMHz</key>
+				<integer>100</integer>
+				<key>cpuCount</key>
+				<integer>1</integer>
+				<key>cpuKind</key>
+				<string>Intel Core i5</string>
+				<key>cpuSpeedInMHz</key>
+				<integer>2600</integer>
+				<key>logicalCPUCoresPerPackage</key>
+				<integer>4</integer>
+				<key>modelCode</key>
+				<string>MacBookPro11,1</string>
+				<key>physicalCPUCoresPerPackage</key>
+				<integer>2</integer>
+				<key>platformIdentifier</key>
+				<string>com.apple.platform.macosx</string>
+			</dict>
+			<key>targetArchitecture</key>
+			<string>x86_64</string>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 0 - 5
SecEncodeTransformTests/SecEncodeTransformTests-Bridging-Header.h

@@ -1,5 +0,0 @@
-//
-//  Use this file to import your target's public headers that you would like to expose to Swift.
-//
-
-#import "TTTDataTransformer.h"

+ 2 - 2
SecEncodeTransformTests/SecEncodeTransformTests.swift

@@ -45,7 +45,7 @@ class SecEncodeTransformTests: XCTestCase {
         self.measure{
             for _ in 0...100 {
                 for ((test, _, _), index) in vectorsAndIndices {
-                    results[index] = TTTBase32EncodedStringFromData(test)
+                    results[index] = TTTBase32EncodedString(from: test)!
                 }
             }
         }
@@ -60,7 +60,7 @@ class SecEncodeTransformTests: XCTestCase {
         self.measure{
             for _ in 0...100 {
                 for ((_, test, _), index) in vectorsAndIndices {
-                    results[index] = TTTDataFromBase32EncodedString(test)
+                    results[index] = TTTData(fromBase32EncodedString: test)!
                 }
             }
         }

+ 0 - 30
SecEncodeTransformTests/TTTDataTransformer.h

@@ -1,30 +0,0 @@
-// original: https://github.com/mattt/TransformerKit/blob/master/TransformerKit%2FTTTDataTransformer.h
-// copied and modified for benchmarking
-
-// TTTDataTransformer.h
-//
-// Copyright (c) 2014 Mattt Thompson (http://mattt.me)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#import <Foundation/Foundation.h>
-
-NSString * TTTBase32EncodedStringFromData(NSData *data);
-
-NSData * TTTDataFromBase32EncodedString(NSString *string);

+ 0 - 46
SecEncodeTransformTests/TTTDataTransformer.m

@@ -1,46 +0,0 @@
-// original: https://github.com/mattt/TransformerKit/blob/master/TransformerKit%2FTTTDataTransformer.m
-// copied and modified for benchmarking
-
-// TTTDataTransformer.m
-//
-// Copyright (c) 2014 Mattt Thompson (http://mattt.me)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#import <Security/Security.h>
-
-#import "TTTDataTransformer.h"
-
-NSString * TTTBase32EncodedStringFromData(NSData *data) {
-    SecTransformRef transform = SecEncodeTransformCreate(kSecBase32Encoding, NULL);
-    SecTransformSetAttribute(transform, kSecTransformInputAttributeName, (__bridge CFDataRef)data, NULL);
-    NSData *encodedData = (__bridge_transfer NSData *)SecTransformExecute(transform, NULL);
-    CFRelease(transform);
-
-    return [[NSString alloc] initWithData:encodedData encoding:NSUTF8StringEncoding];
-}
-
-NSData * TTTDataFromBase32EncodedString(NSString *string) {
-    SecTransformRef transform = SecDecodeTransformCreate(kSecBase32Encoding, NULL);
-    SecTransformSetAttribute(transform, kSecTransformInputAttributeName, (__bridge CFDataRef)[string dataUsingEncoding:NSUTF8StringEncoding], NULL);
-    NSData *decodedData = (__bridge_transfer NSData *)SecTransformExecute(transform, NULL);
-    CFRelease(transform);
-
-    return decodedData;
-}

+ 48 - 0
SecEncodeTransformTests/TTTDataTransformer.swift

@@ -0,0 +1,48 @@
+//
+//  TTTDataTransformer.swift
+//  Base32
+//
+//  Created by 野村 憲男 on 9/25/16.
+//
+//  Copyright (c) 2015 Norio Nomura
+//
+//  Permission is hereby granted, free of charge, to any person obtaining a copy
+//  of this software and associated documentation files (the "Software"), to deal
+//  in the Software without restriction, including without limitation the rights
+//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//  copies of the Software, and to permit persons to whom the Software is
+//  furnished to do so, subject to the following conditions:
+//
+//  The above copyright notice and this permission notice shall be included in
+//  all copies or substantial portions of the Software.
+//
+//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+//  THE SOFTWARE.
+
+import Foundation
+import Security
+
+func TTTBase32EncodedString(from data: Data) -> String? {
+    if let transform = SecEncodeTransformCreate(kSecBase32Encoding, nil),
+        SecTransformSetAttribute(transform, kSecTransformInputAttributeName, data as NSData, nil),
+        let encodedData = SecTransformExecute(transform, nil) as? Data {
+        return String.init(data: encodedData, encoding: .utf8)
+    }
+    return nil
+}
+
+func TTTData(fromBase32EncodedString string: String) -> Data? {
+    if let data = string.data(using: .utf8) as NSData?,
+        let transform = SecDecodeTransformCreate(kSecBase32Encoding, nil),
+        SecTransformSetAttribute(transform, kSecTransformInputAttributeName, data, nil),
+        let decodedData = SecTransformExecute(transform, nil) as? Data {
+        return decodedData
+    }
+    return nil    
+}
+