Skip to content

Commit ad8ed43

Browse files
committed
refactor: Move JWA to separate file
1 parent 81f55d3 commit ad8ed43

File tree

3 files changed

+65
-55
lines changed

3 files changed

+65
-55
lines changed

JWT.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
271E10801F90253300B5033C /* JWA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E107F1F90253300B5033C /* JWA.swift */; };
11+
271E10811F90253300B5033C /* JWA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E107F1F90253300B5033C /* JWA.swift */; };
12+
271E10821F90253300B5033C /* JWA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E107F1F90253300B5033C /* JWA.swift */; };
13+
271E10831F90253300B5033C /* JWA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E107F1F90253300B5033C /* JWA.swift */; };
1014
273010FF1F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
1115
273011001F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
1216
273011011F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
@@ -62,6 +66,7 @@
6266
/* End PBXContainerItemProxy section */
6367

6468
/* Begin PBXFileReference section */
69+
271E107F1F90253300B5033C /* JWA.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWA.swift; sourceTree = "<group>"; };
6570
273010FE1F33EABA00219C35 /* HMAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = "<group>"; };
6671
273011041F33FC5F00219C35 /* HMACCommonCrypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACCommonCrypto.swift; sourceTree = "<group>"; };
6772
273011091F33FC9100219C35 /* HMACCryptoSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACCryptoSwift.swift; sourceTree = "<group>"; };
@@ -198,6 +203,7 @@
198203
520A71151C469F010005C709 /* Decode.swift */,
199204
2777940F1DF22D0D00573F3E /* Encode.swift */,
200205
520A71161C469F010005C709 /* JWT.swift */,
206+
271E107F1F90253300B5033C /* JWA.swift */,
201207
273010FE1F33EABA00219C35 /* HMAC.swift */,
202208
273011041F33FC5F00219C35 /* HMACCommonCrypto.swift */,
203209
273011091F33FC9100219C35 /* HMACCryptoSwift.swift */,
@@ -425,6 +431,7 @@
425431
isa = PBXSourcesBuildPhase;
426432
buildActionMask = 2147483647;
427433
files = (
434+
271E10801F90253300B5033C /* JWA.swift in Sources */,
428435
273011161F34029900219C35 /* HMACCommonCrypto.swift in Sources */,
429436
520A71181C469F010005C709 /* Claims.swift in Sources */,
430437
520A711A1C469F010005C709 /* JWT.swift in Sources */,
@@ -449,6 +456,7 @@
449456
isa = PBXSourcesBuildPhase;
450457
buildActionMask = 2147483647;
451458
files = (
459+
271E10811F90253300B5033C /* JWA.swift in Sources */,
452460
273011171F34029900219C35 /* HMACCommonCrypto.swift in Sources */,
453461
CD9B62171C7753D8005D4844 /* Claims.swift in Sources */,
454462
CD9B62181C7753D8005D4844 /* JWT.swift in Sources */,
@@ -465,6 +473,7 @@
465473
isa = PBXSourcesBuildPhase;
466474
buildActionMask = 2147483647;
467475
files = (
476+
271E10821F90253300B5033C /* JWA.swift in Sources */,
468477
273011181F34029A00219C35 /* HMACCommonCrypto.swift in Sources */,
469478
CD9B62291C7753EC005D4844 /* Claims.swift in Sources */,
470479
CD9B622A1C7753EC005D4844 /* JWT.swift in Sources */,
@@ -481,6 +490,7 @@
481490
isa = PBXSourcesBuildPhase;
482491
buildActionMask = 2147483647;
483492
files = (
493+
271E10831F90253300B5033C /* JWA.swift in Sources */,
484494
273011191F34029A00219C35 /* HMACCommonCrypto.swift in Sources */,
485495
CD9B623B1C7753FB005D4844 /* Claims.swift in Sources */,
486496
CD9B623C1C7753FB005D4844 /* JWT.swift in Sources */,

Sources/JWA.swift

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/// Represents a JSON Web Algorithm (JWA)
2+
/// https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
3+
public enum Algorithm: CustomStringConvertible {
4+
/// No Algorithm, i-e, insecure
5+
case none
6+
7+
/// HMAC using SHA-256 hash algorithm
8+
case hs256(Data)
9+
10+
/// HMAC using SHA-384 hash algorithm
11+
case hs384(Data)
12+
13+
/// HMAC using SHA-512 hash algorithm
14+
case hs512(Data)
15+
16+
public var description: String {
17+
switch self {
18+
case .none:
19+
return "none"
20+
case .hs256:
21+
return "HS256"
22+
case .hs384:
23+
return "HS384"
24+
case .hs512:
25+
return "HS512"
26+
}
27+
}
28+
29+
/// Sign a message using the algorithm
30+
func sign(_ message: String) -> String {
31+
func signHS(_ key: Data, algorithm: HMACAlgorithm) -> String {
32+
let messageData = message.data(using: String.Encoding.utf8, allowLossyConversion: false)!
33+
return base64encode(hmac(algorithm: algorithm, key: key, message: messageData))
34+
}
35+
36+
switch self {
37+
case .none:
38+
return ""
39+
40+
case .hs256(let key):
41+
return signHS(key, algorithm: .sha256)
42+
43+
case .hs384(let key):
44+
return signHS(key, algorithm: .sha384)
45+
46+
case .hs512(let key):
47+
return signHS(key, algorithm: .sha512)
48+
}
49+
}
50+
51+
/// Verify a signature for a message using the algorithm
52+
func verify(_ message: String, signature: Data) -> Bool {
53+
return sign(message) == base64encode(signature)
54+
}
55+
}

Sources/JWT.swift

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,3 @@
11
import Foundation
22

33
public typealias Payload = [String: Any]
4-
5-
/// The supported Algorithms
6-
public enum Algorithm: CustomStringConvertible {
7-
/// No Algorithm, i-e, insecure
8-
case none
9-
10-
/// HMAC using SHA-256 hash algorithm
11-
case hs256(Data)
12-
13-
/// HMAC using SHA-384 hash algorithm
14-
case hs384(Data)
15-
16-
/// HMAC using SHA-512 hash algorithm
17-
case hs512(Data)
18-
19-
public var description: String {
20-
switch self {
21-
case .none:
22-
return "none"
23-
case .hs256:
24-
return "HS256"
25-
case .hs384:
26-
return "HS384"
27-
case .hs512:
28-
return "HS512"
29-
}
30-
}
31-
32-
/// Sign a message using the algorithm
33-
func sign(_ message: String) -> String {
34-
func signHS(_ key: Data, algorithm: HMACAlgorithm) -> String {
35-
let messageData = message.data(using: String.Encoding.utf8, allowLossyConversion: false)!
36-
return base64encode(hmac(algorithm: algorithm, key: key, message: messageData))
37-
}
38-
39-
switch self {
40-
case .none:
41-
return ""
42-
43-
case .hs256(let key):
44-
return signHS(key, algorithm: .sha256)
45-
46-
case .hs384(let key):
47-
return signHS(key, algorithm: .sha384)
48-
49-
case .hs512(let key):
50-
return signHS(key, algorithm: .sha512)
51-
}
52-
}
53-
54-
/// Verify a signature for a message using the algorithm
55-
func verify(_ message: String, signature: Data) -> Bool {
56-
return sign(message) == base64encode(signature)
57-
}
58-
}

0 commit comments

Comments
 (0)