Skip to content

Commit f5c79ff

Browse files
committed
refactor: Introduce a structure for JOSE headers
1 parent feb252e commit f5c79ff

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

JWT.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
277794061DF221F800573F3E /* ClaimSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277794041DF221F800573F3E /* ClaimSet.swift */; };
1515
277794071DF221F800573F3E /* ClaimSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277794041DF221F800573F3E /* ClaimSet.swift */; };
1616
277794081DF221F800573F3E /* ClaimSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277794041DF221F800573F3E /* ClaimSet.swift */; };
17+
2777940B1DF22BE400573F3E /* JOSEHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2777940A1DF22BE400573F3E /* JOSEHeader.swift */; };
18+
2777940C1DF22BE400573F3E /* JOSEHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2777940A1DF22BE400573F3E /* JOSEHeader.swift */; };
19+
2777940D1DF22BE400573F3E /* JOSEHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2777940A1DF22BE400573F3E /* JOSEHeader.swift */; };
20+
2777940E1DF22BE400573F3E /* JOSEHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2777940A1DF22BE400573F3E /* JOSEHeader.swift */; };
1721
279D63A21AD07FFF0024E2BC /* JWT.h in Headers */ = {isa = PBXBuildFile; fileRef = 279D63A11AD07FFF0024E2BC /* JWT.h */; settings = {ATTRIBUTES = (Public, ); }; };
1822
279D63A81AD07FFF0024E2BC /* JWT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279D639C1AD07FFF0024E2BC /* JWT.framework */; };
1923
279D63AF1AD07FFF0024E2BC /* JWTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279D63AE1AD07FFF0024E2BC /* JWTTests.swift */; };
@@ -72,6 +76,7 @@
7276

7377
/* Begin PBXFileReference section */
7478
277794041DF221F800573F3E /* ClaimSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClaimSet.swift; sourceTree = "<group>"; };
79+
2777940A1DF22BE400573F3E /* JOSEHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JOSEHeader.swift; sourceTree = "<group>"; };
7580
279D639C1AD07FFF0024E2BC /* JWT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JWT.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7681
279D63A01AD07FFF0024E2BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
7782
279D63A11AD07FFF0024E2BC /* JWT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JWT.h; sourceTree = "<group>"; };
@@ -202,6 +207,7 @@
202207
isa = PBXGroup;
203208
children = (
204209
277794041DF221F800573F3E /* ClaimSet.swift */,
210+
2777940A1DF22BE400573F3E /* JOSEHeader.swift */,
205211
520A71131C469F010005C709 /* Base64.swift */,
206212
520A71141C469F010005C709 /* Claims.swift */,
207213
520A71151C469F010005C709 /* Decode.swift */,
@@ -466,6 +472,7 @@
466472
520A71181C469F010005C709 /* Claims.swift in Sources */,
467473
520A711A1C469F010005C709 /* JWT.swift in Sources */,
468474
520A71191C469F010005C709 /* Decode.swift in Sources */,
475+
2777940B1DF22BE400573F3E /* JOSEHeader.swift in Sources */,
469476
277794051DF221F800573F3E /* ClaimSet.swift in Sources */,
470477
520A71171C469F010005C709 /* Base64.swift in Sources */,
471478
);
@@ -486,6 +493,7 @@
486493
CD9B62171C7753D8005D4844 /* Claims.swift in Sources */,
487494
CD9B62181C7753D8005D4844 /* JWT.swift in Sources */,
488495
CD9B62191C7753D8005D4844 /* Decode.swift in Sources */,
496+
2777940C1DF22BE400573F3E /* JOSEHeader.swift in Sources */,
489497
277794061DF221F800573F3E /* ClaimSet.swift in Sources */,
490498
CD9B621A1C7753D8005D4844 /* Base64.swift in Sources */,
491499
);
@@ -498,6 +506,7 @@
498506
CD9B62291C7753EC005D4844 /* Claims.swift in Sources */,
499507
CD9B622A1C7753EC005D4844 /* JWT.swift in Sources */,
500508
CD9B622B1C7753EC005D4844 /* Decode.swift in Sources */,
509+
2777940D1DF22BE400573F3E /* JOSEHeader.swift in Sources */,
501510
277794071DF221F800573F3E /* ClaimSet.swift in Sources */,
502511
CD9B622C1C7753EC005D4844 /* Base64.swift in Sources */,
503512
);
@@ -510,6 +519,7 @@
510519
CD9B623B1C7753FB005D4844 /* Claims.swift in Sources */,
511520
CD9B623C1C7753FB005D4844 /* JWT.swift in Sources */,
512521
CD9B623D1C7753FB005D4844 /* Decode.swift in Sources */,
522+
2777940E1DF22BE400573F3E /* JOSEHeader.swift in Sources */,
513523
277794081DF221F800573F3E /* ClaimSet.swift in Sources */,
514524
CD9B623E1C7753FB005D4844 /* Base64.swift in Sources */,
515525
);

Sources/Decode.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public func decode(_ jwt: String, algorithm: Algorithm, verify: Bool = true, aud
7373

7474
// MARK: Parsing a JWT
7575

76-
func load(_ jwt:String) throws -> (header: Payload, payload: ClaimSet, signature: Data, signatureInput: String) {
76+
func load(_ jwt:String) throws -> (header: JOSEHeader, payload: ClaimSet, signature: Data, signatureInput: String) {
7777
let segments = jwt.components(separatedBy: ".")
7878
if segments.count != 3 {
7979
throw InvalidToken.decodeError("Not enough segments")
@@ -107,13 +107,13 @@ func load(_ jwt:String) throws -> (header: Payload, payload: ClaimSet, signature
107107
throw InvalidToken.decodeError("Signature is not correctly encoded as base64")
108108
}
109109

110-
return (header: header!, payload: ClaimSet(claims: payload!), signature: signature, signatureInput: signatureInput)
110+
return (header: JOSEHeader(parameters: header!), payload: ClaimSet(claims: payload!), signature: signature, signatureInput: signatureInput)
111111
}
112112

113113
// MARK: Signature Verification
114114

115-
func verifySignature(_ algorithms: [Algorithm], header: Payload, signingInput: String, signature: Data) throws {
116-
guard let alg = header["alg"] as? String else {
115+
func verifySignature(_ algorithms: [Algorithm], header: JOSEHeader, signingInput: String, signature: Data) throws {
116+
guard let alg = header.algorithm else {
117117
throw InvalidToken.decodeError("Missing Algorithm")
118118
}
119119

Sources/JOSEHeader.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// JOSEHeader.swift
3+
// JWT
4+
//
5+
// Created by Kyle Fuller on 02/12/2016.
6+
// Copyright © 2016 Cocode. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
12+
struct JOSEHeader {
13+
var parameters: [String: Any]
14+
15+
init(parameters: [String: Any]) {
16+
self.parameters = parameters
17+
}
18+
19+
var algorithm: String? {
20+
get {
21+
return parameters["alg"] as? String
22+
}
23+
24+
set {
25+
parameters["alg"] = newValue
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)