GRPCSwiftCertificate.swift 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. /*
  2. * Copyright 2025, 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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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_785_404_969)
  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. MIICoDCCAYgCCQDF5xyyZRK3ozANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdz
  94. b21lLWNhMB4XDTI1MDczMDA5NDkyOVoXDTI2MDczMDA5NDkyOVowEjEQMA4GA1UE
  95. AwwHc29tZS1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALa8a09o
  96. bv/IQMRdHhr4wL1Ryd2UQYS3g5anWMpyRMlHQ0q12/bc5g3icecWyMislLhh9XQh
  97. iHniV7/d5oBIfti2UdP/SR3+HxCHaIJcLUwxkJcG9ou0nM1VV8+NVfgZBksCz0sL
  98. DbTATMHnDD1isUGZ/IjAVV/s53iEA8XqwYYfKTyPG0L89pFZ2dLH4RnssuZ+JTjV
  99. ms4APff3dVPMXI/MnXJ/PHWTEDuda0bu4i3gdLU7Cs/pkh7LT1wBCYJwUTEQmmPa
  100. jt4sRC1cMzvGlkbFwB9MFztmb5dy2FGlueNBNcdIHN2xyPUaYA2MXpmJwRHa20yF
  101. MhCk/+xo0LSpNA0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAgKcyMb5XMpz+2/8F
  102. vn3/ObCd0SgwZW9K0Kl3uQ7X+55f/uwIgZR5Mhnqf9UtXVY4dVZnsHZeQMafa83O
  103. 0eLZojf6es4xLctECfQR+AXrdjsqPj2NLwKiKbvgG7jA7Uxg4DyZUMvFyGSiLFq7
  104. EhAY3JkqCautQVhttKf080E16ucQTLkkI3AbdQufi3ZWSR6Mqamcz0vFCP8AnRY/
  105. WEM8I8VNkQcX8D6xPG+1ZjBEHBf6cZtUT6ubY9jrRKJ8zxd1vhy20ibAyKLUkkUt
  106. xWV2/LsHT/3KEBGRt9eP8RfcJstXd19l7CDXl+iDo4N32KwlsUBAs8r8yBTxAhzI
  107. gCrq6g==
  108. -----END CERTIFICATE-----
  109. """
  110. private let otherCACert = """
  111. -----BEGIN CERTIFICATE-----
  112. MIICrDCCAZQCCQC+kH39mWpXVTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1z
  113. b21lLW90aGVyLWNhMB4XDTI1MDczMDA5NDkyOVoXDTI2MDczMDA5NDkyOVowGDEW
  114. MBQGA1UEAwwNc29tZS1vdGhlci1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
  115. AQoCggEBAJWi4e/HQLa//fXiPK6MoYzNfh5fY6+pWn3ZW5M991bqLF3ncSxXFCwa
  116. WW4ev7byKCWAEgw8ZGvHWjN4No6kSN30RvFAirQh/A2S6ogfU6ntanO4xv1uJcjg
  117. aTJcRK01art1YXF+OL1vRGojUSwfB/xgPUrREkk45CeZfuHx/WbxL7K9OOPSo/PX
  118. TzxWgzr+Vq77a7PDGm5d0dW13BGHJJqpVoTocy+e5lNySJ3mnGRzTQ0t9vPHD9LK
  119. qp2RqGk0HhZey/4iZZUczmuTb0Q14aKHbsNAY4WAfkTxzmPn0IdMZsKXEHyw90i0
  120. M7D0eBQgePVAOu2nu5pSBi4+3E9ZmNUCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
  121. KQ5DpPmfkH54iRmi6YUBSTO+2Wb2McWJGremYzw34HALYHme+LI8vZhhwyR6Y2OD
  122. qJp6FSQl8dkdFJALQT1h4v1AJ7laL94BuV7AJOvEXnD6pEQ5i7Icv2i6eA4Vvokz
  123. Czy+haYtLj+s5hW7r4Efp5q8xw9Hi2DC9MV57g9aIjV5Q6u4zRowCBoh9thbDhuM
  124. ERdLWMmrzrdITIN48LnJ4HTZneZ3vud32qL+mdp2bCIu7e1MNzEjHn3OlyJYe0FK
  125. TvWAFtdZ7nj3cHoGWxatdJJ3+kTNkQgTTftsF/BhhOhGiem2KympdyL4qW+Rb5LK
  126. pXt+OvBkcytZ+DOEOpjbYA==
  127. -----END CERTIFICATE-----
  128. """
  129. private let serverCert = """
  130. -----BEGIN CERTIFICATE-----
  131. MIICmjCCAYICAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  132. Fw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBQxEjAQBgNVBAMMCWxvY2Fs
  133. aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+wbTRqD77+g+Bw
  134. p0dtYI/VnhiLO0GH7pxjBEiVlmfpA2RIbsoLAfoZTYM4R1qaX74Lmo2WxewBGG5O
  135. U0a3cAZm3pdtsNRDpKGmPYLUYckvCf9Th/heWBf5doGr1mEqMNridc+lTAGgdYGi
  136. g6DCY7pinbxQBRY/exoMIq1j0h1HK79XCiKkjMtfTy1qUzUXXRo2+modJKlvhrog
  137. u6hivGn4AiPrkSORm414YOOa2FUqysJYCfNZ/35KuMunphTEwXc7btVpogFlDzV1
  138. FcKthiWyWRP8qu36h1PvU87fqhE0C2r6CO1eaVTJeeoyBYpVVd5BGSOhaHQzk5Bb
  139. c57hUicCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAn09x85aOikP2ofCvT2nHjs72
  140. s0C9b6qqIPWc6bRfjI91b/6/eLOcMHByoU8MTpiD8pKSqKUOSREjNtS/jTyV9zKf
  141. KzolkXKo0gsa8dpJ9HC8+zuX+nfCMeWKL/F5Gbt2CyrLfMksv5OJqZk/JnDFkI01
  142. RguInOYJ79vfF9e5adDdU4oAMyrmlEl01VGV4qtbM+wB2eHgohpU8B//FxFgMMbM
  143. rBdAOOfpx5hKHXv0HAsj79qMRhQI+LYHNGgS0SN/WsEGGTT1106yECdEQOZ69ehj
  144. /epp/0b68T1xM/svCNrWawSln+E5XlZH20BvxMU1JcExw/u2KAKIXYnomroWpg==
  145. -----END CERTIFICATE-----
  146. """
  147. private let serverSignedByOtherCACert = """
  148. -----BEGIN CERTIFICATE-----
  149. MIICoDCCAYgCAQEwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNc29tZS1vdGhl
  150. ci1jYTAeFw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBQxEjAQBgNVBAMM
  151. CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+wbTRq
  152. D77+g+Bwp0dtYI/VnhiLO0GH7pxjBEiVlmfpA2RIbsoLAfoZTYM4R1qaX74Lmo2W
  153. xewBGG5OU0a3cAZm3pdtsNRDpKGmPYLUYckvCf9Th/heWBf5doGr1mEqMNridc+l
  154. TAGgdYGig6DCY7pinbxQBRY/exoMIq1j0h1HK79XCiKkjMtfTy1qUzUXXRo2+mod
  155. JKlvhrogu6hivGn4AiPrkSORm414YOOa2FUqysJYCfNZ/35KuMunphTEwXc7btVp
  156. ogFlDzV1FcKthiWyWRP8qu36h1PvU87fqhE0C2r6CO1eaVTJeeoyBYpVVd5BGSOh
  157. aHQzk5Bbc57hUicCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAHwkmwqsUO6ieGBzy
  158. pGajXGRTSjTCAt01QVRmCh8At6teQr/ZWKMfzYdZk5A3wXUuDq9KDp09TW9Zrhjw
  159. JK/W50dCuwd/TIMPaV+YiK3D3vL119gdZjFL0J3EoV9iK4k9fA4MTBTOS9YdkipK
  160. fLMEGtccaVu+IrHcoFvdus8k1NjULL9OZcDCpD/l4RpNcOSZ4MjFZk1Fhx8+XX8i
  161. sgw8k4umziWF8+uzfDd9MhorLtt7xrX20wJ17+g7jF2qTR7VSdE8+VGZ8On8eUe+
  162. /klZaXQxcmIO9+P6UEX+PASvwRgVrMlOAgzhjZNA4bDP0/LX+fGLi+H3hBotPQW6
  163. KksYUA==
  164. -----END CERTIFICATE-----
  165. """
  166. private let serverKey = """
  167. -----BEGIN RSA PRIVATE KEY-----
  168. MIIEpQIBAAKCAQEAr7BtNGoPvv6D4HCnR21gj9WeGIs7QYfunGMESJWWZ+kDZEhu
  169. ygsB+hlNgzhHWppfvguajZbF7AEYbk5TRrdwBmbel22w1EOkoaY9gtRhyS8J/1OH
  170. +F5YF/l2gavWYSow2uJ1z6VMAaB1gaKDoMJjumKdvFAFFj97GgwirWPSHUcrv1cK
  171. IqSMy19PLWpTNRddGjb6ah0kqW+GuiC7qGK8afgCI+uRI5GbjXhg45rYVSrKwlgJ
  172. 81n/fkq4y6emFMTBdztu1WmiAWUPNXUVwq2GJbJZE/yq7fqHU+9Tzt+qETQLavoI
  173. 7V5pVMl56jIFilVV3kEZI6FodDOTkFtznuFSJwIDAQABAoIBAGskXcTMNaQVlRkn
  174. umwN4Qh2jr6LEm0JV9PZcsBNMXdXG/FpVt8yTVdXXPT8Ok+fu2mrq+pTG4qstFh4
  175. vcJvlgrhazfP9jnMsra+Kd8CZEwLur4SE+a8ql6cjM/RmqCQ2VBzMMOcG7kWQPL4
  176. x+sfATCmeWlhJ2kE967P3cn+CSI+xLG1gsIP3pSRQg9Upd6iMu6qbxarS4fOWAEv
  177. g6/VAKBnydwHqB+VMP0ysmLd06F8nJMWwZAB/W3Yflt7KXamoehPgYJS9I3nPdy5
  178. aUw9M36aBKzCnw7gQhDAyDVkN9v3fisiZvolMaJDl0dhLfbYXH1L5ZxwfK+FpJB+
  179. Jqa9m+kCgYEA4+JstCmuDhuyyIh4rRG4XaP7Om2qMowfPSLqhvSeI3lklLf2olqh
  180. U+qWN/9VtEK4RUXTcE3MzdOqIkNGvHpd5+HMgXjvgrJgl+kSPul28pMOx52d3Ige
  181. 0LwxkjxAyGrOLi+u6gEPlE8O77fv+cu/oLs2xN0NYsRCO3XCDiUCroMCgYEAxV1y
  182. 60uUoyEmpshCFdNHapqZqnHKloZSmdoWA4OJxLKyvBlWjgGFVwaSJcgQ9dSO1Rfb
  183. V8Apdf/HlqeTS/1PwVv7TnqwEyVb2TDIsilITthqMb5Ei7WTjt+drB0qCN5NDJuE
  184. MPAI40i1EPUQvF0WfxkB18E7fNGwqb0GtuaVvI0CgYEAtougbEmfBeomMwEvOeQh
  185. /dDn5IwIdGlOdNjNacH2E5Cgg4lB5hgXd3NJVh4Rd06i8crXbvTDhHVzqfKebUjQ
  186. hHmaKnTH17gwLEAlv4OhJvuqMTkPRaM8nBTE2NGvS1xTQSgtQ4IKCtGxs1FyyHTw
  187. Uj7lxpkUqfNw4tSX2GDJXyUCgYEAuct6BpU1DMiFeVZmF+O4hFubsz/CBifXFKyg
  188. MpielgPfjIGR4Mb/vmgaJuULSlDaUTJPM3Fb1pB+VI3WdR+2+ADeOAf5P1zY9UIe
  189. fNGuF0NV3RQPtTGvAj3yUXd2/bg/8lFohSVCSKxGf/sj0R8UsXtaJ8DpflxsIa4n
  190. 5wB1D3UCgYEA3C2ow3kI58xdEfmY4HplzVjA9rU9Zb3SizQVQsscvkd/S5u0u8fR
  191. 0dklHVF8zwLAYZyBEkwJ48SXXfQKlpjXFD2+rOAqiewl7CqnmjEMPg1kQ/SR4GSF
  192. y0uNIJkdh+5hFijxVcV9u7loHAb0tnFh/KjRLDK6DpTc/EqoUGLZ5XQ=
  193. -----END RSA PRIVATE KEY-----
  194. """
  195. private let exampleServerCert = """
  196. -----BEGIN CERTIFICATE-----
  197. MIICnDCCAYQCAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  198. Fw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBYxFDASBgNVBAMMC2V4YW1w
  199. bGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvGLrSUpQlYkl
  200. t1Bxuz2yqBOHfsdQn4UiDFItbJcbZhNrOgNlwbPAO4p6s5iHDTcNyNdbnOr9zxNE
  201. 9K2YJurFbEMZfU1v2B/VHYbjyjKXe2dG4I8gnm17ZCXXphwb1jlsIWyQW2qehs3E
  202. BK7pxbtJjzV+VSuEeHq6Yr8b/CN2CP1LHnM4SSXuQmoI/pXTRh0dNe0CyGyYLAni
  203. O6h/e1YAQKYwbVfI3R383GFGsh+7W58QFLWYRmCQAnZAT4+HAQS1l8M4EUDb+iBK
  204. MRQky3e9QnzzK4QMwh4qUs7TMauALoxnDEg707XPtlylKWOy8cG+E6O6bGl1C9C4
  205. vsr1r/rfQwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBrFKXsss5/bvswWjMif6ZO
  206. w1bzCjmhFTnB9xkny/Il5pNJot0iVAaKzUtGwAMb2jx40a6V+kl9+SqkSJwEf5dB
  207. 2gcAD1mFak/Vwt2wnwLqdeVWb7mvyLfBNLxdmYFl4UmAQePBf+pJatI8zwHlSW2f
  208. YqhKDJAf4I359EZX2RSI1qGT5OKiOIhrNzvn6SzchFGGC4epMiUx6Rv6qtW8/jUx
  209. w7kHzEaXKlbRC+xTjNBIvCdASKgDMP7YJ38nUTdFvTADFJ632uZLI/Ms/bTOBIpf
  210. ZEJJblot5F09YT6/+VMwB7jCEG5bRKjv6ELcQApz+rbwrzgwHpdbcfJftuXirk6r
  211. -----END CERTIFICATE-----
  212. """
  213. private let exampleServerKey = """
  214. -----BEGIN RSA PRIVATE KEY-----
  215. MIIEowIBAAKCAQEAvGLrSUpQlYklt1Bxuz2yqBOHfsdQn4UiDFItbJcbZhNrOgNl
  216. wbPAO4p6s5iHDTcNyNdbnOr9zxNE9K2YJurFbEMZfU1v2B/VHYbjyjKXe2dG4I8g
  217. nm17ZCXXphwb1jlsIWyQW2qehs3EBK7pxbtJjzV+VSuEeHq6Yr8b/CN2CP1LHnM4
  218. SSXuQmoI/pXTRh0dNe0CyGyYLAniO6h/e1YAQKYwbVfI3R383GFGsh+7W58QFLWY
  219. RmCQAnZAT4+HAQS1l8M4EUDb+iBKMRQky3e9QnzzK4QMwh4qUs7TMauALoxnDEg7
  220. 07XPtlylKWOy8cG+E6O6bGl1C9C4vsr1r/rfQwIDAQABAoIBAHcz7Ieyo20LnDbz
  221. ixOcxbh+qwT4n7Zgqpu7QAzvTKH5dab+0VuRHvlN9bhAsmwVQv6r7sdLFpD6M27T
  222. jWxKr+OCTdWwsy3BbrvBR9AA1UN7pSigyFYXFrXXEC6GqMKUESzRIkMGIwtPllIU
  223. T84TZUdd5POFlswZdGjZXp7b3WtvrFmXzIYD66sGK9sf0h7vannGv6yaqtcN2yiG
  224. Fj9BvlyU9RKws5RMB42lZZ05vH835f7/23NY2MFHiTYwjqTObtFI4W3JTHIupZSe
  225. 1KU2UDfi7uvP7BsCC+/RiVpbYkbb6qiDYh4P2kPyFaRwlgyAAvJVKKkW1BkiCqQ8
  226. OUv+N+ECgYEA7ZqiZEkywXMKT5y6PGodS+t8tMbJSg2JEzbVk9/939+eru28BWkr
  227. 1RKj1TMvTfBtX75Ld6xJDMysvse9G8SCT036mZD4HS4fkOH1A5/rOscXb+EC0OtY
  228. WaZP4IDXfOxxQ2x4CpPTsQhyb5lYd12PayjWIwPF/zaYsrR7uKXFbjECgYEAyvjH
  229. snYkEcV6qLAYBKDJuYQp6G9llou9x+k6UXBwoW+MAurbvE94a00VSZ/7jBaAFpYZ
  230. XZrmEe+KHZryvkVfrVnEpsgTMmBYqFlybJBu1pXsFeO+ycA6GHH9Hde4tFGkmkpq
  231. /WQlNYcmkWfUZgnI8waCFgV0mphUsyyu5w6YQ7MCgYB3zt9PnjE/plhuqGKoEAHR
  232. xF5PcWUSOB0EWUP8mpeTCVkkb6+9Mrjtaca+vF5/+FnOS1AWegMjtxjr4h+THtVu
  233. U62nPZg+boFwNt+rAjpEmxtQSK941RLpsZjZZV5DGZ5LFyi4fK3juJSrfTFEjyLA
  234. MAk6Aq8V71uz0JoKE1yoIQKBgHYHYSj35lWnPoKlk/HtBiEpJ62QScTXkg6UI2OE
  235. PRrDYOm5ZPoGRIIxGvXrYD3AP8/ijPGPx8YaQ3ifyBS5BsApeV967R7YQ/XxvcY/
  236. 3xRNrjG0dBeh/qaEcqpN7Yx+BXfrWnfrKnAMHXNkq3CCtCYOXMstdPcJKgffLf4S
  237. 0JxdAoGBAK13W4zlnQpe181TMt1q8ZoiB3MHOk1H49cjErDw3QiAMr7l3VF95AjX
  238. gnRMOHIO0CviNxlY6WRKBd4hBLel7Zr9Eofg4hIGkOcI2SbRd5nlbW9BSmrcNfAR
  239. ZcqoSJTo5W336betEReJKi5LW+1PHu87mcPdM8ucAgDBPFPJqWPe
  240. -----END RSA PRIVATE KEY-----
  241. """
  242. private let clientCert = """
  243. -----BEGIN CERTIFICATE-----
  244. MIICmjCCAYICAQEwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHc29tZS1jYTAe
  245. Fw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBQxEjAQBgNVBAMMCWxvY2Fs
  246. aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOGBa6FEXnLsHT6O
  247. cwLDo6oKUBYaAQJIxE8puaUAwnd/Fvz8gd5ZCwtRFjlds2FQnjX2j3jLm+3AAwZi
  248. +dLYTC/oM8pUooBjbswgJ3OxIHJStJt8bKsYZezvlBQ3U4sz579zy+G3UywFlX6y
  249. dXqepe6KYonniZ2mX/0euGPw6hhbryR1RupYVzav0RgLWmjHUP0VJc7ml1pDcvCq
  250. fPTtfD8duZwIdAT4WnNbW6aQLY2DCxeG+gOx6zJ988hRbPayOyc5FH4bCaF4Fpip
  251. 1KZvbvXrEbgzpYihmxPoT48ADlgo3iLwi1+5Yxkvy2rMNAfP7nZz544AkNWt5c/N
  252. x1Tvsl0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAm7pQJ+MVfsE8kap15YNgmVno
  253. snMItichI1GIpuxXhRCFpQgrhy3EIm/HZj6TQ/Qu6ua/qD0GyoaHz+7J+K/v9coH
  254. 8QuP9vFagdIigmmTQqLlZwOOq6H/ZZBSA1WR6S3F13AZxSC9i/dpKPBC9FOquvfW
  255. o9z4EPpUxWFNB9DNp/noW3SGWiXct8h1X33R8swwIHS97k0GngQG8pwO7Evzg7MK
  256. 7l8+Z2hxHTJbCqIk/DjG7aWHMd6Zt/diyROOoWfg4zL2MnqQuN3j+ORCokkKX0dW
  257. 4ML+Rh9vaUgcoRNeAlRCcaoalw8Lxgm/qyKqN+s1mP0HWGoQnbWLZiddTpN9xQ==
  258. -----END CERTIFICATE-----
  259. """
  260. private let clientSignedByOtherCACert = """
  261. -----BEGIN CERTIFICATE-----
  262. MIICoDCCAYgCAQEwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNc29tZS1vdGhl
  263. ci1jYTAeFw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBQxEjAQBgNVBAMM
  264. CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOGBa6FE
  265. XnLsHT6OcwLDo6oKUBYaAQJIxE8puaUAwnd/Fvz8gd5ZCwtRFjlds2FQnjX2j3jL
  266. m+3AAwZi+dLYTC/oM8pUooBjbswgJ3OxIHJStJt8bKsYZezvlBQ3U4sz579zy+G3
  267. UywFlX6ydXqepe6KYonniZ2mX/0euGPw6hhbryR1RupYVzav0RgLWmjHUP0VJc7m
  268. l1pDcvCqfPTtfD8duZwIdAT4WnNbW6aQLY2DCxeG+gOx6zJ988hRbPayOyc5FH4b
  269. CaF4Fpip1KZvbvXrEbgzpYihmxPoT48ADlgo3iLwi1+5Yxkvy2rMNAfP7nZz544A
  270. kNWt5c/Nx1Tvsl0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEARoIkr72iVZaoyypV
  271. jF/N2CQo5czT0f3hKxDWFGnib0w0sPdIJO/sdYtVmcrKT95lWw9boiqCID42IoCS
  272. PB06cWsxwsoF6sT3P6VMXVvjb33trdQZFMPbOWOYMP/zC/nxbWbo0AGmXPm+9LLf
  273. 5bbU25zuhHRkVD3ylGLTwdfVDtVRLyq8E5hjz/OqJJzcjgcTGA8U6EVHYgPMTGey
  274. LZCm9pb78stf8ekOo4ejr63ApT8PGUWqv7LQJbeHdK3dD+UhKcWl4uDxvKtkj5iG
  275. m8Tfe/TgVYRzkjR12UKkjdf9zYmNYjovT14LG7ucKddvSqcQp1uFFh4nnodJGlc3
  276. vlG3cg==
  277. -----END CERTIFICATE-----
  278. """
  279. private let clientKey = """
  280. -----BEGIN RSA PRIVATE KEY-----
  281. MIIEpQIBAAKCAQEA4YFroURecuwdPo5zAsOjqgpQFhoBAkjETym5pQDCd38W/PyB
  282. 3lkLC1EWOV2zYVCeNfaPeMub7cADBmL50thML+gzylSigGNuzCAnc7EgclK0m3xs
  283. qxhl7O+UFDdTizPnv3PL4bdTLAWVfrJ1ep6l7opiieeJnaZf/R64Y/DqGFuvJHVG
  284. 6lhXNq/RGAtaaMdQ/RUlzuaXWkNy8Kp89O18Px25nAh0BPhac1tbppAtjYMLF4b6
  285. A7HrMn3zyFFs9rI7JzkUfhsJoXgWmKnUpm9u9esRuDOliKGbE+hPjwAOWCjeIvCL
  286. X7ljGS/Lasw0B8/udnPnjgCQ1a3lz83HVO+yXQIDAQABAoIBAQCCgm1xCumCp2YR
  287. c03atrE80vUgpXIaCVUb37Eibrsdf38lcVoT/gKnTQmIr9MGKis2XfkQ1v3qbisS
  288. AixFu4r0WvXGTo8xsNpJ5v4ONd/qajU+m5ckul0a8FkKDi8arDKemfzQKFJJcv3f
  289. MpdNHQ45bPu0hj0d8VEyZBohNSe2ahr0uNrqSmEvZbHjGWZZpm9seMuhZLZpnE/J
  290. bf2EDB1uunSfNOGQ8+1pXVfmTQ07sOH4+PHkg+ZWLhkcrJRCePSq1+FfNDCAfJ2y
  291. WjM9SJ6RQIQWggdoL2JAjCbTj/XOAPd5srvrxHWit1PJhLCM7LFUl5iVqOgrnswM
  292. 2rjZVcRdAoGBAP5q/qdAlUHhHpQXOhsfcokZvYMFYqWXvmSLOYsrsb/dWKKcsZWW
  293. AFsbr/Iay8Vry1YKTL3C4j6X22gzJSmFUJ5Z6vmt1oweNDlDhltwsOPneeof9Dok
  294. CAq9mF3nm7QodeXhhq+KZMNB6G48QPKsoBJolw9C//zz05X0ioczVZ2zAoGBAOLo
  295. Znz6Cb16ZmCZ6BIh3KBly1WV7VFx1PeSRAwn6ssOaHwnXDWQMyB+acB3wx0wAWLz
  296. yhLo377k/1rhVD2r+MrlNT0BdeQ6Za9SXzqo1Ib0IBWud1Uhv3j4lHSDooTev2mZ
  297. 8dX1OdVEtvMFTTUFU1U+0t415LXXiHhlZEw/AwevAoGBAKb7hqQzqUMSBEXicMq4
  298. ey4s7Mt/z10sGVRYZK5JQWLSXohsG8o4J4ekxng6yh+LPmv8Wp35uRCoDuN3Hh8A
  299. Vwd3sNerFzPj5xbmkNqXPiJ3HPdjfaJjX7vc8JJBn1pBbBAzU3kHdlcJfQpNFbux
  300. PWaXqv3jVayqQ+caF4nhUYItAoGBAKp8hSzXzWOxSKTCXszo5lUZxsoaaQItrh8J
  301. pdkgUNiajcTi6fRQ0SlT8e8rzMzsWc5Yb/b/Q8WxV2+YJ+xifv8rcnHQ3BxMCETP
  302. dj+jxHNVj5nayUyMm8mvtBNLKFv+5QDaKwtgQkDMbU1xKU5yHufI2TUedyZtt9sG
  303. C3MCUSt/AoGAbmc0HPMkanUCXFHPdl3YtdXLBleWcPvyAQTppLb7QwtpbuRV1Tlg
  304. Jq88YJZb4RE+sXpfJ1F53NV1GFjBQC2xLh1PO4m6Nt/psaAnhetgnmhr+/qHLshD
  305. p4EgJTZCuJtyrjld8wqtOo4NxDhSK8NWPQJF16mTDPeSd9ADoCVtltE=
  306. -----END RSA PRIVATE KEY-----
  307. """
  308. private let serverExplicitCurveCert = """
  309. -----BEGIN CERTIFICATE-----
  310. MIICEDCCAbYCCQDG3HfWx7Z/uDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDDAtleGFt
  311. cGxlLmNvbTAeFw0yNTA3MzAwOTQ5MjlaFw0yNjA3MzAwOTQ5MjlaMBYxFDASBgNV
  312. BAMMC2V4YW1wbGUuY29tMIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0B
  313. AQIhAP////8AAAABAAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAAB
  314. AAAAAAAAAAAAAAAA///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxT
  315. sPY7zjw+J9JgSwMVAMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vObl
  316. Y6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBo
  317. N79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABFuX
  318. OmVSV0a7oOdoL3FrJ2ITZuF5onuYAs22HqypxyL5tcoSsqmTYAfTDj00eon/goGg
  319. sq1fxuIEUj++LV4ysW8wCgYIKoZIzj0EAwIDSAAwRQIhAKkqfMJJkz4wVwKnJmqh
  320. ljmIgx9H5X6sqFF4twkI83pOAiAI87mIic25v+2bvPpw76PVJeH6K0jksw0SemQ1
  321. Qrxb+g==
  322. -----END CERTIFICATE-----
  323. """
  324. private let serverExplicitCurveKey = """
  325. -----BEGIN EC PRIVATE KEY-----
  326. MIIBaAIBAQQgv5J4cSA5lxk1ND23rci8NJSwtmsIQgmBfYEk86/8jzqggfowgfcC
  327. AQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAAAAAAAAAAAAAA////////////////
  328. MFsEIP////8AAAABAAAAAAAAAAAAAAAA///////////////8BCBaxjXYqjqT57Pr
  329. vVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSdNgiG5wSTamZ44ROdJreBn36QBEEE
  330. axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54W
  331. K84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8
  332. YyVRAgEBoUQDQgAEW5c6ZVJXRrug52gvcWsnYhNm4Xmie5gCzbYerKnHIvm1yhKy
  333. qZNgB9MOPTR6if+CgaCyrV/G4gRSP74tXjKxbw==
  334. -----END EC PRIVATE KEY-----
  335. """
  336. #endif // canImport(NIOSSL)