mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-10-31 15:30:57 +00:00 
			
		
		
		
	Stub store
This commit is contained in:
		
							parent
							
								
									d2a6aefa2d
								
							
						
					
					
						commit
						1833063a49
					
				| @ -1,15 +1,96 @@ | ||||
| import SecretKit | ||||
| import CryptoKit | ||||
| 
 | ||||
| class StubStore: SecretStore { | ||||
| struct Stub {} | ||||
| 
 | ||||
|     var isAvailable: Bool = true | ||||
|     let id = UUID() | ||||
|     let name = "Stub Store" | ||||
|     var secrets: [SmartCard.Secret] = [] | ||||
|     fileprivate var smartCardStore = SmartCard.Store() | ||||
| extension Stub { | ||||
| 
 | ||||
|     public class Store: SecretStore { | ||||
| 
 | ||||
|         public let isAvailable = true | ||||
|         public let id = UUID() | ||||
|         public let name = "Stub" | ||||
|         public var secrets: [Secret] = [] | ||||
| 
 | ||||
|         public init() { | ||||
|             try! create(size: 256) | ||||
|         } | ||||
| 
 | ||||
|         public func create(size: Int) throws { | ||||
|             let flags: SecAccessControlCreateFlags = [] | ||||
|             let access = | ||||
|                 SecAccessControlCreateWithFlags(kCFAllocatorDefault, | ||||
|                                                 kSecAttrAccessibleWhenUnlockedThisDeviceOnly, | ||||
|                                                 flags, | ||||
|                                                 nil) as Any | ||||
| 
 | ||||
|             let attributes = [ | ||||
|                 kSecAttrLabel: name, | ||||
|                 kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom, | ||||
|                 kSecAttrKeySizeInBits: size, | ||||
|                 kSecPrivateKeyAttrs: [ | ||||
|                     kSecAttrIsPermanent: true, | ||||
|                     kSecAttrAccessControl: access | ||||
|                 ] | ||||
|             ] as CFDictionary | ||||
| 
 | ||||
|             var privateKey: SecKey! = nil | ||||
|             var publicKey: SecKey! = nil | ||||
|             SecKeyGeneratePair(attributes, &publicKey, &privateKey) | ||||
|             let publicAttributes = SecKeyCopyAttributes(publicKey) as! [CFString: Any] | ||||
|             let privateAttributes = SecKeyCopyAttributes(privateKey) as! [CFString: Any] | ||||
|             let publicData = (publicAttributes[kSecValueData] as! Data) | ||||
|             let privateData = (privateAttributes[kSecValueData] as! Data) | ||||
|             let secret = Secret(keySize: size, publicKey: publicData, privateKey: privateData) | ||||
|             print(secret) | ||||
|             print("Public Key OpenSSH: \(OpenSSHKeyWriter().openSSHString(secret: secret))") | ||||
|         } | ||||
| 
 | ||||
|         public func delete(secret: Secret) throws { | ||||
|         } | ||||
| 
 | ||||
|         public func sign(data: Data, with secret: Secret) throws -> Data { | ||||
|             return Data() | ||||
|         } | ||||
| 
 | ||||
|     func sign(data: Data, with secret: SmartCard.Secret) throws -> Data { | ||||
|         try smartCardStore.sign(data: data, with: secret) | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| extension Stub { | ||||
| 
 | ||||
|     struct Secret: SecretKit.Secret, CustomDebugStringConvertible { | ||||
| 
 | ||||
|         let id = UUID().uuidString.data(using: .utf8)! | ||||
|         let name = UUID().uuidString | ||||
|         let algorithm = Algorithm.ellipticCurve | ||||
| 
 | ||||
|         let keySize: Int | ||||
|         let publicKey: Data | ||||
|         let privateKey: Data | ||||
| 
 | ||||
|         init(keySize: Int, publicKey: Data, privateKey: Data) { | ||||
|             self.keySize = keySize | ||||
|             self.publicKey = publicKey | ||||
|             self.privateKey = privateKey | ||||
|         } | ||||
| 
 | ||||
|         var debugDescription: String { | ||||
|             """ | ||||
|             Key Size \(keySize) | ||||
|             Private: \(privateKey.base64EncodedString()) | ||||
|             Public: \(publicKey.base64EncodedString()) | ||||
|             """ | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| extension Stub.Store { | ||||
| 
 | ||||
|     struct StubError: Error { | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -49,6 +49,7 @@ | ||||
| 		507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */; }; | ||||
| 		507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */; }; | ||||
| 		507EE34A2428263B003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.swift */; }; | ||||
| 		507EE34C24282B4C003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.swift */; }; | ||||
| 		508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; }; | ||||
| 		508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; }; | ||||
| 		508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B4241ED48F0069DC07 /* PreviewAgentStatusChecker.swift */; }; | ||||
| @ -995,6 +996,7 @@ | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				50020BB024064869003D4025 /* AppDelegate.swift in Sources */, | ||||
| 				507EE34C24282B4C003C4FE3 /* StubStore.swift in Sources */, | ||||
| 				5018F54F24064786002EB505 /* Notifier.swift in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user