Added support for the Crypto and CommonCrypto libraries for the GenerateHashUseCase use case in the library target, so this code builds for non-apple platforms.
This commit is contained in:
+4
-4
@@ -30,21 +30,21 @@ let package = Package(
|
||||
)
|
||||
],
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/apple/swift-crypto.git", from: "3.13.0"),
|
||||
.package(url: "https://github.com/apple/swift-openapi-generator.git", from: "1.3.0"),
|
||||
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.5.0"),
|
||||
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.2"),
|
||||
.package(url: "https://github.com/apple/swift-crypto.git", from: "3.13.0"),
|
||||
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0")
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: MarvelService.target,
|
||||
dependencies: [
|
||||
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
|
||||
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
|
||||
.product(name: "Crypto", package: "swift-crypto", condition: .when(platforms: [
|
||||
.android, .linux, .openbsd, .windows
|
||||
]))
|
||||
])),
|
||||
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
|
||||
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession")
|
||||
],
|
||||
path: "Sources/MarvelService",
|
||||
plugins: [
|
||||
|
||||
@@ -10,7 +10,13 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===
|
||||
|
||||
#if canImport(CriptoKit)
|
||||
import CryptoKit
|
||||
#elseif canImport(Crypto)
|
||||
import Crypto
|
||||
#else
|
||||
import CommonCrypto
|
||||
#endif
|
||||
|
||||
import struct Foundation.Data
|
||||
import struct Foundation.TimeInterval
|
||||
@@ -51,10 +57,33 @@ struct GenerateHashUseCase {
|
||||
let stringToHash = timestamp.asString + self.privateKey + self.publicKey
|
||||
let dataToHash = Data(stringToHash.utf8)
|
||||
|
||||
#if canImport(CriptoKit) || canImport(Crypto)
|
||||
return Insecure.MD5
|
||||
.hash(data: dataToHash)
|
||||
.map { String(format: "%02x", $0) }
|
||||
.map { String(format: .Format.hexadecimal, $0) }
|
||||
.joined()
|
||||
#else
|
||||
return dataToHash
|
||||
.withUnsafeBytes {
|
||||
var hash = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
|
||||
|
||||
CC_MD5($0.baseAddress, CC_LONG(dataToHash.count), &hash)
|
||||
|
||||
return hash
|
||||
}
|
||||
.map { String(format: .Format.hexadecimal, $0) }
|
||||
.joined()
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Constants
|
||||
|
||||
private extension String {
|
||||
/// A namespace assigned to string format representations.
|
||||
enum Format {
|
||||
/// A string format for MD5 hash hexadecimal bytes.
|
||||
static let hexadecimal = "%02x"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user