Skip to content

Commit 8607070

Browse files
authored
Merge pull request #90 from niscy-eudiw/feature/example-jws-json-parsing
Added JWS JSON parsing example
2 parents d78c595 + 4302ea4 commit 8607070

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

Tests/Helpers/Constants.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
@preconcurrency import Foundation
1717
@testable import eudi_lib_sdjwt_swift
1818
import X509
19+
import SwiftyJSON
1920

2021
let key =
2122
"""
@@ -331,4 +332,16 @@ eyJhbGciOiJFUzI1NiIsImNuZiI6eyJqd2siOnsiY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJS
331332
return try Certificate(derEncoded: Array(data))
332333
}
333334
}
335+
336+
nonisolated(unsafe) static let issuerSignedJWSJSON: JSON = [
337+
"payload" : "eyJzdWIiOiJ0bmVhbCIsImRhdGVfb2ZfaXNzdWFuY2UiOiIyMDI1LTEwLTA5Iiwic3RhcnRpbmdfZGF0ZSI6IjIwMjYtMDUtMDciLCJ2Y3QiOiJ1cm46ZXVkaTplaGljOjEiLCJpc3MiOiJodHRwczovL2Rldi5pc3N1ZXItYmFja2VuZC5ldWRpdy5kZXYiLCJfc2QiOlsiRl90a2Vod0RqT0NmOGg1RU53MXFqZ1V1cWVVYTQybnR4VjFmU2d6U2pFUSIsImhWNWhFdVkwWWlfRjM0MUZPa1FvRVlLal8ydndIbHU1bUg0TnVlOElZTzAiXSwiYXV0aGVudGljX3NvdXJjZSI6eyJpZCI6IlViZXItR1IiLCJuYW1lIjoiVWJlciBIZWFsdGggSW5zdXJhbmNlIn0sIm5iZiI6MTc1OTk4ODgxOSwiaXNzdWluZ19jb3VudHJ5IjoiR1IiLCJkYXRlX29mX2V4cGlyeSI6IjIwMjUtMTEtMDgiLCJpc3N1aW5nX2F1dGhvcml0eSI6eyJpZCI6IlViZXItR1IiLCJuYW1lIjoiVWJlciBIZWFsdGggSW5zdXJhbmNlIn0sIl9zZF9hbGciOiJzaGEtMjU2IiwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6IlAtMjU2Iiwia2lkIjoiNzRERTAyRkUtNzQ5RS00ODY5LThCRTQtNURFNDgxM0U1NjA5IiwieCI6IkVQODVUYnB1b2xheEEtNUpMX0p5NXJSbHJTdXVPY1djVmJVd0NGbU9EMmciLCJ5IjoiNTdpMll3UEo2VkhUUnFONEJVb3FZeFVxR25kNmZNYmRIRkd4R0ZOSmRZWSIsImFsZyI6IkVTMjU2In19LCJleHAiOjE3NjI1ODA4MTksImVuZGluZ19kYXRlIjoiMjAyNi0xMC0wOSIsImlhdCI6MTc1OTk4ODgxOSwianRpIjoiNTViYzkyNzktYzE3Yy00NTk1LWEyNWQtNGM5MjNjYTY2OGRmIn0",
338+
"protected" : "eyJ4NWMiOlsiTUlJQzZ6Q0NBcEdnQXdJQkFnSVViWDhuYllTTFJ2eTEwbUtOK2hmQ1ZyLzhjQmN3Q2dZSUtvWkl6ajBFQXdJd1hERWVNQndHQTFVRUF3d1ZVRWxFSUVsemMzVmxjaUJEUVNBdElGVlVJREF5TVMwd0t3WURWUVFLRENSRlZVUkpJRmRoYkd4bGRDQlNaV1psY21WdVkyVWdTVzF3YkdWdFpXNTBZWFJwYjI0eEN6QUpCZ05WQkFZVEFsVlVNQjRYRFRJMU1EUXhNREUwTWpVME1Gb1hEVEkyTURjd05ERTBNalV6T1Zvd1VqRVVNQklHQTFVRUF3d0xVRWxFSUVSVElDMGdNRE14TFRBckJnTlZCQW9NSkVWVlJFa2dWMkZzYkdWMElGSmxabVZ5Wlc1alpTQkpiWEJzWlcxbGJuUmhkR2x2YmpFTE1Ba0dBMVVFQmhNQ1ZWUXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBU3J4WjEzd0xqL25VdUdlYllSbVBPMHE3cFJrMXgxU2pycUxUdnRRRnBRY3k5VHdGQ2NnaWUvQkJDMmovS3BMY0NyK29qNHR5WkFvZm12SGRhVEV4YkJvNElCT1RDQ0FUVXdId1lEVlIwakJCZ3dGb0FVWXNlVVJ5aTlENklXSUtlYXdrbVVSUEVCMDhjd0p3WURWUjBSQkNBd0hvSWNaR1YyTG1semMzVmxjaTFpWVdOclpXNWtMbVYxWkdsM0xtUmxkakFXQmdOVkhTVUJBZjhFRERBS0JnZ3JnUUlDQUFBQkFqQkRCZ05WSFI4RVBEQTZNRGlnTnFBMGhqSm9kSFJ3Y3pvdkwzQnlaWEJ5YjJRdWNHdHBMbVYxWkdsM0xtUmxkaTlqY213dmNHbGtYME5CWDFWVVh6QXlMbU55YkRBZEJnTlZIUTRFRmdRVWNzM0t5cWl6SGd0WFJlMzJuNkpCSkhBZmFMWXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1GMEdBMVVkRWdSV01GU0dVbWgwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzlsZFMxa2FXZHBkR0ZzTFdsa1pXNTBhWFI1TFhkaGJHeGxkQzloY21Ob2FYUmxZM1IxY21VdFlXNWtMWEpsWm1WeVpXNWpaUzFtY21GdFpYZHZjbXN3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnVFZabmNoRCtRanE1M1hzMG9jMDd5M3pHNmtBWEZrSitaS3psVkcyMnNDOENJUUR0RE1RcTBRbS9mUTVvcnJqUlQ0WEIrMEpiNnhGUHhYOVFrVlJhTXkvSWlBPT0iXSwia2lkIjoiNjI1MTE1NjIzMzA2MTIyNDk0ODA5Njg1MDI2ODI2NDM5OTAyMzM0MDY5NTM0NzQzIiwidHlwIjoiZGMrc2Qtand0IiwiYWxnIjoiRVMyNTYifQ",
339+
"header" : [
340+
"disclosures" : [
341+
"WyJtMnZiZ180UlN3eVMwRXBRRzQzYkdBIiwicGVyc29uYWxfYWRtaW5pc3RyYXRpdmVfbnVtYmVyIiwiNzlkZWU2ZTctY2QyMi00YjlkLTlhN2QtNTFkMDhlYTk0OGE3Il0",
342+
"WyJqckNuM0JGR3JiMEU0NVIyUnFaNTZ3IiwiZG9jdW1lbnRfbnVtYmVyIiwiNjQ0NmFkMTAtNTk4MS00ZmRhLTgzYTItYTdmNzA5MjBhNGVmIl0"
343+
]
344+
],
345+
"signature" : "zZyi69aFm7q43h5H4O0sXDznuly6mrxXK4aSFpmNDG-aey4mdolS37rSuDEU5BHrwan7Bn3MFyrx6_xFRs1rqQ"
346+
]
334347
}

Tests/JSONSerialization/CompactParserJwsJsonTests.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@ import SwiftyJSON
2020
class CompactParserJwsJsonTests: XCTestCase {
2121

2222
var parser: CompactParser!
23+
var x509CertificateChainVerifier: X509SDJWTVCCertificateTrust!
2324

2425
override func setUp() {
2526
super.setUp()
2627
parser = CompactParser()
28+
x509CertificateChainVerifier = X509SDJWTVCCertificateChainVerifier(
29+
rootCertificates: try! SDJWTConstants.loadRootCertificates()
30+
)
2731
}
2832

2933
override func tearDown() {
@@ -261,4 +265,32 @@ class CompactParserJwsJsonTests: XCTestCase {
261265
XCTAssertEqual(sdJwtFromGeneral.disclosures.count, sdJwtFromFlattened.disclosures.count)
262266
XCTAssertEqual(sdJwtFromGeneral.jwt.compactSerialization, sdJwtFromFlattened.jwt.compactSerialization)
263267
}
268+
269+
func testIssuerSignedJwsJsonObject_CompactParserToSDJWT_Correctly() async throws {
270+
271+
// Given
272+
let json: JSON = SDJWTConstants.issuerSignedJWSJSON
273+
let x509Verifier = SDJWTVCVerifier(
274+
verificationMethod: .x509(
275+
trust: x509CertificateChainVerifier
276+
)
277+
)
278+
279+
// When
280+
let resultJson: String = try parser.stringFromJwsJsonObject(json)
281+
282+
// Then
283+
let sdJwt = try parser.getSignedSdJwt(serialisedString: resultJson)
284+
let result = try await x509Verifier.verifyIssuance(
285+
unverifiedSdJwt: sdJwt.serialisation
286+
)
287+
288+
switch result {
289+
case .success:
290+
XCTAssert(true)
291+
default:
292+
XCTAssert(true)
293+
}
294+
XCTAssertEqual(sdJwt.disclosures.count, 2)
295+
}
264296
}

0 commit comments

Comments
 (0)