Skip to content
Snippets Groups Projects
Commit 38a7aff7 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add Identity codable model

parent 5e4990b4
No related branches found
No related tags found
1 merge request!3Bindings models wrapper
......@@ -26,6 +26,12 @@ let package = Package(
targets: ["ElixxirDAppsSDK"]
),
],
dependencies: [
.package(
url: "https://github.com/pointfreeco/swift-custom-dump.git",
.upToNextMajor(from: "0.4.0")
),
],
targets: [
.target(
name: "ElixxirDAppsSDK",
......@@ -37,7 +43,11 @@ let package = Package(
.testTarget(
name: "ElixxirDAppsSDKTests",
dependencies: [
.target(name: "ElixxirDAppsSDK")
.target(name: "ElixxirDAppsSDK"),
.product(
name: "CustomDump",
package: "swift-custom-dump"
),
],
swiftSettings: swiftSettings
),
......
import Foundation
public struct Identity: Equatable, Codable {
enum CodingKeys: String, CodingKey {
case id = "ID"
case rsaPrivatePem = "RSAPrivatePem"
case salt = "Salt"
case dhKeyPrivate = "DHKeyPrivate"
}
public init(
id: Data,
rsaPrivatePem: Data,
salt: Data,
dhKeyPrivate: Data
) {
self.id = id
self.rsaPrivatePem = rsaPrivatePem
self.salt = salt
self.dhKeyPrivate = dhKeyPrivate
}
public var id: Data
public var rsaPrivatePem: Data
public var salt: Data
public var dhKeyPrivate: Data
}
import CustomDump
import XCTest
@testable import ElixxirDAppsSDK
final class IdentityTests: XCTestCase {
func testCoding() throws {
let userId = secureRandomData(count: 32)
let rsaPrivateKey = secureRandomData(count: 32)
let salt = secureRandomData(count: 32)
let dhKeyPrivate = secureRandomData(count: 32)
let jsonString = """
{
"ID": \(userId.jsonEncodedBase64()),
"RSAPrivatePem": \(rsaPrivateKey.jsonEncodedBase64()),
"Salt": \(salt.jsonEncodedBase64()),
"DHKeyPrivate": \(dhKeyPrivate.jsonEncodedBase64())
}
"""
let jsonData = jsonString.data(using: .utf8)!
let decoder = JSONDecoder()
decoder.dataDecodingStrategy = .base64
let identity = try decoder.decode(Identity.self, from: jsonData)
XCTAssertNoDifference(identity, Identity(
id: userId,
rsaPrivatePem: rsaPrivateKey,
salt: salt,
dhKeyPrivate: dhKeyPrivate
))
let encoder = JSONEncoder()
encoder.dataEncodingStrategy = .base64
let encodedIdentity = try encoder.encode(identity)
let decodedIdentity = try decoder.decode(Identity.self, from: encodedIdentity)
XCTAssertNoDifference(decodedIdentity, identity)
}
}
import Foundation
func secureRandomData(count: Int) -> Data {
var bytes = [Int8](repeating: 0, count: count)
let status = SecRandomCopyBytes(kSecRandomDefault, count, &bytes)
assert(status == errSecSuccess)
return Data(bytes: bytes, count: count)
}
extension Data {
func jsonEncodedBase64() -> String {
let encoder = JSONEncoder()
encoder.dataEncodingStrategy = .base64
let data = try! encoder.encode(self)
return String(data: data, encoding: .utf8)!
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment