diff --git a/Package.swift b/Package.swift index d5934cee..ec57f042 100644 --- a/Package.swift +++ b/Package.swift @@ -10,12 +10,11 @@ let package = Package( .watchOS(.v8), ], products: [ - .library(name: "JWTKit", targets: ["JWTKit"]), + .library(name: "JWTKit", targets: ["JWTKit"]) ], dependencies: [ - .package(url: "https://github.com/apple/swift-crypto.git", from: "3.6.1"), + .package(url: "https://github.com/apple/swift-crypto.git", from: "3.8.0"), .package(url: "https://github.com/apple/swift-certificates.git", from: "1.2.0"), - .package(url: "https://github.com/attaswift/BigInt.git", from: "5.3.0"), .package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"), ], targets: [ @@ -25,18 +24,16 @@ let package = Package( .product(name: "Crypto", package: "swift-crypto"), .product(name: "_CryptoExtras", package: "swift-crypto"), .product(name: "X509", package: "swift-certificates"), - .product(name: "BigInt", package: "BigInt"), .product(name: "Logging", package: "swift-log"), ] ), .testTarget( name: "JWTKitTests", dependencies: [ - "JWTKit", + "JWTKit" ], resources: [ - .copy("TestVectors"), - .copy("TestCertificates"), + .copy("TestCertificates") ] ), ], diff --git a/Package@swift-5.10.swift b/Package@swift-5.10.swift index 71ada703..edb816e6 100644 --- a/Package@swift-5.10.swift +++ b/Package@swift-5.10.swift @@ -10,12 +10,11 @@ let package = Package( .watchOS(.v8), ], products: [ - .library(name: "JWTKit", targets: ["JWTKit"]), + .library(name: "JWTKit", targets: ["JWTKit"]) ], dependencies: [ - .package(url: "https://github.com/apple/swift-crypto.git", from: "3.6.1"), + .package(url: "https://github.com/apple/swift-crypto.git", from: "3.8.0"), .package(url: "https://github.com/apple/swift-certificates.git", from: "1.2.0"), - .package(url: "https://github.com/attaswift/BigInt.git", from: "5.3.0"), .package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"), ], targets: [ @@ -25,21 +24,19 @@ let package = Package( .product(name: "Crypto", package: "swift-crypto"), .product(name: "_CryptoExtras", package: "swift-crypto"), .product(name: "X509", package: "swift-certificates"), - .product(name: "BigInt", package: "BigInt"), .product(name: "Logging", package: "swift-log"), ], swiftSettings: [ - .enableExperimentalFeature("StrictConcurrency"), + .enableExperimentalFeature("StrictConcurrency") ] ), .testTarget( name: "JWTKitTests", dependencies: [ - "JWTKit", + "JWTKit" ], resources: [ - .copy("TestVectors"), - .copy("TestCertificates"), + .copy("TestCertificates") ], swiftSettings: [ .enableExperimentalFeature("StrictConcurrency"), diff --git a/Sources/JWTKit/ECDSA/ECDSA.swift b/Sources/JWTKit/ECDSA/ECDSA.swift index 63d0530f..d98b17bc 100644 --- a/Sources/JWTKit/ECDSA/ECDSA.swift +++ b/Sources/JWTKit/ECDSA/ECDSA.swift @@ -1,6 +1,5 @@ import Crypto import Foundation -import SwiftASN1 import X509 public enum ECDSA: Sendable {} @@ -21,8 +20,8 @@ public extension ECDSA { public var parameters: ECDSAParameters? { // 0x04 || x || y - let x = backing.x963Representation[Curve.byteRanges.x].base64EncodedString() - let y = backing.x963Representation[Curve.byteRanges.y].base64EncodedString() + let x = self.backing.x963Representation[Curve.byteRanges.x].base64EncodedString() + let y = self.backing.x963Representation[Curve.byteRanges.y].base64EncodedString() return (x, y) } @@ -32,7 +31,7 @@ public extension ECDSA { /// /// - Returns: A PEM encoded string representation of the key. public var pemRepresentation: String { - backing.pemRepresentation + self.backing.pemRepresentation } /// Creates an ``ECDSA.PublicKey`` instance from SwiftCrypto PublicKey. @@ -53,7 +52,7 @@ public extension ECDSA { guard let publicKey = PublicKey(certificate.publicKey) else { throw ECDSAError.generateKeyFailure } - backing = publicKey + self.backing = publicKey } /// Creates an ``ECDSA.PublicKey`` instance from a PEM encoded certificate data. @@ -71,7 +70,7 @@ public extension ECDSA { /// - Throws: If there is a problem parsing the public key. /// - Returns: A new ``ECDSA.PublicKey`` instance with the public key from the certificate. public init(pem string: String) throws { - backing = try PublicKey(pemRepresentation: string) + self.backing = try PublicKey(pemRepresentation: string) } /// Creates an ``ECDSA.PublicKey`` instance from a PEM encoded public key data. @@ -101,7 +100,7 @@ public extension ECDSA { else { throw JWTError.generic(identifier: "ecCoordinates", reason: "Unable to interpret x or y as base64 encoded data") } - backing = try PublicKey(x963Representation: [0x04] + x + y) + self.backing = try PublicKey(x963Representation: [0x04] + x + y) } init(backing: PublicKey) { @@ -122,20 +121,20 @@ public extension ECDSA { public private(set) var curve: ECDSACurve = Curve.curve public var parameters: ECDSAParameters? { - publicKey.parameters + self.publicKey.parameters } var backing: PrivateKey public var publicKey: PublicKey { - .init(backing: backing.publicKey) + .init(backing: self.backing.publicKey) } /// The current private key as a PEM encoded string. /// /// - Returns: A PEM encoded string representation of the key. public var pemRepresentation: String { - backing.pemRepresentation + self.backing.pemRepresentation } /// Creates an ``ECDSA.PrivateKey`` instance from SwiftCrypto PrivateKey. @@ -152,7 +151,7 @@ public extension ECDSA { /// - Throws: If there is a problem parsing the private key. /// - Returns: A new ``ECDSA.PrivateKey`` instance with the private key. public init(pem string: String) throws { - backing = try PrivateKey(pemRepresentation: string) + self.backing = try PrivateKey(pemRepresentation: string) } /// Creates an ``ECDSA.PrivateKey`` instance from a PEM encoded private key data. @@ -181,14 +180,14 @@ public extension ECDSA { throw JWTError.generic(identifier: "ECDSAKey Creation", reason: "Unable to interpret private key data as base64URL") } - backing = try PrivateKey(rawRepresentation: [UInt8](keyData)) + self.backing = try PrivateKey(rawRepresentation: [UInt8](keyData)) } /// Generates a new ECDSA key. /// /// - Returns: A new ``ECDSA.PrivateKey`` instance with the generated key. public init() { - backing = PrivateKey() + self.backing = PrivateKey() } public static func == (lhs: Self, rhs: Self) -> Bool { diff --git a/Sources/JWTKit/ECDSA/ECDSAKeyTypes.swift b/Sources/JWTKit/ECDSA/ECDSAKeyTypes.swift index 7e6bab9a..dec81f86 100644 --- a/Sources/JWTKit/ECDSA/ECDSAKeyTypes.swift +++ b/Sources/JWTKit/ECDSA/ECDSAKeyTypes.swift @@ -1,6 +1,5 @@ import Crypto import Foundation -import SwiftASN1 import X509 /// A typealias representing the parameters of an ECDSA (Elliptic Curve Digital Signature Algorithm) key. diff --git a/Sources/JWTKit/JWK/JWK.swift b/Sources/JWTKit/JWK/JWK.swift index 032f8af8..6ec1b5c2 100644 --- a/Sources/JWTKit/JWK/JWK.swift +++ b/Sources/JWTKit/JWK/JWK.swift @@ -9,7 +9,7 @@ public struct JWK: Codable, Sendable { let backing: Backing public var rawValue: String { - switch backing { + switch self.backing { case let .ecdsa(ecdsaCurve): ecdsaCurve.rawValue case let .eddsa(eddsaCurve): @@ -54,7 +54,7 @@ public struct JWK: Codable, Sendable { } public func encode(to encoder: any Encoder) throws { - switch backing { + switch self.backing { case let .ecdsa(ecdsaCurve): try ecdsaCurve.encode(to: encoder) case let .eddsa(eddsaCurve): @@ -70,7 +70,7 @@ public struct JWK: Codable, Sendable { let backing: Backing public var rawValue: String { - backing.rawValue + self.backing.rawValue } /// RSA @@ -119,7 +119,7 @@ public struct JWK: Codable, Sendable { let backing: Backing public var rawValue: String { - backing.rawValue + self.backing.rawValue } /// RSA with SHA256 @@ -207,6 +207,12 @@ public struct JWK: Codable, Sendable { /// `d` Private exponent. public var privateExponent: String? + /// `p` First prime factor. + public var prime1: String? + + /// `q` Second prime factor. + public var prime2: String? + // ECDSA keys public var x: String? @@ -221,6 +227,8 @@ public struct JWK: Codable, Sendable { case modulus = "n" case exponent = "e" case privateExponent = "d" + case prime1 = "p" + case prime2 = "q" case curve = "crv" case x case y @@ -243,7 +251,9 @@ public struct JWK: Codable, Sendable { keyIdentifier: identifier, modulus: modulus, exponent: exponent, - privateExponent: privateExponent + privateExponent: privateExponent, + prime1: nil, + prime2: nil ) } @@ -291,6 +301,8 @@ public struct JWK: Codable, Sendable { modulus: String? = nil, exponent: String? = nil, privateExponent: String? = nil, + prime1: String? = nil, + prime2: String? = nil, x: String? = nil, y: String? = nil, curve: Curve? = nil @@ -301,6 +313,8 @@ public struct JWK: Codable, Sendable { self.modulus = modulus self.exponent = exponent self.privateExponent = privateExponent + self.prime1 = prime1 + self.prime2 = prime2 self.x = x self.y = y self.curve = curve diff --git a/Sources/JWTKit/JWK/JWKSigner.swift b/Sources/JWTKit/JWK/JWKSigner.swift index 09e080e0..937b825e 100644 --- a/Sources/JWTKit/JWK/JWKSigner.swift +++ b/Sources/JWTKit/JWK/JWKSigner.swift @@ -41,11 +41,24 @@ extension JWK { throw JWTError.invalidJWK(reason: "Missing RSA primitives") } - let rsaKey: RSAKey - if let privateExponent = self.privateExponent { - rsaKey = try Insecure.RSA.PrivateKey(modulus: modulus, exponent: exponent, privateExponent: privateExponent) + let rsaKey: RSAKey = if let privateExponent = self.privateExponent { + if let prime1, let prime2 { + try Insecure.RSA.PrivateKey( + modulus: modulus, + exponent: exponent, + privateExponent: privateExponent, + prime1: prime1, + prime2: prime2 + ) + } else { + try Insecure.RSA.PrivateKey( + modulus: modulus, + exponent: exponent, + privateExponent: privateExponent + ) + } } else { - rsaKey = try Insecure.RSA.PublicKey(modulus: modulus, exponent: exponent) + try Insecure.RSA.PublicKey(modulus: modulus, exponent: exponent) } let algorithm = alg ?? self.algorithm diff --git a/Sources/JWTKit/RSA/PrimeGenerator.swift b/Sources/JWTKit/RSA/PrimeGenerator.swift deleted file mode 100644 index 9e8790e6..00000000 --- a/Sources/JWTKit/RSA/PrimeGenerator.swift +++ /dev/null @@ -1,58 +0,0 @@ -import BigInt - -struct PrimeGenerator { - /// The following algorithm recovers the prime factors of a modulus, given the public and private exponents. - /// The algorithm is based on Fact 1 in [Boneh 1999]. - static func calculatePrimeFactors( - n: BigUInt, e: BigUInt, d: BigUInt - ) throws -> (p: BigUInt, q: BigUInt) { - let k = (d * e) - 1 - - guard k & 1 == 0 else { - throw RSAError.keyInitializationFailure - } - - let t = k.trailingZeroBitCount, r = k >> t - - var y: BigUInt = 0 - var i = 1 - - // If the prime factors are not revealed after 100 iterations, - // then the probability is overwhelming that the modulus is not the product of two prime factors, - // or that the public and private exponents are not consistent with each other. - // var randomGenerator = generator - while i <= 100 { - let g = BigUInt.randomInteger(lessThan: n - 1) - y = g.power(r, modulus: n) - - guard y != 1, y != n - 1 else { - continue - } - - var j = 1 - var x: BigUInt - - while j <= t &- 1 { - x = y.power(2, modulus: n) - - guard x != 1, x != n - 1 else { - break - } - - y = x - j &+= 1 - } - - x = y.power(2, modulus: n) - if x == 1 { - let p = (y - 1).greatestCommonDivisor(with: n) - let q = n / p - - return (p, q) - } - i &+= 1 - } - - throw RSAError.keyInitializationFailure - } -} diff --git a/Sources/JWTKit/RSA/RSA+KeyCalculation.swift b/Sources/JWTKit/RSA/RSA+KeyCalculation.swift deleted file mode 100644 index 9b8f6a3c..00000000 --- a/Sources/JWTKit/RSA/RSA+KeyCalculation.swift +++ /dev/null @@ -1,57 +0,0 @@ -import BigInt -import Foundation -import SwiftASN1 - -extension Insecure.RSA { - /// Creates a new private key using modulus, exponent and private exponent. - static func calculatePrivateDER(n: Data, e: Data, d: Data) throws -> DERSerializable? { - let n = BigUInt(n) - let e = BigUInt(e) - let d = BigUInt(d) - - // https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdf - - let (p, q) = try PrimeGenerator.calculatePrimeFactors(n: n, e: e, d: d) - - // https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Using_the_Chinese_remainder_algorithm - - let dp = d % (p - 1) - let dq = d % (q - 1) - - guard let qInv = q.inverse(p) else { - return nil - } - - let key = Insecure.RSA.PrivateKey.ASN1( - modulus: ArraySlice(n.byteArray), - publicExponent: ArraySlice(e.byteArray), - privateExponent: ArraySlice(d.byteArray), - prime1: ArraySlice(p.byteArray), - prime2: ArraySlice(q.byteArray), - exponent1: ArraySlice(dp.byteArray), - exponent2: ArraySlice(dq.byteArray), - coefficient: ArraySlice(qInv.byteArray) - ) - - return key - } - - static func calculateDER(n: Data, e: Data) throws -> DERSerializable { - let n = BigUInt(n) - let e = BigUInt(e) - - let key = Insecure.RSA.PublicKey.ASN1( - modulus: ArraySlice(n.byteArray), - publicExponent: ArraySlice(e.byteArray) - ) - - return key - } -} - -extension BigUInt { - var byteArray: [UInt8] { - // Remove any leading zero bytes (from the MSB side) - Array(serialize().drop(while: { $0 == 0 })) - } -} diff --git a/Sources/JWTKit/RSA/RSA.swift b/Sources/JWTKit/RSA/RSA.swift index d1e54a7c..9865ca25 100644 --- a/Sources/JWTKit/RSA/RSA.swift +++ b/Sources/JWTKit/RSA/RSA.swift @@ -1,7 +1,6 @@ import _CryptoExtras import Crypto import Foundation -import SwiftASN1 import X509 public extension Insecure { @@ -24,14 +23,14 @@ public extension Insecure.RSA { /// /// - Returns: A PEM encoded string representation of the key. public var pemRepresentation: String { - backing.pemRepresentation + self.backing.pemRepresentation } /// Exports the current public key as a DER encoded data. /// /// - Returns: A DER encoded data representation of the key. public var derRepresentation: Data { - backing.derRepresentation + self.backing.derRepresentation } private let backing: _RSA.Signing.PublicKey @@ -156,17 +155,18 @@ public extension Insecure.RSA { throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url exponent") } - var serializer = DER.Serializer() - - let publicKeyDER = try Insecure.RSA.calculateDER(n: n, e: e) - try publicKeyDER.serialize(into: &serializer) - let publicKey = try _RSA.Signing.PublicKey(derRepresentation: serializer.serializedBytes) - try self.init(backing: publicKey) + let key = try _RSA.Signing.PublicKey(n: n, e: e) + try self.init(backing: key) } func isValidSignature(_ signature: _RSA.Signing.RSASignature, for digest: D, padding: _RSA.Signing.Padding) -> Bool { self.backing.isValidSignature(signature, for: digest, padding: padding) } + + public func getKeyPrimitives() throws -> (modulus: Data, publicExponent: Data) { + let primitives = try self.backing.getKeyPrimitives() + return (modulus: primitives.modulus, publicExponent: primitives.publicExponent) + } public static func == (lhs: Self, rhs: Self) -> Bool { lhs.derRepresentation == rhs.derRepresentation @@ -185,14 +185,14 @@ public extension Insecure.RSA { /// - Throws: If the key is not a private key. /// - Returns: A PEM encoded string representation of the key. public var pemRepresentation: String { - backing.pemRepresentation + self.backing.pemRepresentation } /// Exports the current private key as a DER encoded data. /// /// - Returns: A DER encoded data representation of the key. public var derRepresentation: Data { - backing.derRepresentation + self.backing.derRepresentation } private let backing: _RSA.Signing.PrivateKey @@ -287,14 +287,39 @@ public extension Insecure.RSA { throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url private exponent") } - var serializer = DER.Serializer() + let key = try _RSA.Signing.PrivateKey._createFromNumbers(n: n, e: e, d: d) + try self.init(backing: key) + } - guard let privateKeyDER = try Insecure.RSA.calculatePrivateDER(n: n, e: e, d: d) else { - throw RSAError.keyInitializationFailure + public init( + modulus: String, + exponent: String, + privateExponent: String, + prime1: String, + prime2: String + ) throws { + guard let n = modulus.base64URLDecodedData() else { + throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url modulus") + } + + guard let e = exponent.base64URLDecodedData() else { + throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url exponent") + } + + guard let d = privateExponent.base64URLDecodedData() else { + throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url private exponent") + } + + guard let p = prime1.base64URLDecodedData() else { + throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url p") } - try privateKeyDER.serialize(into: &serializer) - let privateKey = try _RSA.Signing.PrivateKey(derRepresentation: serializer.serializedBytes) - try self.init(backing: privateKey) + + guard let q = prime2.base64URLDecodedData() else { + throw JWTError.generic(identifier: "RSAKey", reason: "Unable to decode base64url q") + } + + let key = try _RSA.Signing.PrivateKey(n: n, e: e, d: d, p: p, q: q) + try self.init(backing: key) } func signature(for digest: D, padding: _RSA.Signing.Padding) throws -> _RSA.Signing.RSASignature { diff --git a/Sources/JWTKit/RSA/RSAPrivateKey+ASN1.swift b/Sources/JWTKit/RSA/RSAPrivateKey+ASN1.swift deleted file mode 100644 index db00ca47..00000000 --- a/Sources/JWTKit/RSA/RSAPrivateKey+ASN1.swift +++ /dev/null @@ -1,120 +0,0 @@ -import Foundation -import SwiftASN1 - -extension Insecure.RSA.PrivateKey { - /// From [RFC 8017 § A.1.2](https://www.rfc-editor.org/rfc/rfc8017#appendix-A.1.2): - /// - /// ``` - /// RSAPrivateKey ::= SEQUENCE { - /// version Version, - /// modulus INTEGER, -- n - /// publicExponent INTEGER, -- e - /// privateExponent INTEGER, -- d - /// prime1 INTEGER, -- p - /// prime2 INTEGER, -- q - /// exponent1 INTEGER, -- d mod (p-1) - /// exponent2 INTEGER, -- d mod (q-1) - /// coefficient INTEGER, -- (inverse of q) mod p - /// otherPrimeInfos OtherPrimeInfos OPTIONAL - /// } - /// ``` - struct ASN1: DERSerializable { - let version: UInt8 - let modulus: ArraySlice - let publicExponent: ArraySlice - let privateExponent: ArraySlice - let prime1: ArraySlice - let prime2: ArraySlice - let exponent1: ArraySlice - let exponent2: ArraySlice - let coefficient: ArraySlice - - init( - version: UInt8 = 0, - modulus: ArraySlice, - publicExponent: ArraySlice, - privateExponent: ArraySlice, - prime1: ArraySlice, - prime2: ArraySlice, - exponent1: ArraySlice, - exponent2: ArraySlice, - coefficient: ArraySlice - ) { - self.version = version - self.modulus = modulus - self.publicExponent = publicExponent - self.privateExponent = privateExponent - self.prime1 = prime1 - self.prime2 = prime2 - self.exponent1 = exponent1 - self.exponent2 = exponent2 - self.coefficient = coefficient - } - } - - /// Retrieves the RSA private key primitives. - /// - /// This function extracts the modulus, public exponent, and private exponent from an RSA private key. - /// - /// - Returns: A tuple containing the modulus, public exponent, and private exponent as Base64 URL-encoded strings. - /// - Throws: ``JWTError`` if the key is not a private RSA key or if there is an issue parsing the key. - public func getKeyPrimitives() throws -> (modulus: String, exponent: String, privateExponent: String) { - let parsed = try DER.parse(Array(self.derRepresentation)) - let rsaPrivateKey = try ASN1(derEncoded: parsed) - - let modulus = String(decoding: Data(rsaPrivateKey.modulus).base64URLEncodedBytes(), as: UTF8.self) - let publicExponent = String(decoding: Data(rsaPrivateKey.publicExponent).base64URLEncodedBytes(), as: UTF8.self) - let privateExponent = String(decoding: Data(rsaPrivateKey.privateExponent).base64URLEncodedBytes(), as: UTF8.self) - - return (modulus, publicExponent, privateExponent) - } -} - -extension Insecure.RSA.PrivateKey.ASN1: DERImplicitlyTaggable { - static var defaultIdentifier: ASN1Identifier { - .sequence - } - - init(derEncoded: ASN1Node, withIdentifier identifier: ASN1Identifier) throws { - self = try DER.sequence(derEncoded, identifier: identifier) { nodes in - let version = try UInt8(derEncoded: &nodes) - guard version == 0 else { - throw ASN1Error.invalidASN1Object(reason: "Invalid version") - } - - let modulus = try ArraySlice(derEncoded: &nodes) - let publicExponent = try ArraySlice(derEncoded: &nodes) - let privateExponent = try ArraySlice(derEncoded: &nodes) - let prime1 = try ArraySlice(derEncoded: &nodes) - let prime2 = try ArraySlice(derEncoded: &nodes) - let exponent1 = try ArraySlice(derEncoded: &nodes) - let exponent2 = try ArraySlice(derEncoded: &nodes) - let coefficient = try ArraySlice(derEncoded: &nodes) - - return .init( - modulus: modulus, - publicExponent: publicExponent, - privateExponent: privateExponent, - prime1: prime1, - prime2: prime2, - exponent1: exponent1, - exponent2: exponent2, - coefficient: coefficient - ) - } - } - - func serialize(into coder: inout DER.Serializer, withIdentifier identifier: SwiftASN1.ASN1Identifier) throws { - try coder.appendConstructedNode(identifier: identifier) { coder in - try coder.serialize(self.version) - try coder.serialize(self.modulus) - try coder.serialize(self.publicExponent) - try coder.serialize(self.privateExponent) - try coder.serialize(self.prime1) - try coder.serialize(self.prime2) - try coder.serialize(self.exponent1) - try coder.serialize(self.exponent2) - try coder.serialize(self.coefficient) - } - } -} diff --git a/Sources/JWTKit/RSA/RSAPublicKey+ASN1.swift b/Sources/JWTKit/RSA/RSAPublicKey+ASN1.swift deleted file mode 100644 index 3d8774b7..00000000 --- a/Sources/JWTKit/RSA/RSAPublicKey+ASN1.swift +++ /dev/null @@ -1,62 +0,0 @@ -import Foundation -import SwiftASN1 - -extension Insecure.RSA.PublicKey { - /// From [RFC 8017 § A.1.2](https://www.rfc-editor.org/rfc/rfc8017#appendix-A.1.1): - /// - /// ``` - /// RSAPublicKey ::= SEQUENCE { - /// modulus INTEGER, -- n - /// publicExponent INTEGER -- e - /// } - /// ``` - struct ASN1: DERSerializable { - let modulus: ArraySlice - let publicExponent: ArraySlice - - init(modulus: ArraySlice, publicExponent: ArraySlice) { - self.modulus = modulus - self.publicExponent = publicExponent - } - } - - /// Retrieves the RSA public key primitives. - /// - /// This function extracts the modulus and public exponent from an RSA private key. - /// - /// - Returns: A tuple containing the modulus and public exponent as Base64 URL-encoded strings. - /// - Throws: If there is an issue parsing the key. - public func getKeyPrimitives() throws -> (modulus: String, exponent: String) { - let parsed = try DER.parse(Array(self.derRepresentation)) - let spki = try SubjectPublicKeyInfo(derEncoded: parsed) - let parsedKey = try DER.parse(spki.key.bytes) - let rsaPublicKey = try ASN1(derEncoded: parsedKey) - - let modulus = String(decoding: Data(rsaPublicKey.modulus).base64URLEncodedBytes(), as: UTF8.self) - let exponent = String(decoding: Data(rsaPublicKey.publicExponent).base64URLEncodedBytes(), as: UTF8.self) - - return (modulus, exponent) - } -} - -extension Insecure.RSA.PublicKey.ASN1: DERImplicitlyTaggable { - static var defaultIdentifier: SwiftASN1.ASN1Identifier { - .sequence - } - - init(derEncoded rootNode: SwiftASN1.ASN1Node, withIdentifier identifier: SwiftASN1.ASN1Identifier) throws { - self = try DER.sequence(rootNode, identifier: identifier) { nodes in - let modulus = try ArraySlice(derEncoded: &nodes) - let publicExponent = try ArraySlice(derEncoded: &nodes) - - return .init(modulus: modulus, publicExponent: publicExponent) - } - } - - func serialize(into coder: inout SwiftASN1.DER.Serializer, withIdentifier identifier: SwiftASN1.ASN1Identifier) throws { - try coder.appendConstructedNode(identifier: identifier) { coder in - try coder.serialize(self.modulus) - try coder.serialize(self.publicExponent) - } - } -} diff --git a/Sources/JWTKit/RSA/SubjectPublicKeyInfo.swift b/Sources/JWTKit/RSA/SubjectPublicKeyInfo.swift deleted file mode 100644 index 36f9ca30..00000000 --- a/Sources/JWTKit/RSA/SubjectPublicKeyInfo.swift +++ /dev/null @@ -1,106 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftASN1 open source project -// -// Copyright (c) 2019-2020 Apple Inc. and the SwiftASN1 project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftASN1 project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// -import SwiftASN1 - -struct SubjectPublicKeyInfo: DERImplicitlyTaggable, Hashable { - static var defaultIdentifier: ASN1Identifier { - .sequence - } - - var algorithmIdentifier: RFC5480AlgorithmIdentifier - - var key: ASN1BitString - - init(derEncoded rootNode: ASN1Node, withIdentifier identifier: ASN1Identifier) throws { - // The SPKI block looks like this: - // - // SubjectPublicKeyInfo ::= SEQUENCE { - // algorithm AlgorithmIdentifier, - // subjectPublicKey BIT STRING - // } - self = try DER.sequence(rootNode, identifier: identifier) { nodes in - let algorithmIdentifier = try RFC5480AlgorithmIdentifier(derEncoded: &nodes) - let key = try ASN1BitString(derEncoded: &nodes) - - return SubjectPublicKeyInfo(algorithmIdentifier: algorithmIdentifier, key: key) - } - } - - private init(algorithmIdentifier: RFC5480AlgorithmIdentifier, key: ASN1BitString) { - self.algorithmIdentifier = algorithmIdentifier - self.key = key - } - - init(algorithmIdentifier: RFC5480AlgorithmIdentifier, key: [UInt8]) { - self.algorithmIdentifier = algorithmIdentifier - self.key = ASN1BitString(bytes: key[...]) - } - - func serialize(into coder: inout DER.Serializer, withIdentifier identifier: ASN1Identifier) throws { - try coder.appendConstructedNode(identifier: identifier) { coder in - try coder.serialize(self.algorithmIdentifier) - try coder.serialize(self.key) - } - } -} - -struct RFC5480AlgorithmIdentifier: DERImplicitlyTaggable, Hashable { - static var defaultIdentifier: ASN1Identifier { - .sequence - } - - var algorithm: ASN1ObjectIdentifier - - var parameters: ASN1Any? - - init(algorithm: ASN1ObjectIdentifier, parameters: ASN1Any? = nil) { - self.algorithm = algorithm - self.parameters = parameters - } - - init(derEncoded rootNode: ASN1Node, withIdentifier identifier: ASN1Identifier) throws { - self = try DER.sequence(rootNode, identifier: identifier) { nodes in - let algorithmOID = try ASN1ObjectIdentifier(derEncoded: &nodes) - - let parameters = nodes.next().map { ASN1Any(derEncoded: $0) } - - return .init(algorithm: algorithmOID, parameters: parameters) - } - } - - func serialize(into coder: inout DER.Serializer, withIdentifier identifier: ASN1Identifier) throws { - try coder.appendConstructedNode(identifier: identifier) { coder in - try coder.serialize(self.algorithm) - if let parameters = self.parameters { - try coder.serialize(parameters) - } - } - } -} - -// MARK: Algorithm Identifier Statics - -extension RFC5480AlgorithmIdentifier { - static let rsa256 = RFC5480AlgorithmIdentifier( - algorithm: .AlgorithmIdentifier.sha256WithRSAEncryption - ) - - static let rsa384 = RFC5480AlgorithmIdentifier( - algorithm: .AlgorithmIdentifier.sha384WithRSAEncryption - ) - - static let rsa512 = RFC5480AlgorithmIdentifier( - algorithm: .AlgorithmIdentifier.sha512WithRSAEncryption - ) -} diff --git a/Sources/JWTKit/Utilities/Base64URL.swift b/Sources/JWTKit/Utilities/Base64URL.swift index 64c4e5b2..2f57d1de 100644 --- a/Sources/JWTKit/Utilities/Base64URL.swift +++ b/Sources/JWTKit/Utilities/Base64URL.swift @@ -1,6 +1,6 @@ import Foundation -extension String { +package extension String { func base64URLDecodedData() -> Data? { var base64URL = replacingOccurrences(of: "-", with: "+") .replacingOccurrences(of: "_", with: "/") diff --git a/Tests/JWTKitTests/ECDSATests.swift b/Tests/JWTKitTests/ECDSATests.swift index a0710820..c49cf6b9 100644 --- a/Tests/JWTKitTests/ECDSATests.swift +++ b/Tests/JWTKitTests/ECDSATests.swift @@ -1,4 +1,3 @@ -import BigInt import Crypto import JWTKit import XCTest diff --git a/Tests/JWTKitTests/JWTKitTests.swift b/Tests/JWTKitTests/JWTKitTests.swift index 9a1d642e..5e201a0f 100644 --- a/Tests/JWTKitTests/JWTKitTests.swift +++ b/Tests/JWTKitTests/JWTKitTests.swift @@ -172,29 +172,22 @@ final class JWTKitTests: XCTestCase, @unchecked Sendable { func testJWKSigner() async throws { let privateKey = """ { - "kty": "RSA", - "d": "\(rsaPrivateExponent)", - "e": "AQAB", - "use": "sig", - "kid": "1234", - "alg": "RS256", - "n": "\(rsaModulus)" - } - """ - - let publicKey = """ - { - "kty": "RSA", - "e": "AQAB", - "use": "sig", - "kid": "1234", - "alg": "RS256", - "n": "\(rsaModulus)" + "alg" : "RS256", + "kty" : "RSA", + "kid" : "cc34c0a0-bd5a-4a3c-a50d-a2a7db7643df", + "use" : "sig", + "n" : "pjdss8ZaDfEH6K6U7GeW2nxDqR4IP049fk1fK0lndimbMMVBdPv_hSpm8T8EtBDxrUdi1OHZfMhUixGaut-3nQ4GG9nM249oxhCtxqqNvEXrmQRGqczyLxuh-fKn9Fg--hS9UpazHpfVAFnB5aCfXoNhPuI8oByyFKMKaOVgHNqP5NBEqabiLftZD3W_lsFCPGuzr4Vp0YS7zS2hDYScC2oOMu4rGU1LcMZf39p3153Cq7bS2Xh6Y-vw5pwzFYZdjQxDn8x8BG3fJ6j8TGLXQsbKH1218_HcUJRvMwdpbUQG5nvA2GXVqLqdwp054Lzk9_B_f1lVrmOKuHjTNHq48w", + "e" : "AQAB", + "d" : "ksDmucdMJXkFGZxiomNHnroOZxe8AmDLDGO1vhs-POa5PZM7mtUPonxwjVmthmpbZzla-kg55OFfO7YcXhg-Hm2OWTKwm73_rLh3JavaHjvBqsVKuorX3V3RYkSro6HyYIzFJ1Ek7sLxbjDRcDOj4ievSX0oN9l-JZhaDYlPlci5uJsoqro_YrE0PRRWVhtGynd-_aWgQv1YzkfZuMD-hJtDi1Im2humOWxA4eZrFs9eG-whXcOvaSwO4sSGbS99ecQZHM2TcdXeAs1PvjVgQ_dKnZlGN3lTWoWfQP55Z7Tgt8Nf1q4ZAKd-NlMe-7iqCFfsnFwXjSiaOa2CRGZn-Q", + "p" : "4A5nU4ahEww7B65yuzmGeCUUi8ikWzv1C81pSyUKvKzu8CX41hp9J6oRaLGesKImYiuVQK47FhZ--wwfpRwHvSxtNU9qXb8ewo-BvadyO1eVrIk4tNV543QlSe7pQAoJGkxCia5rfznAE3InKF4JvIlchyqs0RQ8wx7lULqwnn0", + "q" : "ven83GM6SfrmO-TBHbjTk6JhP_3CMsIvmSdo4KrbQNvp4vHO3w1_0zJ3URkmkYGhz2tgPlfd7v1l2I6QkIh4Bumdj6FyFZEBpxjE4MpfdNVcNINvVj87cLyTRmIcaGxmfylY7QErP8GFA-k4UoH_eQmGKGK44TRzYj5hZYGWIC8", + "dp" : "lmmU_AG5SGxBhJqb8wxfNXDPJjf__i92BgJT2Vp4pskBbr5PGoyV0HbfUQVMnw977RONEurkR6O6gxZUeCclGt4kQlGZ-m0_XSWx13v9t9DIbheAtgVJ2mQyVDvK4m7aRYlEceFh0PsX8vYDS5o1txgPwb3oXkPTtrmbAGMUBpE", + "dq" : "mxRTU3QDyR2EnCv0Nl0TCF90oliJGAHR9HJmBe__EjuCBbwHfcT8OG3hWOv8vpzokQPRl5cQt3NckzX3fs6xlJN4Ai2Hh2zduKFVQ2p-AF2p6Yfahscjtq-GY9cB85NxLy2IXCC0PF--Sq9LOrTE9QV988SJy_yUrAjcZ5MmECk", + "qi" : "ldHXIrEmMZVaNwGzDF9WG8sHj2mOZmQpw9yrjLK9hAsmsNr5LTyqWAqJIYZSwPTYWhY4nu2O0EY9G9uYiqewXfCKw_UngrJt8Xwfq1Zruz0YY869zPN4GiE9-9rzdZB33RBw8kIOquY3MK74FMwCihYx_LiU2YTHkaoJ3ncvtvg" } """ let keyCollection = try await JWTKeyCollection() - .add(jwk: .init(json: publicKey)) .add(jwk: .init(json: privateKey)) let payload = TestPayload( @@ -205,12 +198,9 @@ final class JWTKitTests: XCTestCase, @unchecked Sendable { ) let data = try await keyCollection.sign(payload, kid: "1234") - // test private signer decoding - try await XCTAssertEqualAsync( - await keyCollection.verify(data, as: TestPayload.self), payload) - // test public signer decoding try await XCTAssertEqualAsync( - await keyCollection.verify(data, as: TestPayload.self), payload) + await keyCollection.verify(data, as: TestPayload.self), payload + ) } func testJWKS() async throws { diff --git a/Tests/JWTKitTests/RSATests.swift b/Tests/JWTKitTests/RSATests.swift index c4d0e41f..b4e77211 100644 --- a/Tests/JWTKitTests/RSATests.swift +++ b/Tests/JWTKitTests/RSATests.swift @@ -1,56 +1,61 @@ -import BigInt import JWTKit import XCTest import _CryptoExtras final class RSATests: XCTestCase, @unchecked Sendable { - func testCalculatePrimeFactors() throws { - try wycheproof(fileName: "rsa_oaep_2048_sha1_mgf1sha1_test", testFunction: testPrimeFactors) - try wycheproof( - fileName: "rsa_oaep_2048_sha224_mgf1sha1_test", testFunction: testPrimeFactors) - try wycheproof( - fileName: "rsa_oaep_2048_sha256_mgf1sha256_test", testFunction: testPrimeFactors) - } - func testRSADocs() async throws { await XCTAssertNoThrowAsync( try await JWTKeyCollection().add( - rsa: Insecure.RSA.PublicKey(pem: publicKey), digestAlgorithm: .sha256)) + rsa: Insecure.RSA.PublicKey(pem: self.publicKey), digestAlgorithm: .sha256 + ) + ) } func testPrivateKeyInitialization() throws { XCTAssertNoThrow( try Insecure.RSA.PrivateKey( - modulus: modulus, exponent: publicExponent, privateExponent: privateExponent)) + modulus: self.modulus, exponent: self.publicExponent, + privateExponent: self.privateExponent + ) + ) } func testPublicKeyInitialization() throws { - XCTAssertNoThrow(try Insecure.RSA.PublicKey(modulus: modulus, exponent: publicExponent)) + XCTAssertNoThrow( + try Insecure.RSA.PublicKey( + modulus: self.modulus, exponent: self.publicExponent + ) + ) + } + + func testPrivateKeyInitializationWithPrimes() throws { + XCTAssertNoThrow( + try Insecure.RSA.PrivateKey( + modulus: self.modulus, exponent: self.publicExponent, + privateExponent: self.privateExponent, prime1: self.prime1, prime2: self.prime2 + ) + ) } func testPublicKeyInitializationFromCryptoKey() throws { - let cryptoKey = try _RSA.Signing.PublicKey(pemRepresentation: publicKey) + let cryptoKey = try _RSA.Signing.PublicKey(pemRepresentation: self.publicKey) let jwtKey = try Insecure.RSA.PublicKey(backing: cryptoKey) - let otherKey = try Insecure.RSA.PublicKey(pem: publicKey) + let otherKey = try Insecure.RSA.PublicKey(pem: self.publicKey) XCTAssertEqual(jwtKey, otherKey) } func testPrivateKeyInitializationFromCryptoKey() throws { - let cryptoKey = try _RSA.Signing.PrivateKey(pemRepresentation: privateKey) + let cryptoKey = try _RSA.Signing.PrivateKey(pemRepresentation: self.privateKey) let jwtKey = try Insecure.RSA.PrivateKey(backing: cryptoKey) - let otherKey = try Insecure.RSA.PrivateKey(pem: privateKey) + let otherKey = try Insecure.RSA.PrivateKey(pem: self.privateKey) XCTAssertEqual(jwtKey, otherKey) } func testSigning() async throws { - let keyCollection = try await JWTKeyCollection() - .add( - rsa: Insecure.RSA.PrivateKey(pem: privateKey), digestAlgorithm: .sha256, - kid: "private" - ) - .add( - rsa: Insecure.RSA.PublicKey(pem: publicKey), digestAlgorithm: .sha256, kid: "public" - ) + let keyCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PrivateKey(pem: self.privateKey), digestAlgorithm: .sha256, + kid: "private" + ) let payload = TestPayload( sub: "vapor", @@ -61,14 +66,15 @@ final class RSATests: XCTestCase, @unchecked Sendable { let privateSigned = try await keyCollection.sign(payload, kid: "private") try await XCTAssertEqualAsync( - await keyCollection.verify(privateSigned, as: TestPayload.self), payload) + await keyCollection.verify(privateSigned, as: TestPayload.self), payload + ) } func testSigningWithPublic() async throws { - let keyCollection = try await JWTKeyCollection() - .add( - rsa: Insecure.RSA.PublicKey(pem: publicKey), digestAlgorithm: .sha256, kid: "public" - ) + let keyCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PublicKey(pem: self.publicKey), digestAlgorithm: .sha256, + kid: "public" + ) let payload = TestPayload( sub: "vapor", @@ -86,16 +92,14 @@ final class RSATests: XCTestCase, @unchecked Sendable { func testSigningWithRawBuiltPrivateKey() async throws { let privateKey = try Insecure.RSA.PrivateKey( - modulus: modulus, exponent: publicExponent, privateExponent: privateExponent) + modulus: self.modulus, exponent: self.publicExponent, + privateExponent: self.privateExponent + ) - let keyCollection = try await JWTKeyCollection() - .add( - rsa: Insecure.RSA.PrivateKey(pem: privateKey.pemRepresentation), - digestAlgorithm: .sha256, kid: "private" - ) - .add( - rsa: Insecure.RSA.PublicKey(pem: privateKey.publicKey.pemRepresentation), - digestAlgorithm: .sha256, kid: "public") + let keyCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PrivateKey(pem: privateKey.pemRepresentation), + digestAlgorithm: .sha256, kid: "private" + ) let payload = TestPayload( sub: "vapor", @@ -104,52 +108,46 @@ final class RSATests: XCTestCase, @unchecked Sendable { exp: .init(value: .init(timeIntervalSince1970: 2_000_000_000)) ) - let privateSigned = try await keyCollection.sign(payload) - try await XCTAssertEqualAsync( - await keyCollection.verify(privateSigned, as: TestPayload.self), payload) + let signed = try await keyCollection.sign(payload) try await XCTAssertEqualAsync( - await keyCollection.verify(privateSigned, as: TestPayload.self), payload) - } - - func testGetPublicKeyPrimitives() async throws { - let publicKey = try Insecure.RSA.PublicKey(modulus: modulus, exponent: publicExponent) - let (keyModulus, exponent) = try publicKey.getKeyPrimitives() - XCTAssertEqual(keyModulus, modulus) - XCTAssertEqual(exponent, publicExponent) + await keyCollection.verify(signed, as: TestPayload.self), payload + ) } - func testGetPrivateKeyPrimitives() async throws { + func testSigningWithRawBuiltPrivateKeyWithPrimes() async throws { let privateKey = try Insecure.RSA.PrivateKey( - modulus: modulus, exponent: publicExponent, privateExponent: privateExponent) - let (keyModulus, exponent, keyPrivateExponent) = try privateKey.getKeyPrimitives() - XCTAssertEqual(keyModulus, modulus) - XCTAssertEqual(exponent, publicExponent) - XCTAssertEqual(keyPrivateExponent, privateExponent) + modulus: self.modulus, + exponent: self.publicExponent, + privateExponent: self.privateExponent, + prime1: self.prime1, + prime2: self.prime2 + ) + + let keyCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PrivateKey(pem: privateKey.pemRepresentation), + digestAlgorithm: .sha256, kid: "private" + ) + + let payload = TestPayload( + sub: "vapor", + name: "Foo", + admin: false, + exp: .init(value: .init(timeIntervalSince1970: 2_000_000_000)) + ) + + let signed = try await keyCollection.sign(payload) + try await XCTAssertEqualAsync( + await keyCollection.verify(signed, as: TestPayload.self), payload + ) } - func testGetPrivateKeyPrimitivesFromNonRawBuiltKey() async throws { - let privateKey = try Insecure.RSA.PrivateKey( - pem: """ - -----BEGIN RSA PRIVATE KEY----- - MIIEowIBAAKCAQEAgWu7yhI35FScdKARYboJoAm+T7yJfJ9JTvAok/RKOJYcL8oL\nIRSeLqQX83PPZiWdKTdXaiGWntpDu6vW7VAb+HWPF6tNYSLKDSmR3sEu2488ibWi - jZtNTCKOSb/1iAKAI5BJ80LTqyQtqaKzT0XUBtMsde8vX1nKI05UxujfTX3kqUtk\nZgLv1Yk1ZDpUoLOWUTtCm68zpjtBrPiN8bU2jqCGFyMyyXys31xFRzz4MyJ5tREH - kQCzx0g7AvW0ge/sBTPQ2U6NSkcZvQyDbfDv27cMUHij1Sjx16SY9a2naTuOgamj\ntUzyClPLVpchX+McNyS0tjdxWY/yRL9MYuw4AQIDAQABAoIBAC+M9Lc+0FhNGhrj - gN9mKgkp60mCnQUzxQyCwnXx6J83z+1jD4m8+I1sbvxczZPbOA4frjdpVdzRltdK\nQLJ6n3w/PS7WGp0Y2iHR5y1vzxaOXxC9spbSu6jAfYTtSXoKaSgn6HO/VuPna/uK - stTqdAd56Tj/g2lGJTWpnw5iG0Ft9lCnic3RiJ/v68qwU+4UFuv7hy0tlRTz5NKz\nZDzymWKDWqhpydHmhRRfnRcIk4VyKT8/vncUwC/MWH9u+a4xvAvZYemsDnyUiHVz - FbkCE1n+thNJkkD0dvttfW0oTCq4g2HGC209wSRIDpEQQRxrh6PUeUzdvfGp8Wal\ndbuY7VECgYEA+kVqK0URfwbZGEnO8JnagCunkOKgqAqv+I44/lmZwmj/Z9uvFXRo - 5TQNwpSNuYB9V5ujpoVgJaJ4BWUCnD/uwqNwlqcQydsXzB3u4GKI5jZrpCN8i7+s\nhP9UuV1pfU8+n3VuWkIhfrHEmSgn7+AhCkzETho2qPvfv7u8bxou4DUCgYEAhGIj - QyEZWORJI2FJ+APp146v/nndXwCGIbPCbp8rHFFL4dYQsgJI6tGQDMO9xcMoz0jt\n/lJTUu4hBIL7jm1S/bYez6JqlbjUhNpvSUp/M0SWlS36LLQqrc49IZ8H7AXjDiG5 - az6zVHMtz8CJY0/YT5CUjDszhN8u56vdAEBHyh0CgYEAwwhVNGMev18Wz1a1bcp3\n/GoIq1/w0wOBHrG2uIAa0uYAI2+Pgai2Fef60SfzShxXkW44mgxWYP27initEBbC - eevkUYLgEm4qnWa2QSaIiN7gA4mkBUPZrctMuyeQjZaztpBM7wmaEKF4E+K3PLft\nB5nLYRIMhqPCOiiTMAG3hgECgYAyI00BnqaP8R32JWGzaiAFgMgNFDCQS42BdCh+ - ZxAX0H5x0PZPxOfC742kF/pmzQxGvXNNr/ZY4VFl+Qm3Hpag+nne37+IZxEuI+Ck\nHG/iheaWJ2ypw66qVwL2GdoRPQWKk6E7Ces3X8wI8/3UvCfLspFgLwfLGhAUtBWm - g7HszQKBgEGa1OX9PQFrOojSizXK2jcalVJLiy01+cJZB1ZqIwFAYG9VTEOo3IrH\nhUGJzX0PZGGW8+r+S50ORYlJ7hl0xGZrcnAv4ftONtYN4GmB7t/QKheShWTX0Q+C - eGwWRyV8jo3G+nJDtGEb3MTHVXPK3hviJRXDHHGhw+sh+JdL49x4 - -----END RSA PRIVATE KEY----- - """) - let (keyModulus, exponent, keyPrivateExponent) = try privateKey.getKeyPrimitives() - XCTAssertEqual(keyModulus, modulus) - XCTAssertEqual(exponent, publicExponent) - XCTAssertEqual(keyPrivateExponent, privateExponent) + func testGetPublicKeyPrimitives() async throws { + let publicKey = try Insecure.RSA.PublicKey( + modulus: self.modulus, exponent: self.publicExponent + ) + let (modulus, exponent) = try publicKey.getKeyPrimitives() + XCTAssertEqual(modulus, self.modulus.base64URLDecodedData()) + XCTAssertEqual(exponent, self.publicExponent.base64URLDecodedData()) } func testRSACertificate() async throws { @@ -159,24 +157,28 @@ final class RSATests: XCTestCase, @unchecked Sendable { admin: true, exp: .init(value: .distantFuture) ) - let keyCollection = try await JWTKeyCollection() - .add( - rsa: Insecure.RSA.PrivateKey(pem: certPrivateKey), digestAlgorithm: .sha256, - kid: "private" - ) - .add( - rsa: Insecure.RSA.PublicKey(certificatePEM: cert), digestAlgorithm: .sha256, - kid: "cert") + let signerCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PrivateKey(pem: self.certPrivateKey), digestAlgorithm: .sha256, + kid: "private" + ) + + let jwt = try await signerCollection.sign(test, kid: "private") + + let verifierCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PublicKey(certificatePEM: self.cert), digestAlgorithm: .sha256, + kid: "cert" + ) - let jwt = try await keyCollection.sign(test, kid: "private") - let payload = try await keyCollection.verify(jwt, as: TestPayload.self) + let payload = try await verifierCollection.verify(jwt, as: TestPayload.self) XCTAssertEqual(payload, test) } func testKeySizeTooSmall() async throws { await XCTAssertThrowsErrorAsync( try await JWTKeyCollection().add( - rsa: Insecure.RSA.PrivateKey(pem: _512BytesKey), digestAlgorithm: .sha256)) + rsa: Insecure.RSA.PrivateKey(pem: self._512BytesKey), digestAlgorithm: .sha256 + ) + ) } func testRS256Verification() async throws { @@ -189,27 +191,23 @@ final class RSATests: XCTestCase, @unchecked Sendable { admin: true, exp: .init(value: .init(timeIntervalSince1970: 2_000_000_000)) ) - let keyCollection = try await JWTKeyCollection() - .add( - rsa: Insecure.RSA.PrivateKey(pem: privateKey2), digestAlgorithm: .sha256, - kid: "private" - ) - .add( - rsa: Insecure.RSA.PublicKey(pem: publicKey2), digestAlgorithm: .sha256, - kid: "public") + let keyCollection = try await JWTKeyCollection().add( + rsa: Insecure.RSA.PublicKey(pem: self.publicKey2), digestAlgorithm: .sha256, + kid: "public" + ) let payload = try await keyCollection.verify(token, as: TestPayload.self) XCTAssertEqual(payload, testPayload) } func testExportPublicKeyAsPEM() async throws { - let key = try Insecure.RSA.PublicKey(pem: publicKey) + let key = try Insecure.RSA.PublicKey(pem: self.publicKey) let key2 = try Insecure.RSA.PublicKey(pem: key.pemRepresentation) XCTAssertEqual(key, key2) } func testExportPrivateKeyAsPEM() async throws { - let key = try Insecure.RSA.PrivateKey(pem: privateKey) + let key = try Insecure.RSA.PrivateKey(pem: self.privateKey) let key2 = try Insecure.RSA.PrivateKey(pem: key.pemRepresentation) XCTAssertEqual(key, key2) } @@ -217,26 +215,37 @@ final class RSATests: XCTestCase, @unchecked Sendable { func testExportPublicKeyWhenKeyIsPrivate() async throws { let privateKey = try Insecure.RSA.PrivateKey(pem: privateKey) let publicKeyFromPrivate = try Insecure.RSA.PublicKey( - pem: privateKey.publicKey.pemRepresentation) + pem: privateKey.publicKey.pemRepresentation + ) let publicKey = try Insecure.RSA.PublicKey(pem: publicKey) XCTAssertEqual(publicKeyFromPrivate, publicKey) } func testExportKeyAsPEMWhenRawBuilt() async throws { let key = try Insecure.RSA.PrivateKey( - modulus: modulus, exponent: publicExponent, privateExponent: privateExponent) + modulus: self.modulus, exponent: self.publicExponent, + privateExponent: self.privateExponent + ) let key2 = try Insecure.RSA.PrivateKey(pem: key.pemRepresentation) XCTAssertEqual(key, key2) } let modulus = """ - gWu7yhI35FScdKARYboJoAm-T7yJfJ9JTvAok_RKOJYcL8oLIRSeLqQX83PPZiWdKTdXaiGWntpDu6vW7VAb-HWPF6tNYSLKDSmR3sEu2488ibWijZtNTCKOSb_1iAKAI5BJ80LTqyQtqaKzT0XUBtMsde8vX1nKI05UxujfTX3kqUtkZgLv1Yk1ZDpUoLOWUTtCm68zpjtBrPiN8bU2jqCGFyMyyXys31xFRzz4MyJ5tREHkQCzx0g7AvW0ge_sBTPQ2U6NSkcZvQyDbfDv27cMUHij1Sjx16SY9a2naTuOgamjtUzyClPLVpchX-McNyS0tjdxWY_yRL9MYuw4AQ + vTHHoCaR0tlYfvapRv94hUTMrdSymIrWIIZ5Kmv5bIYWtK0TMX0icLkB0PzR2IDLj1L7hzBKUljBGzjf6ujfZwru5-odDZ344A6AhH5B5Zie1ALUTnizD-8XtWcdOtv4aF5NwgRJns0YY-HVr_KKfPZurfMf7JI2wSCt0TRRUixkfJgypnLNZNMowcMiGD9GYdCb2mC43V8DKNpUIIIUJK_auxqAxdEnY6GwI4zYnQdCv8ULai_LcB2CQhj5gm9PeKI6K1qkKs5_F1N2-2y9srrSk7pYPU0xxrj5Ap5GsTaJJJhV9QV1bgDiJaakWhh2m9jSs6SsufHCPT5RiCVh5Q """ let publicExponent = "AQAB" let privateExponent = """ - L4z0tz7QWE0aGuOA32YqCSnrSYKdBTPFDILCdfHonzfP7WMPibz4jWxu_FzNk9s4Dh-uN2lV3NGW10pAsnqffD89LtYanRjaIdHnLW_PFo5fEL2yltK7qMB9hO1JegppKCfoc79W4-dr-4qy1Op0B3npOP-DaUYlNamfDmIbQW32UKeJzdGIn-_ryrBT7hQW6_uHLS2VFPPk0rNkPPKZYoNaqGnJ0eaFFF-dFwiThXIpPz--dxTAL8xYf275rjG8C9lh6awOfJSIdXMVuQITWf62E0mSQPR2-219bShMKriDYcYLbT3BJEgOkRBBHGuHo9R5TN298anxZqV1u5jtUQ + B0fVIMqbLfwDNc-UMBFAuBAvuDjJLqmZF-NU4lcJYC3Aze8jH_Jq0t-rvDkecjBypO9Skp8_HPAhbkTACTAw-KwpCW-u8okzvJuSQocBTi6TXiFFvkdSzLgst2RicZNpecq3P1Ie6yeFWsKkEINK5Qguti72-Yme5cu2JKjYwEq37c94_hNdD4CPY7XebgcXeb8dnqr40--WVIbyxSYl5uV6ZRx7vQGXyZwFezhgoyYMhkoRs88iukTeOjs_MRfmTr-akfYm67Pzwm0bC7gHU0aNS_apl7KDNfIO2MOE11WDYKmul1VmH6N0mEaxdOa_Mw5S0JlB9szX3lAEd5-buQ + """ + + let prime1 = """ + _j0jjTdqOFbZWS_UlhwXp_sPo51ELp3yLn7aEVxkjFy3ON-J6pLYN4VY0NnBzz2L_3QNN0OgFApqdSPpF2wpU7LBHX9EaRz4vsKzT7WcZJU1mDMZSIEYwDEYrnRF5w30Zs6YZxJg8F1QaM53fal-K6hHeUkFAM60_39izsqaFH8 + """ + + let prime2 = """ + voFK8mvzwnEVvHWV0NEqGvdxP-yod65ubYWIJe2j0ZJwR3T0Lhrhtn8XOejEWgR2OIBw-lRbfMlrikQAO8jQf95z9bzdGCaDldzChCtQI_8Us1I4Jge3F5peozCED8RQRdhuCsxP6xNfCrm3zmuOtfWldfKiqN4pnA0_UG30h5s """ let publicKey = """ diff --git a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha1_mgf1sha1_test.json b/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha1_mgf1sha1_test.json deleted file mode 100644 index aac8eef9..00000000 --- a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha1_mgf1sha1_test.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "algorithm" : "RSAES-OAEP", - "generatorVersion" : "0.8r12", - "numberOfTests" : 34, - "header" : [ - "Test vectors of type RsaOeapDecrypt are intended to check the decryption", - "of RSA encrypted ciphertexts." - ], - "notes" : { - "Constructed" : "The test vector (i.e. seed and label) has been constructed so that the padded plaintext em has some special properties.", - "InvalidOaepPadding" : "This is a test vector with an invalid OAEP padding. Implementations must ensure that different error conditions cannot be distinguished, since otherwise Manger's attack against OAEP may be possible." - }, - "schema" : "rsaes_oaep_decrypt_schema.json", - "testGroups" : [ - { - "d" : "0747d520ca9b2dfc0335cf94301140b8102fb838c92ea99917e354e25709602dc0cdef231ff26ad2dfabbc391e723072a4ef52929f3f1cf0216e44c0093030f8ac29096faef28933bc9b924287014e2e935e2145be4752ccb82cb7646271936979cab73f521eeb27855ac2a410834ae5082eb62ef6f9899ee5cbb624a8d8c04ab7edcf78fe135d0f808f63b5de6e071779bf1d9eaaf8d3ef965486f2c52625e6e57a651c7bbd0197c99c057b3860a3260c864a11b3cf22ba44de3a3b3f3117e64ebf9a91f626ebb3f3c26d1b0bb80753468d4bf6a997b28335f20ed8c384d7558360a9ae9755661fa3749846b174e6bf330e52d09941f6ccd7de5004779f9bb9", - "e" : "010001", - "keysize" : 2048, - "mgf" : "MGF1", - "mgfSha" : "SHA-1", - "n" : "00bd31c7a02691d2d9587ef6a946ff788544ccadd4b2988ad62086792a6bf96c8616b4ad13317d2270b901d0fcd1d880cb8f52fb87304a5258c11b38dfeae8df670aeee7ea1d0d9df8e00e80847e41e5989ed402d44e78b30fef17b5671d3adbf8685e4dc204499ecd1863e1d5aff28a7cf66eadf31fec9236c120add13451522c647c9832a672cd64d328c1c322183f4661d09bda60b8dd5f0328da5420821424afdabb1a80c5d12763a1b0238cd89d0742bfc50b6a2fcb701d824218f9826f4f78a23a2b5aa42ace7f175376fb6cbdb2bad293ba583d4d31c6b8f9029e46b13689249855f505756e00e225a6a45a18769bd8d2b3a4acb9f1c23d3e51882561e5", - "privateKeyJwk" : { - "alg" : "RSA-OAEP", - "d" : "B0fVIMqbLfwDNc-UMBFAuBAvuDjJLqmZF-NU4lcJYC3Aze8jH_Jq0t-rvDkecjBypO9Skp8_HPAhbkTACTAw-KwpCW-u8okzvJuSQocBTi6TXiFFvkdSzLgst2RicZNpecq3P1Ie6yeFWsKkEINK5Qguti72-Yme5cu2JKjYwEq37c94_hNdD4CPY7XebgcXeb8dnqr40--WVIbyxSYl5uV6ZRx7vQGXyZwFezhgoyYMhkoRs88iukTeOjs_MRfmTr-akfYm67Pzwm0bC7gHU0aNS_apl7KDNfIO2MOE11WDYKmul1VmH6N0mEaxdOa_Mw5S0JlB9szX3lAEd5-buQ", - "dp" : "YbtM9FcuDPRN3vwFA6NO8LMRQvsMn8L1uyvmVjAnMtHdWQ6NbNAAL--hwb9Dwo_NRmjtP6ZOXgXXAKrKSse4Z0Va-STYPnP1pxcfaO_Oa9fz30sdWALQaek1rLJjwLtbjT2z1kN5YkzswS1FP9gs-UlaGGSaeMH9UA4_BHFbo68", - "dq" : "Zknb6SCnqM65ghCM2auFdSdJiq5SorhpGKtrOBpKLLv5R5T3i03pxeilmvVtgHwG0j2869yhpvYrpPjwOymPMilKkDbRbCc53hzD4N200S8keUh7V4gq-iRsDil9r02UYHxeUbP0cV9cV9DybYZ5ASCdsCAQ0KVBKEZAqbnwY2M", - "e" : "AQAB", - "kid" : "none", - "kty" : "RSA", - "n" : "vTHHoCaR0tlYfvapRv94hUTMrdSymIrWIIZ5Kmv5bIYWtK0TMX0icLkB0PzR2IDLj1L7hzBKUljBGzjf6ujfZwru5-odDZ344A6AhH5B5Zie1ALUTnizD-8XtWcdOtv4aF5NwgRJns0YY-HVr_KKfPZurfMf7JI2wSCt0TRRUixkfJgypnLNZNMowcMiGD9GYdCb2mC43V8DKNpUIIIUJK_auxqAxdEnY6GwI4zYnQdCv8ULai_LcB2CQhj5gm9PeKI6K1qkKs5_F1N2-2y9srrSk7pYPU0xxrj5Ap5GsTaJJJhV9QV1bgDiJaakWhh2m9jSs6SsufHCPT5RiCVh5Q", - "p" : "_j0jjTdqOFbZWS_UlhwXp_sPo51ELp3yLn7aEVxkjFy3ON-J6pLYN4VY0NnBzz2L_3QNN0OgFApqdSPpF2wpU7LBHX9EaRz4vsKzT7WcZJU1mDMZSIEYwDEYrnRF5w30Zs6YZxJg8F1QaM53fal-K6hHeUkFAM60_39izsqaFH8", - "q" : "voFK8mvzwnEVvHWV0NEqGvdxP-yod65ubYWIJe2j0ZJwR3T0Lhrhtn8XOejEWgR2OIBw-lRbfMlrikQAO8jQf95z9bzdGCaDldzChCtQI_8Us1I4Jge3F5peozCED8RQRdhuCsxP6xNfCrm3zmuOtfWldfKiqN4pnA0_UG30h5s", - "qi" : "Oexgb1yfHzPZZGBuEo6ekM_5MncsVxWqdZgW1QTv4sRiBvM3mqYdMfiOcmtQ3YC4zoVYoNdAhSX1jDOZzjLiOdcJQfEtIed2HAQ-CwIiDSX_0DVxx65bvVnDH0gSBnb518Nwp0nYSRvfzqAWYqE2yF00m2xxD8b26_inp5tircM" - }, - "privateKeyPem" : "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAvTHHoCaR0tlYfvapRv94hUTMrdSymIrWIIZ5Kmv5bIYWtK0T\nMX0icLkB0PzR2IDLj1L7hzBKUljBGzjf6ujfZwru5+odDZ344A6AhH5B5Zie1ALU\nTnizD+8XtWcdOtv4aF5NwgRJns0YY+HVr/KKfPZurfMf7JI2wSCt0TRRUixkfJgy\npnLNZNMowcMiGD9GYdCb2mC43V8DKNpUIIIUJK/auxqAxdEnY6GwI4zYnQdCv8UL\nai/LcB2CQhj5gm9PeKI6K1qkKs5/F1N2+2y9srrSk7pYPU0xxrj5Ap5GsTaJJJhV\n9QV1bgDiJaakWhh2m9jSs6SsufHCPT5RiCVh5QIDAQABAoIBAAdH1SDKmy38AzXP\nlDARQLgQL7g4yS6pmRfjVOJXCWAtwM3vIx/yatLfq7w5HnIwcqTvUpKfPxzwIW5E\nwAkwMPisKQlvrvKJM7ybkkKHAU4uk14hRb5HUsy4LLdkYnGTaXnKtz9SHusnhVrC\npBCDSuUILrYu9vmJnuXLtiSo2MBKt+3PeP4TXQ+Aj2O13m4HF3m/HZ6q+NPvllSG\n8sUmJeblemUce70Bl8mcBXs4YKMmDIZKEbPPIrpE3jo7PzEX5k6/mpH2Juuz88Jt\nGwu4B1NGjUv2qZeygzXyDtjDhNdVg2CprpdVZh+jdJhGsXTmvzMOUtCZQfbM195Q\nBHefm7kCgYEA/j0jjTdqOFbZWS/UlhwXp/sPo51ELp3yLn7aEVxkjFy3ON+J6pLY\nN4VY0NnBzz2L/3QNN0OgFApqdSPpF2wpU7LBHX9EaRz4vsKzT7WcZJU1mDMZSIEY\nwDEYrnRF5w30Zs6YZxJg8F1QaM53fal+K6hHeUkFAM60/39izsqaFH8CgYEAvoFK\n8mvzwnEVvHWV0NEqGvdxP+yod65ubYWIJe2j0ZJwR3T0Lhrhtn8XOejEWgR2OIBw\n+lRbfMlrikQAO8jQf95z9bzdGCaDldzChCtQI/8Us1I4Jge3F5peozCED8RQRdhu\nCsxP6xNfCrm3zmuOtfWldfKiqN4pnA0/UG30h5sCgYBhu0z0Vy4M9E3e/AUDo07w\nsxFC+wyfwvW7K+ZWMCcy0d1ZDo1s0AAv76HBv0PCj81GaO0/pk5eBdcAqspKx7hn\nRVr5JNg+c/WnFx9o785r1/PfSx1YAtBp6TWssmPAu1uNPbPWQ3liTOzBLUU/2Cz5\nSVoYZJp4wf1QDj8EcVujrwKBgGZJ2+kgp6jOuYIQjNmrhXUnSYquUqK4aRirazga\nSiy7+UeU94tN6cXopZr1bYB8BtI9vOvcoab2K6T48DspjzIpSpA20WwnOd4cw+Dd\ntNEvJHlIe1eIKvokbA4pfa9NlGB8XlGz9HFfXFfQ8m2GeQEgnbAgENClQShGQKm5\n8GNjAoGAOexgb1yfHzPZZGBuEo6ekM/5MncsVxWqdZgW1QTv4sRiBvM3mqYdMfiO\ncmtQ3YC4zoVYoNdAhSX1jDOZzjLiOdcJQfEtIed2HAQ+CwIiDSX/0DVxx65bvVnD\nH0gSBnb518Nwp0nYSRvfzqAWYqE2yF00m2xxD8b26/inp5tircM=\n-----END RSA PRIVATE KEY-----", - "privateKeyPkcs8" : "308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100bd31c7a02691d2d9587ef6a946ff788544ccadd4b2988ad62086792a6bf96c8616b4ad13317d2270b901d0fcd1d880cb8f52fb87304a5258c11b38dfeae8df670aeee7ea1d0d9df8e00e80847e41e5989ed402d44e78b30fef17b5671d3adbf8685e4dc204499ecd1863e1d5aff28a7cf66eadf31fec9236c120add13451522c647c9832a672cd64d328c1c322183f4661d09bda60b8dd5f0328da5420821424afdabb1a80c5d12763a1b0238cd89d0742bfc50b6a2fcb701d824218f9826f4f78a23a2b5aa42ace7f175376fb6cbdb2bad293ba583d4d31c6b8f9029e46b13689249855f505756e00e225a6a45a18769bd8d2b3a4acb9f1c23d3e51882561e50203010001028201000747d520ca9b2dfc0335cf94301140b8102fb838c92ea99917e354e25709602dc0cdef231ff26ad2dfabbc391e723072a4ef52929f3f1cf0216e44c0093030f8ac29096faef28933bc9b924287014e2e935e2145be4752ccb82cb7646271936979cab73f521eeb27855ac2a410834ae5082eb62ef6f9899ee5cbb624a8d8c04ab7edcf78fe135d0f808f63b5de6e071779bf1d9eaaf8d3ef965486f2c52625e6e57a651c7bbd0197c99c057b3860a3260c864a11b3cf22ba44de3a3b3f3117e64ebf9a91f626ebb3f3c26d1b0bb80753468d4bf6a997b28335f20ed8c384d7558360a9ae9755661fa3749846b174e6bf330e52d09941f6ccd7de5004779f9bb902818100fe3d238d376a3856d9592fd4961c17a7fb0fa39d442e9df22e7eda115c648c5cb738df89ea92d8378558d0d9c1cf3d8bff740d3743a0140a6a7523e9176c2953b2c11d7f44691cf8bec2b34fb59c649535983319488118c03118ae7445e70df466ce98671260f05d5068ce777da97e2ba84779490500ceb4ff7f62ceca9a147f02818100be814af26bf3c27115bc7595d0d12a1af7713feca877ae6e6d858825eda3d192704774f42e1ae1b67f1739e8c45a0476388070fa545b7cc96b8a44003bc8d07fde73f5bcdd18268395dcc2842b5023ff14b352382607b7179a5ea330840fc45045d86e0acc4feb135f0ab9b7ce6b8eb5f5a575f2a2a8de299c0d3f506df4879b02818061bb4cf4572e0cf44ddefc0503a34ef0b31142fb0c9fc2f5bb2be656302732d1dd590e8d6cd0002fefa1c1bf43c28fcd4668ed3fa64e5e05d700aaca4ac7b867455af924d83e73f5a7171f68efce6bd7f3df4b1d5802d069e935acb263c0bb5b8d3db3d64379624cecc12d453fd82cf9495a18649a78c1fd500e3f04715ba3af0281806649dbe920a7a8ceb982108cd9ab857527498aae52a2b86918ab6b381a4a2cbbf94794f78b4de9c5e8a59af56d807c06d23dbcebdca1a6f62ba4f8f03b298f32294a9036d16c2739de1cc3e0ddb4d12f2479487b57882afa246c0e297daf4d94607c5e51b3f4715f5c57d0f26d867901209db02010d0a541284640a9b9f0636302818039ec606f5c9f1f33d964606e128e9e90cff932772c5715aa759816d504efe2c46206f3379aa61d31f88e726b50dd80b8ce8558a0d7408525f58c3399ce32e239d70941f12d21e7761c043e0b02220d25ffd03571c7ae5bbd59c31f48120676f9d7c370a749d8491bdfcea01662a136c85d349b6c710fc6f6ebf8a7a79b62adc3", - "sha" : "SHA-1", - "type" : "RsaesOaepDecrypt", - "tests" : [ - { - "tcId" : 1, - "comment" : "", - "msg" : "", - "ct" : "ba366806e4ad50f76c0d8f63a84cc8c1045fbb2f9bef31da89214b2c8553e2d0126fb91e8ad9c78d1515c1593fcd589278369f83d8da3508beed573b2e8a2e61e09d9923476cf2d1cade862344a87c8e50d6600754089992851f44998be57109fe4f9a787fc13cba351f335df5f4cd656858a9d9b547438db4e0e81640618104fac10c0227733f85e041a322459c13ebcf4855fa69519ab94301561146830680e1616fcf4652d30dc6d0cd0aba397560d2a5b9556b42d42ee2088ef8793469d1142331a0b3018feb153999a2439349a709eecbf09568643f8e5d3389073eafd93d37544057e567c3a553269ea1b15a49388127532ab967860c0406a4b0cb3adc", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 2, - "comment" : "", - "msg" : "0000000000000000000000000000000000000000", - "ct" : "8773fdde3f148ec33d4facdfba812e44001d90861c047a9eefe6c6540212795b50dd186bb7712b8448830fc1799e0543b7093e4770f301e9216922e80280e9b50582c669e3a9a4feb08ec6f5b2428dc7efbcf6fe49feb61fd2795af1c8b23acb605812c9d7586e4f48e4d758f0695b688d1b4b563067852b1ce9db5dc82aba29ab416178f616426e5d0caf3f9903de2a5beeb970af7281e7cdacaaa00662ae36fb0365c20c653b670b3e7be4b0680932f3254d48ec3505ca1547d1be27d2414a3539f405df91057f4f97aa7796d7ccb69ed553447131fbe79611756b7e564bba7d76ce9256168446b34498a2e91d9a955a8aa98a71a43d65ee60fcea39d811fe", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 3, - "comment" : "", - "msg" : "54657374", - "ct" : "504b4e0d94d800a9da92be8fa84fc345f7ab4921ec53c073c79592b347a692cce2450135e998e07bb75ed7ee44f047f75a07e37b9c912d3d529b62bef144952d5b202246ad32c5d34ec8559c4163e2145fa5fd4d56de28cbfe7e537d5732305945c9370bbc6dcd72b3296fd54a2660365715f7d911099c96dfe6d114eec7b4425cb65701aa9e08d99c7ac20179656bb678554d74baca4501b5d0b366c97224bf0c8734e00ff2af8b916aef8b83142d5ec142493e0cc4c57326515a50a31ec2c6703512034642e5789649773d2f8312561bf2f2f6000cebdbf7c7a95fbfd0f721c31ba392acea37568a24f176767f71b31f407573deef95c305e0e063db0e9168", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 4, - "comment" : "", - "msg" : "313233343030", - "ct" : "25a918a0c7985a72f18f6b6216d0e2d19a9b42a4d5b680e995c3c5c584966e29c6179877cfd0317f9e4dcdc87f76714994e4407cd868842350e28f328b3f33746a897ea9995575f328be7f9912369482ae1a66ff5b7a1c8ac8fd4e5771e58077b54a55db6c6849ff288d50de0ee1e45bfdf81ffaed16971f19abae660338a3a9240a0b732984fadcd28a85c680f0dac8b73306481a096f700706e91f7c100ce64e1c6bbabd419807dc167f1f924edc6f44a69b75a7c72989b25ce35480433bc456c6afa93a0e9b4156d75863f9440ae442eefd213b8a3f53a065daa8cd0206886d1544c3bfecaf62659cfa591da5e920d7d4370a9aabf7f9983fade101da2dba", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 5, - "comment" : "", - "msg" : "4d657373616765", - "ct" : "a2550a9850903f3142bc1b1b54e45d7754e75ff0d39a8ae813b51eb8165be08a4c0366b93c803ef161650f8cb966f7dd4648f40363dd0cc37595e43756078955ef02e415b3e0efd5f9744d564eae763e307e893002dd1a9d0ba2997fe6658f3689fef4f4f21e7a972c0dc642993ff6612c6e6b43f9ce53674919abbc13e42772beb8c3f3f655df9dc9839e075e01beb9b93d8e016f57afc9a0207d9189b4bcb14ba6459ff5fdd5f2fed5260ac9a7a092feca20af0f23a00d8b990c074ca23d964e19e49c17c970bc972b70fda2b6c6e99e4e7ff11902ea7126257fd1964e7da07fbf413c8becb48729fbd861ddcc3fa6c3df2355759ef1338d02551b7fc80a88", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 6, - "comment" : "", - "msg" : "61", - "ct" : "6f35b56ebd7e12d58cf2239b3c926d21d54222da0d1943bcd0c0e446bc9213526c63ce0736b11340754460036eeac885dacac617499a58c56a6df5de1e91db4e1befba0237f696d1b6a8447163b839ddf082a1c5f8c1315f7fbab45b2bd8011accd5b2b1e3d4f35315e998eef82f368a72728817f7369648b9b1959781449707a5a668a6f8eefe5624135ff8edcdf9594eb4db32f27b2a6f5f7c6406c2f2c7b818f859d9e379a76c17b4d1535db7404e77d611f6cf5b4d0205f885883186d603c7a9920934fb5886406a38013f7a1864d5074f89ddc164c9e13f5aa5e4eb13dfc3a53b153c56d9f6403bf2ac5dde9c42227201fe314984752b5b41ef0064acb0", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 7, - "comment" : "", - "msg" : "e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", - "ct" : "3530605f43b5539c80398f856eea8d88984af4a6a08db3b9d4093cc80d1a313c0ebe727eb2c45cec2025eee60f385822c09f82e3bcedf66b79c2b34a4f41aa8885eca5b9891798d47914f947c76881dbfc3f21ec27a11dc926c647b6b2a7f3292ec4aa32e969bab49afe203ffd79b0c1ab5777a041fbe4e9e1a679fe2d82e9c267ee7fbe54e9e0def68d8bbacb1e53da99aec8ba9255d2ff6676dbcc58498a386dd8a6b3cf0222a9e14fd03313303bec9d0439ff0e8a5a09ce2926ebe86cafd00cd8ca761b88df9cf84f7b8e07cc5f655199ea81ea6407ec264b5971738967a2e977132dc589c72f8bb639a9429feb512d8d32c441f7e1ce6c6befa08140a090", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 8, - "comment" : "", - "msg" : "313233343030", - "ct" : "4d0cb9e23ea2f25cd93f6a4a5b9189156178572214c2bbc773158ed82b83cdfe7ac1e96d662afd46a9225b9e8d1ded274e00048c058d4cb66cccf4eb6c4ebaf30b97e3ff17a21223cded8708524bf75e3dec075833dc953dfd9a1341072f1485c60018f92bd41cedd0510085d818a5cb4df32c447294f4245385e1e5c4627c41450c1dfd22f34f96514aed1565976735e321c266300de6b93dd93e4db4e521b1a269947cb79bccd472cd40e3fd430726723cb97bca50e610bd81daed31fc164c18ef378f68e405ee6d978f97cc042dd266c90b909ba52128824fea7f4496ad56e03fa4aeb528d2fd3d9bfae8295e1a5306b389654b1d7058890b5dbd6770ff5b", - "label" : "0000000000000000", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 9, - "comment" : "", - "msg" : "313233343030", - "ct" : "873c4ecb4858c60218b4ff5fe75ec216502367e0a8446fef2302da892816f127a8bedf7e2fff349be493857c4e363493b28f90365eae44323a933eae25701d84024c84e09b9163de0dc7ba2d44f97c29af5b9422c417bb241a2fd326efd9aed2dcd7cea55bb16b9571647eaece0a0ca71f7da7decfbc588cafa8beacf0b286e143ff77f05407388b72c89c6a4be35d074083e2a128fda53ba7d3363c0d261430667770fd7b42032a4d9764fa86dd4834eba3864acf3e0c230fd03581292562151faa1ed3f8433bc63472c425c382d7425b11c97969b1fd0fa0b014d47d87af919de6df72ba52be888e44de4fa63c215ea80fc61072a320a24e99c6a247880c9a", - "label" : "000102030405060708090a0b0c0d0e0f10111213", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 10, - "comment" : "", - "msg" : "313233343030", - "ct" : "91de22e76714eff612a41318303dc5aaf154dc5e4b79df8495b5acba18a27be6dd454f2c39494aa18d1911aabf38bbad0460922404c6e2c08ac3abfdcdb963623f1c1c07eb2096dff7064d3c55c6221773e4b2a80adaeb210532ec76a3c92832b0aaf7da03cfb60303e0116cb6cdead2b7371cbfaebbf3e511503b9b8bcd54c13c035a44368fba19dfb8735c6117a3edcbe9939afabd7204b6542c77d31a6a244b10481211ec99e45231203720043fe89a57c7a612b3588b12166c55edec13b8265a2c091dd859d4f34eb66ead8b583fd1f0f0ec739b92e7618c1abe1e3e9219fc43f628fe89ccdf2cabc07ffcc5c485c4cadbbbeb02efd8394f4db0b72d81d8", - "label" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 11, - "comment" : "Longest valid message size", - "msg" : "78787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878", - "ct" : "8654643090ce426118dcce2bb0fca3b2a4ed45589d73ae2f5683334f17ca5b9f41eb97ff566cbbc0171d8962fcca465f66f4cf14d0114d7768bbac1dfb726d91331670e0e88ce7286e1f0ee7acd5cd75e0d325adc9f47ff02820544770ecf46f381ff330a5c75978e8d248cc12f0752cc7c452265ae919f5a4dd7c20023fbf51d0b413afe09f746114d16d1be499c98d270e9213a37a2a745a3bb216bd30a07d110558090f4fe73debea009e18eb3770eeddd7150b4c7231539f7232d837836490c9547e27dac00efb5a8ccdf9a7c3c1d29c035170a517db899ee61925cc7a2cd278cf576ebe8281bd3a4f2665f15dd0b2e61bcd65172c2fff50a86a2adbf2f1", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 12, - "comment" : "first byte of l_hash modified", - "msg" : "313233343030", - "ct" : "7866ab0f81437de93442325f02f86a305c4a4a0871207ff3203746c26a43fff5979e68c74264c34dad13955a32785ec1523fccb264957ed6f6b822b5c052b9161d6b75adde451c6f8d637a75dffc9b9a9103934e777cef41b7966bf730a648e5b96aa587936d460124dcec515b55473a009844f19cb2794bd739557d25417e2c036762a921481d728b4d32a8015b17539b7cc2a16a2b33e43b85561a2119fb6c9d8ed42d6bec324281be79e2f79426c653f8445a20cce87a2c263e7933b8ef3fa0b9f9f38fd115fde459e5d32eee2412c0af06d2f6454e04ba060ea87c5aa0d4b365f24b4f05bb27c4aa42061a45cdcef1a39118018b875dfb9f904fda4d80fb", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 13, - "comment" : "last byte of l_hash modified", - "msg" : "313233343030", - "ct" : "55fe2f0fdbe16bc284545cf2be83d2a92a526f52e33e7b116b265859f14433fdf3ae92e10b3a906ac95a4541c42eb80b3aa963e5d9dc4d3414bb5f378cfb3d50af10e9e84fe0e31c98e091643ee99fda65a2a8802f9fba68492beab9e606501b8e82a3d830175137617ae0352bc790b4ecfb76fc126c34fc600f5f09b58f3915155d3ae4820d91904cb92b61fe9193d150d4f0b6bbbaba2692eaff15d2a0f01d0bfb81228462954f404ae06350a24469381047a62e281d2bfa798a3fe19ab0c808de18ebaea11941e6325c04927e0af3499043a42705cfece04a60b6ed8c280869787a4f3d484218f09f0b266efc3a5b442098c82cdf809820cf3b8e7f6ebb8c", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 14, - "comment" : "l_hash changed to all 0", - "msg" : "313233343030", - "ct" : "930eeedfc0e94791a2118b228c4e1522ab52f5fbe53373d9c11b4d1b2595b121780f4312a4f834614df0c31425483dd845279b08fc0f1081dafcf51f32958505960e2eb9b9672c9a72a12fb45a25df678009542a171ef8d7f07b11fbe52db47957ce38d9242852a228a4ea864c36d14d58bf41d2a1151b8c18cad777c9a6f8542b2f3c9c84990a461df613f36a0461658b98ba193e6e6b14765021d0272536c044d8820bc3a5da2404f11a35c632b8c0f9ee8f5f3cf6c77934a7b03750031d6d7cd99623c484c5c244ddc07559ea756886d235844d9c6ba4aa24fab14e9c4ed01bac85d332869a8ba8c05ca7a074409e8231ae38c0e1bb98412fdf124f3ffa9f", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 15, - "comment" : "l_hash changed to all 1", - "msg" : "313233343030", - "ct" : "bbf27bdc6311952dcf7bb31459ad6f97e09d5948c7d21226c656121aaaf3ac28118efc49e379eabad3ab4b576b494cf438d0e210b8cbe6067a07ca78af7df1547ef9accb15c5c2601c2a020780cb14757201bfab58bb85ef5642d9b5b97ab768f285eb2012f1ed8f7bbd2bc4ac2b9eddbd656dc7477e800e95924827ba6d4f5bfae058e34150dc676e91cec780528d6bdb9d39c4af4005035ef45afeced57ca8f2817b5fcec969a6afa2e0df7cfe5b818bbdda76d7b760454f682d553f6976562f7f529ed8319cbc98bcc759db0c5f3c7c47557092bb3e0d3b208ab6fdfe75dd5c081ff4fcdb08556e78877623fdc4be029933bb659fd3677d62bcb5d8d37818", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 16, - "comment" : "first byte of ps modified", - "msg" : "313233343030", - "ct" : "0fe6fcde58648f13ebd5f0ccbd68458da8ae18dfbe82238d2fb90eb42b743dcbe7b12b33f77e31ca85eaf694dcc1159c2fd4778fce93ceca25f5123aa63ad8ddbf776400d489d8d3d46665c9d22b4382d468881b7aa30c97cc6068a9031a100cd4b035426932c488a6396de7bf42bdfc8da04af6ceaa7836752feccfbe5295a757dfcc25c8e8c5cfe122bcb764f0660528e162c3205e0a6b9f8d399f50529005467f56ea70c0182c9d679d13dbb0e1ea24b84709c1681418cd174f4467f943cd5a1802bd0ac666dabac72bb3be4d3ab9874b23c4c394f3287075c60454daad062f2e5b81bfb14222c97caef742482c6729c9b44de880e07668b59a93d8e27d17", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 17, - "comment" : "ps terminated by 0xff", - "msg" : "313233343030", - "ct" : "0a182cc23064e7b1d11ff906ed40842213938431906395ac4995b9e8e56fa3835e9fc4c4ca81d5cd0e14814bf16de6e07ddd949b43522387e8f543672dc965976229da3e791efccf4a4d28c3d5cc8c32f7216e89400794c495a54d2b38f72e30570b43b58c657471fb9b6be7a999807976263cc259c06df51e632beecd7372e2d0ffa17f79d029dba8cf00611caa9e05bdc0ef87d9a2f5f02e4732aac5bdbf1d754e2263a209a9b211a1a8712a2b9a8dbf676fb7bf130c505ec1972e4c5c4baef2e33c955e63d55cecb818f9c85dfb1fa54207a406f153ce77d946c60c4faa289d955d73a8c64f5d4dbc2fac3b4741eff3b3fc205e1bdaf7fabd738d01eaa404", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 18, - "comment" : "ps is all zero", - "msg" : "313233343030", - "ct" : "affb9604fa25ac904e054b0401d51c566c7556c965088e81bb0181dc16532b5c5800117eaee491c1dcfebb184ca00ccfb3a934a4e3efd42a2249ef6d4a1df93af90db0d135a000c97fc1092e85cca90770e4b3583baa654cd127b5ef7549d7d7a4dab1ccb16b7fb0b0eaa6ae401e023efa97ef61a136554d013c61934cb9996db2cbac0a4b68651285ef3421ae2276c7e65dc81d8e3089c15e36e2bcd8f42926daa907f56e5fa4d6a8f3891e71b4f80a15798a94bb64aa68e295bb0d1f6669ea761de0792fee6e0bff465e53b1447eff610b33d38eca86d9c66b542f579338fd944f6a116333dec3684e4c78aba1b1ec12e8e6712206f81701d30a3b43688d0b", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 19, - "comment" : "ps replaced by 0xff's", - "msg" : "313233343030", - "ct" : "a455a8536e5295ac29243e3f7bfd2f6ebf1aa7e3d1333c1bd9fe05b6ade3aa913b859dbd45ba093ae9b034f619f99a69eaa680ffb7be3ab38784648f6f31f858200992f95740ff2edb835f8fc03bb6785278ab9eae742d5966519fa9f584f0c3044136d04fe12104ec8a8bd07950334db8df8a83af843347a10974245c723fc85686240eefd0cce09d81a63c6f6a4d2b83d29ff9ad060129e5521da5e635dc05796ba540f1dad25b9423bda365202709e5e287a2b0d7b09a2ab6031447e1a2ae8efd9e980a29dff1458327edc0ad162670f80343d8490118856f396c72058227f57b9b0ba66b13c4e7117538bcda3e937dfe05d10a764c0ba1f5626478d4fc72", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 20, - "comment" : "seed is all 0", - "msg" : "313233343030", - "ct" : "96982e222302818f506285642768615f426bdf9f3b4daf80ec5e3ea26cbbe7f5ab48cbdaca4ab0538bfdd91f7678101b61181806f48b2d6fe778d899804a888716a0c2c3a7078513b1cbaf1d096e6fdc83abc2fe40b6742709a2e51afd8e767aa4a72bb4554286140533e4bd5432010d6016d308d475eb2a40165d46dba630c11a183532f658bd538096c1877fc4d843d9d2d8cee570dadc9895cfe2372df9601fcd74399006466fb9ed923b7d9abbad9bc7de963e0eeac7bbd56f20e1c254ef722d523fa8f3bdb0b91b37202e11b4578a3252673e69ec05a05ea60913ea1b9e6228d9fa0c85ac6d794dfeccdf7595828b06df2bdc89fd8d22629fdfee205be7", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 21, - "comment" : "seed is all 1", - "msg" : "313233343030", - "ct" : "ae11f45e24cffa8e4f37be34ec87852db77c2501c1274e23477c50d62313480ba2ac9de76b790a355b50c2f2ed2dd061cd860ff7932cadaa0e1565e43d4177ac98e26d964e81cfb7c20fba7e2b0853fdcc7deab75b62ef5f231ea29f10c83c2f27c9215b7d10d85443d967ce7fcd41b0de999d9f98a072dc80fb5857d47e4373c736bae728932733d0a071164b6d6dea3205e267bebc287d9b5035a76978dcc2f38946dddca48a6a6035557dd9e1aaec4344dbb457612eb27b9302e02ea0c9456984e70faf235aecd20cb32f3da016c9a8a8b23e07a06dfa57f5a25853944cbf538c864169566797a4346e52fcd2ea1489799109820cca4b6249502270dfb1f6", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 22, - "comment" : "First byte is 1", - "msg" : "313233343030", - "ct" : "8ba65949d2a53d5a933abbdff1efb4b6861484dc230bca0c363a66202691bd39d94798664763d72f55edb37e8cc791b3904c42c4e1b75e4aaad312f5dc53a246f211d19e311a974c92ff8af0573dc831c51194e59c920ec3d6325f06b9c4bceaa6e55696b185163e73aac401fc1925cffcc7b80985bab727288d258a3c60f7d3d2d8ec80dcfe7547229183a19247e3ea10afcb0fb0c8e7c4c57bd5cfd5529abbd407f959f4b9c492411691da445fc5ff3ffdd11fcd20c2a2936d1373b55c2ee41a7b43c049b40cc55f7bc85e46b0d8464a3add0bf28a0d3ee46c12e6fd600f840ed65f11d590381fb9c6a80a46d64570eb4f6930ed24087e47aa12eca2a1329a", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 23, - "comment" : "m is 0", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 24, - "comment" : "m is 1", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 25, - "comment" : "m is n-1", - "msg" : "313233343030", - "ct" : "bd31c7a02691d2d9587ef6a946ff788544ccadd4b2988ad62086792a6bf96c8616b4ad13317d2270b901d0fcd1d880cb8f52fb87304a5258c11b38dfeae8df670aeee7ea1d0d9df8e00e80847e41e5989ed402d44e78b30fef17b5671d3adbf8685e4dc204499ecd1863e1d5aff28a7cf66eadf31fec9236c120add13451522c647c9832a672cd64d328c1c322183f4661d09bda60b8dd5f0328da5420821424afdabb1a80c5d12763a1b0238cd89d0742bfc50b6a2fcb701d824218f9826f4f78a23a2b5aa42ace7f175376fb6cbdb2bad293ba583d4d31c6b8f9029e46b13689249855f505756e00e225a6a45a18769bd8d2b3a4acb9f1c23d3e51882561e4", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 26, - "comment" : "added n to c", - "msg" : "313233343030", - "ct" : "e2dae040ee2a2d4c4a0e620b5dd05b56df67f079884f0bbfb64a3eeff08fdaafdccc458b014d53f0574f9ec5514ef21524373c0408b2d67c11fdc812762812db75786693b66313ec08cd001d90787a1b4cee69d3a9f2cf9ab81503be8f205c701da8a39d70b1e8cc40f132b3bed46ed8f466cdee0d032955dacc5c373789f5d58886a3a5cff7c841a5b34789a3091a0f1903a2227ac24ccf0a2fc3739c92210afdf726d53e07692f3fb82f431f2779768766608111f6f4f9cfdf256d79c5ab13cf68e9d494b2c60fd5eeabdaf4b0c896fdc190db93c78c85671ed3ab6b48b7bef639dd19b4f224d0667f1fffc200019773ad09be3f58b1eb5a7cec3289ff8f9f", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 27, - "comment" : "ciphertext is empty", - "msg" : "313233343030", - "ct" : "", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 28, - "comment" : "prepended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "000025a918a0c7985a72f18f6b6216d0e2d19a9b42a4d5b680e995c3c5c584966e29c6179877cfd0317f9e4dcdc87f76714994e4407cd868842350e28f328b3f33746a897ea9995575f328be7f9912369482ae1a66ff5b7a1c8ac8fd4e5771e58077b54a55db6c6849ff288d50de0ee1e45bfdf81ffaed16971f19abae660338a3a9240a0b732984fadcd28a85c680f0dac8b73306481a096f700706e91f7c100ce64e1c6bbabd419807dc167f1f924edc6f44a69b75a7c72989b25ce35480433bc456c6afa93a0e9b4156d75863f9440ae442eefd213b8a3f53a065daa8cd0206886d1544c3bfecaf62659cfa591da5e920d7d4370a9aabf7f9983fade101da2dba", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 29, - "comment" : "appended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "25a918a0c7985a72f18f6b6216d0e2d19a9b42a4d5b680e995c3c5c584966e29c6179877cfd0317f9e4dcdc87f76714994e4407cd868842350e28f328b3f33746a897ea9995575f328be7f9912369482ae1a66ff5b7a1c8ac8fd4e5771e58077b54a55db6c6849ff288d50de0ee1e45bfdf81ffaed16971f19abae660338a3a9240a0b732984fadcd28a85c680f0dac8b73306481a096f700706e91f7c100ce64e1c6bbabd419807dc167f1f924edc6f44a69b75a7c72989b25ce35480433bc456c6afa93a0e9b4156d75863f9440ae442eefd213b8a3f53a065daa8cd0206886d1544c3bfecaf62659cfa591da5e920d7d4370a9aabf7f9983fade101da2dba0000", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 30, - "comment" : "truncated ciphertext", - "msg" : "313233343030", - "ct" : "a918a0c7985a72f18f6b6216d0e2d19a9b42a4d5b680e995c3c5c584966e29c6179877cfd0317f9e4dcdc87f76714994e4407cd868842350e28f328b3f33746a897ea9995575f328be7f9912369482ae1a66ff5b7a1c8ac8fd4e5771e58077b54a55db6c6849ff288d50de0ee1e45bfdf81ffaed16971f19abae660338a3a9240a0b732984fadcd28a85c680f0dac8b73306481a096f700706e91f7c100ce64e1c6bbabd419807dc167f1f924edc6f44a69b75a7c72989b25ce35480433bc456c6afa93a0e9b4156d75863f9440ae442eefd213b8a3f53a065daa8cd0206886d1544c3bfecaf62659cfa591da5e920d7d4370a9aabf7f9983fade101da2dba", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 31, - "comment" : "em represents a small integer", - "msg" : "32fdd5b5319188914afbe21b1fa91bc4e484ecd1f9968231879e372570c43a27f720e6773e1d905b70f85a312347f7e9752a8c4f5b9f27bd01530b6efeb221dddc723cd51b4bc4814992268c403ed4fdddd526efa87d835069246f25e8098dd5ae3e463fd639b36a4c139476b3d29ae0c9b6c163d81e7719cc85e65289bdde2f82b69bb4aa9c5a5dcd513421a54e5d4638d8c23567c12978c3aa806ba7964a547a689360105fc1b2468fa1480204d468ba2fe41ce9302328d4279e00a9af1c7cdd9f16d572e70b06f1f40acfd50c8865ef37d888b2fb", - "ct" : "092d5b4bea487029a4c06c97f727f6ad4531f7f646c95cd269e1e606a7e047c19a6a9eca8fa5abcbbca415477420ba422a7d5ba41ac79ba7548aa6f4b44aa65ad915ec11d7f50cd2ad7eac86869bf88bd7cbd11439aec354a25be71d36541e7ef211ae010d8259ac7b5af49e38e14d87b62a3e7840316799b548f14339cf7b46ccffd66e596b0879782f8638b975a89edc2b2355f05c53845078502d046b7f4371bdf911e30302fa980fefb439737333fa9c179c33a98e1b052da7da2436e8b862ee5f7c63c88ab751a244705c8bd1f32c277e0a7c80ef302bd01c9fd50c9b7b6395044c72461dc69aea549e37858b8b53b2792238f59445684e551e52e08750", - "label" : "610c549ce717749d3143cbd96c51c1c75885a5d200000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 32, - "comment" : "em has a large hamming weight", - "msg" : "f032ef2759de946b6ccf829695a9438e5f986fdbbf333262a795ff9ede842bb7b153c526abd1ea498f56e992bd21558c7c3b6434e4c667ccd16687eddc199bbaa59547e065a8a3814cd5ea46d7437c1d6bdd8f1a72ee5e945a2b1f11da2049a685ddb525da742260a20ce52f95755b8d7b5d29dfe7f55395c6203c518d5f45ae7435fbc19efb7fa9d2e1626cd655d409e35fdc4e8b5773965d9db726afa40a73cb212b60678bbc7a0417b94d97e03c273c8ee2ec49f23f57576ab3bce568fa2a1080f0f036e6971eba8a773b405ba2c5ba6564a4289a", - "ct" : "58a4e190a7306bcb33ea5f1ad83b74da56e3debd2b2fb4499ea9339379b0f08117c77b4d5ca6dd1ad51a4cea4b818c270344980077674c8bf6e8a5ce5ab6212ddcabcd53be82672f19d535debf66bf853538d163b6128468fa21bd4464e84fbfa92501ad51bb1bf7e14ff522ecfd65a29e08ef23aae01218d7635915f8372055e0c6a2ed1de61511484bd6c32286a23a9eb2f1999708e8ed5e28516874241eb778713a845241151a946c509c07e4d27c167b7b5ef6f7a4f1fadf9049996eab17d97ef4d22550649060692af63fd06d05c76f3191689158323605582696729db7d94f730e5107d0d585cea56160968a887ab42bee7fd4f9ffd1449f021a3d41ab", - "label" : "a0a0b480327073f080fc1efd8cf5be9bfcefd3a000000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 33, - "comment" : "em has a large hamming weight", - "msg" : "a472bbae5a81e6500afc183d8bd1ceec795f4907c496830bff4a9f3b15f1768724cec8d288d1d11f47529538cdf93f769917afd65d033d4f563cc14f6dd39a8e7e03afde9eb374b9177f5bed74ebcbf771f630a1b3075d0a308ce65424386304396e824528deed8a2ac7a387f7a3eec3b633882c92e9c33eba9a91f9297dd6aeef37a5d475d10fe69e0b1264fc2ea1cb45ab4f1c6908cedac276183adee1f60da7cc1a105ed5ef187c2b11748e98c8a93af9683d441a3088cb0aa669b06db151e7151371d0273e2ecb161c8fa69d4e56666681c6439b", - "ct" : "526352ba3b50ba160f05b9b7604abd508e744e176f99f5ed5fa47869dbf220f32fa43f7942a8951a75505a5800f8f49233d57778ea9dd5220bbecef15d38dd7400ba81ff4cd5085d2d20af7ce79f097ec08ce2a8dbab4482675ff08bda80c74078a44cd89af547a356cd21bb4be52a0cc5dad5bc779b54fbad60d15f10ca79d25e82f19d9dbfff7ecc1cccd8374582bef1d4bc3fa745259dcaecc56b8f162f7d4063aa2c99ed8f418f2aa5658df7d1f36041883b4484ac6766b059948960fa2e40363c6c56242396809f4b036fd91d46de8eb053c8cb0297784120264c6ac7e359f4ad5ec65a002644c03cfc166a8e5a019b8236c7d7145df247cd123a09c8c2", - "label" : "bba0b480327073f080fc1efd8cf5be9bfcefd3a000000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 34, - "comment" : "em has a large hamming weight", - "msg" : "6d5c2cb5790875728fb21e987278fdd1d881cf4953e62866f8d53ebb067cf9a4ef53218030e3eca6732a6b1f789cdf3cc711b6063a01f424b388905549663769dcdcbdd82deb6bc23f66c1c04d30c6d91fd6116bdf8802c150fed396562edd21ca606528cd40b569e895c8ad5bd1bd5848a215501537dccbd0fcd70cf3b2d0df58a072e07f60ff764c4688c37240863242f6eafe36601dfcda41eb863f4db701de54781a6d53a97932d32aae0e6a526048f766902128b4842068fad9ab10811ce93339ad42f2e13c4cec324a8cf7035705b8a36fd8a7", - "ct" : "6ab92b1c57f99c17ae4ca5f7d4c0149eb24cb18aaf36163859e1186dcbafeeda4d77fd059b0f938e92b8d413b771852fb019a66d76009444605edd5fb48e6eebbd9d01827be732292cb07cde541dce138990d46599b5a196525af199ad4adf7c259109e715e563d8974cbbeae62a53c8137076f10731a964f2ce37305a175d35eb7c8e6e72c9792631d35133dcd49f1a1da677ab3ac074172778402a4176c036cd8ac5674770f171d9134585a115f6a0983d606b748e0e47be040acda88cc5b8c7eadd33162117bb61f49cace91260c5e2c8ef4dbcec7f156a18894a2bed9956520b2b681b2fa31347df7ea98062d97f2972280be22e507249b2436a9ab91689", - "label" : "7fa0b480327073f080fc1efd8cf5be9bfcefd3a000000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - } - ] - } - ] -} diff --git a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha224_mgf1sha1_test.json b/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha224_mgf1sha1_test.json deleted file mode 100644 index 1db2b8d9..00000000 --- a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha224_mgf1sha1_test.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "algorithm" : "RSAES-OAEP", - "generatorVersion" : "0.8r12", - "numberOfTests" : 29, - "header" : [ - "Test vectors of type RsaOeapDecrypt are intended to check the decryption", - "of RSA encrypted ciphertexts." - ], - "notes" : { - "InvalidOaepPadding" : "This is a test vector with an invalid OAEP padding. Implementations must ensure that different error conditions cannot be distinguished, since otherwise Manger's attack against OAEP may be possible." - }, - "schema" : "rsaes_oaep_decrypt_schema.json", - "testGroups" : [ - { - "d" : "56d0756ceddf7b1e5b258f783b99e036e25675eca054ae9b6ed7552776c69b2728f76e08973556b0a35ddbade9d462ed12bfc46fd254a07ef4ee043ab24d1ef00f8d214cd1d906911e92c4a212d9a981da74b8d18208153d583035d6642b87a23371787867efd02c336eab01486266c853a052490deaea430c6043a6b240b6e9d71e16f29255f2ceeb35d1a4ae25ae0dc9a436fb5dc30381cce982acc824961976df683173a02a540c403f3c8560243ceb5b798abcdc20f3c85d9532b0f0b0826f1b6352c5adac757fe3224b822455cc529fcdc8a220b0469f321f56bd1853d8a70b893f404cc06317e084173770c7d4c836281ac251353fcee4ac393838a1a1", - "e" : "010001", - "keysize" : 2048, - "mgf" : "MGF1", - "mgfSha" : "SHA-1", - "n" : "00c32cd0e1441fde8a2896ca3a133735be2d1010777cfc739afc77b6daa66f367d4876dccb3021fc22c25450a68d6cfb1191d485cbfba5ec45b49286d7cae2bdae553f47e10b94f867abcc6d0affc733bacc725e5ab4de1aba19a39d748b4c1355d5a6a710a52bd04c0c24e7bc3bdab8f3ce3ae86ecb31c4b45e10b40ddb5fdd40cb2411bcf5b1d392e1eef959cff2709a6e02b20ff3b4343641a6b78599586edc9b673d9f3f5e9d339ceebf96a1a31655876c39fcb00b1c3e571908c9b744765047abb5c23ecc42e551e13755e38cc9a13e1e02bcd5dcec9c301fab75be3e1a8ee9c42981607aba7855f4bbe76c8c160e80468b54bdf9f438b177c33dee30b0f5", - "privateKeyPem" : "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAwyzQ4UQf3ooolso6Ezc1vi0QEHd8/HOa/He22qZvNn1IdtzL\nMCH8IsJUUKaNbPsRkdSFy/ul7EW0kobXyuK9rlU/R+ELlPhnq8xtCv/HM7rMcl5a\ntN4auhmjnXSLTBNV1aanEKUr0EwMJOe8O9q488466G7LMcS0XhC0Ddtf3UDLJBG8\n9bHTkuHu+VnP8nCabgKyD/O0NDZBpreFmVhu3JtnPZ8/Xp0znO6/lqGjFlWHbDn8\nsAscPlcZCMm3RHZQR6u1wj7MQuVR4TdV44zJoT4eArzV3OycMB+rdb4+Go7pxCmB\nYHq6eFX0u+dsjBYOgEaLVL359Dixd8M97jCw9QIDAQABAoIBAFbQdWzt33seWyWP\neDuZ4DbiVnXsoFSum27XVSd2xpsnKPduCJc1VrCjXdut6dRi7RK/xG/SVKB+9O4E\nOrJNHvAPjSFM0dkGkR6SxKIS2amB2nS40YIIFT1YMDXWZCuHojNxeHhn79AsM26r\nAUhiZshToFJJDerqQwxgQ6ayQLbp1x4W8pJV8s7rNdGkriWuDcmkNvtdwwOBzOmC\nrMgklhl232gxc6AqVAxAPzyFYCQ861t5irzcIPPIXZUysPCwgm8bY1LFrax1f+Mi\nS4IkVcxSn83IoiCwRp8yH1a9GFPYpwuJP0BMwGMX4IQXN3DH1Mg2KBrCUTU/zuSs\nOTg4oaECgYEA6mAQoAF9QHMZhhDQ52HyhuOhEz7u1xtP1N+w2LUuHh2P/FjZwQOW\nYplS6wAjabIrucMxPIAzDB86t6P8+ND79aHA+3k27yDVE3OyG+py/Lf3AnWsQdl7\nVmtx9yejLwAG3hXn+bzPzDIkEG9rGuYtWTgAZaSO970BXubauuD514kCgYEA1S7Y\nCNdKebOrUVtPL+e0ECdHLDeF6yVYeuMdNQC/PG7yDEJ+Ij76TykRzTjPxEefKK5J\nX+PojpTCNsC8EyPXECeropBmn/vX4Pu29hXfHJ5P5au1qQ1NC20d6grisknmpRAg\nksmYtg3ZINCaLm7PKmEXkwFrwMkt47nZJ0S8Bw0CgYEAy2T2yITCV64LVmc9g69i\ns2DTpkoVJ6PSEeDWLhp9nTD2hX3t6yzb01FPvhTupokynREhp2lx43EumbO8k4l5\nPt9TBGlbHQaXIzxiMwuxIlPcDsxj4vmDqamwy1YgrWcOjqjgGcCbbI+O8JxgjIV4\nkVaiMZMvZxslF2CsLUWUTFECgYEAtha+/D44JN+sU190sextRublygTa5FEP1Fct\nWVp7/fid0o7xAftc/kSMKgh+np62eZ70mW0n9LFnejEB9C9GwUvBNKe2oKwSZt9a\nFbP00JMAl6IlFnJ//mSDiqclnze0RAUUbYy4XbhSX88OAt8vIHmyEyTBjvfHtJ3H\nt9zj5fkCgYBA+9ouVxBglxzGrqDBzIK+q0+gNh3kOlW9KzmfJe2J4zxImD9AnZ8n\nKSdw1cCsGzGt92YEXmDWe4mVfIHA87dwbD4UGJJr/sugJCulTtla4bxztn3bHj9B\nYTgMu/HbfT2++FLrs4BjvCVEycKfR/QW8U6x6jzyurkz0hwsCRKTzg==\n-----END RSA PRIVATE KEY-----", - "privateKeyPkcs8" : "308204be020100300d06092a864886f70d0101010500048204a8308204a40201000282010100c32cd0e1441fde8a2896ca3a133735be2d1010777cfc739afc77b6daa66f367d4876dccb3021fc22c25450a68d6cfb1191d485cbfba5ec45b49286d7cae2bdae553f47e10b94f867abcc6d0affc733bacc725e5ab4de1aba19a39d748b4c1355d5a6a710a52bd04c0c24e7bc3bdab8f3ce3ae86ecb31c4b45e10b40ddb5fdd40cb2411bcf5b1d392e1eef959cff2709a6e02b20ff3b4343641a6b78599586edc9b673d9f3f5e9d339ceebf96a1a31655876c39fcb00b1c3e571908c9b744765047abb5c23ecc42e551e13755e38cc9a13e1e02bcd5dcec9c301fab75be3e1a8ee9c42981607aba7855f4bbe76c8c160e80468b54bdf9f438b177c33dee30b0f502030100010282010056d0756ceddf7b1e5b258f783b99e036e25675eca054ae9b6ed7552776c69b2728f76e08973556b0a35ddbade9d462ed12bfc46fd254a07ef4ee043ab24d1ef00f8d214cd1d906911e92c4a212d9a981da74b8d18208153d583035d6642b87a23371787867efd02c336eab01486266c853a052490deaea430c6043a6b240b6e9d71e16f29255f2ceeb35d1a4ae25ae0dc9a436fb5dc30381cce982acc824961976df683173a02a540c403f3c8560243ceb5b798abcdc20f3c85d9532b0f0b0826f1b6352c5adac757fe3224b822455cc529fcdc8a220b0469f321f56bd1853d8a70b893f404cc06317e084173770c7d4c836281ac251353fcee4ac393838a1a102818100ea6010a0017d4073198610d0e761f286e3a1133eeed71b4fd4dfb0d8b52e1e1d8ffc58d9c10396629952eb002369b22bb9c3313c80330c1f3ab7a3fcf8d0fbf5a1c0fb7936ef20d51373b21bea72fcb7f70275ac41d97b566b71f727a32f0006de15e7f9bccfcc3224106f6b1ae62d59380065a48ef7bd015ee6dabae0f9d78902818100d52ed808d74a79b3ab515b4f2fe7b41027472c3785eb25587ae31d3500bf3c6ef20c427e223efa4f2911cd38cfc4479f28ae495fe3e88e94c236c0bc1323d71027aba290669ffbd7e0fbb6f615df1c9e4fe5abb5a90d4d0b6d1dea0ae2b249e6a5102092c998b60dd920d09a2e6ecf2a611793016bc0c92de3b9d92744bc070d02818100cb64f6c884c257ae0b56673d83af62b360d3a64a1527a3d211e0d62e1a7d9d30f6857dedeb2cdbd3514fbe14eea689329d1121a76971e3712e99b3bc9389793edf5304695b1d0697233c62330bb12253dc0ecc63e2f983a9a9b0cb5620ad670e8ea8e019c09b6c8f8ef09c608c85789156a231932f671b251760ac2d45944c5102818100b616befc3e3824dfac535f74b1ec6d46e6e5ca04dae4510fd4572d595a7bfdf89dd28ef101fb5cfe448c2a087e9e9eb6799ef4996d27f4b1677a3101f42f46c14bc134a7b6a0ac1266df5a15b3f4d0930097a22516727ffe64838aa7259f37b44405146d8cb85db8525fcf0e02df2f2079b21324c18ef7c7b49dc7b7dce3e5f902818040fbda2e571060971cc6aea0c1cc82beab4fa0361de43a55bd2b399f25ed89e33c48983f409d9f27292770d5c0ac1b31adf766045e60d67b89957c81c0f3b7706c3e1418926bfecba0242ba54ed95ae1bc73b67ddb1e3f4161380cbbf1db7d3dbef852ebb38063bc2544c9c29f47f416f14eb1ea3cf2bab933d21c2c091293ce", - "sha" : "SHA-224", - "type" : "RsaesOaepDecrypt", - "tests" : [ - { - "tcId" : 1, - "comment" : "", - "msg" : "", - "ct" : "03aea385d1f1321eeac78684a79ea101f54adae40474a54c8e574e1ae3871634050e5b596461730c345cfc93224deb7a26ae40f30a0497d7c6f0e141e9657b84bf9e20606fa7fe6e1c921d8de5032ad8ecc37b7c3247a56b3992c7c63dfc3fe2f22d7c4904fbddc371f560fef052f3ed89202bcc5f92f5a7fced461f984406554eadb85ab7d2bd7fc576d333b8876f82860c94aabb705e34e5f385cc2d7acfc5463a0135a15ed3c417789e0b8873d5fa0241c9a0d9894f617cf55c11fc45a47b3fcc04fa5b57e9e188addcf259a0f8051f254b6a57c2af22cbd4eb2c411e229045efbb577da4f480989d173a2fa367af721088547a8a219ff2466561eaa877e1", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 2, - "comment" : "", - "msg" : "0000000000000000000000000000000000000000", - "ct" : "5d19107e5f9422dd3d9e2207ca637f7347454c338c3191ef2eb5687a49f6570f723aab7ebbd78abba840942e74aea052dc24792c9eef1d72c148733c19776216431f917b81a9a80ff4b1883daba20dc6c368c525a2105550715a374583b56f9030df876d67b229fba732369113585166e41f8b5bb7735afc50970396f47921cb2d6c8bdedd5ff1f0411c804e412c2523da5354a0232a46bf9268402fb952f0ca00d04bfc4504c2ecd9772001b2d77be4731e131f90b46e0d0f51a6f7d787d95f01ce64f78b0c4759db1e4546857658b4bb899cb2e024d15b8bd14d0f2fd02a4001be3b6ab35ac589a83234d8d906750dec3e509332ca081969b26a1dd0ac7614", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 3, - "comment" : "", - "msg" : "54657374", - "ct" : "00d7ab45e49e37e0d73d9ec5d477985b51d9e1b7b9eb67a8e0224f49d8a3432c0dd8df02b5dbe8962b8a3d749d71e56c7871c0b4137d98de5b77d5f94bb448e124b57b2af9c24004bb693baf2d9f54fefe770f6f320cbe73c0405276b09b1d0627b3018787a3b27e09aa0b3ce50a79f946fc45746de72a93554b993936d3a41bf90bd9f2913f5580c8c1c1b853271286dacf275280faa981c78dfefcd4dd09b6f09bd5dde3ec11b02eb4538e43fbae835e40f903c81744797f04f5a38409a502f3a7eb9447a342dccd82fb192601d40f57192255f751f102e14fedc7e7aa81c770c6b72dcb853366b7a18fb11b8e3b3ee218e59f2dd74feba1bb6e06a87405d7", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 4, - "comment" : "", - "msg" : "313233343030", - "ct" : "942fc136ac976cfc686ed13a38314c9c8b570a4afa2b18ae0a3cc39173a1430c1cab8893d530d4bfbf98251035d1fc18d18d905ac86792a1f597c08de11d9e2487dd78900a0bf79239f75e155eb0fc6d151cd7acd4664ac606c396494969422c6a321e12fe747a3b0601afaa43a0d9c08c776a7bacd68ca04b3b5dd9e8c9dee6773cfe652b923ff9d4e82d353113fd7e0264189556b1f28011dabf2fed6beb47498af5a6a8b0b1ac9640e5acb53ebb90bf29b7783a01ad6b4f4595e067711a49f8f1cf00443292251d2c0551f89e4271140b03681e8f4fdfe62e588f565c2e5288b3b14a488f14751b5a493290dd9365a48ea33011ffadbd2b898bec921bb1ba", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 5, - "comment" : "", - "msg" : "4d657373616765", - "ct" : "36deb3f715d91d4f2c5a21a028f87b227dafedb7c0e064712dad36c276fc15bea7d0d3671b115323849ecf52e6326e5f2b205033177410eddd8e29fb06a1b93e99ff62ac8f7dbb973345947de615e9a8da910b5c810732985c3020d93e7485c69801b7ed49433ad66a0708f26d51c0fbd1c73cafc4c89f50a20a09369db4d065e9cd7845be623e86f497a0c3e9485701f18006b8130210cf09c69dcab7ec0e3c166fbbc5cc78c89dbd0cdaf7219b03dc580b4b8f7497c1f9f36d1c61e1609be1f67b892871ded426121c5f83e38d39127c7b574157e2f4ca589efe094c3472348bad8ec5b07b4a2f3f68d4176b6f381930ef377c640ae8491b5bc3249a5296fb", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 6, - "comment" : "", - "msg" : "61", - "ct" : "39f8f5ee290e93d4a36b96aa94a3bb7edb33c0fb6565ca6a99fe2434222be6b6846af4daa933bc6ecb62e963d2e107f51bba8a92ea5a4e6490402102dd378a55c0ee2224e77395e27bf28a216c6f929db2c2c95721d1448160e888aa93251c966858535146a70188d87443416101e530cef68a1781f10368ceb43c287c73cd8c44592c56bd8f2bd501284c3118fa0f0402b42ca7c4ea3a917afe71ea82df1655a39c650ea6adc9d73e789970d9b3bbe3f34d0fc4dc5fd51529cd328a62dee0c30eafbaf7dd51de3c31090833024124741966bc8722a157a8e71ed60bb3ef4704ebfabeba4ef67edfc5a120a0ee3316797e0e6a9ddb4d3bc7dcc9f4c262fe022d", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 7, - "comment" : "", - "msg" : "e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", - "ct" : "b798998999f0e4318470e72841a57733c842f174121247fbf3e59e7724bfd9501425234f8616d288f0dc8206c727aba50c13016d4be6f3bb64bed9dc5122b94522b8987a9db93403975302ef6fd585cad02556a735ffc5332d362272a07c1ddde4484639ab767e39881fa1c0077aed9e8ea4f6349f59940953c956f52065fde0a97624d0840fa610a46dcbdd12b8ea3c56c5873e9fb3f58e43ac719d50c75b434b01fd7f65c7eabd5a71f305561088ffd2fa7bb8698d16455a81d233a4dcc4c1f12280bae89741ac47885552d21b37523ffa8901a2256b3f7fd410b6d842a786ce2cd6ab81a7596ce5479eee98aa3836a22ee8307888d9365a962f2746b01430", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 8, - "comment" : "", - "msg" : "313233343030", - "ct" : "2860d0785fcecef5d43ea029d6ef89b978b25b091a2bb64ee1b95da7dd257ed644a5e4ae1437bb20840715895adc9b2dfaaa1a427ab35d6380c0a6840c022a2fa1eff9b6de19568cf8276ce549365c768a0ee6d84c4c4f4c582ed93c297e83507c8495b3951279b274215cbae88de81447ff5d5d9421fb025a821a934d0103b9efa6d36067cfd394751251ccf4418e32c283ace982f8ee86635b9489aa2e756ccf6d2773a4c8613b899b7764c319153762a9ad14352538507d36f70f56e47c74e2786b8197ad42e2380324ba8cfc80d354eb4487e3642dba175cdcd8382f074e170e326f2cdce0cbdc3831aae1e1abb87756e503520b87a18eff17fca24fe20c", - "label" : "0000000000000000", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 9, - "comment" : "", - "msg" : "313233343030", - "ct" : "a13447bed3796370d356bca37fe2ce27d19022301007dcaafa7162de0897698bf706c3c4594107e9a3585091178a25f458aed6e63eda039b1ab89704757d80a94751ee21c1fb672ca1a8f448fe8d959ec226867bb13dedd1b870986a9e7fec6893fd2d8d533ff13e60b7d61303e123d1f50b7301ac9dbce4480cb3d334b72e048f8740a5b9739bd07beef64265dcd6576dbbc956095aa586a1f22962dc96a00baf953faf836dce03568f3bea85696b074c9e1180dc2f801efe48a47e0735195944891a866d3e2cd1edb8333bf5164b94e618b1204af410644d966fab0e49b23efb23ee2038dfa88bf231ed1deab19346c4833f17ead5f1a2f15d695eef4e14df", - "label" : "000102030405060708090a0b0c0d0e0f10111213", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 10, - "comment" : "", - "msg" : "313233343030", - "ct" : "19dc98b0bd6a47a1d0cf9c9584bae53837bc666029ba6478152d23cfd36e72f1c686543a5836a6420c5f2c984c6c025cd26ec5c6a74ca4e0eb87ea26ad2ee94365c3a6ad0928f9bc9f560bef8b2830374707f7dbba0a938b230f8a42de6645fe765422810eceaa713e8f78e0fbe48b70bc636e21030a89b80118fd4bc066e4d5400529e9c2f8984bbd5800168d72329bfe0d86ac71d3b3d7aa749b1d860afc9b49dac1ee8fd12b73ffa7c095c610df9d502e80c8108b6c944eddca8162666b7955d061231a95698c4c8470217ef9c47ad1003c80f032d95b7a29f459d7ddff205a9b02513f977fdb72b148869527539c0f21a4d749a0301a2fc686e12a2aa6cc", - "label" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 11, - "comment" : "Longest valid message size", - "msg" : "787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878", - "ct" : "94ad881563060d9ac62c32f57f9cf08c57ec10bcf77b35a67ce89da68cf8569e2e6891ed966ab988e68a0e6e44b389a57e2ceccf4e7e32d6bb73be98db72bf363d0da8a20d063e9be5d9f4c62e718004132c9cf876ef58b07c122f02691896df3deac296dbf3e1f6841d02572b6e297d2f0c8a54cc4088fc9bbc0f67f9de75dbdf81cd48e2f45b3b9ff2bdd3ac749d4f43866ecea7483e810cd3c332f055cea1525f263c54e5ca3e1e049af11850bc836e6064cda5cf9204e9cba0857b1fcd65654e30b062e980150d541027a212ecda6985f7e93a0f799679a7c36918aa39de158e0fd52c5cdde046fe6e4ee67f20ccdec1c4d328098c09e6b2fe4251586b67", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 12, - "comment" : "first byte of l_hash modified", - "msg" : "313233343030", - "ct" : "bdcbfb51335812a53e7db2c1b73ed5585fd7899936adb790f4b10327ee075714e21e7df55bddc6888adce032ffe1935d37178adb4dbff608eb5f4cf9e29bc32554358a829ad0b84b1cde5da1018440fa31f60ca72407f5604ea216a139c34034705d295bad65cb9fade9951e17d1ee85f4a46dd4ce81bc878daeddd800d0296eaa90345dcfd83f6dff5cb3ed87c7a8b5985b2ccd7f925b67d39920438b66c1ae1c1321fea7a8a90023f57cd97a50081c42d012de9ba5b98a1aec7da9929cf783def9efdafeaa8d9302da9fd44ec252cb5a97d5dd4fc6f68daddaa9d0f431b7968386df1a514f407f1342e33b996ee9c4b5af934f1aa2fe1e1ad485438d497afd", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 13, - "comment" : "last byte of l_hash modified", - "msg" : "313233343030", - "ct" : "61b8f5873124a6ec36f1ae35081f79e17516362e8e7c5ddf3f44af7070808411db7182a3c82b70cb4c0510aac537a817c6087b907627cdccfcec4cd4b0a901f8aa2ef75e797457cc6f5a0effaaa9b6c542726eb45e9b27e3040d9dd283cb92f1514d93f00f9ea8f40170fb26129d82f169d5e3d9e4d57a38eac39a5aa5dc7fbece162c2f0f13fc095894f323cef093eaa2f000507fbe9d2fa22078bf824b9df7b894ec9705c16e9dd43d2c98f11594e04cf120666c72c8192658e94b02ac89876d51173bfe282c90ff93a5a68d1136e2ebc98fbaf956f28c71df44975fc6376003e713dc5d89ef08658a4d3686a198a4d140259e213f9fbcf5471afb3e0bdfae", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 14, - "comment" : "l_hash changed to all 0", - "msg" : "313233343030", - "ct" : "4fd0d013bedc7ec38e1cb2bb2c234bec4a91733c1363f1dcb7ca47b6d4c8cbd56d7d75255efb3d5fee9f0c1bc5f00560f14ec1947274287153f8db015df8f4f4db9e9d0d9cef10302cac8cfeb72e04feb612ddb2bf4d58a50e19d77027457cbcc158dbcc845ad48b13d710ba1156a9d8f50a27da1e09f0c449e4571a359b4bd9555dad9f5b9354d6ebcf31171704315f6daff2a50b9807dfbfd94264680f44e146039216d83821e27c7933cfe13efb6b0f3912c51dad42bf433d89ccf52a7de04b59931665ed7ca91c7b9b9ce9da70c47c5e91f55cfc6f97c88ce230dadc2222e25f8d25f6f669762bc05e3888b9a05bfc03ea32cc43df08c84219d5c75d7283", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 15, - "comment" : "l_hash changed to all 1", - "msg" : "313233343030", - "ct" : "bd6952203734e2d690c1468c7707b6976f802e82d79a786b40e64275d563b36f1e91bc99853eb3c194d265509b8011ca2d553f6fbbe7a0d6cbb1de6a61dc2b4f6f89344b3033f41e0b302eb626f800c4cf316dbed56580210f951535656605ff142fb8f4e116663b17e0cf8725de29c385737660b4e04c0b710726a70c39d5c417c12a653c3be05031958b1a14befdf95c582e677daa8364fb5ab08cc7d9aa59e02792c44867f68daef5eac69d81200d8dc12dc34be80bece0b80cb16b40a6317ce24ee21e8c082af1598bc4f590459cbf469ddfa4130118fd4686ebb636de9fa41216c24885726d53ebfe50bdb41fd93ae97b079fae913694543339e5cb3ec7", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 16, - "comment" : "first byte of ps modified", - "msg" : "313233343030", - "ct" : "916331689c162246baef783597f0448e34dc5d358b7f00fa47d5549f4fb52c7607c3a3d571b0930705ea61da60d59e96f9b4cb9fa6aac7fc737cbf6615c98b4f8ecd4a0c27878f469edba1bfc1108b104f73d90f089621ba85a938714818efa68c0483359e014c69c84209e1560b8692b8ac90e6164796cd1bc0578805d9e7318bbf08345835c67397eddc2d326468f594b2d4ddaaf8c67f5dfd998eab7c2fecb6a9ce63bde38cf23e0b0f252dbe964647da61dd054d10c5ea82abf730b0ef1722f98aeb15dda842a099501246700dc37d696177f52345c7a8be7bf55d0fb0f134731fc138ece8feee540bfc0da05edb375a1c0035e6fb0168a6424cf25bec5f", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 17, - "comment" : "ps terminated by 0xff", - "msg" : "313233343030", - "ct" : "7d9133d56002b70d758be84c5765c01ada73449ad76776d0dd6995062b5707c6033cc93a3d3056d5cb576d5c8ef6e65f8f3aa2555a454a953c405e5163bf2b0e7f6fbbc9dcd210430862ad22628dc2529179eaaa047f2f87a5f5831a36b604a117908a2170497c218db30110812da89559c5ebaea9281429172088558b7754624f1dd71cff3eacaac9e71df7e4404129cc1b7a1d77c5d34167a3ac4214a74e11d154e1ad42c4d12e9ea32c40bf3d92b356ca5cff7ca65c5cab2298b2899c00fe15bc31996038b577f50204d0def12c900bbdbff4f7ddca011437e01ec923ef76144f097c6951c0606c18bb200c700f451529594512d4ec4c55980c7c0aade461", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 18, - "comment" : "ps is all zero", - "msg" : "313233343030", - "ct" : "8dabf24844e59cba5ce1ab2a32862c6357c465475b98cfd54c5dbd07017e0ba9215aeddd2dde36d2db9891661e6a8a9ca5bf9676ed193047dbd140875f312fee28db4ffc433dd8edec1fd8c342faaf36ee398f8aed0108a3ce98f145883ad126eb025a011c64ea51e2008a14fde229622275c8fda70f3bb83d92597a110c655cf6303a96bed0ac6955501f14b663255ed5cefa0d7a14ff79a993c4f42db39e67530d0263b55832678bf1502d2defc59bf6848d2929ff8959cdf4d7e44c2721786b2306a8e6eebb4ba8d470d15bd8e608652c5d3922aedac36727ff02b55f3e4eebc38924392d28306f8e364f61d8f7cf4749165790cfaff47c3ba7c81ec5430c", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 19, - "comment" : "ps replaced by 0xff's", - "msg" : "313233343030", - "ct" : "4ea21ab2ff547aa2e8edb93ce6e041b654793095327f4fa21f5bb5a06d84c40cdb428e99a4fee6e90697cc8e79f5a1919b47d057b79bf4be5baff430c28896a336705c57da70586cceaba902aa3740be61b41403d7bba0bf939ed2faad83206e0a41536247fc8b8e4e58686d0d19b8cf3aeabe578f4af256100a79472c4d501dc32bd30d7a921574b1e0d4f4ed2151350d246ceff46abd7b588d66c519d7191231461aab4009c03c3995b9e3b7296eddc6db550d8e6f57d1496fcf2d1c18b993557f11a7df438d4a9c73b680fe653297af059964a691bfdb378497528c1ede29bda74389bc462f6729d4ee3303e6e4ea17ece5e270e2dd2bd5ac6f415f972a9f", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 20, - "comment" : "seed is all 0", - "msg" : "313233343030", - "ct" : "8d15a2f44d4b458af3d83dc082cd75e1fb78f6d8016a22458afaa019bcee0fb298d2990941c1bc9c0594fdbe4d292183b7b3c7d3a747117cab05a1312c34ae5ab16f25f7f002b8ff9cc905d2372601103f12c6c69d91ef320d0f31775fe72f8d7db1e8e0b7a6f45fdccf017b74d4e6a3af16099be38d605921652dde236101c16ed6310e126e36b74936a04ca0fb0c26b0d4b28b1aa2ad42cbee98747b7c43ed3ad7a5388cab80b25b5ef5be9fac24f6d0b373919493f928df49bb415f7842b47c13e44f45c042da263ea3b5b989312bd6284fd049a59ffc5eab219440874d173bd11744419aff23450f86d7c7bea2a341361a306b299a8513a94b9c034bfed5", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 21, - "comment" : "seed is all 1", - "msg" : "313233343030", - "ct" : "4f802efe0073cf430f7af010f23dffdca40a4a53db96a5cb00431170c6ea57d3bd6d50cfb0cacf6772017adc41810de36f020efb1e00e500a3ca6329ff3d88d86322c0764d4b11f75746b78dfb0838a848d24e0c471d58743a296f10b3fbf44375b289f87ad7ffcbafcaa46a2a0301270b48d123d61ea6f21dc4666df0ea2078140b742ae75c1887d29742dcd7b92b4cbda27b98d8e16b43ced64d5e2a207778d6f022f3228c0b7edeff81437d3669c418186e651b7ed2df8963c5a71726d1f507c8fb694a9a94ef7ff17dca9e1bd79c9686097e7286665a454a9b68acc4334349d99b9d5ab7093fc36c0c0c11d41ac6de2e4c3935bd0ec2eaba1502d22ba0d3", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 22, - "comment" : "First byte is 1", - "msg" : "313233343030", - "ct" : "91a3872121d32ba547703f8a0b9c9aca280f099b9c559998fb39d8841f7ab6a1fdf05a81f246c324ce435d7d9ea135fbc989e15a56df082b5e1c47b3b40f86cd5db01304ffdd328ae99d205d4185bbdf506acba181cdcd2d1d48be3b860d96e0c6ca54ce626372a2a749121af68523decff2c4f02d9d6bfb3d3b9a175e9ce1f03e4616230d32d691a4a8455ec09995962d651cb6f85d2cad6b09e35274368f2eee8ae5c7aa123a16407bcdb200bb351ede750f4798b083ce82f2800e04b66fd2be942b4a64d56dd582de56e3da7facc71157ddaa124502cdae10591eac676df0c94224649cd109027af09cb147dbfd9938488e7be36cb1146753e7656421e90c", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 23, - "comment" : "m is 0", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 24, - "comment" : "m is 1", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 25, - "comment" : "m is n-1", - "msg" : "313233343030", - "ct" : "c32cd0e1441fde8a2896ca3a133735be2d1010777cfc739afc77b6daa66f367d4876dccb3021fc22c25450a68d6cfb1191d485cbfba5ec45b49286d7cae2bdae553f47e10b94f867abcc6d0affc733bacc725e5ab4de1aba19a39d748b4c1355d5a6a710a52bd04c0c24e7bc3bdab8f3ce3ae86ecb31c4b45e10b40ddb5fdd40cb2411bcf5b1d392e1eef959cff2709a6e02b20ff3b4343641a6b78599586edc9b673d9f3f5e9d339ceebf96a1a31655876c39fcb00b1c3e571908c9b744765047abb5c23ecc42e551e13755e38cc9a13e1e02bcd5dcec9c301fab75be3e1a8ee9c42981607aba7855f4bbe76c8c160e80468b54bdf9f438b177c33dee30b0f4", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 26, - "comment" : "ciphertext is empty", - "msg" : "313233343030", - "ct" : "", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 27, - "comment" : "prepended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "0000942fc136ac976cfc686ed13a38314c9c8b570a4afa2b18ae0a3cc39173a1430c1cab8893d530d4bfbf98251035d1fc18d18d905ac86792a1f597c08de11d9e2487dd78900a0bf79239f75e155eb0fc6d151cd7acd4664ac606c396494969422c6a321e12fe747a3b0601afaa43a0d9c08c776a7bacd68ca04b3b5dd9e8c9dee6773cfe652b923ff9d4e82d353113fd7e0264189556b1f28011dabf2fed6beb47498af5a6a8b0b1ac9640e5acb53ebb90bf29b7783a01ad6b4f4595e067711a49f8f1cf00443292251d2c0551f89e4271140b03681e8f4fdfe62e588f565c2e5288b3b14a488f14751b5a493290dd9365a48ea33011ffadbd2b898bec921bb1ba", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 28, - "comment" : "appended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "942fc136ac976cfc686ed13a38314c9c8b570a4afa2b18ae0a3cc39173a1430c1cab8893d530d4bfbf98251035d1fc18d18d905ac86792a1f597c08de11d9e2487dd78900a0bf79239f75e155eb0fc6d151cd7acd4664ac606c396494969422c6a321e12fe747a3b0601afaa43a0d9c08c776a7bacd68ca04b3b5dd9e8c9dee6773cfe652b923ff9d4e82d353113fd7e0264189556b1f28011dabf2fed6beb47498af5a6a8b0b1ac9640e5acb53ebb90bf29b7783a01ad6b4f4595e067711a49f8f1cf00443292251d2c0551f89e4271140b03681e8f4fdfe62e588f565c2e5288b3b14a488f14751b5a493290dd9365a48ea33011ffadbd2b898bec921bb1ba0000", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 29, - "comment" : "truncated ciphertext", - "msg" : "313233343030", - "ct" : "2fc136ac976cfc686ed13a38314c9c8b570a4afa2b18ae0a3cc39173a1430c1cab8893d530d4bfbf98251035d1fc18d18d905ac86792a1f597c08de11d9e2487dd78900a0bf79239f75e155eb0fc6d151cd7acd4664ac606c396494969422c6a321e12fe747a3b0601afaa43a0d9c08c776a7bacd68ca04b3b5dd9e8c9dee6773cfe652b923ff9d4e82d353113fd7e0264189556b1f28011dabf2fed6beb47498af5a6a8b0b1ac9640e5acb53ebb90bf29b7783a01ad6b4f4595e067711a49f8f1cf00443292251d2c0551f89e4271140b03681e8f4fdfe62e588f565c2e5288b3b14a488f14751b5a493290dd9365a48ea33011ffadbd2b898bec921bb1ba", - "label" : "", - "result" : "invalid", - "flags" : [] - } - ] - } - ] -} diff --git a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha256_mgf1sha256_test.json b/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha256_mgf1sha256_test.json deleted file mode 100644 index f171ce1a..00000000 --- a/Tests/JWTKitTests/TestVectors/rsa_oaep_2048_sha256_mgf1sha256_test.json +++ /dev/null @@ -1,392 +0,0 @@ -{ - "algorithm" : "RSAES-OAEP", - "generatorVersion" : "0.8r12", - "numberOfTests" : 35, - "header" : [ - "Test vectors of type RsaOeapDecrypt are intended to check the decryption", - "of RSA encrypted ciphertexts." - ], - "notes" : { - "Constructed" : "The test vector (i.e. seed and label) has been constructed so that the padded plaintext em has some special properties.", - "InvalidOaepPadding" : "This is a test vector with an invalid OAEP padding. Implementations must ensure that different error conditions cannot be distinguished, since otherwise Manger's attack against OAEP may be possible." - }, - "schema" : "rsaes_oaep_decrypt_schema.json", - "testGroups" : [ - { - "d" : "7627eef3567b2a27268e52053ecd31c3a7172ccb9ddcee819b306a5b3c66b7573ca4fa88efc6f3c4a00bfa0ae7139f64543a4dac3d05823f6ff477cfcec84fe2ac7a68b17204b390232e110310c4e899c4e7c10967db4acde042dbbf19dbe00b4b4741de1020aaaaffb5054c797c9f136f7d93ac3fc8caff6654242d7821ebee517bf537f44366a0fdd45ae05b9909c2e6cc1ed9281eff4399f76c96b96233ec29ae0bbf0d752b234fc197389f51050aa1acd01c074c3ac8fbdb9ea8b651a95995e8db4ad5c43b6c8673e5a126e7ee94b8dff4c5afc01259bc8da76950bae6f8bae715f50985b0d6f66d04c6fef3b700720eecdcdf171bb7b1ecbe7289c467c1", - "e" : "010001", - "keysize" : 2048, - "mgf" : "MGF1", - "mgfSha" : "SHA-256", - "n" : "00a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d5", - "privateKeyJwk" : { - "alg" : "RSA-OAEP-256", - "d" : "difu81Z7KicmjlIFPs0xw6cXLMud3O6BmzBqWzxmt1c8pPqI78bzxKAL-grnE59kVDpNrD0Fgj9v9HfPzshP4qx6aLFyBLOQIy4RAxDE6JnE58EJZ9tKzeBC278Z2-ALS0dB3hAgqqr_tQVMeXyfE299k6w_yMr_ZlQkLXgh6-5Re_U39ENmoP3UWuBbmQnC5swe2Sge_0OZ92yWuWIz7CmuC78NdSsjT8GXOJ9RBQqhrNAcB0w6yPvbnqi2UalZlejbStXEO2yGc-WhJufulLjf9MWvwBJZvI2naVC65vi65xX1CYWw1vZtBMb-87cAcg7s3N8XG7ex7L5yicRnwQ", - "dp" : "qUtSiyjykVmRIdkZUv_Rx_IdfBR52Z1HiIX7Fhhw7hIYvwhHJhLb5Ul-jZxlBojgnHhpYa4-LDVNxIrjRRR1nEwjxFiEiJYdwGtBTmHA4ef7vSkj0xUy_iifltoiBxHljBQBmAjgBBQnaTO7B-TvubSps3ZWkXIFIJ8z8JUV18E", - "dq" : "OvDnKpM67wn_JQPfeLr-1THAL_GivEN8VAzcvUrTVDXPURdjWWVDSAYpsRTKf3gP9--jLqDLbgANbZ6h8u9x_Zz5lIQioWVVfjfnVe3-cNkLkgUC60eLyYpj94jOOg-FbW7eclGjg7-o-kgKgaklr3s8xTjEurjJ91l_-2gBHY0", - "e" : "AQAB", - "kid" : "none", - "kty" : "RSA", - "n" : "orRRoH0KpfluRVZxUTVQUUqKW0YuvvcXCU-h_ugiJOY3-XRtP3yv0xh42AMltu9aFwD2WQO0aUKeidbqyIRQl7WrOTGJ25JRLtincRoSU_rNIPecFegkfz0-QuRuSMmOJUov6XZTE6A-_48X4aApOXofomqNzib0kO2BKZYV2YFMItphBCjgnH2WWFlCZvXAIdD87KCNlFoSvoLeTR7Oa0wDFFtdNJXU7VQR64eNrwX9evw-Ca2g8RJkIvWQl1oZaYFvSGmLy7obTZyuedRg2Pn4Xnl1AF2bwixOWsD3waRdElaaYoB9O5oC5aUw53MGb0U9H1tMLpz3ggKD90K51Q", - "p" : "3EMQUPeC6JT7UkgkfZjLfVi40eJPO1XQQcVuTeCGsNW7AovaQu610jTVaB5YCdQV5qKJrUz794-Xj2w1gU9Q7r_xxbgKafeI6B5rq13ap4Np1lnRQ-xvF-eYE6V1z62cVpFWuQET4ukRCtnntIock0im5lMyEZEpDqNs-zpbGPE", - "q" : "vRqB55d_mJgSInOuMiK1mOpfsZ606rw4MIpeMhlmA7LlAP-3n1uIaBZhHevEcvrEVUQHC-sFfJQTeKaGivO3oD0_mIDsR9XgiblPveVCq6mujXLFcIjXq_WxMfOQmPe8Fg-QU2q8lJL9Tgbz7XKZ1Ll7sDZ3IH2VZp8UDPvCDyU", - "qi" : "JkD7-8_vsWPueoe2SDpm7kH5VtkPqKeTm_wELuCSSxt5k9BEX3WNUZM-hRecAyCwyWi0ipHDi1vpI-EJfAxWL4jUIpS2onWbr6VCinTxJwh05F9vzGDyFgLeXszRQ88xJB9ZIbWtOYP7VO8XvjsoU2flDJmcZyR7VS_kv86UX3s" - }, - "privateKeyPem" : "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAorRRoH0KpfluRVZxUTVQUUqKW0YuvvcXCU+h/ugiJOY3+XRt\nP3yv0xh42AMltu9aFwD2WQO0aUKeidbqyIRQl7WrOTGJ25JRLtincRoSU/rNIPec\nFegkfz0+QuRuSMmOJUov6XZTE6A+/48X4aApOXofomqNzib0kO2BKZYV2YFMItph\nBCjgnH2WWFlCZvXAIdD87KCNlFoSvoLeTR7Oa0wDFFtdNJXU7VQR64eNrwX9evw+\nCa2g8RJkIvWQl1oZaYFvSGmLy7obTZyuedRg2Pn4Xnl1AF2bwixOWsD3waRdElaa\nYoB9O5oC5aUw53MGb0U9H1tMLpz3ggKD90K51QIDAQABAoIBAHYn7vNWeyonJo5S\nBT7NMcOnFyzLndzugZswals8ZrdXPKT6iO/G88SgC/oK5xOfZFQ6Taw9BYI/b/R3\nz87IT+KsemixcgSzkCMuEQMQxOiZxOfBCWfbSs3gQtu/GdvgC0tHQd4QIKqq/7UF\nTHl8nxNvfZOsP8jK/2ZUJC14IevuUXv1N/RDZqD91FrgW5kJwubMHtkoHv9Dmfds\nlrliM+wprgu/DXUrI0/BlzifUQUKoazQHAdMOsj7256otlGpWZXo20rVxDtshnPl\noSbn7pS43/TFr8ASWbyNp2lQuub4uucV9QmFsNb2bQTG/vO3AHIO7NzfFxu3sey+\nconEZ8ECgYEA3EMQUPeC6JT7UkgkfZjLfVi40eJPO1XQQcVuTeCGsNW7AovaQu61\n0jTVaB5YCdQV5qKJrUz794+Xj2w1gU9Q7r/xxbgKafeI6B5rq13ap4Np1lnRQ+xv\nF+eYE6V1z62cVpFWuQET4ukRCtnntIock0im5lMyEZEpDqNs+zpbGPECgYEAvRqB\n55d/mJgSInOuMiK1mOpfsZ606rw4MIpeMhlmA7LlAP+3n1uIaBZhHevEcvrEVUQH\nC+sFfJQTeKaGivO3oD0/mIDsR9XgiblPveVCq6mujXLFcIjXq/WxMfOQmPe8Fg+Q\nU2q8lJL9Tgbz7XKZ1Ll7sDZ3IH2VZp8UDPvCDyUCgYEAqUtSiyjykVmRIdkZUv/R\nx/IdfBR52Z1HiIX7Fhhw7hIYvwhHJhLb5Ul+jZxlBojgnHhpYa4+LDVNxIrjRRR1\nnEwjxFiEiJYdwGtBTmHA4ef7vSkj0xUy/iifltoiBxHljBQBmAjgBBQnaTO7B+Tv\nubSps3ZWkXIFIJ8z8JUV18ECgYA68OcqkzrvCf8lA994uv7VMcAv8aK8Q3xUDNy9\nStNUNc9RF2NZZUNIBimxFMp/eA/376MuoMtuAA1tnqHy73H9nPmUhCKhZVV+N+dV\n7f5w2QuSBQLrR4vJimP3iM46D4Vtbt5yUaODv6j6SAqBqSWvezzFOMS6uMn3WX/7\naAEdjQKBgCZA+/vP77Fj7nqHtkg6Zu5B+VbZD6ink5v8BC7gkksbeZPQRF91jVGT\nPoUXnAMgsMlotIqRw4tb6SPhCXwMVi+I1CKUtqJ1m6+lQop08ScIdORfb8xg8hYC\n3l7M0UPPMSQfWSG1rTmD+1TvF747KFNn5QyZnGcke1Uv5L/OlF97\n-----END RSA PRIVATE KEY-----", - "privateKeyPkcs8" : "308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d50203010001028201007627eef3567b2a27268e52053ecd31c3a7172ccb9ddcee819b306a5b3c66b7573ca4fa88efc6f3c4a00bfa0ae7139f64543a4dac3d05823f6ff477cfcec84fe2ac7a68b17204b390232e110310c4e899c4e7c10967db4acde042dbbf19dbe00b4b4741de1020aaaaffb5054c797c9f136f7d93ac3fc8caff6654242d7821ebee517bf537f44366a0fdd45ae05b9909c2e6cc1ed9281eff4399f76c96b96233ec29ae0bbf0d752b234fc197389f51050aa1acd01c074c3ac8fbdb9ea8b651a95995e8db4ad5c43b6c8673e5a126e7ee94b8dff4c5afc01259bc8da76950bae6f8bae715f50985b0d6f66d04c6fef3b700720eecdcdf171bb7b1ecbe7289c467c102818100dc431050f782e894fb5248247d98cb7d58b8d1e24f3b55d041c56e4de086b0d5bb028bda42eeb5d234d5681e5809d415e6a289ad4cfbf78f978f6c35814f50eebff1c5b80a69f788e81e6bab5ddaa78369d659d143ec6f17e79813a575cfad9c569156b90113e2e9110ad9e7b48a1c9348a6e653321191290ea36cfb3a5b18f102818100bd1a81e7977f9898122273ae3222b598ea5fb19eb4eabc38308a5e32196603b2e500ffb79f5b886816611debc472fac45544070beb057c941378a6868af3b7a03d3f9880ec47d5e089b94fbde542aba9ae8d72c57088d7abf5b131f39098f7bc160f90536abc9492fd4e06f3ed7299d4b97bb03677207d95669f140cfbc20f2502818100a94b528b28f291599121d91952ffd1c7f21d7c1479d99d478885fb161870ee1218bf08472612dbe5497e8d9c650688e09c786961ae3e2c354dc48ae34514759c4c23c4588488961dc06b414e61c0e1e7fbbd2923d31532fe289f96da220711e58c14019808e00414276933bb07e4efb9b4a9b37656917205209f33f09515d7c10281803af0e72a933aef09ff2503df78bafed531c02ff1a2bc437c540cdcbd4ad35435cf511763596543480629b114ca7f780ff7efa32ea0cb6e000d6d9ea1f2ef71fd9cf9948422a165557e37e755edfe70d90b920502eb478bc98a63f788ce3a0f856d6ede7251a383bfa8fa480a81a925af7b3cc538c4bab8c9f7597ffb68011d8d0281802640fbfbcfefb163ee7a87b6483a66ee41f956d90fa8a7939bfc042ee0924b1b7993d0445f758d51933e85179c0320b0c968b48a91c38b5be923e1097c0c562f88d42294b6a2759bafa5428a74f1270874e45f6fcc60f21602de5eccd143cf31241f5921b5ad3983fb54ef17be3b285367e50c999c67247b552fe4bfce945f7b", - "sha" : "SHA-256", - "type" : "RsaesOaepDecrypt", - "tests" : [ - { - "tcId" : 1, - "comment" : "", - "msg" : "", - "ct" : "6e62bf24d95aff6868afec2a92a445b6458f16f688c19fe1212f66a63137831653cedd359d8cff4dd485d77dfd55812c181373201f54aafd65730d2a304e623455d51125d891e65d97fce52341cae45fb64c38a384a1c621e2713ee6794633f029a9fd4d774f56551eac2176162e162640f25eab873a3451c475570f19228bcede4c67c370a75ed7fabccd538c9819eff182481b10d42f1a9f6a05373b8cf9b71818d467bd3b8ebacb619e8ad42916e600c043effceb3855bc48a629e60ae886f51b2a7876b0e623fb2ce68af4b039242f963adb0e4240aed0ed07f65f1ee7c0cc77d210d0c2d1dc10c81b881aa0c9c9e9499665cf2970d2ccfeeb3191531765", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 2, - "comment" : "", - "msg" : "0000000000000000000000000000000000000000", - "ct" : "207180c340658b5154ae45d2e4e7326a0997c683a26b595e536a29333c4b66149af85e029d5419a39e3a147b221516ffd86b6b4b66c3e0c4c49fe8c57a2f5c37b8704b9b592b80db9cd788a4ed51ab4f0a1cbed63bd18d1f06a22f225866b0c2c417cb23473b7ba4250b1353bd2e5b4f0f937cd2efe5fa38db3c295f7748b970088657db4aa9a76e1ee6fbff166ec1861d00d085326c7384bdd1bc2f400d4f74dbdfadaf3fdc46073e668573e02030b9eb5af58eb540c66677a771194479ec0098d858a2ea45d0ba1e6b32440dfbac745000554d51a17684ca964b02a74d479f1d432ef763ef4059715a4348cfe36a215359712f25b6977903be4adb92febbf6", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 3, - "comment" : "", - "msg" : "54657374", - "ct" : "5eab3f0741e63986ed647d53e1cd71df041986900803d0f99c68355d249a15a47dc5b4f70a191477654299e5a2731f3b4eec76dea18262fc696ac794e5f66cbfcddac4472c578e246c26707598055584540b839836b1404c5611ae558a984cee8fd036cea924e0be2474a940f61e0acc14fcae95ebdc59942a9ce9af9a9c81999f7f6815f057ffdc2533cb15d6391d1e2d95f16f9c04209c889a4c359c7d2926d28a66e2b030a416b928d2825627998e5191fb4983a6e65024262d94fc09187a2d78162122433251d1bfcc8e507d06eba2d229c10031261da32ab8ccd15f1c5f9fbf07ed158483d736a110af4b44d6a4da60d6cb519b4454213cf9f0dc560f2b", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 4, - "comment" : "", - "msg" : "313233343030", - "ct" : "0da290b0bf71a1141b2adc62b5b42b07fc52520cb05d1f39ccca7b7c22d379a6c2f2d93143d057050140527a1e5638243938b531ec3de7014b0151301e49b9fa433482a02abdfd94193dc9c70157e557776a69ded01ecbeac405133595c61165a428b6284729a4746b47d2bbaca9d7432c3b5693591cfee488eb3c68ddb6cde0dd61cfc6952423f994abecee34f5683732b29934a2c498ad48cdd30c149177189f48eefd9cc7232df18be11ff5f7e3af7319e3115997c599e2d8f7f4f663dcc40032d403436d3058a5ea66473660f0e195281ec6eba997d2a951ca6ca5f3c112715c89da1d3dfb20a21940594ed10ade90ed7452b753757d7241cb8a803c373a", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 5, - "comment" : "", - "msg" : "4d657373616765", - "ct" : "121196e51a3f4476bfb6adddfdeb3a25dad72d1ea315d652f331a43631ad36724b3d14532110dc44e407b1184618f115677b33751fb0e8786ba220cfa7fc3fce22822eabdd4fc2761c7f34a04e8f13c1021c31adc123a32d871f0da6cdacab9c020222da52afd5c307a6e55e4566944403fda426ee2c6c973ccaaafe2d081ed8c5b1dc00662424e395faed86c9ae19a3a95950c83d2a9ad5c7e7f670faeb123acef07fe7795ad298aafe543504d7811336b3e2ecb1622bc90599a185b34700f8f4c52a651d73ea57e8cfa80e61d9da61f36951c7194ae4dee3c6e67b5757a39685dd3fe01cb87620a54666ff8132e93d7081d38ddc9f079431075e96cca78f59", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 6, - "comment" : "", - "msg" : "61", - "ct" : "7ae8e4f5494393be144d81517f11baf4b634bb68b2f0ea9b30731035e8cbf4283c0ca99120f60b75ef685e989fecd7a5dc524cb66292a0ab87ebc61e67baca1a8aed99350edee045dfdd029406acb707d85dec9555169cf7ec5118d8f29d182f205e2859a8dcc5122bed640ad0ef128deb21785efaa20f92067dc216cf40c15bd7130e2c094131917950a816da814c5990fa6beed709a0218f4ddca2473796e1b44cff6d7ed601c574a784d0865d3afe5fec023ebe71bca881da5637e3d1d17238c20a5bd0075bac018f07898f74b9e6dc0fa3d5f8d0b274dfef3e6720d8396b34a81ac2e64da5b3e5d7666323ed7c56e8bdd179f3c6b2cf05bcac402513dd87", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 7, - "comment" : "", - "msg" : "e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", - "ct" : "096958786ee7972050d67a9e4b69d6c6af7db7cc674386df725770dd29129b826e39552330104c8d71e6cc3a3014dd2f61b54153af51b0438d447ee939f9e3c13bb8b00a37dea6a068f6c9d27e848b1be7a1eeeb3ee50b78036fba95ae46948ca5b13f356ea24db10f60dc09e4b8bad8f766b668ef72524432080a0ce00ed676d6d5e354984b1078520412525848156d06f0652469f95791baa3d9a798ae537094f76f976faecd5c9ce0c930a75910c63dacf63485cb4b5e7bdbcf4d80e74037eaa1a8fe4b52930bec6be99cf6ac88cf5878dbf6859d456a95dbc34654eec425de84ca2a535d517403a9aada827e7d0093ecfc97ed056a7652825e9a45cb2dcb", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 8, - "comment" : "", - "msg" : "313233343030", - "ct" : "6583e2f176aa7e7f655d2c53497349c156c8851fb23325589e85fb83bfa857346caba222cdaa3234e71564154298c24dbb85e18822a1d5e7faa47863a64d76874a3cbc70f4d9f137426a344c473fac1dd7008a9973765e9f66c5b492535a647c273c4f78ceb5aa7ba963a2142f2ce4a81f804c002b9b2eabb3c75e80a3c6ceafe5384a544c672a5d28d32bb87115f43eb79775fd9b3f4a2f6e6a89368bdd95ef1d014877b60afdb1234acd57653a65459f01b2fbe381f22a739504b4897a7e6c33b6349b276db6083abad9c169405859b800c812237634b503de6ada43013c1d86697a135be78a9784576d796d62aa7819e2ea0e2d902ffdd9cfdd1ae66212ee", - "label" : "0000000000000000", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 9, - "comment" : "", - "msg" : "313233343030", - "ct" : "a0443ba434156d0b503ec662f5eb5b10e20ad0cb8233720ee187ba986e4811dd312844d3edb26bfaf51b4b9268dc3c76072dd47c199d713c91824da23ff00481ee69e9d4cc543120fc33b7244bf0c1ad5fdd1ae9cbada7fe9a70ad0afaaaad8361e8dc4b3198ae661a84e275b60bf2ebb85e512da785d2fc3482294fa11967681d7bceffc08ce0e36f0a8af7fcfb1337186863c2c1c1b94c9ec9785cd3d94d15437c23b775677f3d29a4c9e52f13398fd14661160e5868bca97625aa6c7ecb07bbb479644def353f1f01a4c4100f9adb82c4f6a265a5ee962da58c3c042aa549c9d2de3008e7448e0c4b9b4ac8f5e4d8629873909bb995ccc0825fe87d81d596", - "label" : "000102030405060708090a0b0c0d0e0f10111213", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 10, - "comment" : "", - "msg" : "313233343030", - "ct" : "26aa8e7931ed624bfd4077e3b83ec08de080483a61641e877f493fb7d0ae4dfebd4f05612a2e4869d20d440a64e928b13daa3b79da2ed674b99421df7e7f625a22b1c71136da27db699d3dd96e3364ee0cd2123ab6808930c6bc28a5dc307880d1ab4b03bcd6178a81b8ad52aafffbab387d40352dfea526abedca016c87e9e56ccc4c88e80f579da015b979bcdd88618b2a32ce072918b2e223535359f1ce4eaba5e692e6296b2140dc2304092ebd6f136a48092b3849082b57e70c93b54db55045dd6094ef3d2cfa8bc9e2fd2b1bbe0c7c603ad38d3f40c9eac8ae5e28cbbb031c38d93d3b2541d94eab3a1e8992a444ee4ce7b8d08c0b9a4f623d32fcba14", - "label" : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 11, - "comment" : "Longest valid message size", - "msg" : "78787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878", - "ct" : "7efb69f1137d6a6e813b7ab75bf0400b3d07a442b88ab048675dc06b0215fc1a2e033263ec31a6c1d2eac56cb0470d69022a48131d1f000bbed70586b80cf6356465c8834daced7ea2a5ff8ef9c44d5ab828ffbf0556a6394752a4a28a70cae20084e1236f042f6c29de5cb34ef73acba5abcc7ccb3a26342701df3b9daa945d9fa5bf0b9b10306655e56370183f50fb8321f8f0cd1c72114791fca5df2166296b509b01a0b291c46110787cebe69d41b3b1e89590bc2f5e5d49ea24ae0f1207eef1aee54b9760553e80c5506a8a8a75732e92875025f0bfd5ead71e4340c8a9fa16dcd5a7dc96d8c4a7dc4e91f47a69366445c4695c8bad578ffe52bb672f65", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 12, - "comment" : "first byte of l_hash modified", - "msg" : "313233343030", - "ct" : "287d7108a1c6e7a18acb0045b20c57cdf2ac03456b44942764a7a9e9fdf3db481d7e202e4c8d733b56b9c1e93d71e791af8325c9363df789b252a5ed0eddc79e76fa41c2cb0a35618398217a390a5e6d99eed905d5554d19c1cf4e30bdf1c2fcc5148b641d71b3f1977b63d232648ddd935ec9499a53ac2fbcac55f462e91065adaa018a39c453ba759bd68b454074153421e2ce75cf149f748b5b84758df8a423d1c50c880af863f2a6df3cd465ca36aa2152b5771f3d507f4a4dd9f8006d80eca23537092287976f218a90df1e16d889fe31e79f7309f3224f613e9b52479fe73b7aad915319a3b62a5936649f7d015d7b09f7fa9f454f78a7c3dd4bf791e0", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 13, - "comment" : "last byte of l_hash modified", - "msg" : "313233343030", - "ct" : "8b65065af82770625d24917d13fd97ae13247cad97910a2651f95800165b76cc34bfe06cbf8c31a7d7ab4f41e05c45a25b90c606378c8e49c95a15ca11ae37e797a00f1b2680a6958c54396be4e1ceedcabc58d9f136b36867a2fefe648a9758f49634bfbcaa48717a116cba58c27539be10c56911aabe013e0329645e8308423c3aa42e0c9b1f4b5f546ddd9f90bf4d007dab52ac3879db755e4f2b96db5cf01950f39076f261f50b1bae137be500b03ceff6ea1bbd80b33424f7faba5cc6b86670fcb7db1a9b3c58bdfd7b75ba9f3ebd34ae32d320c757020a7324df7d3985bccfe0e81bb7f61bd98cb37219312299b4f274b2c90c52a8e1790f52e8fdd768", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 14, - "comment" : "l_hash changed to all 0", - "msg" : "313233343030", - "ct" : "356e91db9bd932c7b5726da288e2620cd79667c2e1d7aca562331ceaa6e4ab47665213ed75579abb147728bcff60787c95107f5be787c42e714d51627fcc8b4ea71c232c0c80ce6163cd0fbfa9dd7e8c1990176abc2705f4ffcf1d5c62393eab1c0ec8a653a90f27a968df8f4af622e96f663fceead8b0bf5dff65cd657a72b9c33265c5c2a8f7f9c614b9c2f8a95246970e6a778aca4b12552da47c274282ad9205ecd2264ae3c649597beaa35c141910e84233776d419448f55019a84e199a4867d68bf213f47b0316d50079dab77299fbbe7fe8929906461c1103a97c2b3f1633c8ef03e820ec675e331cd1fda8ebfedf541d0f2b571f4eaf292ce0ab14c1", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 15, - "comment" : "l_hash changed to all 1", - "msg" : "313233343030", - "ct" : "5a6efdd2d211d50366885e177190ce1621ba110ee46530bd083ba76ed48992d85efd8f9ba964eb33e596e0c0bcb545f89e2c9592ed18495e8e5df1866fe30b27522a3ad9cf7124c4aa23f7c925900613c50b7c18872b4537a750419ae128e913e9a2d87c219e2cd01132972298028e54fe394ef9779d04543c72eec4c5732cadff0b954964706bc4085722b0c595162d11793ab29754837bf5d324e21814ea24b12fed441f20d22148ba5a987b6aa7c7d4ab5a33af8e6c9096c29777cb0d5cfe938a6ed5d30936a5a8f5fc435df14d1c439d1b9d274254e7b248bd20d21dc4652c1605d5a2929db018bd45794a523b217fe0a9a6b0704197ba8126fc8311556f", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 16, - "comment" : "first byte of ps modified", - "msg" : "313233343030", - "ct" : "52582e10264630e1584155f5e970b8eda9108a87370861cda12ee773411cf556db328c8a2a165d10f6f969ac61b170a75975fbdf9319d13c9535f30d621db19e41da3a04fe40874caf779c8f03bd5d1892e52925b183c118446ed9a335e9c1dc4519fb1253215e5f8d8ee6d49c0167af9d5ca5b1ace067af573e0be9a61beeccdac37b0e54f6b0f70576cb8a400d01136357a8576e81c119d3dd91c7b5cb343692a810362e1e6dc06c1746e071a903a2856b4446f10f78c670d617e5e24dc5c0e45caafbf8ffc4af6b3ef998fe1bfb59aacb16d98d7e389679939861a6722c4e29af731da99d17058d7a12ead0d3d576de796ad2ad596feada4c091f10748536", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 17, - "comment" : "ps terminated by 0xff", - "msg" : "313233343030", - "ct" : "3f5e00347c36ceb79f400effcae92d331aa9f52539041c50dbbc6fd071912912692a16353378276a2c1596358c46f6232434a95a99c573d0b83e4a6e970a73e99ca13d734506e2a2a56744b1872bffd501a80ba7cf5494df6ff9b421cb10247e11d19ac9e60afe0dda87cb351c21ba554ea50b70f6eee4ffa949ae38694ef831020d4e599c6ff4493d07c7b6be06453b84143813a68dfe0fada2317a9f4040a3cf6308090b6bfaca36067312f41bc0c4c01ac00fdb5aee4395b04cdff82cb433b01cd3e70daafc7807b2f770226699e7535124a453f7ad2653bfb7cfe71e120dc37ba88a5be347ad134351c11ff1019b7e42d24b7a3890a8424fae53a10c0e11", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 18, - "comment" : "ps is all zero", - "msg" : "313233343030", - "ct" : "a166bf7b5c2cf1896c0b924a69233a0a585bd47ed7f2330654aa68806deb0ff68c6475050ab45c691bbbcc58dbc2f5c817729e8e195ebd39d48bd5e14977abae0829636831655917fb5a758fb43a8e505d6ce595f625970685f7ec81cb5592210f5d68c6e2e1ef26b4ef8c92bf44f077e1d5099f379cb8120ad185bf07877979ca81f251fb81be0ad3c14f4d7885fcec496f80033fd4279b6830a20cbdead27c0967e28d1e06ef4bd7ba89210ec0d696274a187dc2f13212f5adf06e9450eca398325cfda73431036ac21b087d373c9f575c941f8cb078961176e31859a61c49baf8ff4f817a11010448d6a0e40dcede1a5ac3befa4c6e9d9d67d8e8fd8b6de3", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 19, - "comment" : "ps replaced by 0xff's", - "msg" : "313233343030", - "ct" : "75829ac4d97848dfba21c1688e936cfc736f53fde5b91d5330b63a9968dd4f51c2f529fd8d8f84e4a908196fcc5deba21b5c7300d7381e07c4e0ea2184965169cc9464933ef5a840d86b1dbcc945c7547d9eab245ba64d24946a75961161c2b8f417daf11b163b1e5a5b02d45341384f37755248fa871e6a82f948ad6292f11445bf30596dcccec73a441cea5e5dc470016309a83b6c8f158536687ad2734d3ea1562d46e23bfe8cab498d19b0b104d97182aacf852b6db3c4670109b81af1bd99b483d92b3e4bd813edfa4d0513214dcc5bb4da768e86007c22f11e5fe6f4cb60b909958fb94dea660d3fff0b99db15c2d2e6c8df7478330dade8c517b90975", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 20, - "comment" : "seed is all 0", - "msg" : "313233343030", - "ct" : "8e5f01ff0c1775870715fd0366a8748531f8b00803df35e0e2308db63bbec4eca4e093351876b794213b904e5dde284a82d74abfcbfff94bc9a8300bea99edd07fe97d6e0b11219f85ac15acc404d37d3da16819a14a438f3f72f8178b312526232386e918a8a7e11fc38f4668c499a00480cf9d2d75aabc0198d3ba9ba345fba9105c6564df5f6ce796f14100d186abffe4d83d57969c1caddc7c7aa340b4d1bab23d9b3982278328ddebe648f5c52588738f3c56a88b3f34c890c03fafc27f485a17677a53e974dc1dd86f463a927f4328ac51bbc61705ae8abd7f45628957489e2defd8e043b955b118fb2a1c407d45893004aae0f945f06add1e45b41a03", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 21, - "comment" : "seed is all 1", - "msg" : "313233343030", - "ct" : "50c23e2ad6e3f3b10a5716cbf60efcc9f66d2c6f17bf050ba0153b877ba2755e8a0d54060034562266155744ef80547b8af777b0ff764fbb12baae49d02b4f6d65b6cd8f0a397839101d32ae163ff2e6072748d6b8017e5e73e332d53f4e91fe6233a82dbf54f3146b489803575c5ea37ab55a9ea7eae47ad4f1727d45822b569cd6e5d4b6ab759850948186616b5da2a9a316f57d899f91934bbb27edcdfa19532ba1c01f3724738daffdd88c9a18562ebcbc49185b0a817407903476d442c424c81b63aeb8f9d1b184756e0cc0a381eaba45a85c8bbc6770fd047ff1a6404a384599fbbd6a40b212a066e23f6a15cf13e42c0ea88c710e4d70c612074968e5", - "label" : "", - "result" : "valid", - "flags" : [] - }, - { - "tcId" : 22, - "comment" : "First byte is 1", - "msg" : "313233343030", - "ct" : "3f92a694661cae336cac7a3c5a6f67e0655d10218a64459739ab9664f2cec58978939512df621e6b92fe3429bb22c08b5103da648a7719e7e95a04e6b61601546955825d60f4c517619f851780ad17f1b8a955cf8c7f1a5e26ca4a0cc19cca751d0790d56e1140a4705e19274f638b7c16d9d3e423a7f787d02699235e3e9e4d543a954f9b1bce5411c8ebdcae86a4bb86c66818a0bab51a2b00383b318e53d95508bab1b19e388cd5a03cdceba0f7176c1782e19ef62cff69352d444b1ce0e1f339e96d8a65c07aa37f5f2cf33867f6c496e0da6cd79b3e2183b57064ce21a1b92072702e555a82cad75107fdfd8bd5e7ea5f119cfbbc1770e962fd0b781aff", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 23, - "comment" : "m is 0", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 24, - "comment" : "m is 1", - "msg" : "313233343030", - "ct" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 25, - "comment" : "m is n-1", - "msg" : "313233343030", - "ct" : "a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d4", - "label" : "", - "result" : "invalid", - "flags" : [ - "InvalidOaepPadding" - ] - }, - { - "tcId" : 26, - "comment" : "added n to c", - "msg" : "313233343030", - "ct" : "b056e2513c7c470d897032d406e97b5946dcad52df1c1650d61a1d7b0af59e8cfaec4d9e834d06d819b92a7d440d277e5039ab8aeff25043e98b281ae6ce0a91f8dfbbd1b4998fe5481671381b6a3952448b617ae606f06a0143561a040edaf3c972e611bd7cb814aa4761d38e4a007ca65af8fde6eb25d919d8bd9273cca7622984aa27994d049612424547775c5df75483962143522d075b8c55ea61b04583eb4c0358f9fbb902dedff30b7d8592b57094df4f6345668af53d1aea86fb36dd69b4434bacf8fc12c13802f5b03551ba8f207d4060a9f56e6b7e18c766eb82b6ce6ee0747fbe785c3c1c25fe7fb87de50032b172129fa41a69c3ce0e777ef10f", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 27, - "comment" : "ciphertext is empty", - "msg" : "313233343030", - "ct" : "", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 28, - "comment" : "prepended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "00000da290b0bf71a1141b2adc62b5b42b07fc52520cb05d1f39ccca7b7c22d379a6c2f2d93143d057050140527a1e5638243938b531ec3de7014b0151301e49b9fa433482a02abdfd94193dc9c70157e557776a69ded01ecbeac405133595c61165a428b6284729a4746b47d2bbaca9d7432c3b5693591cfee488eb3c68ddb6cde0dd61cfc6952423f994abecee34f5683732b29934a2c498ad48cdd30c149177189f48eefd9cc7232df18be11ff5f7e3af7319e3115997c599e2d8f7f4f663dcc40032d403436d3058a5ea66473660f0e195281ec6eba997d2a951ca6ca5f3c112715c89da1d3dfb20a21940594ed10ade90ed7452b753757d7241cb8a803c373a", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 29, - "comment" : "appended bytes to ciphertext", - "msg" : "313233343030", - "ct" : "0da290b0bf71a1141b2adc62b5b42b07fc52520cb05d1f39ccca7b7c22d379a6c2f2d93143d057050140527a1e5638243938b531ec3de7014b0151301e49b9fa433482a02abdfd94193dc9c70157e557776a69ded01ecbeac405133595c61165a428b6284729a4746b47d2bbaca9d7432c3b5693591cfee488eb3c68ddb6cde0dd61cfc6952423f994abecee34f5683732b29934a2c498ad48cdd30c149177189f48eefd9cc7232df18be11ff5f7e3af7319e3115997c599e2d8f7f4f663dcc40032d403436d3058a5ea66473660f0e195281ec6eba997d2a951ca6ca5f3c112715c89da1d3dfb20a21940594ed10ade90ed7452b753757d7241cb8a803c373a0000", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 30, - "comment" : "truncated ciphertext", - "msg" : "313233343030", - "ct" : "a290b0bf71a1141b2adc62b5b42b07fc52520cb05d1f39ccca7b7c22d379a6c2f2d93143d057050140527a1e5638243938b531ec3de7014b0151301e49b9fa433482a02abdfd94193dc9c70157e557776a69ded01ecbeac405133595c61165a428b6284729a4746b47d2bbaca9d7432c3b5693591cfee488eb3c68ddb6cde0dd61cfc6952423f994abecee34f5683732b29934a2c498ad48cdd30c149177189f48eefd9cc7232df18be11ff5f7e3af7319e3115997c599e2d8f7f4f663dcc40032d403436d3058a5ea66473660f0e195281ec6eba997d2a951ca6ca5f3c112715c89da1d3dfb20a21940594ed10ade90ed7452b753757d7241cb8a803c373a", - "label" : "", - "result" : "invalid", - "flags" : [] - }, - { - "tcId" : 31, - "comment" : "em represents a small integer", - "msg" : "c4fc4b065f4595751c7ff8bb99681d505b7d0f1730d404617940f4b5c3b01979ffcffd19e86f69450e5fc14d9bc27a1f39734fd5f8f663d2d87c444e3e15da8764709909679aaa553d98ddbb1ad7dcc8be04bb8751570b4e6cdc7a8f56b09a4af43053a393bd8f947d7625137e6d84f9b9c727475a98ea22efcf679ee0aa5258da88a08afc53bd8bfa19b0131d6f676fe198a9c6a1f84174fc69ccf8e34e3617f8ff6c4192075cd6668392523fbecedb27578e591dead78c80a89be589a1", - "ct" : "18416ff48c3a78bc85e1f483d546052d84deac02ce86fcd197215f227b6dad58bc19394f46551111f858b08879bc37c620b1e81ebac4c75fdd71713ce75c24293fa39caf46294d28bf87a46da9a769a304157ea1fc71afc3bfb790da32e84d812a8946d1b3d211fb6972b3fe6674496b2d8056c1503d02fd4c2e607bfb1e6b26b35636b8b823757ee9ba3795d3af2dd8710b0a6da4dbb430bc69dc089f1563d34f0d79431d63e7b8d94c8234649b64223d1e0be17463401184a096feb9c81e226eec26c7e9f3f4357536633029ebc0349bc136d1206c6064fc51b6d2e79578f2b26439c5b3f6ffe1b515740b3c4b94a49430631292968eb50983251bbc7f0f89", - "label" : "5a3564e9482a072bd99d0306d69a7f4595c49fb9c06b72250eed2b50ceddcc4700000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 32, - "comment" : "em has low hamming weight", - "msg" : "03fd61590ddd05555a6d46d1e8925293fe46fa168cb06135c2e7c8d36551187e62016f40f3eb31751f3690f5da1aaba5c16ffa650b2e6c25f3763fe324929c4becc7fb28a383d66c31973c72eb13ff8c87a92b495f6f0619290f8675e9889f49d30d5e77b2115e8805eeeb1aa9324843a75e0bbe70538eefb7978a0ea7beb211e67bb075981673517518586eca5b04ef3ad6a3a978605fbc0e67af7fe412acfcb550d20c9900f4d71d7829a107cc51d663db54c57116959998f3946b4d43", - "ct" : "23ee3b4df8ac632078167f2f97a736469c6e6b39ced4ddc552d31f0fbc7ccb478adabe56cac20cbec1a0084125aefde0bdb575d68bd74cfbdf5f3bfb4401fa573645c223568918aa911c1f5a01b3b0903e91d82e8c04194df4bdc5facb6959b4df23593c7925a827f029064c75a4bc3d2899649025670e70f3e01336fe961664563a3bb0c7bca66d7eed48326746a060c5d3f18a160abce399917ab2e2386d0f1c2d7c9105d16befc1b0bfd72606ec300a777ac550b1b0b807b7e46467db5bfe0eac8bcbebb2df47bc65fe42174368595b72650b770f47157d2d14c71cebcaaa5cf567ab803e2bcff5f4298c06b1983757abe02faf4c7c5f9141aface72ab98c", - "label" : "b503d03521b4ffc4b855c94e911a6117f04c76c6fe8000f8031e705486ae641900000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 33, - "comment" : "em has low hamming weight", - "msg" : "90fd851c721e936df0134ce13f2b7f4469d58f69f85f4bebe2726123cc742c1c43293f85f50b5c6d220f40c387a1f2bb2704a16508e267c6c4324a82191170e67cbf57f56dc02a706e3373e9dca1ca0f7703804c0093e9f8a2ae5502d2ccbf26dff3cd179b5b8f97959d5d2a9400b31b01ee09caa6013d198beb7e0979aed5263974591cca36ceceb252110e61bebdf0272386f9571be79fe3afc8478eb9e7155759ed20e2a2e537d98aeda18c374ed9b48be8624984ba4b15bfffff6cc9", - "ct" : "94f4edda147a95cf29bb0402d0413e5421b5ae347c31b2ec3239bd808c4e5b609d0ce9d9c3a12e47eae6c5fe319288553ba25e8932d644a6387087b4e495ad4bc124596d9440ddd5376f2c1844e61a7c51bef528ad20065574198ace92d3402dcf4df8ff5d68c06dafe9302da4e075ab0e011bfc1bbaa55b4cc1bc30dc9b104539c21d60b6fc7044e0242591360751fbeb2883099602a900cb5320195cb7071819dbce2667a7532aacb2c9b96f3e726267b709c5c0877280f5d4efeb5d4155bf8751f9560db4bfaf8150a8f27b366c3935860aeb106bd88914b6bccf35bb6eaf9217254e6dacd88f0f1182d6cbe25635d4d9ad76a06687d2527ed7d9cbf50803", - "label" : "3bd80a6378115c0c946b4e3af28c6c96d1110621e21e8633416e9c8ef0a73d4000000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 34, - "comment" : "em has low hamming weight", - "msg" : "0cf83d297f20f527983f3111716a68d0d33d97ee4f5d1822c9e5382398542bd532316db29d8a8f92bacae063aca1c1cd9bc272fec688b3f67956c662a5b2f895509fe6f2406f0674afb0f0472aa205a7d55a092a5ced1b1c1b92a7b93f9c695440a3257e007949d27098410454d4e39612c7dcabc85e19f3421734bb2717de00c041f569e8d43006005960af8f573e13867911989a4c678da8f15ca0278ebbb21742fe33b3613f22afca45ac09f815b50155ecab6eb07806bdfef37b5dd5", - "ct" : "68825b60b53cc0bbc92e4ce994b0dd270bad0eb657e41acf26a9e3161c5254e4bd38b03e90d7453424e605a372bc185f3ae6ba9ff58fab0cc4c1cc158d7a1e8f1f0b30ac08789f7576fab2dae7e86dae60d9af793dc1b400c2d25a9d3357ba0d27361d74a1b4e1445147a45875901d70f3190a0b34defbdbec1cb9ed3014f15a1a0f9000d9b224fba944e791d303d816bafeb8e65dfc6d740d04719c4ab36c4bbf4ebea5fc45ead338825fc5a71dd6c25f8d8891a4f8d6e0b35483c75c1bd645c3cbe9dcf5a17ae5cd2abdfb132b2b37102122a9bfc42ceb3eac98f2af39905b9cece5d122b70c95239062ceeab798691dd2b88028047924d5ae814df78d555b", - "label" : "48915cebf2a2ef9e5d5b92cce033b60456d72af1ba54f88f5074a36a643a317800000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - }, - { - "tcId" : 35, - "comment" : "em has a large hamming weight", - "msg" : "2124d6fdfbbf77ac89f50a235b0af69edbdbe9ef3fcde36441d7022afdc8434431b893eba822cb82585384e36298df45b4b4415a3bdc494604305272f5e988f2cc14a56043421557d5e5dc958fd771e4d509126656d21222cb8e2e1052ba38286c5e3d0be0f4b1c978a61bd1e3652ccb63fea82ec46d6b64863c00b93a3243e2328f70f692aa65f73976335eec5b29a9542befa03d5e82aba9dc285af0913382d67aacd513bbf6f5095e4d5f9b5ebfb5ddc25cafd888addf9ffa068bd4eb", - "ct" : "0ed3b1f6a9b200147e535042353768280244b3c831215928a2b2103df02b3613f43ecfdecc6a8f61ce0183b8c60980f82c3dde3a731ea25a0ca9b89e5f68a7cd6cf6c6475f591f24b7a89a885a46edb0ade49e37665219a6da9afbbf655943912636af85e0bc859f43d3c48b4e77c9d1c0d641a21fecf4957185b805aeb908c6387c9d1c8ad85a166c075942f0cf68ca70f8174a9d2a4e5589c7005e2c423ff97c97a208da51d9adc0cb4588a257c0a1d0feb02eb050f9980309abd09258570ab2c8186cc357a9f693107c84855ff6ee7936b71980de42883e3ee7c1c6ddbe03d16a1f1c5bc5f987e6de9cab329ed7a31b59cac467d7b6432cb40f616ac9d4a8", - "label" : "02be339a2b399ffeaec99acfd80f50ebdfc8fe3021a9a432ddd4134b3466b4a800000000", - "result" : "valid", - "flags" : [ - "Constructed" - ] - } - ] - } - ] -} diff --git a/Tests/JWTKitTests/Utils/Wycheproof.swift b/Tests/JWTKitTests/Utils/Wycheproof.swift deleted file mode 100644 index 3d9e7509..00000000 --- a/Tests/JWTKitTests/Utils/Wycheproof.swift +++ /dev/null @@ -1,55 +0,0 @@ -@testable import JWTKit -import BigInt -import XCTest - -func wycheproof(fileName: String, testFunction: (TestGroup) throws -> Void) throws { - let testsDirectory: String = URL(fileURLWithPath: "\(#filePath)").pathComponents.dropLast(2).joined(separator: "/") - let path = "\(testsDirectory)/TestVectors/\(fileName).json" - let fileHandle = try FileHandle(forReadingFrom: URL(fileURLWithPath: path)) - - let data = fileHandle.readDataToEndOfFile() - fileHandle.closeFile() - - let testVectors = try JSONDecoder().decode(TestVectors.self, from: data) - - for testGroup in testVectors.testGroups { - try testFunction(testGroup) - } -} - -func testPrimeFactors(_ testGroup: TestGroup) throws { - guard - let n = BigUInt(testGroup.n, radix: 16), - let e = BigUInt(testGroup.e, radix: 16), - let d = BigUInt(testGroup.d, radix: 16) - else { - return XCTFail("Failed to extract or parse modulus 'n', public exponent 'e', or private exponent 'd'") - } - - let (p, q) = try PrimeGenerator.calculatePrimeFactors(n: n, e: e, d: d) - XCTAssertEqual(p * q, n, "The product of p and q should equal n; got \(p) * \(q) != \(n)") -} - - -struct TestGroup: Codable { - let n: String - let e: String - let d: String - let privateKeyJwk: PrivateKeyJWK? -} - -struct PrivateKeyJWK: Codable { - let kty: String - let n: String - let e: String - let d: String - let p: String - let q: String - let dp: String - let dq: String - let qi: String -} - -struct TestVectors: Codable { - let testGroups: [TestGroup] -}