Skip to content

Commit d806d3c

Browse files
committed
[PEM] Add benchmarks for PemDocument
1 parent 963bdc8 commit d806d3c

File tree

4 files changed

+273
-1
lines changed

4 files changed

+273
-1
lines changed

build-logic/src/main/kotlin/ckbuild/Projects.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ object Projects {
1717
"cryptography-random" to setOf(Tag.PUBLISHED),
1818

1919
"cryptography-serialization-pem" to setOf(Tag.PUBLISHED),
20+
"cryptography-serialization-pem-benchmarks" to setOf(),
2021
"cryptography-serialization-asn1" to setOf(Tag.PUBLISHED),
2122
"cryptography-serialization-asn1-modules" to setOf(Tag.PUBLISHED),
2223

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright (c) 2023-2024 Oleg Yukhnevich. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
import ckbuild.*
6+
7+
plugins {
8+
id("ckbuild.multiplatform-benchmarks")
9+
}
10+
11+
kotlin {
12+
allBenchmarkTargets()
13+
14+
sourceSets {
15+
commonMain.dependencies {
16+
implementation(projects.cryptographySerializationPem)
17+
}
18+
}
19+
}
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
/*
2+
* Copyright (c) 2024 Oleg Yukhnevich. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package dev.whyoleg.cryptography.serialization.pem.benchmarks
6+
7+
import dev.whyoleg.cryptography.serialization.pem.*
8+
import kotlinx.benchmark.*
9+
import kotlinx.io.*
10+
import kotlinx.io.bytestring.*
11+
12+
@State(Scope.Benchmark)
13+
@Warmup(iterations = 5, time = 1)
14+
@Measurement(iterations = 5, time = 1)
15+
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
16+
@BenchmarkMode(Mode.Throughput)
17+
class PemBenchmark {
18+
@Param("privateKey", "certificate", "googleCertificateChain")
19+
var testCaseString: String = ""
20+
lateinit var testCase: TestCase
21+
22+
@Setup
23+
fun setup() {
24+
testCase = when (testCaseString) {
25+
"privateKey" -> TestCase.privateKey
26+
"certificate" -> TestCase.certificate
27+
"googleCertificateChain" -> TestCase.googleCertificateChain
28+
else -> error("Unknown test case: $testCaseString")
29+
}
30+
println(testCase.documentString)
31+
}
32+
33+
@Benchmark
34+
fun encodeToString(): String {
35+
return testCase.document.encodeToString()
36+
}
37+
38+
@Benchmark
39+
fun encodeToByteString(): ByteString {
40+
return testCase.document.encodeToByteString()
41+
}
42+
43+
@Benchmark
44+
fun encodeToSink(): Sink {
45+
return Buffer().also { testCase.document.encodeToSink(it) }
46+
}
47+
48+
@Benchmark
49+
fun decodeFromString(): PemDocument {
50+
return PemDocument.decode(testCase.documentString)
51+
}
52+
53+
@Benchmark
54+
fun decodeFromByteString(): PemDocument {
55+
return PemDocument.decode(testCase.documentBytes)
56+
}
57+
58+
@Benchmark
59+
fun decodeFromSource(): PemDocument {
60+
return PemDocument.decode(Buffer().also { it.write(testCase.documentBytes) })
61+
}
62+
63+
@Benchmark
64+
fun decodeToSequenceFromString(): List<PemDocument> {
65+
return PemDocument.decodeToSequence(testCase.documentString).toList()
66+
}
67+
68+
@Benchmark
69+
fun decodeToSequenceFromByteString(): List<PemDocument> {
70+
return PemDocument.decodeToSequence(testCase.documentBytes).toList()
71+
}
72+
73+
@Benchmark
74+
fun decodeToSequenceFromSource(): List<PemDocument> {
75+
return PemDocument.decodeToSequence(Buffer().also { it.write(testCase.documentBytes) }).toList()
76+
}
77+
78+
class TestCase private constructor(
79+
val document: PemDocument,
80+
val documentString: String,
81+
val documentBytes: ByteString,
82+
) {
83+
companion object {
84+
private fun String.toTestCase() = TestCase(
85+
document = PemDocument.decode(this),
86+
documentString = this,
87+
documentBytes = this.encodeToByteString()
88+
)
89+
90+
val privateKey = """
91+
-----BEGIN PRIVATE KEY-----
92+
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAU9BD0jxDfF5OV380z
93+
9VIEUN2W5kJDZ3hbuaDenCxLiAMsoquKTfFaou71eLdN0TShZANiAARMUhCee/cp
94+
xmjGc1roj0D0k6VlUqtA+JVCWigXcIAukOeTHCngZDKCrD4PkXDBvbciJdZKvO+l
95+
ml2FIkoovZh/8yeTKmjUMb804g6OmjUc9vVojCRV0YdaSmYkkJMJbLg=
96+
-----END PRIVATE KEY-----
97+
""".trimIndent().toTestCase()
98+
99+
val certificate = """
100+
-----BEGIN CERTIFICATE-----
101+
MIIH/TCCBeWgAwIBAgIQaBYE3/M08XHYCnNVmcFBcjANBgkqhkiG9w0BAQsFADBy
102+
MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24x
103+
ETAPBgNVBAoMCFNTTCBDb3JwMS4wLAYDVQQDDCVTU0wuY29tIEVWIFNTTCBJbnRl
104+
cm1lZGlhdGUgQ0EgUlNBIFIzMB4XDTIwMDQwMTAwNTgzM1oXDTIxMDcxNjAwNTgz
105+
M1owgb0xCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91
106+
c3RvbjERMA8GA1UECgwIU1NMIENvcnAxFjAUBgNVBAUTDU5WMjAwODE2MTQyNDMx
107+
FDASBgNVBAMMC3d3dy5zc2wuY29tMR0wGwYDVQQPDBRQcml2YXRlIE9yZ2FuaXph
108+
dGlvbjEXMBUGCysGAQQBgjc8AgECDAZOZXZhZGExEzARBgsrBgEEAYI3PAIBAxMC
109+
VVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHheRkbb1FCc7xRKst
110+
wK0JIGaKY8t7JbS2bQ2b6YIJDgnHuIYHqBrCUV79oelikkokRkFvcvpaKinFHDQH
111+
UpWEI6RUERYmSCg3O8Wi42uOcV2B5ZabmXCkwdxY5Ecl51BbM8UnGdoAGbdNmiRm
112+
SmTjcs+lhMxg4fFY6lBpiEVFiGUjGRR+61R67Lz6U4KJeLNcCm07QwFYKBmpi08g
113+
dygSvRdUw55Jopredj+VGtjUkB4hFT4GQX/ght69Rlqz/+8u0dEQkhuUuucrqalm
114+
SGy43HRwBfDKFwYeWM7CPMd5e/dO+t08t8PbjzVTTv5hQDCsEYIV2T7AFI9ScNxM
115+
kh7/AgMBAAGjggNBMIIDPTAfBgNVHSMEGDAWgBS/wVqH/yj6QT39t0/kHa+gYVgp
116+
vTB/BggrBgEFBQcBAQRzMHEwTQYIKwYBBQUHMAKGQWh0dHA6Ly93d3cuc3NsLmNv
117+
bS9yZXBvc2l0b3J5L1NTTGNvbS1TdWJDQS1FVi1TU0wtUlNBLTQwOTYtUjMuY3J0
118+
MCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcHMuc3NsLmNvbTAfBgNVHREEGDAWggt3
119+
d3cuc3NsLmNvbYIHc3NsLmNvbTBfBgNVHSAEWDBWMAcGBWeBDAEBMA0GCyqEaAGG
120+
9ncCBQEBMDwGDCsGAQQBgqkwAQMBBDAsMCoGCCsGAQUFBwIBFh5odHRwczovL3d3
121+
dy5zc2wuY29tL3JlcG9zaXRvcnkwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
122+
BwMBMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHA6Ly9jcmxzLnNzbC5jb20vU1NMY29t
123+
LVN1YkNBLUVWLVNTTC1SU0EtNDA5Ni1SMy5jcmwwHQYDVR0OBBYEFADAFUIazw5r
124+
ZIHapnRxIUnpw+GLMA4GA1UdDwEB/wQEAwIFoDCCAX0GCisGAQQB1nkCBAIEggFt
125+
BIIBaQFnAHcA9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOMAAAFxM0ho
126+
bwAABAMASDBGAiEA6xeliNR8Gk/63pYdnS/vOx/CjptEMEv89WWh1/urWIECIQDy
127+
BreHU25DzwukQaRQjwW655ZLkqCnxbxQWRiOemj9JAB1AJQgvB6O1Y1siHMfgosi
128+
LA3R2k1ebE+UPWHbTi9YTaLCAAABcTNIaNwAAAQDAEYwRAIgGRE4wzabNRdD8kq/
129+
vFP3tQe2hm0x5nXulowh4Ibw3lkCIFYb/3lSDplS7AcR4r+XpWtEKSTFWJmNCRbc
130+
XJur2RGBAHUA7sCV7o1yZA+S48O5G8cSo2lqCXtLahoUOOZHssvtxfkAAAFxM0ho
131+
8wAABAMARjBEAiB6IvboWss3R4ItVwjebl7D3yoFaX0NDh2dWhhgwCxrHwIgCfq7
132+
ocMC5t+1ji5M5xaLmPC4I+WX3I/ARkWSyiO7IQcwDQYJKoZIhvcNAQELBQADggIB
133+
ACeuur4QnujqmguSrHU3mhf+cJodzTQNqo4tde+PD1/eFdYAELu8xF+0At7xJiPY
134+
i5RKwilyP56v+3iY2T9lw7S8TJ041VLhaIKp14MzSUzRyeoOAsJ7QADMClHKUDlH
135+
UU2pNuo88Y6igovT3bsnwJNiEQNqymSSYhktw0taduoqjqXn06gsVioWTVDXysd5
136+
qEx4t6sIgIcMm26YH1vJpCQEhKpc2y07gRkklBZRtMjThv4cXyyMX7uTcdT7AJBP
137+
ueifCoV25JxXuo8d5139gwP1BAe7IBVPx2u7KN/UyOXdZmwMf/TmFGwDdCfsyHf/
138+
ZsB2wLHozTYoAVmQ9FoU1JLgcVivqJ+vNlBhHXhlxMdN0j80R9Nz6EIglQjeK3O8
139+
I/cFGm/B8+42hOlCId9ZdtndJcRJVji0wD0qwevCafA9jJlHv/jsE+I9Uz6cpCyh
140+
sw+lrFdxUgqU58axqeK89FR+No4q0IIO+Ji1rJKr9nkSB0BqXozVnE1YB/KLvdIs
141+
uYZJuqb2pKku+zzT6gUwHUTZvBiNOtXL4Nxwc/KT7WzOSd2wP10QI8DKg4vfiNDs
142+
HWmB1c4Kji6gOgA5uSUzaGmq/v4VncK5Ur+n9LbfnfLc28J5ft/GotinMyDk3iar
143+
F10YlqcOmeX1uFmKbdi/XorGlkCoMF3TDx8rmp9DBiB/
144+
-----END CERTIFICATE-----
145+
""".trimIndent().toTestCase()
146+
147+
// obtained via `openssl s_client -showcerts -connect www.google.com:443`
148+
val googleCertificateChain = """
149+
0 s:CN=www.google.com
150+
i:C=US, O=Google Trust Services, CN=WR2
151+
a:PKEY: EC, (prime256v1); sigalg: sha256WithRSAEncryption
152+
v:NotBefore: Jul 7 08:35:54 2025 GMT; NotAfter: Sep 29 08:35:53 2025 GMT
153+
-----BEGIN CERTIFICATE-----
154+
MIIEVTCCAz2gAwIBAgIQc5TC2nLrVf4Kw1L8a17XyTANBgkqhkiG9w0BAQsFADA7
155+
MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMQww
156+
CgYDVQQDEwNXUjIwHhcNMjUwNzA3MDgzNTU0WhcNMjUwOTI5MDgzNTUzWjAZMRcw
157+
FQYDVQQDEw53d3cuZ29vZ2xlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
158+
BFmUG28uSHjAsoydiumyqhnoajtKYozAT/X65vdUpoAPSXIfQw1DCKViQYulxD/g
159+
OvCehyBe1N9yPltsjVc+h4ujggJAMIICPDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0l
160+
BAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUiH5egx0TI4Ua
161+
sEH2WJrxdEF8gBEwHwYDVR0jBBgwFoAU3hse7XkV1D43JMMhu+w0OW1CsjAwWAYI
162+
KwYBBQUHAQEETDBKMCEGCCsGAQUFBzABhhVodHRwOi8vby5wa2kuZ29vZy93cjIw
163+
JQYIKwYBBQUHMAKGGWh0dHA6Ly9pLnBraS5nb29nL3dyMi5jcnQwGQYDVR0RBBIw
164+
EIIOd3d3Lmdvb2dsZS5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEwNgYDVR0fBC8w
165+
LTAroCmgJ4YlaHR0cDovL2MucGtpLmdvb2cvd3IyL29CRllZYWh6Z1ZJLmNybDCC
166+
AQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2ABLxTjS9U3JMhAYZw48/ehP457Vih4ic
167+
bTAFhOvlhiY6AAABl+Q9944AAAQDAEcwRQIgNMV+Fyvcr8rZZ0OvGOp0XCYKOulz
168+
9XF9tj85yuDUdh4CIQDK1tH0LtM8oNxpm6/C2/C1+ROIBwTNuH5yuy1TPPitLQB1
169+
AH1ZHhLheCp7HGFnfF79+NCHXBSgTpWeuQMv2Q6MLnm4AAABl+Q9+5kAAAQDAEYw
170+
RAIgQCJu1pJLtphnMFc8XjahvFzg8vXAVwaciYiDqh67wFQCIG8JlXQ9j0muZe2O
171+
0lefKSAgVv2sUemqoEovPbjLy5uPMA0GCSqGSIb3DQEBCwUAA4IBAQByr/DYf3Xo
172+
tsnfDqmdZHC4y7K8XoB8+2wfIS18VCm/sxcgXqgjzn7m5WCxDozE4Jv0OhOvaARq
173+
IJMVDndWu2BEoZE2Xc9nKKvLxj9Lv8dLvdHDSwWqIGp1HlOy+1o4U5/inG3FSxY2
174+
/VfM8uobBRMIQLakyMt4YWUU05j+srElxHBgThSlWFlB4/W7nkhR3eBNyWXNw5t9
175+
GOO4VDp3X7V85R1fJ/qG/N57LSXLsaC4MajvWOobskqMPlZadhwHbwPcX77l7LT9
176+
szAUorBmGkWg7wbZL817rAxWCQW83Fzbgkv5pSBcO3R4r4Pz4Eq7Js6zOXatFGx+
177+
Ddy8ixB59aM5
178+
-----END CERTIFICATE-----
179+
1 s:C=US, O=Google Trust Services, CN=WR2
180+
i:C=US, O=Google Trust Services LLC, CN=GTS Root R1
181+
a:PKEY: RSA, 2048 (bit); sigalg: sha256WithRSAEncryption
182+
v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT
183+
-----BEGIN CERTIFICATE-----
184+
MIIFCzCCAvOgAwIBAgIQf/AFoHxM3tEArZ1mpRB7mDANBgkqhkiG9w0BAQsFADBH
185+
MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM
186+
QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMjMxMjEzMDkwMDAwWhcNMjkwMjIw
187+
MTQwMDAwWjA7MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNl
188+
cnZpY2VzMQwwCgYDVQQDEwNXUjIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
189+
AoIBAQCp/5x/RR5wqFOfytnlDd5GV1d9vI+aWqxG8YSau5HbyfsvAfuSCQAWXqAc
190+
+MGr+XgvSszYhaLYWTwO0xj7sfUkDSbutltkdnwUxy96zqhMt/TZCPzfhyM1IKji
191+
aeKMTj+xWfpgoh6zySBTGYLKNlNtYE3pAJH8do1cCA8Kwtzxc2vFE24KT3rC8gIc
192+
LrRjg9ox9i11MLL7q8Ju26nADrn5Z9TDJVd06wW06Y613ijNzHoU5HEDy01hLmFX
193+
xRmpC5iEGuh5KdmyjS//V2pm4M6rlagplmNwEmceOuHbsCFx13ye/aoXbv4r+zgX
194+
FNFmp6+atXDMyGOBOozAKql2N87jAgMBAAGjgf4wgfswDgYDVR0PAQH/BAQDAgGG
195+
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/
196+
AgEAMB0GA1UdDgQWBBTeGx7teRXUPjckwyG77DQ5bUKyMDAfBgNVHSMEGDAWgBTk
197+
rysmcRorSCeFL1JmLO/wiRNxPjA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAKG
198+
GGh0dHA6Ly9pLnBraS5nb29nL3IxLmNydDArBgNVHR8EJDAiMCCgHqAchhpodHRw
199+
Oi8vYy5wa2kuZ29vZy9yL3IxLmNybDATBgNVHSAEDDAKMAgGBmeBDAECATANBgkq
200+
hkiG9w0BAQsFAAOCAgEARXWL5R87RBOWGqtY8TXJbz3S0DNKhjO6V1FP7sQ02hYS
201+
TL8Tnw3UVOlIecAwPJQl8hr0ujKUtjNyC4XuCRElNJThb0Lbgpt7fyqaqf9/qdLe
202+
SiDLs/sDA7j4BwXaWZIvGEaYzq9yviQmsR4ATb0IrZNBRAq7x9UBhb+TV+PfdBJT
203+
DhEl05vc3ssnbrPCuTNiOcLgNeFbpwkuGcuRKnZc8d/KI4RApW//mkHgte8y0YWu
204+
ryUJ8GLFbsLIbjL9uNrizkqRSvOFVU6xddZIMy9vhNkSXJ/UcZhjJY1pXAprffJB
205+
vei7j+Qi151lRehMCofa6WBmiA4fx+FOVsV2/7R6V2nyAiIJJkEd2nSi5SnzxJrl
206+
Xdaqev3htytmOPvoKWa676ATL/hzfvDaQBEcXd2Ppvy+275W+DKcH0FBbX62xevG
207+
iza3F4ydzxl6NJ8hk8R+dDXSqv1MbRT1ybB5W0k8878XSOjvmiYTDIfyc9acxVJr
208+
Y/cykHipa+te1pOhv7wYPYtZ9orGBV5SGOJm4NrB3K1aJar0RfzxC3ikr7Dyc6Qw
209+
qDTBU39CluVIQeuQRgwG3MuSxl7zRERDRilGoKb8uY45JzmxWuKxrfwT/478JuHU
210+
/oTxUFqOl2stKnn7QGTq8z29W+GgBLCXSBxC9epaHM0myFH/FJlniXJfHeytWt0=
211+
-----END CERTIFICATE-----
212+
2 s:C=US, O=Google Trust Services LLC, CN=GTS Root R1
213+
i:C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
214+
a:PKEY: RSA, 4096 (bit); sigalg: sha256WithRSAEncryption
215+
v:NotBefore: Jun 19 00:00:42 2020 GMT; NotAfter: Jan 28 00:00:42 2028 GMT
216+
-----BEGIN CERTIFICATE-----
217+
MIIFYjCCBEqgAwIBAgIQd70NbNs2+RrqIQ/E8FjTDTANBgkqhkiG9w0BAQsFADBX
218+
MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE
219+
CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIwMDYx
220+
OTAwMDA0MloXDTI4MDEyODAwMDA0MlowRzELMAkGA1UEBhMCVVMxIjAgBgNVBAoT
221+
GUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBMTEMxFDASBgNVBAMTC0dUUyBSb290IFIx
222+
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAthECix7joXebO9y/lD63
223+
ladAPKH9gvl9MgaCcfb2jH/76Nu8ai6Xl6OMS/kr9rH5zoQdsfnFl97vufKj6bwS
224+
iV6nqlKr+CMny6SxnGPb15l+8Ape62im9MZaRw1NEDPjTrETo8gYbEvs/AmQ351k
225+
KSUjB6G00j0uYODP0gmHu81I8E3CwnqIiru6z1kZ1q+PsAewnjHxgsHA3y6mbWwZ
226+
DrXYfiYaRQM9sHmklCitD38m5agI/pboPGiUU+6DOogrFZYJsuB6jC511pzrp1Zk
227+
j5ZPaK49l8KEj8C8QMALXL32h7M1bKwYUH+E4EzNktMg6TO8UpmvMrUpsyUqtEj5
228+
cuHKZPfmghCN6J3Cioj6OGaK/GP5Afl4/Xtcd/p2h/rs37EOeZVXtL0m79YB0esW
229+
CruOC7XFxYpVq9Os6pFLKcwZpDIlTirxZUTQAs6qzkm06p98g7BAe+dDq6dso499
230+
iYH6TKX/1Y7DzkvgtdizjkXPdsDtQCv9Uw+wp9U7DbGKogPeMa3Md+pvez7W35Ei
231+
Eua++tgy/BBjFFFy3l3WFpO9KWgz7zpm7AeKJt8T11dleCfeXkkUAKIAf5qoIbap
232+
sZWwpbkNFhHax2xIPEDgfg1azVY80ZcFuctL7TlLnMQ/0lUTbiSw1nH69MG6zO0b
233+
9f6BQdgAmD06yK56mDcYBZUCAwEAAaOCATgwggE0MA4GA1UdDwEB/wQEAwIBhjAP
234+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTkrysmcRorSCeFL1JmLO/wiRNxPjAf
235+
BgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo//z9SzBgBggrBgEFBQcBAQRUMFIw
236+
JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnBraS5nb29nL2dzcjEwKQYIKwYBBQUH
237+
MAKGHWh0dHA6Ly9wa2kuZ29vZy9nc3IxL2dzcjEuY3J0MDIGA1UdHwQrMCkwJ6Al
238+
oCOGIWh0dHA6Ly9jcmwucGtpLmdvb2cvZ3NyMS9nc3IxLmNybDA7BgNVHSAENDAy
239+
MAgGBmeBDAECATAIBgZngQwBAgIwDQYLKwYBBAHWeQIFAwIwDQYLKwYBBAHWeQIF
240+
AwMwDQYJKoZIhvcNAQELBQADggEBADSkHrEoo9C0dhemMXoh6dFSPsjbdBZBiLg9
241+
NR3t5P+T4Vxfq7vqfM/b5A3Ri1fyJm9bvhdGaJQ3b2t6yMAYN/olUazsaL+yyEn9
242+
WprKASOshIArAoyZl+tJaox118fessmXn1hIVw41oeQa1v1vg4Fv74zPl6/AhSrw
243+
9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy
244+
+qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi
245+
d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8=
246+
-----END CERTIFICATE-----
247+
""".trimIndent().toTestCase()
248+
}
249+
}
250+
}

settings.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ projects("cryptography-kotlin") {
3737
module("cryptography-bigint")
3838
module("cryptography-random")
3939
folder("cryptography-serialization") {
40-
module("pem")
40+
module("pem") {
41+
module("benchmarks")
42+
}
4143
module("asn1") {
4244
module("modules")
4345
}

0 commit comments

Comments
 (0)