|
| 1 | +import Foundation |
| 2 | +import XCTest |
| 3 | +import JWA |
| 4 | + |
| 5 | + |
| 6 | +@available(OSX 10.12, *) |
| 7 | +class RSAPublicKeyAlgorithmTests: XCTestCase { |
| 8 | + let publicKeyData = Data(base64Encoded: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdlatRjRjogo3WojgGHFHYLugdUWAY9iR3fy4arWNA1KoS8kVw33cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQsHUfQrSDv+MuSUMAe8jzKE4qW+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5Do2kQ+X5xK9cipRgEKwIDAQAB")! |
| 9 | + let privateKeyData = Data(base64Encoded: "MIICWwIBAAKBgQDdlatRjRjogo3WojgGHFHYLugdUWAY9iR3fy4arWNA1KoS8kVw33cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQsHUfQrSDv+MuSUMAe8jzKE4qW+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5Do2kQ+X5xK9cipRgEKwIDAQABAoGAD+onAtVye4ic7VR7V50DF9bOnwRwNXrARcDhq9LWNRrRGElESYYTQ6EbatXS3MCyjjX2eMhu/aF5YhXBwkppwxg+EOmXeh+MzL7Zh284OuPbkglAaGhV9bb6/5CpuGb1esyPbYW+Ty2PC0GSZfIXkXs76jXAu9TOBvD0ybc2YlkCQQDywg2R/7t3Q2OE2+yo382CLJdrlSLVROWKwb4tb2PjhY4XAwV8d1vy0RenxTB+K5Mu57uVSTHtrMK0GAtFr833AkEA6avx20OHo61Yela/4k5kQDtjEf1N0LfI+BcWZtxsS3jDM3i1Hp0KSu5rsCPb8acJo5RO26gGVrfAsDcIXKC+bQJAZZ2XIpsitLyPpuiMOvBbzPavd4gY6Z8KWrfYzJoI/Q9FuBo6rKwl4BFoToD7WIUS+hpkagwWiz+6zLoX1dbOZwJACmH5fSSjAkLRi54PKJ8TFUeOP15h9sQzydI8zJU+upvDEKZsZc/UhT/SySDOxQ4G/523Y0sz/OZtSWcol/UMgQJALesy++GdvoIDLfJX5GBQpuFgFenRiRDabxrE9MNUZ2aPFaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==")! |
| 10 | + var publicKey: SecKey { |
| 11 | + let attributes: [String: Any] = [ |
| 12 | + kSecAttrKeyType as String: kSecAttrKeyTypeRSA, |
| 13 | + kSecAttrKeySizeInBits as String: 2048, |
| 14 | + kSecAttrKeyClass as String: kSecAttrKeyClassPublic, |
| 15 | + ] |
| 16 | + |
| 17 | + var error: Unmanaged<CFError>? |
| 18 | + guard let key = SecKeyCreateWithData(publicKeyData as NSData, attributes as NSDictionary, &error) else { |
| 19 | + fatalError("\(error!.takeRetainedValue())") |
| 20 | + } |
| 21 | + |
| 22 | + return key |
| 23 | + } |
| 24 | + var privateKey: SecKey { |
| 25 | + let attributes: [String: Any] = [ |
| 26 | + kSecAttrKeyType as String: kSecAttrKeyTypeRSA, |
| 27 | + kSecAttrKeySizeInBits as String: 2048, |
| 28 | + kSecAttrKeyClass as String: kSecAttrKeyClassPrivate, |
| 29 | + ] |
| 30 | + |
| 31 | + var error: Unmanaged<CFError>? |
| 32 | + guard let key = SecKeyCreateWithData(privateKeyData as NSData, attributes as NSDictionary, &error) else { |
| 33 | + fatalError("\(error!.takeRetainedValue())") |
| 34 | + } |
| 35 | + |
| 36 | + return key |
| 37 | + } |
| 38 | + |
| 39 | + let message = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9".data(using: .utf8)! |
| 40 | + let sha256Signature = Data(base64Encoded: "EkN+DOsnsuRjRO6BxXemmJDm3HbxrbRzXglbN2S4sOkopdU4IsDxTI8jO19W/A4K8ZPJijNLis4EZsHeY559a4DFOd50/OqgHGuERTqYZyuhtF39yxJPAjUESwxk2J5k/4zM3O+vtd1Ghyo4IbqKKSy6J9mTniYJPenn5+HIirE=")! |
| 41 | + let sha384Signature = Data(base64Encoded: "rQ706A2kJ7KjPURXyXK/dZ9Qdm+7ZlaQ1Qt8s43VIX21Wck+p8vuSOKuGltKr9NL")! |
| 42 | + let sha512Signature = Data(base64Encoded: "G7pYfHMO7box9Tq7C2ylieCd5OiU7kVeYUCAc5l1mtqvoGnux8AWR7sXPcsX9V0ir0mhgHG3SMXC7df3qCnGMg==")! |
| 43 | + |
| 44 | + // MARK: Name |
| 45 | + |
| 46 | + func testSHA256Name() { |
| 47 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha256) |
| 48 | + XCTAssertEqual(algorithm.name, "RS256") |
| 49 | + } |
| 50 | + |
| 51 | + func testSHA384Name() { |
| 52 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha384) |
| 53 | + XCTAssertEqual(algorithm.name, "RS384") |
| 54 | + } |
| 55 | + |
| 56 | + func testSHA512Name() { |
| 57 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha512) |
| 58 | + XCTAssertEqual(algorithm.name, "RS512") |
| 59 | + } |
| 60 | + |
| 61 | + // MARK: Signing |
| 62 | +// |
| 63 | +// func testSHA256Sign() { |
| 64 | +// let algorithm = HMACAlgorithm(key: key, hash: .sha256) |
| 65 | +// XCTAssertEqual(algorithm.sign(message), sha256Signature) |
| 66 | +// } |
| 67 | +// |
| 68 | +// func testSHA384Sign() { |
| 69 | +// let algorithm = HMACAlgorithm(key: key, hash: .sha384) |
| 70 | +// XCTAssertEqual(algorithm.sign(message), sha384Signature) |
| 71 | +// } |
| 72 | +// |
| 73 | +// func testSHA512Sign() { |
| 74 | +// let algorithm = HMACAlgorithm(key: key, hash: .sha512) |
| 75 | +// XCTAssertEqual(algorithm.sign(message), sha512Signature) |
| 76 | +// } |
| 77 | +// |
| 78 | + // MARK: Verify |
| 79 | + |
| 80 | + func testSHA256Verify() { |
| 81 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha256) |
| 82 | + XCTAssertTrue(algorithm.verify(message, signature: sha256Signature)) |
| 83 | + |
| 84 | +// let a = RSAPrivateKey(key: privateKey, hash: .sha256) |
| 85 | +// XCTAssertEqual(a.sign(message), sha256Signature) |
| 86 | + } |
| 87 | + |
| 88 | + func testSHA384Verify() { |
| 89 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha384) |
| 90 | + XCTAssertTrue(algorithm.verify(message, signature: sha384Signature)) |
| 91 | + } |
| 92 | + |
| 93 | + func testSHA512Verify() { |
| 94 | + let algorithm = RSAPublicKey(key: publicKey, hash: .sha512) |
| 95 | + XCTAssertTrue(algorithm.verify(message, signature: sha512Signature)) |
| 96 | + } |
| 97 | +} |
0 commit comments