GRPCSwiftCertificate.swift 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. /*
  2. * Copyright 2024, gRPC Authors All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. //-----------------------------------------------------------------------------
  17. // THIS FILE WAS GENERATED WITH make-sample-certs.py
  18. //
  19. // DO NOT UPDATE MANUALLY
  20. //-----------------------------------------------------------------------------
  21. #if canImport(NIOSSL)
  22. import struct Foundation.Date
  23. import NIOSSL
  24. /// Wraps `NIOSSLCertificate` to provide the certificate common name and expiry date.
  25. public struct SampleCertificate {
  26. public var certificate: NIOSSLCertificate
  27. public var commonName: String
  28. public var notAfter: Date
  29. public static let ca = SampleCertificate(
  30. certificate: try! NIOSSLCertificate(bytes: .init(caCert.utf8), format: .pem),
  31. commonName: "some-ca",
  32. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  33. )
  34. public static let otherCA = SampleCertificate(
  35. certificate: try! NIOSSLCertificate(bytes: .init(otherCACert.utf8), format: .pem),
  36. commonName: "some-other-ca",
  37. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  38. )
  39. public static let server = SampleCertificate(
  40. certificate: try! NIOSSLCertificate(bytes: .init(serverCert.utf8), format: .pem),
  41. commonName: "localhost",
  42. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  43. )
  44. public static let exampleServer = SampleCertificate(
  45. certificate: try! NIOSSLCertificate(bytes: .init(exampleServerCert.utf8), format: .pem),
  46. commonName: "example.com",
  47. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  48. )
  49. public static let serverSignedByOtherCA = SampleCertificate(
  50. certificate: try! NIOSSLCertificate(bytes: .init(serverSignedByOtherCACert.utf8), format: .pem),
  51. commonName: "localhost",
  52. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  53. )
  54. public static let client = SampleCertificate(
  55. certificate: try! NIOSSLCertificate(bytes: .init(clientCert.utf8), format: .pem),
  56. commonName: "localhost",
  57. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  58. )
  59. public static let clientSignedByOtherCA = SampleCertificate(
  60. certificate: try! NIOSSLCertificate(bytes: .init(clientSignedByOtherCACert.utf8), format: .pem),
  61. commonName: "localhost",
  62. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  63. )
  64. public static let exampleServerWithExplicitCurve = SampleCertificate(
  65. certificate: try! NIOSSLCertificate(bytes: .init(serverExplicitCurveCert.utf8), format: .pem),
  66. commonName: "localhost",
  67. notAfter: Date(timeIntervalSince1970: 1_751_648_938)
  68. )
  69. }
  70. extension SampleCertificate {
  71. /// Returns whether the certificate has expired.
  72. public var isExpired: Bool {
  73. return self.notAfter < Date()
  74. }
  75. }
  76. /// Provides convenience methods to make `NIOSSLPrivateKey`s for corresponding `GRPCSwiftCertificate`s.
  77. public struct SamplePrivateKey {
  78. private init() {}
  79. public static let server = try! NIOSSLPrivateKey(bytes: .init(serverKey.utf8), format: .pem)
  80. public static let exampleServer = try! NIOSSLPrivateKey(
  81. bytes: .init(exampleServerKey.utf8),
  82. format: .pem
  83. )
  84. public static let client = try! NIOSSLPrivateKey(bytes: .init(clientKey.utf8), format: .pem)
  85. public static let exampleServerWithExplicitCurve = try! NIOSSLPrivateKey(
  86. bytes: .init(serverExplicitCurveKey.utf8),
  87. format: .pem
  88. )
  89. }
  90. // MARK: - Certificates and private keys
  91. private let caCert = """
  92. -----BEGIN CERTIFICATE-----
  93. MIICoDCCAYgCCQDhjLeDGLctlTANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdz
  94. b21lLWNhMB4XDTI0MDcwNDE3MDg1OFoXDTI1MDcwNDE3MDg1OFowEjEQMA4GA1UE
  95. AwwHc29tZS1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALzrSLrp
  96. IcroapZ1CB2jz5N1O+S22oLpKyYE2KT+lXN1Bp44ni4bkklrXSNwyqwldqh9gk5m
  97. HRvXA00nNkXD4dx0wjDJqxgs3AME58EIWo3MKrCNUS4cnD6qeQNf9ZZkxE8dWq1U
  98. ZKhAVMuSWDMRYNZvSsiNjsMSRwIaPrpyDuUhAlG49HCmYLkBEzMckAhq1T1eiPwi
  99. zae9d+CO7P34CSm3hYmjV7eiiwRhmPWpJwt53SrZvjjwzVpzZjcP+RDef4v+PFpQ
  100. mvEfIl4H+T+IHacgkIJdvaxRn9uktf12naDHk0UvQI67JLKleU+QshcSScWb8FA6
  101. 7mcD8cdfu1y2+vcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAKdizzBFh65tDUIwz
  102. raukYSPIRm3erLD+Yky/bnenZrhofo4yLyoGu3UCwAvSjcXkEH2wPdRrJGm1nrQG
  103. yKauWmjFjD3AA3qidrPBJXg8REWpjQjXvrjPztI6N4OVaXsDFBXczr/7E1Ot/fu3
  104. rGGjv2lD4fFdEUb7vvmywwWdVG2eK33xuoGpUWNtHg781QiAW5XQlMTR8Nghdc/B
  105. yX3BlsR0ube//l3BKmWfSQbRM8vRQwO19VmZyaxjFwiQviW5ds3b7KReqxJn5UbU
  106. brcfWGL+eg0/lOWTVQkoIwHBsmAZnIE98AeC8OGuGKMRxqkYqZ9Fsg8DVUMdqQFe
  107. Dbu9pQ==
  108. -----END CERTIFICATE-----
  109. """
  110. private let otherCACert = """
  111. -----BEGIN CERTIFICATE-----
  112. MIICrDCCAZQCCQD8FZzejuvygjANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1z
  113. b21lLW90aGVyLWNhMB4XDTI0MDcwNDE3MDg1OFoXDTI1MDcwNDE3MDg1OFowGDEW
  114. MBQGA1UEAwwNc29tZS1vdGhlci1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
  115. AQoCggEBAPtxP9YCOZggO5iivxe4CEHk3DdfYXKul+jOdW/dU4P4pwKU/YutQu+F
  116. 7tPnGYaP7eO3if8PtbILio0lubk+uSbTZ5hRteL/3yj9UN6jL4vaVOkSunpbP+/d
  117. HXdB8Aa0hzZlNPbG9+7TADGryxqt1KzgVo+KBAEY0p2vRc3E6HtLBnSkzlw3wi1X
  118. zmuy8WCnayTmdqt95djsJE8PNX+GtTNfaNtZ1M5qx4FiPqqJqFhgCKJHy4LRrO3u
  119. K5IfGVy8zfXkFSXfqvl9NKz71xecBIRMQJCATEpG6GXSyb+vmnOuAKZ+fVVLw7Kf
  120. oPYwG3sh2GRDfa2pfAoP0vjXZri8AWkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
  121. 525Wy4Cyx2Pd91RJufYWRgkAwI8KLe4KV+SoZiLNJzfBRemqUq0P36l2lSotq4bp
  122. I04d5HXkl8eQ7dje/RFWXMHfNQXRq06+KUfh1XA17GQ+VOEHFc0PYKW78ydXXZDk
  123. PS2+y6Ru/MD989Aoecr2JvD7sSEmSvprtPxuNYHifZKbaw2c8HbR0Z3WawxoIFRV
  124. zeb4aGUncWj7IKNRmL4f7CDA3Old0fwIRKYcxv5awTHK01PE4Yxo89M2RqRFiJQy
  125. xbmAl1y7D1nLlfzHjKXRP6wpBylPcSssTuOXfi+U3Mv87iNDvzKTVYUD3c6wT/QQ
  126. bIRjD4xVam65aa8pewlzRA==
  127. -----END CERTIFICATE-----
  128. """
  129. private let serverCert = """
  130. -----BEGIN CERTIFICATE-----
  131. MIICmjCCAYICAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  132. Fw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBQxEjAQBgNVBAMMCWxvY2Fs
  133. aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTYUmWVpEP9ym/T
  134. dYpDxr1z0bMZ7HiFMDT3EW0XGrEs2Rta6QbPxP3lSIW9G1OdVJMugg8EB4yoPrRc
  135. x6ttS64X48DyfvEH4VbdX+gHZUeTIloN9GispPiIiY5Qodq9/JeSjAG744lnKWKm
  136. 48w4A5bWb4zlZ8s7lNTiDphll686+oIuhhxAYI4nuKKsPhLatvclq/O6a1BypQv7
  137. 7psyo1gxcRs7gRLIGchcByI75ofkAcpT0/p67rhCECOFwvJt+8uuMoVnAPxcAgBO
  138. jgPhbxS6DcOSzoliQYtOBv2YIKllplgOE+0eYxAvxBLfGY/wh3SeEhVKF8G8ltT6
  139. Anp2MPcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACG9shmrPmQvt+3dKpEuzR2BA
  140. GLrgON4zgc8byFIORHatPiM108LoEp2a8O+B3rFJqWbBBrowDBRR/5th7kLvyDsV
  141. J33Rb2mXaJv8K8hNkbSs5Ow5go9M5LveMcgRqiQTuYLuvgman3LvlGveEc5N2yar
  142. NCVmZfZ0ofTul+QqxaYBw2GlaXmzsyvpbZfowskYdGm/PipThWsuVy/e7BLHZsr7
  143. FF8f7qfbDsuVd0UpWPSlIHYUJLP4Bhj87YWnOQgXSEgq2cxybZHmahiG7YmZzg++
  144. Oz3B1+jGtb6nKk961X5LyGsitGjEULovA8tHQEJXWvKpYQTBXOMUCKWslrje3Q==
  145. -----END CERTIFICATE-----
  146. """
  147. private let serverSignedByOtherCACert = """
  148. -----BEGIN CERTIFICATE-----
  149. MIICoDCCAYgCAQEwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNc29tZS1vdGhl
  150. ci1jYTAeFw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBQxEjAQBgNVBAMM
  151. CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTYUmWV
  152. pEP9ym/TdYpDxr1z0bMZ7HiFMDT3EW0XGrEs2Rta6QbPxP3lSIW9G1OdVJMugg8E
  153. B4yoPrRcx6ttS64X48DyfvEH4VbdX+gHZUeTIloN9GispPiIiY5Qodq9/JeSjAG7
  154. 44lnKWKm48w4A5bWb4zlZ8s7lNTiDphll686+oIuhhxAYI4nuKKsPhLatvclq/O6
  155. a1BypQv77psyo1gxcRs7gRLIGchcByI75ofkAcpT0/p67rhCECOFwvJt+8uuMoVn
  156. APxcAgBOjgPhbxS6DcOSzoliQYtOBv2YIKllplgOE+0eYxAvxBLfGY/wh3SeEhVK
  157. F8G8ltT6Anp2MPcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA1cUeJkmPC+qjNzTY
  158. JJ6LUofrVfIXZbiZf2NugNx/iLAabrLSd4pZjIXQszWbd5t+wftyUBqUd1Z/GuPj
  159. XHmfES4ZUm1Fyu75KZjNzzXsXrlZ09IHIWvxAcA3FtqbDElw7naExbzcpup6s+45
  160. MgAMcFnMIoMj4Cdt9Ky0kzWKdl7tmNxIF+PNQby6JCVb7HPUgs3hqSalwDo9ddYF
  161. 8lvJ5Q4ZzlKLL1zUKkpD7I4M6hvNLgHdnLa9nwtT40u0bbGr9z25W+YouJy5N4pD
  162. YsOhm4xYF9VBZIEsr/ZSrI2RtABu7I5NVNWhF7JAIYspur1Rghl5bRkSaQ1jf/BK
  163. Epog6w==
  164. -----END CERTIFICATE-----
  165. """
  166. private let serverKey = """
  167. -----BEGIN RSA PRIVATE KEY-----
  168. MIIEpAIBAAKCAQEA1NhSZZWkQ/3Kb9N1ikPGvXPRsxnseIUwNPcRbRcasSzZG1rp
  169. Bs/E/eVIhb0bU51Uky6CDwQHjKg+tFzHq21LrhfjwPJ+8QfhVt1f6AdlR5MiWg30
  170. aKyk+IiJjlCh2r38l5KMAbvjiWcpYqbjzDgDltZvjOVnyzuU1OIOmGWXrzr6gi6G
  171. HEBgjie4oqw+Etq29yWr87prUHKlC/vumzKjWDFxGzuBEsgZyFwHIjvmh+QBylPT
  172. +nruuEIQI4XC8m37y64yhWcA/FwCAE6OA+FvFLoNw5LOiWJBi04G/ZggqWWmWA4T
  173. 7R5jEC/EEt8Zj/CHdJ4SFUoXwbyW1PoCenYw9wIDAQABAoIBABbY/cdPz+lIhgGJ
  174. BnYIHn5Zv2nlX3/0dB9LYkB+mWvpb4jDMn57sR68DRPmH9fS7LA77tQjz5emu8xq
  175. pTherCANCnK81SmUefj0HIZwvMt5HNfj5ZeS6MaRCYsQVr9/Y2z12zeYbq1iOIwR
  176. dCSI4sG/VQwf2At14t0TQxPS2/yAOwctWo2g4KVcHWUXTw+qKoNANX67h6tznLRA
  177. QH8fG3T19+wBtuSVq/VBiJTHwAjdHXyHz+eRr7eSxANIewrgmrfbJRpXwevnzVsz
  178. 9WZedkcTKBn7yj6ZaoRMwuwfAspJ0S6p320ehPbdo96Wh25BXNs3VJ2/GcUfkAKe
  179. UGSymfkCgYEA+b68gdqr/IclrDPtFhGGJAYnKMZ6uQXkAij+x8w8X1Q/avkVLxFB
  180. jBAEd7DLD/brCY6BMmq/mzmWJiSpdaF501rwne2DVcsq5U1N3rIV6AWxpp368Zfa
  181. w2tut+bmq4ZEQtK4kJP2WXxE8HtQNSZ42qbGF0Rw0RoZ1pTr9oSkwCsCgYEA2iz/
  182. U6iedewf+Dqcggii6gGZEVpC/kXs6m7xxVgE6Nt2/tHskun2B/3Kqoq4KxOkR1In
  183. saG5GJIfUfVhnwiydAp9t+jlu7mplpFCF1hZpC/pwa3EP/tB8roLXlcRkL7257TR
  184. /4u9YHY85PpXUycsYZDibfxYLwenzePCZH7TIGUCgYEA14FnWQZA8qAMOhR0uV5V
  185. yjAlCmJ6873JirOlZvMuBXTFZKGbTgot7ZbExCOilhwTpSN7CO5keKWwkyl/sSmt
  186. 3lvS1fRmKFowob2bPFef359KNOSN7nuDIq5J1BdDZS9vJ9p9uQR0x7McKge+pp6U
  187. GtlehiVg1I8ZTLklBIxhPhECgYEAuKs9suIWvlmO9d0mfCozOz7/AOEVs4QcdJJT
  188. smY+QZsBrc6iH/hId5sp4BBqsot9kaDIWGI6+cE1IXpBlwsVgYMfxnsreSo9kWSC
  189. PKBbv82OXpFme4GA4KL43HF2PL5m3tj+pv7w3KU4Bdif8ZJGzo6EGfRt7+Da+DrA
  190. X6+5pMECgYAkMyh/ypYwsTqkYalgRk1lPwe/EAP28lWFsyckIzBuP+CwOMg5q5o3
  191. mg1GEE3hWCY9P1cLTedewHFBYpfiiR4hDKSyivZElV32C5Kg1uHxGc86FFGyAl3v
  192. dEAYBVnuHnW4u1JpBh5a0rRa4U2UYeq9l9rZRJzsjV7FxkTIRgdNQw==
  193. -----END RSA PRIVATE KEY-----
  194. """
  195. private let exampleServerCert = """
  196. -----BEGIN CERTIFICATE-----
  197. MIICnDCCAYQCAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  198. Fw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBYxFDASBgNVBAMMC2V4YW1w
  199. bGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2BfL1dswYSgf
  200. q+ZSp3Uy4bSlCayFuBeKc34W/XRl7+YJd8f/EJulI4gwYPjcBWYyFyHLzEyAjhJ8
  201. HMFW4a1PFNJ6gc3Djo60/qfhJ2/uAX8E/Gi7pVezKMsMwx6iBjG0SiN1zcQzGnns
  202. k12TRZWfsIl/RR5F1tZWMLggHXasT9DBZht4Ya9jx7nte4T43vFfWlzJHu7L3L2i
  203. 8tBTv3d53msjImMF6pUIqpDQ9doo+jGI4ApqbfeKUfy+/OxrKuhVMXzYh9dhXnDc
  204. nJnhgxa51MumiJ9apqeUBT+rW+1zhYpIUE5Su0TgYXjNGecb+OwMoy8WYRJIusD6
  205. QVebKRhAqwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQC7s83kfzkbh2GdbJYGCG/v
  206. nWz/aZnLm542wyi0aXZNodNF/mTO4jSm8RKeAwLX+f1hleI32CG/d9/zSrvwOZiW
  207. ar2fccfVqA1UuRXT8XyZB/WUxKPxuT1WtMVbS/nLS51XL2PJRn50JRAwnw7vH/MJ
  208. Lb7IqY8MmIYZrnEBMfAqkPvSvN9eXZYrNuLQaeqV/I97XKz8FJ4IbR9Mz51STcHJ
  209. 65lwzi/Tfdxq5awVfGx8bp+uj0aow6NPkpVqYS78LrCYVa4RYau9vHNVoHOzOumi
  210. dXRxp2NlVy4kJwd7RX4p5qE4OSNBpRgQBCtXYXWBV8eHIQo8mfDGcAMPfMFQ35TY
  211. -----END CERTIFICATE-----
  212. """
  213. private let exampleServerKey = """
  214. -----BEGIN RSA PRIVATE KEY-----
  215. MIIEpAIBAAKCAQEA2BfL1dswYSgfq+ZSp3Uy4bSlCayFuBeKc34W/XRl7+YJd8f/
  216. EJulI4gwYPjcBWYyFyHLzEyAjhJ8HMFW4a1PFNJ6gc3Djo60/qfhJ2/uAX8E/Gi7
  217. pVezKMsMwx6iBjG0SiN1zcQzGnnsk12TRZWfsIl/RR5F1tZWMLggHXasT9DBZht4
  218. Ya9jx7nte4T43vFfWlzJHu7L3L2i8tBTv3d53msjImMF6pUIqpDQ9doo+jGI4Apq
  219. bfeKUfy+/OxrKuhVMXzYh9dhXnDcnJnhgxa51MumiJ9apqeUBT+rW+1zhYpIUE5S
  220. u0TgYXjNGecb+OwMoy8WYRJIusD6QVebKRhAqwIDAQABAoIBAQCPtvPHnOkGFKtL
  221. pfieimF2nq+MSYL9NhrMSLV9hyYscG8njIlkQD+J7A9QzvF1Xcw+eimSC+cLlduZ
  222. PDRODvcjQABdx70hWGOjYX9qvRQrRpDIVddGVZc/sBsiwYK8X94p2H+Gg9AA8cmX
  223. EIrbonD79dYA3+tOwGm+KRaiwcRDp7b9q3pVeTJGEn4+njXPzA1hADuF/i/CtFJj
  224. d9PMamPRVDBj+ixQ7NpUwpTldIGFf4b1l54LIvqtZoRX470XuTc8Tw7BYXjEl4jv
  225. 3mkhTwUIJ8W9VQCAvH4sz6Z/hM1rlgdk1a2o5aoQ7ohJvpb3jwGMvLNFVTSls78Y
  226. 3rcpGKjxAoGBAPwVCQgE9LE5AQEaNWkbLgicyz0/qX6pVK7f9CDcrUxMcVo01Zjo
  227. cXr79Q9xw4Wl9gvzKq/YAYtY/SxyTL0A0ip9OwBHAyeGLvxEiodOCQ4qxKO4xAcy
  228. Y4GjveQwKANPttlJCPHgny3HqC8swYLf0dAGoYtBM53A9lPbvOKPFkDlAoGBANtz
  229. keSFim5V+vlpovxITdPowJzzaBXnKRFBEjcdBJsNio4iPuVoVHjMYaVkyVZ1FQ+s
  230. MTIYH0mTLlabQcIXHRF/gw6miEIILtBcJtcdE73gbyvZXgveweMsmZfP+TCKMgCO
  231. OYjZT+SIiyB6zCctA3z/bM4I2taoOAhHtasU/7JPAoGAXFBXvlgSQ9RcScsPRC5v
  232. 7Td+Ni/aIkhgeqoI/P/Tdt2HpUEz94soA6HBXKaMs6TTNg0W1M6FwkIUdPJmp9Bl
  233. Jqo1sSRQQ2kgS8HN+T7akhWXbV18bCZHynHsWGRKQuwuSeQ1Il7f7CPxs1TwiLzu
  234. WQAUqKp3/I1tp8gQo+dCfwECgYEApjXJKQDv0RO0C9WziUqmD7r4r6c3jWdQVm4n
  235. grCqvVkrOO29H3m+iOObjW5hg+cXtZAgjqVwhQRBk3zx+DQTYx5lv+Hnz8Ns2YkC
  236. Lekq+6QR728p6Omlhg9QoYf2X4o7xunxr7GP7jJw1X/MQlu4iaLX4NEaFnzAO508
  237. fkBgTccCgYAV/S8vuIjaku8H86uPu1F3rMoUI3En5vCKHsEbef72FPIJNLqeoTX7
  238. 1jKtxNBpoTnzv6CgGq7NRzFBdYwvcxbrMxVs/k76zgMp+EUY+SsPbQRSllum72pA
  239. XrfC2tdOnAx7NO4dAYLpmqfTAzKGDFcf4MiRwRiYwzQ8OIw+bmH8Tg==
  240. -----END RSA PRIVATE KEY-----
  241. """
  242. private let clientCert = """
  243. -----BEGIN CERTIFICATE-----
  244. MIICmjCCAYICAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  245. Fw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBQxEjAQBgNVBAMMCWxvY2Fs
  246. aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMT3FOJyfZpu6Ypq
  247. du3bMbdgWiVprdNMODJsRURJzKj7znKC1tLcD7gvv/536DKzpAl3VF/pbdd/yDU6
  248. JuXfel+2qxx3cvM+QLqBFEggUt9vd0rCs1DvZ9rT7A755hM2146gdE55g2JvXsJG
  249. C6gBskr40qkt5JrKSqOys5VE1TeifBt4lwCQphAB6qNeZM+0MEz6PSeeSFjVFZlo
  250. IdyF3+swCsioTvzbfXs9p14HthJzL3edoorbtJ8upZdUlwJNZ2AX7K34sL1SDM+b
  251. Ox+eoGLJ1OhPW+CHvjFMzpM3Q1dyTqR1SosBEiuYVpk/SAS/pBSNMp3yKqF1T3ch
  252. 4oJOb7UCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAejNVcNvE3sNgMC7a1nm1gPKt
  253. mnzVpuk/7Wls4ldH2yB6QupoWBimNAWyCsvc+l1qsbPJf18JbVK8FviRTs6Fka1g
  254. +MFMqMs/SlcAgmSlkfHdpu3zZqUEgQxF8pNJJ/Dr2ypkxEMkZnS/g4KiPdQGnTAU
  255. uHTtTm3DiNpyCCJFoDq3xMb+qTj8UTlZI45HukmqPKINobW6IHuislYQvhZnRXM9
  256. pwu4L379lI848bncYCVhlQJMP4bQTWhaUQgWpqIrxHatLAplWorTrCUzS1qT3uJN
  257. B/zptXK9+LLU8Nc+pqR2kTBhMN5a1nN6MzPSi6UWwX+evr/NRigkOReHDqx9GQ==
  258. -----END CERTIFICATE-----
  259. """
  260. private let clientSignedByOtherCACert = """
  261. -----BEGIN CERTIFICATE-----
  262. MIICoDCCAYgCAQEwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNc29tZS1vdGhl
  263. ci1jYTAeFw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBQxEjAQBgNVBAMM
  264. CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMT3FOJy
  265. fZpu6Ypqdu3bMbdgWiVprdNMODJsRURJzKj7znKC1tLcD7gvv/536DKzpAl3VF/p
  266. bdd/yDU6JuXfel+2qxx3cvM+QLqBFEggUt9vd0rCs1DvZ9rT7A755hM2146gdE55
  267. g2JvXsJGC6gBskr40qkt5JrKSqOys5VE1TeifBt4lwCQphAB6qNeZM+0MEz6PSee
  268. SFjVFZloIdyF3+swCsioTvzbfXs9p14HthJzL3edoorbtJ8upZdUlwJNZ2AX7K34
  269. sL1SDM+bOx+eoGLJ1OhPW+CHvjFMzpM3Q1dyTqR1SosBEiuYVpk/SAS/pBSNMp3y
  270. KqF1T3ch4oJOb7UCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAKLBSZDrKiqAUiJCi
  271. da+cdf2oMEh9Tz9vlGik2O3KW2uW+eG0kF1D0PSNN0yGcmGY6eTiDu2MRlmBmRIz
  272. c3TTRArhXsRA7BQ4uyHOL3uRvcRUMk5DEtGwLrVAr79RM8jgPdom6Ws/fPzqxr8h
  273. umm4zc6ixLFhfGqI5QbIwVyBO4jLxTmwjuJSjlHOuSKLa74K88oKlFUR74ANyu+U
  274. e5/+q4SzvmRZG0sd2x1ZqmPajJ8nG2orhMu/k2VC8JQhuRigTXnapCUCVmeKA7eu
  275. dcwqBMU6QyvmwcTTR8GRlpfOR7rXEZUa2qak4kf76iNWOHzYkgNI3nOsCe70bFIy
  276. Eeh5yg==
  277. -----END CERTIFICATE-----
  278. """
  279. private let clientKey = """
  280. -----BEGIN RSA PRIVATE KEY-----
  281. MIIEogIBAAKCAQEAxPcU4nJ9mm7pimp27dsxt2BaJWmt00w4MmxFREnMqPvOcoLW
  282. 0twPuC+//nfoMrOkCXdUX+lt13/INTom5d96X7arHHdy8z5AuoEUSCBS3293SsKz
  283. UO9n2tPsDvnmEzbXjqB0TnmDYm9ewkYLqAGySvjSqS3kmspKo7KzlUTVN6J8G3iX
  284. AJCmEAHqo15kz7QwTPo9J55IWNUVmWgh3IXf6zAKyKhO/Nt9ez2nXge2EnMvd52i
  285. itu0ny6ll1SXAk1nYBfsrfiwvVIMz5s7H56gYsnU6E9b4Ie+MUzOkzdDV3JOpHVK
  286. iwESK5hWmT9IBL+kFI0ynfIqoXVPdyHigk5vtQIDAQABAoIBAGH7cD4+KlGa/z7G
  287. O6eTtSW+HtohukE013ft+H9CHzepHEhG4ks/AerkhiQ2ziH6z42N+UFFRElB3fzs
  288. ktEj3SKkInckzOBIhbbB468FtXRFZRihxsZqckWfyvygQF4qmAzxsSogtMVRFdib
  289. M80+Gs3E/jb/B4whOgQ5L7D/7vmfUaOkD1tmm6mHfITihfdN9Jurg5OBZX2fWSHf
  290. j9j6VbfLjoIatDGcC4MTiMkcIOYECAeXtpGYVdyH4K5y+UDCyo0b3qG+QuzE87gS
  291. h2yVJNZKR6Y1vmcGqXQATVoZPGzS6Lc0/kUqcW50uoGBV5o5Sr4OKOUPIFCRwYa7
  292. 3LFW84ECgYEA42KEyM1vzXrDXrcGEp7GxZ0Z96yd5/XF3+AZ5R2snahRzDa+PzV2
  293. GPPZIVe8/bmJUxhWr3krHsUD21+KjNXY2l4ioAo2r4dmVR4vH9upGfWYutlw0pH8
  294. kurGq7H6lpwUfvb80AF3MXnwaqYGLUPX3cVOt9mEl0hEsqzlDrVSBcUCgYEA3cCO
  295. RIWn8al+gse+xVqfpgGN9DuYM0qJuxvYpMy24EeJwGLyumwSesH6aK7zn2A9gME2
  296. eWFB93sL880QUeoGT2pHwBZAtC/4PvbNlrHO2W333/aMNVATBoGDIEUM8cjMkDr0
  297. jHx/iheLvXp81F5+W6o+sSSCI0RxkNXA/FcoUTECgYAw+fNn3PgL5jlWmU1xjUl7
  298. Hw+MzV1lrQZl5jstomqfurWDqvbnXniFf2BxUhie/euaPk/Nk+e5xO3Dvpx1IUqI
  299. HmaO2iRVQnDEPLAhyIpv0PqIpHUspc0lR/Rq3vb+obe4cTKbCvXFbmJeVkxWS5qf
  300. ZfRCnVN10lcZtSvRMzTrkQKBgGFrzxTbg0TwKdxa1Lzva2QLGspJxDwEay4AtdTw
  301. +wbdZu9WiTzNbfDwd4q2EeHa7io6uCvrRofrTvz1Ak56efs5vfvtys9eo7lFxFyI
  302. EVAEt/l033Qska8yBuGOdHlktjpHLFjr+Tw5y/KadWz3dpve11wLpgDIePwgbIBv
  303. 6g6BAoGAA5lMXjQeQ26I5vXJTWd9NEvb7IVJeAheZOA03ruIPR4dVhorhsFt72bQ
  304. +tugqU9aGlhxvCuvbBpEz8ZYhYxVe/tvDpe/upCCdGg4lwETje2FtKiYig7vMxKS
  305. AwFfL4q1Bs2J1siAXCVSZ9fWFDGXWNbd1eLNzAfYqS766tBZyas=
  306. -----END RSA PRIVATE KEY-----
  307. """
  308. private let serverExplicitCurveCert = """
  309. -----BEGIN CERTIFICATE-----
  310. MIICDzCCAbYCCQC4FdI3dXof+TAKBggqhkjOPQQDAjAWMRQwEgYDVQQDDAtleGFt
  311. cGxlLmNvbTAeFw0yNDA3MDQxNzA4NTlaFw0yNTA3MDQxNzA4NTlaMBYxFDASBgNV
  312. BAMMC2V4YW1wbGUuY29tMIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0B
  313. AQIhAP////8AAAABAAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAAB
  314. AAAAAAAAAAAAAAAA///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxT
  315. sPY7zjw+J9JgSwMVAMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vObl
  316. Y6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBo
  317. N79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABBJm
  318. 1grK+MXu4JYZqU6zD19w4MhWuhpPadq7PlpSxz4scMbWorth6pN/9hiqLAwKex7h
  319. IuaSXF+83OESJPTOagQwCgYIKoZIzj0EAwIDRwAwRAIgNGW97RYxaltyx02UMyHc
  320. E0AGSlMG3VFETZ5M9pMZGksCICgrTsLJXfOVdpyAjmI2vBibtZ/BisMftfXxupt3
  321. vM98
  322. -----END CERTIFICATE-----
  323. """
  324. private let serverExplicitCurveKey = """
  325. -----BEGIN EC PRIVATE KEY-----
  326. MIIBaAIBAQQgD0lwrHX5wodoQFB4jhY7eqH4x5oBgL8aMjK9XndZODWggfowgfcC
  327. AQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAAAAAAAAAAAAAA////////////////
  328. MFsEIP////8AAAABAAAAAAAAAAAAAAAA///////////////8BCBaxjXYqjqT57Pr
  329. vVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSdNgiG5wSTamZ44ROdJreBn36QBEEE
  330. axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54W
  331. K84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8
  332. YyVRAgEBoUQDQgAEEmbWCsr4xe7glhmpTrMPX3DgyFa6Gk9p2rs+WlLHPixwxtai
  333. u2Hqk3/2GKosDAp7HuEi5pJcX7zc4RIk9M5qBA==
  334. -----END EC PRIVATE KEY-----
  335. """
  336. #endif // canImport(NIOSSL)