diff --git a/SecretAgentKit/Agent.swift b/SecretAgentKit/Agent.swift index 17f89ef..25185ca 100644 --- a/SecretAgentKit/Agent.swift +++ b/SecretAgentKit/Agent.swift @@ -78,7 +78,7 @@ extension Agent { func sign(data: Data, from pid: Int32) throws -> Data { let reader = OpenSSHReader(data: data) - let hash = try reader.readNextChunk() + let hash = reader.readNextChunk() guard let (store, secret) = secret(matching: hash) else { os_log(.debug, "Agent did not have a key matching %@", hash as NSData) throw AgentError.noMatchingKey @@ -89,7 +89,7 @@ extension Agent { try witness.speakNowOrForeverHoldYourPeace(forAccessTo: secret, by: provenance) } - let dataToSign = try reader.readNextChunk() + let dataToSign = reader.readNextChunk() let derSignature = try store.sign(data: dataToSign, with: secret) let curveData = writer.curveType(for: secret.algorithm, length: secret.keySize).data(using: .utf8)! diff --git a/SecretKit/Common/OpenSSH/OpenSSHReader.swift b/SecretKit/Common/OpenSSH/OpenSSHReader.swift index 90f878c..5e89055 100644 --- a/SecretKit/Common/OpenSSH/OpenSSHReader.swift +++ b/SecretKit/Common/OpenSSH/OpenSSHReader.swift @@ -8,7 +8,7 @@ public class OpenSSHReader { remaining = Data(data) } - public func readNextChunk() throws -> Data { + public func readNextChunk() -> Data { let lengthRange = 0..<(UInt32.bitWidth/8) let lengthChunk = remaining[lengthRange] remaining.removeSubrange(lengthRange) diff --git a/SecretKitTests/OpenSSHReaderTests.swift b/SecretKitTests/OpenSSHReaderTests.swift new file mode 100644 index 0000000..5859c12 --- /dev/null +++ b/SecretKitTests/OpenSSHReaderTests.swift @@ -0,0 +1,25 @@ +import Foundation +import XCTest +@testable import SecretKit + +class OpenSSHReaderTests: XCTestCase { + + func testSignatureRequest() { + let reader = OpenSSHReader(data: Constants.signatureRequest) + let hash = reader.readNextChunk() + XCTAssert(hash == Data(base64Encoded: "AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBEqCbkJbOHy5S1wVCaJoKPmpS0egM4frMqllgnlRRQ/Uvnn6EVS8oV03cPA2Bz0EdESyRKA/sbmn0aBtgjIwGELxu45UXEW1TEz6TxyS0u3vuIqR3Wo1CrQWRDnkrG/pBQ==")) + let dataToSign = reader.readNextChunk() + XCTAssert(dataToSign == Data(base64Encoded: "AAAAICi5xf1ixOestUlxdjvt/BDcM+rzhwy7Vo8cW5YcxA8+MgAAAANnaXQAAAAOc3NoLWNvbm5lY3Rpb24AAAAJcHVibGlja2V5AQAAABNlY2RzYS1zaGEyLW5pc3RwMzg0AAAAiAAAABNlY2RzYS1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQRKgm5CWzh8uUtcFQmiaCj5qUtHoDOH6zKpZYJ5UUUP1L55+hFUvKFdN3DwNgc9BHREskSgP7G5p9GgbYIyMBhC8buOVFxFtUxM+k8cktLt77iKkd1qNQq0FkQ55Kxv6QU=")) + let empty = reader.readNextChunk() + XCTAssert(empty.isEmpty) + } + +} + +extension OpenSSHReaderTests { + + enum Constants { + static let signatureRequest = Data(base64Encoded: "AAAAiAAAABNlY2RzYS1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQRKgm5CWzh8uUtcFQmiaCj5qUtHoDOH6zKpZYJ5UUUP1L55+hFUvKFdN3DwNgc9BHREskSgP7G5p9GgbYIyMBhC8buOVFxFtUxM+k8cktLt77iKkd1qNQq0FkQ55Kxv6QUAAADvAAAAICi5xf1ixOestUlxdjvt/BDcM+rzhwy7Vo8cW5YcxA8+MgAAAANnaXQAAAAOc3NoLWNvbm5lY3Rpb24AAAAJcHVibGlja2V5AQAAABNlY2RzYS1zaGEyLW5pc3RwMzg0AAAAiAAAABNlY2RzYS1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQRKgm5CWzh8uUtcFQmiaCj5qUtHoDOH6zKpZYJ5UUUP1L55+hFUvKFdN3DwNgc9BHREskSgP7G5p9GgbYIyMBhC8buOVFxFtUxM+k8cktLt77iKkd1qNQq0FkQ55Kxv6QUAAAAA")! + } + +} diff --git a/Secretive.xcodeproj/project.pbxproj b/Secretive.xcodeproj/project.pbxproj index 385d623..62efb8f 100644 --- a/Secretive.xcodeproj/project.pbxproj +++ b/Secretive.xcodeproj/project.pbxproj @@ -34,6 +34,7 @@ 506773032426F3F400034DED /* Brief.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 506772FB2426F3F400034DED /* Brief.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 506773092426F3FD00034DED /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506773082426F3FD00034DED /* Updater.swift */; }; 5067730C2426F40E00034DED /* Brief.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 506772FB2426F3F400034DED /* Brief.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5067730E242701BA00034DED /* OpenSSHReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067730D242701BA00034DED /* OpenSSHReaderTests.swift */; }; 5068389E241471CD00F55094 /* SecretStoreList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5068389D241471CD00F55094 /* SecretStoreList.swift */; }; 506838A12415EA5600F55094 /* AnySecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506838A02415EA5600F55094 /* AnySecret.swift */; }; 506838A32415EA5D00F55094 /* AnySecretStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506838A22415EA5D00F55094 /* AnySecretStore.swift */; }; @@ -229,6 +230,7 @@ 506772FD2426F3F400034DED /* Brief.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Brief.h; sourceTree = ""; }; 506772FE2426F3F400034DED /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 506773082426F3FD00034DED /* Updater.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Updater.swift; sourceTree = ""; }; + 5067730D242701BA00034DED /* OpenSSHReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSSHReaderTests.swift; sourceTree = ""; }; 5068389D241471CD00F55094 /* SecretStoreList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretStoreList.swift; sourceTree = ""; }; 506838A02415EA5600F55094 /* AnySecret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnySecret.swift; sourceTree = ""; }; 506838A22415EA5D00F55094 /* AnySecretStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnySecretStore.swift; sourceTree = ""; }; @@ -420,6 +422,7 @@ isa = PBXGroup; children = ( 50524B432420969D008DBD97 /* OpenSSHWriterTests.swift */, + 5067730D242701BA00034DED /* OpenSSHReaderTests.swift */, 50617DB923FCE4AB0099B055 /* Info.plist */, ); path = SecretKitTests; @@ -938,6 +941,7 @@ buildActionMask = 2147483647; files = ( 50524B442420969E008DBD97 /* OpenSSHWriterTests.swift in Sources */, + 5067730E242701BA00034DED /* OpenSSHReaderTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };