WIP
Diff
.gitignore | 3 ++-
Package.resolved | 14 ++++++++++++++
Package.swift | 27 +++++++++++++++++++++++++++
Sources/EpicQR/EpicQR.swift | 41 +++++++++++++++++++++++++++++++++++++++++
Tests/EpicQRTests/EpicQRTests.swift | 10 ++++++++++
5 files changed, 94 insertions(+), 1 deletion(-)
@@ -1,5 +1,6 @@
haxe-build.zip
build/
*.jar
*.class
*.class
.build
@@ -1,0 +1,14 @@
{
"pins" : [
{
"identity" : "swift-crypto",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-crypto.git",
"state" : {
"revision" : "b51f1d6845b353a2121de1c6a670738ec33561a6",
"version" : "3.1.0"
}
}
],
"version" : 2
}
@@ -1,0 +1,27 @@
import PackageDescription
let package = Package(
name: "EpicQR",
products: [
.library(
name: "EpicQR",
targets: ["EpicQR"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-crypto.git", from:"3.1.0")
],
targets: [
.target(
name: "EpicQR",
dependencies: [
.product(name: "Crypto", package: "swift-crypto"),
.product(name: "_CryptoExtras", package: "swift-crypto"),
]
),
.testTarget(
name: "EpicQRTests",
dependencies: ["EpicQR"]),
]
)
@@ -1,0 +1,41 @@
import Foundation
import Crypto
import _CryptoExtras
let IV : String = "H76$suq23_po(8sD";
let KEY : String = "X_4k$uq23FSwI.qT";
struct EpicResult: Decodable {
let epic_no: String
let unique_generation_id: Int
}
class EpicQR {
var epic : String
var id : Int
init(qr: String){
let jsonString = try! decode(qr).data(using: .utf8)!
let er:EpicResult = try! JSONDecoder().decode(EpicResult.self, from: jsonString)
self.epic = er.epic_no
self.id = er.unique_generation_id
}
private func decode(_ qrString: String) throws -> String {
guard let decodedData = Data(base64Encoded: qrString) else {
throw DecodeError()
}
let ct = [UInt8](decodedData)
let iv = try AES._CBC.IV(ivBytes: [UInt8](IV.utf8))
let decodedText = try AES._CBC.decrypt(ct,
using: .init(data: [UInt8](KEY.utf8)),
iv: iv
)
return String(decoding: decodedText, as: UTF8.self)
}
}
private struct DecodeError: Error {
}
@@ -1,0 +1,10 @@
import XCTest
@testable import EpicQR
final class EpicQRTests: XCTestCase {
func testExample() throws {
let result = try EpicQR.decode("dbhvecY6Roa4NF3gAzEbkTibZZzXAEYpMg8197BQWMS2+ID24FGDKWB5IEcuxjsA81ChprhSO3EsjKMRDbBWLg==")
XCTAssertEqual(result.epic, "ABC1234566")
XCTAssertEqual(result.id, 1234)
}
}