SignatureVerificationTests.swift 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //// CryptoSwift
  2. //
  3. // Copyright (C) 2014-2023 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
  4. // This software is provided 'as-is', without any express or implied warranty.
  5. //
  6. // In no event will the authors be held liable for any damages arising from the use of this software.
  7. //
  8. // 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:
  9. //
  10. // - 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.
  11. // - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
  12. // - This notice may not be removed or altered from any source or binary distribution.
  13. //
  14. import Foundation
  15. import XCTest
  16. @testable import CryptoSwift
  17. final class SignatureVerificationTests: XCTestCase {
  18. func testVerifySHA3Variants() {
  19. let testVectors: [SignatureVerificationTests.TestVector] = [
  20. SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_256,
  21. SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_384,
  22. SignatureVerificationTests.testVectorMessage_pkcs1v15_SHA3_512,
  23. SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_256,
  24. SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_384,
  25. SignatureVerificationTests.testVectorDigest_pkcs1v15_SHA3_512
  26. ]
  27. for testVector in testVectors {
  28. do {
  29. guard
  30. let publicDerData = Data(base64Encoded: testVector.publicDER)
  31. else {
  32. XCTFail("Corrupted data - publicDER")
  33. continue
  34. }
  35. let rsa = try RSA(publicDER: publicDerData.byteArray)
  36. guard
  37. let signedMessageData = Data(base64Encoded: testVector.signedMessage)
  38. else {
  39. XCTFail("Corrupted data - signedMessage")
  40. continue
  41. }
  42. let result = try rsa.verify(signature: signedMessageData.byteArray,
  43. for: testVector.originalMessage.bytes,
  44. variant: testVector.variant)
  45. XCTAssertTrue(result, "Verification failed for test vector with id `\(testVector.id)`")
  46. } catch let error {
  47. XCTFail("Failed with error \(error)")
  48. }
  49. }
  50. }
  51. }
  52. extension SignatureVerificationTests {
  53. struct TestVector {
  54. /// String to identify test vector. Used for logging purposes
  55. let id: String
  56. /// Public DER for RSA key
  57. let publicDER: String
  58. /// RSA signature variant
  59. let variant: RSA.SignatureVariant
  60. /// Original message that was signed
  61. let originalMessage: String
  62. /// Signed message
  63. let signedMessage: String
  64. }
  65. static let testVectorMessage_pkcs1v15_SHA3_256 = TestVector(
  66. id: "1",
  67. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  68. variant: .message_pkcs1v15_SHA3_256,
  69. originalMessage: "CryptoSwift Test",
  70. signedMessage: "IOIA/8NgoLVwtfto5Lnea7GLBXMddCAgQFBt38HVJpbEtuEcmu8uFs4sJuAHalH1iIe/cGPrwASRM94fSDKzuQ7XNX2Dwt8DBzu9BlAtEWq9GUSL/6DED0xJfqrl6G5rh+RRk9YYIk3TeI9H4HzsmIDFjp5hxFu0SedoR5DzEVM="
  71. )
  72. static let testVectorMessage_pkcs1v15_SHA3_384 = TestVector(
  73. id: "2",
  74. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  75. variant: .message_pkcs1v15_SHA3_384,
  76. originalMessage: "CryptoSwift Test",
  77. signedMessage: "J1qAdFj7iwlW6Mhyf5MfG2CN7BeUjKCFeCunBs2Hginwpcz/YfJgzNpGA93T+RBR4kLVuhs3OVILhwaMnTbgsMVNz0xLoZ5oegRADXDT1Ln3WuTUuqQH+RiMSILelgaHsU4fjj7jCC8wLFA2DtYm7aje1HF3ZRc/9SQSTREM5Gw="
  78. )
  79. static let testVectorMessage_pkcs1v15_SHA3_512 = TestVector(
  80. id: "3",
  81. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  82. variant: .message_pkcs1v15_SHA3_512,
  83. originalMessage: "CryptoSwift Test",
  84. signedMessage: "KMmRIptAPCZV7I/6gRN6wUQekRm+sxXWtoAyxC7PPiSBNd9XJTVVrEUnEfpnupI6uum+r9YxAT5Ha0S5XrYlojHZFLW3gZHLAKmRBushg8YRfqK68cDLYBshuqBlf5nuQZDU+7LTBh6Jnup2rGbQj1Bra9X9Hl9uZmoPY8Uoh/g="
  85. )
  86. static let testVectorDigest_pkcs1v15_SHA3_256 = TestVector(
  87. id: "4",
  88. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  89. variant: .digest_pkcs1v15_SHA3_256,
  90. originalMessage: "CryptoSwift Test",
  91. signedMessage: "Oj3CBwMQIEGrQwFuqIXklqOJG6pdaS5Kjal+sAKoMvEzXCB0h8K8w9YNt/XIOD9fJXdUaG0XR6RB8eEQxh/u6pYZPVUwssyA//FUjWLgKOecNkaca+EK98iIkivjVdEGK7yVhcQHJF19EfpZahVWWlEUCT02g8niomkWUHWIlo8="
  92. )
  93. static let testVectorDigest_pkcs1v15_SHA3_384 = TestVector(
  94. id: "5",
  95. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  96. variant: .digest_pkcs1v15_SHA3_384,
  97. originalMessage: "CryptoSwift Test",
  98. signedMessage: "ZCn19KmnT/QdzcNm077uopZeIxkR5EECX0po2QypPTYorYa9dGTm3nKR0mMr/G2C7ukrR2a8j5WPf4hXi1rlzOoFNufpbyQB33I9INleN7FjASmoxFcw6TyFNeMPN+TwKj9MVTEkZ7HtPL0bBsD8E08eRCDwk3UYdUjcvZcOdzw="
  99. )
  100. static let testVectorDigest_pkcs1v15_SHA3_512 = TestVector(
  101. id: "6",
  102. publicDER: "MIGJAoGBAJPTOQB0cqHPbrZO8Bnl77uFR8jgcYWmudETdRP57lCn/Q4v4Ga9OTqTkfbzX7DKq4WrrcPkx6/u4U4EVS6y7jyuq3Qn4VZMQPKiMiqRyRKhNKfC0i8SpMEhnIXGl824bi/YfV6arz0gicl24dP8C+HsO+WJGa7gtRs2d8hY2s+NAgMBAAE=",
  103. variant: .digest_pkcs1v15_SHA3_512,
  104. originalMessage: "CryptoSwift Test",
  105. signedMessage: "bk1/rtzt64ZApavxPrUEnsG/tN7nN6ITV3NKY0IR1i/3S4bkxIMulRsBPINpksTAafxrSm6EsLAmOPrqjwGycqRjSRi8/S6roUE/TIno2dGfO5e4eVKCQtD6I+CHA0Xji3X1k627vaYZqpTMFuMk8serfjMTHFe46s6S+f/64as="
  106. )
  107. }