From 4de8d2b61e54ef56e2f02f961486b14828b27db9 Mon Sep 17 00:00:00 2001 From: Sami Moustachir Date: Fri, 2 Jun 2023 10:36:22 +0200 Subject: [PATCH] chore: some renaming --- .../SecureSession/SecureSession.swift | 23 +++++++++++-------- Sources/Xenissuing/Xenissuing.swift | 12 ++-------- ...ptTests.swift => SecureSessionTests.swift} | 0 Tests/XenissuingTests/XenissuingTests.swift | 10 ++++++++ 4 files changed, 25 insertions(+), 20 deletions(-) rename Tests/XenissuingTests/{XenCryptTests.swift => SecureSessionTests.swift} (100%) diff --git a/Sources/Xenissuing/SecureSession/SecureSession.swift b/Sources/Xenissuing/SecureSession/SecureSession.swift index 95ab047..c90c45d 100644 --- a/Sources/Xenissuing/SecureSession/SecureSession.swift +++ b/Sources/Xenissuing/SecureSession/SecureSession.swift @@ -6,13 +6,13 @@ import Security protocol Crypto { func generateRandom(size: Int) throws -> Data - func generateSessionId(sessionKey: Data) throws -> EncryptedMessage - func encrypt(plain: Data, iv: Data, sessionKey: Data) throws -> EncryptedMessage + func generateSessionId(sessionKey: Data) throws -> SecuredSession + func encrypt(plain: Data, iv: Data, sessionKey: Data) throws -> SecuredSession func decrypt(secret: String, sessionKey: Data, iv: String) throws -> Data } /// Encapsulates encrypted message and key used as encryption key. -public struct EncryptedMessage { +public struct SecuredSession { internal let key: Data public let sealed: Data public init(key: Data, sealed: Data) { @@ -27,7 +27,7 @@ public struct EncryptedMessage { public class SecureSession: Crypto { /// The key provided by Xendit. let xenditPublicKey: SecKey - var secureSession: EncryptedMessage? + var secureSession: SecuredSession? /** Initializes an object with the provided public key data and tag. @@ -74,9 +74,12 @@ public class SecureSession: Crypto { let sKey = try self.generateRandom() self.secureSession = try self.generateSessionId(sessionKey: sKey) } - + + /** + Returns the encrypted session key. + */ public func getKey() -> Data { - return self.secureSession!.key + return self.secureSession!.sealed } public func decryptCardData(secret: String, iv: String) throws -> Data { @@ -106,12 +109,12 @@ public class SecureSession: Crypto { if there was any issue during encryption. - Returns: The encrypted text */ - internal func generateSessionId(sessionKey: Data) throws -> EncryptedMessage { + internal func generateSessionId(sessionKey: Data) throws -> SecuredSession { do { let sealed = try self.xenditPublicKey.encrypt( algorithm: .rsaEncryptionOAEPSHA256, plaintext: sessionKey) - return EncryptedMessage(key: sessionKey, sealed: sealed) + return SecuredSession(key: sessionKey, sealed: sealed) } catch { throw XenError.generateSessionIdError("") } @@ -126,13 +129,13 @@ public class SecureSession: Crypto { if there was any issue during encryption. - Returns: The encrypted text */ - public func encrypt(plain: Data, iv _: Data, sessionKey: Data) throws -> EncryptedMessage { + public func encrypt(plain: Data, iv _: Data, sessionKey: Data) throws -> SecuredSession { do { let iv = AES.randomIV(32) let gcm = GCM(iv: iv, mode: .combined) let aes = try AES(key: sessionKey.bytes, blockMode: gcm, padding: .noPadding) let sealed = try aes.encrypt(plain.bytes) - return EncryptedMessage(key: sessionKey, sealed: Data(sealed)) + return SecuredSession(key: sessionKey, sealed: Data(sealed)) } catch { throw XenError.encryptionError("") } diff --git a/Sources/Xenissuing/Xenissuing.swift b/Sources/Xenissuing/Xenissuing.swift index 1d82a3a..6f77da0 100644 --- a/Sources/Xenissuing/Xenissuing.swift +++ b/Sources/Xenissuing/Xenissuing.swift @@ -9,22 +9,14 @@ import Foundation @available(macOS 10.15, *) public enum Xenissuing { /** - Initializes XenIssuing module. + Create a secure session used to generate a key and decrypt card data. - Parameters: - xenditPublicKeyData: Public Key. - xenditPublicKeyTag: Public Key Tag. If provided, it will try to check first keychain to get the key data. - - Returns: Main module. + - Returns: Secure session object. */ - // override public init(xenditPublicKeyData: Data, xenditPublicKeyTag: String? = nil) throws { - // do { - // try super.init(xenditPublicKeyData: xenditPublicKeyData, xenditPublicKeyTag: xenditPublicKeyTag) - // } catch { - // throw error - // } - // } - public static func createSecureSession(xenditPublicKeyData: Data, xenditPublicKeyTag: String? = nil) throws -> SecureSession { let secSession: SecureSession = try SecureSession(xenditPublicKeyData: xenditPublicKeyData, xenditPublicKeyTag: xenditPublicKeyTag) return secSession diff --git a/Tests/XenissuingTests/XenCryptTests.swift b/Tests/XenissuingTests/SecureSessionTests.swift similarity index 100% rename from Tests/XenissuingTests/XenCryptTests.swift rename to Tests/XenissuingTests/SecureSessionTests.swift diff --git a/Tests/XenissuingTests/XenissuingTests.swift b/Tests/XenissuingTests/XenissuingTests.swift index ecc0812..364828a 100644 --- a/Tests/XenissuingTests/XenissuingTests.swift +++ b/Tests/XenissuingTests/XenissuingTests.swift @@ -1,3 +1,8 @@ +import Crypto +import CryptoKit +import CryptoSwift +import Foundation +import Security import XCTest @testable import Xenissuing @@ -15,4 +20,9 @@ final class XenissuingTests: XCTestCase { let secureSession = try Xenissuing.createSecureSession(xenditPublicKeyData: Data(base64Encoded: validPublicKey)!) XCTAssertNotNil(secureSession.secureSession) } + + func testSecureSessionGetKey() throws { + let secureSession = try Xenissuing.createSecureSession(xenditPublicKeyData: Data(base64Encoded: validPublicKey)!) + XCTAssertNotNil(secureSession.getKey()) + } }