| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- //// CryptoSwift
- //
- // Copyright (C) 2014-2023 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
- // This software is provided 'as-is', without any express or implied warranty.
- //
- // In no event will the authors be held liable for any damages arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
- //
- // - The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.
- // - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- // - This notice may not be removed or altered from any source or binary distribution.
- //
- import Foundation
- import XCTest
- @testable import CryptoSwift
- final class SignatureVerificationTests: XCTestCase {
-
- func testVerifySHA3Variants() {
- let testVectors: [SignatureVerificationTests.TestVector] = [
- SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_256,
- SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_384,
- SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_512,
- SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_256,
- SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_384,
- SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_512
- ]
-
- for testVector in testVectors {
- do {
- guard
- let publicDerData = Data(base64Encoded: testVector.publicDER)
- else {
- XCTFail("Corrupted data - publicDER")
- continue
- }
-
- let rsa = try RSA(publicDER: publicDerData.byteArray)
-
- guard
- let signedMessageData = Data(base64Encoded: testVector.signedMessage)
- else {
- XCTFail("Corrupted data - signedMessage")
- continue
- }
-
- let result = try rsa.verify(signature: signedMessageData.byteArray,
- for: testVector.originalMessage.bytes,
- variant: testVector.variant)
- XCTAssertTrue(result, "Verification failed for test vector with id `\(testVector.id)`")
-
- } catch let error {
- XCTFail("Failed with error \(error)")
- }
- }
- }
- }
- extension SignatureVerificationTests {
- struct TestVector {
-
- /// String to identify test vector. Used for logging purposes
- let id: String
- /// Public DER for RSA key
- let publicDER: String
- /// RSA signature variant
- let variant: RSA.SignatureVariant
- /// Original message that was signed
- let originalMessage: String
- /// Signed message
- let signedMessage: String
- }
-
- static let testVectorMessage_pkcs1v15_SHA3_256 = TestVector(
- id: "1",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .message_pkcs1v15_SHA3_256,
- originalMessage: "CryptoSwift Test",
- signedMessage: "IOIA/8NgoLVwtfto5Lnea7GLBXMddCAgQFBt38HVJpbEtuEcmu8uFs4sJuAHalH1iIe/cGPrwASRM94fSDKzuQ7XNX2Dwt8DBzu9BlAtEWq9GUSL/6DED0xJfqrl6G5rh+RRk9YYIk3TeI9H4HzsmIDFjp5hxFu0SedoR5DzEVM="
- )
-
- static let testVectorMessage_pkcs1v15_SHA3_384 = TestVector(
- id: "2",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .message_pkcs1v15_SHA3_384,
- originalMessage: "CryptoSwift Test",
- signedMessage: "J1qAdFj7iwlW6Mhyf5MfG2CN7BeUjKCFeCunBs2Hginwpcz/YfJgzNpGA93T+RBR4kLVuhs3OVILhwaMnTbgsMVNz0xLoZ5oegRADXDT1Ln3WuTUuqQH+RiMSILelgaHsU4fjj7jCC8wLFA2DtYm7aje1HF3ZRc/9SQSTREM5Gw="
- )
-
- static let testVectorMessage_pkcs1v15_SHA3_512 = TestVector(
- id: "3",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .message_pkcs1v15_SHA3_512,
- originalMessage: "CryptoSwift Test",
- signedMessage: "KMmRIptAPCZV7I/6gRN6wUQekRm+sxXWtoAyxC7PPiSBNd9XJTVVrEUnEfpnupI6uum+r9YxAT5Ha0S5XrYlojHZFLW3gZHLAKmRBushg8YRfqK68cDLYBshuqBlf5nuQZDU+7LTBh6Jnup2rGbQj1Bra9X9Hl9uZmoPY8Uoh/g="
- )
-
- static let testVectorDigest_pkcs1v15_SHA3_256 = TestVector(
- id: "4",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .digest_pkcs1v15_SHA3_256,
- originalMessage: "CryptoSwift Test",
- signedMessage: "Oj3CBwMQIEGrQwFuqIXklqOJG6pdaS5Kjal+sAKoMvEzXCB0h8K8w9YNt/XIOD9fJXdUaG0XR6RB8eEQxh/u6pYZPVUwssyA//FUjWLgKOecNkaca+EK98iIkivjVdEGK7yVhcQHJF19EfpZahVWWlEUCT02g8niomkWUHWIlo8="
- )
-
- static let testVectorDigest_pkcs1v15_SHA3_384 = TestVector(
- id: "5",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .digest_pkcs1v15_SHA3_384,
- originalMessage: "CryptoSwift Test",
- signedMessage: "ZCn19KmnT/QdzcNm077uopZeIxkR5EECX0po2QypPTYorYa9dGTm3nKR0mMr/G2C7ukrR2a8j5WPf4hXi1rlzOoFNufpbyQB33I9INleN7FjASmoxFcw6TyFNeMPN+TwKj9MVTEkZ7HtPL0bBsD8E08eRCDwk3UYdUjcvZcOdzw="
- )
-
- static let testVectorDigest_pkcs1v15_SHA3_512 = TestVector(
- id: "6",
- publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
- variant: .digest_pkcs1v15_SHA3_512,
- originalMessage: "CryptoSwift Test",
- signedMessage: "bk1/rtzt64ZApavxPrUEnsG/tN7nN6ITV3NKY0IR1i/3S4bkxIMulRsBPINpksTAafxrSm6EsLAmOPrqjwGycqRjSRi8/S6roUE/TIno2dGfO5e4eVKCQtD6I+CHA0Xji3X1k627vaYZqpTMFuMk8serfjMTHFe46s6S+f/64as="
- )
- }
|