Skip to content
Merged
Show file tree
Hide file tree
Changes from 63 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
b8135f7
prepare externalising asn1/DER encoding
JesusMcCloud May 6, 2026
5be9e41
derencodable
JesusMcCloud May 6, 2026
26b53ff
Awesn1 Subject ALt names
JesusMcCloud May 6, 2026
233373a
csr
JesusMcCloud May 6, 2026
cfac920
pubkey
JesusMcCloud May 7, 2026
c8f3dc5
cert
JesusMcCloud May 7, 2026
233e5af
start migrating sigalg
JesusMcCloud May 7, 2026
33006de
tmp ec sig
JesusMcCloud May 7, 2026
1dc83ec
tmp ec sig
JesusMcCloud May 7, 2026
8a4e1d1
remove x509sigalgfoo
JesusMcCloud May 7, 2026
6f7b945
sigalg progress
JesusMcCloud May 7, 2026
7d9187b
ecsig done
JesusMcCloud May 7, 2026
2e2474b
cert
JesusMcCloud May 7, 2026
7ba998a
baseline
JesusMcCloud May 7, 2026
ec28d25
jvm tests compiles
JesusMcCloud May 7, 2026
e2a135e
fix pem test
JesusMcCloud May 7, 2026
49d3503
EC JCA interop fix
JesusMcCloud May 7, 2026
e7dd380
fixes
JesusMcCloud May 7, 2026
1b8bda2
fixes
JesusMcCloud May 7, 2026
5157771
ec sig parsing lenience
JesusMcCloud May 7, 2026
2b587b8
cert/sig progress
JesusMcCloud May 8, 2026
49a7fe5
fix RDN test
JesusMcCloud May 8, 2026
d075dc4
fix cert sigalg equals
JesusMcCloud May 8, 2026
26cdb0c
fix sig equals
JesusMcCloud May 8, 2026
7853db1
remove hashcode contract violation
JesusMcCloud May 8, 2026
2e5469e
TbsCert eq/hashcode fix
JesusMcCloud May 8, 2026
742666a
RSA passing tmp
JesusMcCloud May 8, 2026
b29b509
rsa progress
JesusMcCloud May 8, 2026
8418ead
refactor RSA
JesusMcCloud May 8, 2026
ae40d90
migrate jvm to pss params
JesusMcCloud May 8, 2026
f9faed4
smooth RSA instantiation
JesusMcCloud May 8, 2026
bba0905
all green
JesusMcCloud May 8, 2026
dcafa35
remove x509Encoded from Cryptosignature
JesusMcCloud May 11, 2026
7020b89
delegate pem properly
JesusMcCloud May 11, 2026
0b3a93e
add awesn1 submodule
JesusMcCloud May 12, 2026
31dbdcb
CSR done
JesusMcCloud May 12, 2026
e993bf3
add missing marker comment
JesusMcCloud May 12, 2026
fd36854
generalise cert
JesusMcCloud May 12, 2026
7ae1238
RDN/ATV + Attr/extn
JesusMcCloud May 15, 2026
ccf3fbc
update tests
JesusMcCloud May 15, 2026
c6c08ed
update to awesn1 changes
JesusMcCloud May 26, 2026
2a65a25
update to latest awesn1
JesusMcCloud May 26, 2026
e119686
update to latest awesn1
JesusMcCloud May 27, 2026
dfabdc2
fix altnames shape
JesusMcCloud May 27, 2026
b70e02b
update awesn1
JesusMcCloud May 28, 2026
1d8c55d
fix tests
JesusMcCloud Jun 12, 2026
4a97325
paralleleize jwk tests
JesusMcCloud Jun 12, 2026
0125b4a
compact rsa tests
JesusMcCloud Jun 12, 2026
3ac8618
upgrade yarn lock
JesusMcCloud Jun 12, 2026
f7eeffd
certificate and asn1integer improvements
JesusMcCloud Jun 12, 2026
d1c3b5b
update awesn1
JesusMcCloud Jun 22, 2026
2899498
update to pkix outsourcing
JesusMcCloud Jul 1, 2026
eff6e8f
update sources for externalised pkix
JesusMcCloud Jul 1, 2026
2f76648
remove awesn1 subodule
JesusMcCloud Jul 1, 2026
f42bbb2
cleanup and mark plugs for pkix extn
JesusMcCloud Jul 16, 2026
3ad3aec
fix tests
JesusMcCloud Jul 16, 2026
05b843d
fix more tests
JesusMcCloud Jul 16, 2026
76e17bc
remove bogus conventions
JesusMcCloud Jul 16, 2026
d84f7cb
expose messed-up RSA MGF params
JesusMcCloud Jul 16, 2026
6afe918
try fix rsassa mgfa params
JesusMcCloud Jul 17, 2026
0ac4700
RSA SSA PSS Fix
JesusMcCloud Jul 17, 2026
2b4835b
address PR feedback
JesusMcCloud Jul 17, 2026
ff07a8f
add missing optin for iostests
JesusMcCloud Jul 17, 2026
896e495
Update indispensable-cosef/src/jvmTest/kotlin/ConversionTests.kt
JesusMcCloud Jul 17, 2026
1d5d960
fix random asn1 int generation
JesusMcCloud Jul 17, 2026
18310ce
fix random int generation for good
JesusMcCloud Jul 17, 2026
bc05413
fix the zero edge case
iaik-jheher Jul 17, 2026
c7c02e6
don't panic tests on ios-unsupported RSASSAPSS combinations
iaik-jheher Jul 17, 2026
911a52c
Update Test.kt
iaik-jheher Jul 17, 2026
c04f211
update gradle to fix ios test reporter
JesusMcCloud Jul 17, 2026
f3f2a2e
gradle 9.5.1
JesusMcCloud Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file removed .gitmodules
Empty file.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,12 @@ class SignumConventionsExtension(private val project: Project) {
//if we do this properly, cinterop (swift-klib) blows up, so we hack!
project.afterEvaluate {
//work around IDEA BUG not finding any test deps on non-JVM!
(project.kotlinExtension as KotlinMultiplatformExtension). compilerOptions {
freeCompilerArgs.add("-Xcontext-parameters")
}
(project.kotlinExtension as KotlinMultiplatformExtension).sourceSets.filter { it.name.endsWith("Test") }
.forEach { it.dependencies { addTestExtensions() } }
.forEach {
it.dependencies { addTestExtensions() } }
tasks.withType<Test>().configureEach {
maxHeapSize = "10G"
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ systemProp.org.gradle.internal.http.socketTimeout = 1200000

kotlin.build.report.output=json
kotlin.build.report.json.directory=./metrics
returnValueChecker=full
returnValueChecker=full
19 changes: 14 additions & 5 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[versions]
kotlin = "2.3.20"
kotlin = "2.4.0"
agp = "8.12.3"
core = "1.5.0"
kotlinxIoCore = "0.9.0"
Expand All @@ -9,12 +9,15 @@ bignum = "0.3.10"
jose = "9.31"
kotlinpoet = "2.2.0"
kotlincryptoRandom = "0.6.0"
asp = "20260610"
asp = "20260701"
classgraph = "4.8.184"
bouncycastle= "1.83"
testballoon = "1.0.0-K2.3.20"
#testballoonAddons = "0.15.0"
bouncycastle= "1.84"
testballoon = "1.0.0-K2.4.0-Beta2"
serialization = "1.11.0"
cidre = "0.4.0"
urikmp = "0.0.20"
awesn1 = "0.5.0"
modulator = "0.1.0"

[libraries]
bignum = { group = "com.ionspin.kotlin", name = "bignum", version.ref = "bignum" }
Expand All @@ -26,9 +29,15 @@ multibase = { module = "at.asitplus:multibase", version.ref = "multibase" }
securerandom = { module = "org.kotlincrypto.random:crypto-rand", version.ref = "kotlincryptoRandom" }
asp = { module = "at.asitplus.gradle:k2", version.ref = "asp" }
classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" }
awesn1-crypto = {module = "at.asitplus.awesn1:crypto", version.ref= "awesn1"}
awesn1-oids = {module = "at.asitplus.awesn1:oids", version.ref= "awesn1"}
awesn1-io = {module = "at.asitplus.awesn1:kxs-io", version.ref= "awesn1"}
cidre = { module = "at.asitplus:cidre", version.ref = "cidre"}
urikmp = {module = "com.eygraber:uri-kmp", version.ref = "urikmp"}

#for build logic conventions plugin, as it needs the artefact, not the plugin ID
agp = { module = "com.android.tools.build:gradle", version.ref = "agp" }
modulator = { module = "at.asitplus:gradle-modulator", version.ref = "modulator" }

[plugins]
asp = { id = "at.asitplus.gradle.conventions", version.ref = "asp" }
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private val PemEncodable<*>.postEB: String get() = "$FENCE_PREFIX_END${this.cano
* Encodes this [PemEncodable] into a PEM-encoded string
*/
@OptIn(ExperimentalEncodingApi::class)
fun PemEncodable<*>.encodeToPEM(): KmmResult<String> = catching {
fun PemEncodable<*>.encodeToPem(): KmmResult<String> = catching {
"$preEB\n" + Base64.Mime.encode(encodeToDer()).lines().joinToString("").chunked(64)
.joinToString(separator = "\n", postfix = "\n") + postEB
}
3 changes: 2 additions & 1 deletion indispensable-cosef/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ exportXCFramework(
datetime(),
kmmresult(),
project(":indispensable"),
project(":indispensable-asn1"),
libs.awesn1.crypto,
libs.awesn1.oids,
libs.bignum

)
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ sealed interface CoseAlgorithm : Enumerable {

// RSASSA-PKCS1-v1_5 using SHA-1
@Serializable(with = CoseAlgorithmSerializer::class)
data object RS1 : Signature(-65535, SignatureAlgorithm.RSA(Digest.SHA1, RSAPadding.PKCS1))
data object RS1 : Signature(-65535, SignatureAlgorithm.RSA(SignatureAlgorithm.RSA.Parameters.Pkcs1Padded(Digest.SHA1)))

companion object : Enumeration<Signature> {
override val entries: Collection<Signature> by lazy {
Expand Down Expand Up @@ -311,15 +311,15 @@ fun SignatureAlgorithm.toCoseAlgorithm(): KmmResult<CoseAlgorithm.Signature> = c
else -> throw UnsupportedCryptoException("ECDSA with ${this.digest} is unsupported by COSE")
}

is SignatureAlgorithm.RSA -> when (this.padding) {
RSAPadding.PKCS1 -> when (this.digest) {
is SignatureAlgorithm.RSA -> when (this.parameters) {
is SignatureAlgorithm.RSA.Parameters.Pkcs1Padded -> when (this.digest) {
Digest.SHA1 -> CoseAlgorithm.Signature.RS1
Digest.SHA256 -> CoseAlgorithm.Signature.RS256
Digest.SHA384 -> CoseAlgorithm.Signature.RS384
Digest.SHA512 -> CoseAlgorithm.Signature.RS512
}

RSAPadding.PSS -> when (this.digest) {
is SignatureAlgorithm.RSA.Parameters.PssPadded -> when (this.digest) {
Digest.SHA256 -> CoseAlgorithm.Signature.PS256
Digest.SHA384 -> CoseAlgorithm.Signature.PS384
Digest.SHA512 -> CoseAlgorithm.Signature.PS512
Expand Down Expand Up @@ -370,4 +370,4 @@ fun SpecializedDataIntegrityAlgorithm.toCoseAlgorithm(): KmmResult<CoseAlgorithm

/** Tries to find a matching COSE algorithm. Note that COSE imposes curve restrictions on ECDSA based on the digest. */
fun SpecializedMessageAuthenticationCode.toCoseAlgorithm(): KmmResult<CoseAlgorithm.MAC> =
this.algorithm.toCoseAlgorithm()
this.algorithm.toCoseAlgorithm()
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import at.asitplus.KmmResult.Companion.failure
import at.asitplus.catching
import at.asitplus.signum.indispensable.CryptoPublicKey
import at.asitplus.signum.indispensable.SpecializedCryptoPublicKey
import at.asitplus.signum.indispensable.asn1.Asn1Integer
import at.asitplus.signum.indispensable.asn1.encoding.decodeFromAsn1ContentBytes
import at.asitplus.awesn1.Asn1Integer
import at.asitplus.awesn1.encoding.decodeFromAsn1ContentBytes

/**
* Wrapper to handle parameters for different COSE public key types.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ package at.asitplus.signum.indispensable.cosef

import at.asitplus.signum.indispensable.CryptoSignature
import at.asitplus.signum.indispensable.SignatureAlgorithm
import at.asitplus.signum.indispensable.X509SignatureAlgorithm
import at.asitplus.signum.indispensable.cosef.io.ByteStringWrapperSerializer
import at.asitplus.signum.indispensable.cosef.io.coseCompliantSerializer
import at.asitplus.signum.indispensable.io.Base64Strict
import at.asitplus.signum.indispensable.io.TransformingSerializerTemplate
import at.asitplus.signum.indispensable.pki.X509Certificate
import at.asitplus.signum.indispensable.pki.Certificate
import io.matthewnelson.encoding.base64.Base64
import io.matthewnelson.encoding.core.Decoder.Companion.decodeToByteArray
import io.matthewnelson.encoding.core.Encoder.Companion.encodeToString
Expand Down Expand Up @@ -127,10 +126,9 @@ private fun <P : Any?> ByteArray.fromByteStringWrapper(serializer: KSerializer<P

private fun CoseHeader.usesEC(): Boolean? = when (algorithm) {
null -> certificateChain?.firstOrNull()
?.let { X509Certificate.decodeFromDerOrNull(it) }
?.let { it.signatureAlgorithm is X509SignatureAlgorithm.ECDSA }
?.let { Certificate.decodeFromByteArray(it) }
?.let { it.signatureAlgorithm is SignatureAlgorithm.ECDSA }
is CoseAlgorithm.Signature -> (algorithm.algorithm is SignatureAlgorithm.ECDSA)
else -> false
}


11 changes: 6 additions & 5 deletions indispensable-cosef/src/jvmTest/kotlin/ConversionTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import at.asitplus.signum.indispensable.cosef.CoseAlgorithm
import at.asitplus.signum.indispensable.cosef.toCoseAlgorithm
import at.asitplus.signum.indispensable.cosef.toCoseKey
import at.asitplus.signum.indispensable.toCryptoPublicKey
import at.asitplus.signum.indispensable.toX509SignatureAlgorithm
import at.asitplus.testballoon.matrix.*
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldNotBe
Expand All @@ -30,17 +29,19 @@ val ConversionTests by matrixSuite {
}
}
}
"COSE -> X509 -> COSE" - {
"COSE -> SigAlg -> COSE" - {
data(CoseAlgorithm.Signature.entries) - {
it.toX509SignatureAlgorithm().getOrNull()?.let { x509 ->
it.algorithm.asn1Representation.let { x509 ->
if (it.algorithm is SignatureAlgorithm.ECDSA && (it.algorithm as SignatureAlgorithm.ECDSA).requiredCurve != null) {
"Curve information is lost" {
val algorithm = x509.toCoseAlgorithm().getOrThrow()
val algorithm = SignatureAlgorithm(x509).toCoseAlgorithm().getOrThrow()
algorithm shouldNotBe it
algorithm.toString().takeLast(3) shouldBe it.toString().takeLast(3)
algorithm.toString().take(2) shouldBe it.toString().take(2)
}
} else "is stable" { x509.toCoseAlgorithm() shouldSucceedWith it }
} else "is stable" {
SignatureAlgorithm(x509).toCoseAlgorithm() shouldSucceedWith it
}
Comment thread
JesusMcCloud marked this conversation as resolved.
Outdated
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion indispensable-josef/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ exportXCFramework(
datetime(),
kmmresult(),
project(":indispensable"),
project(":indispensable-asn1"),
libs.awesn1.crypto,
libs.awesn1.oids,
libs.bignum

)
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import at.asitplus.signum.indispensable.CryptoPublicKey.EC.Companion.fromUncompr
import at.asitplus.signum.indispensable.ECCurve
import at.asitplus.signum.indispensable.SecretExposure
import at.asitplus.signum.indispensable.SpecializedCryptoPublicKey
import at.asitplus.signum.indispensable.asn1.Asn1Integer
import at.asitplus.awesn1.Asn1Integer
import at.asitplus.signum.indispensable.io.Base64UrlStrict
import at.asitplus.signum.indispensable.io.ByteArrayBase64UrlSerializer
import at.asitplus.signum.indispensable.io.CertificateChainBase64Serializer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ sealed class JwsAlgorithm(override val identifier: String) :
/** The one exception, which is not a valid JWS algorithm identifier */

@Serializable(with = JwsAlgorithmSerializer::class)
data object NON_JWS_SHA1_WITH_RSA : RSA("RS1", SignatureAlgorithm.RSA(Digest.SHA1, RSAPadding.PKCS1))
data object NON_JWS_SHA1_WITH_RSA : RSA("RS1", SignatureAlgorithm.RSA(SignatureAlgorithm.RSA.Parameters.Pkcs1Padded(Digest.SHA1)))
companion object : Enumeration<RSA> {
override val entries: Collection<RSA> by lazy {
setOf(
Expand Down Expand Up @@ -184,15 +184,15 @@ fun SignatureAlgorithm.toJwsAlgorithm(): KmmResult<JwsAlgorithm> = catching {
else -> throw IllegalArgumentException("ECDSA with ${this.digest} is unsupported by JWS")
}

is SignatureAlgorithm.RSA -> when (this.padding) {
RSAPadding.PKCS1 -> when (this.digest) {
is SignatureAlgorithm.RSA -> when (this.parameters) {
is SignatureAlgorithm.RSA.Parameters.Pkcs1Padded -> when (this.digest) {
Digest.SHA1 -> JwsAlgorithm.Signature.NON_JWS_SHA1_WITH_RSA
Digest.SHA256 -> JwsAlgorithm.Signature.RS256
Digest.SHA384 -> JwsAlgorithm.Signature.RS384
Digest.SHA512 -> JwsAlgorithm.Signature.RS512
}

RSAPadding.PSS -> when (this.digest) {
is SignatureAlgorithm.RSA.Parameters.PssPadded -> when (this.digest) {
Digest.SHA256 -> JwsAlgorithm.Signature.PS256
Digest.SHA384 -> JwsAlgorithm.Signature.PS384
Digest.SHA512 -> JwsAlgorithm.Signature.PS512
Expand Down Expand Up @@ -229,4 +229,4 @@ fun SpecializedMessageAuthenticationCode.toJwsAlgorithm() =

/** Tries to find a matching JWS algorithm.*/
fun SpecializedSignatureAlgorithm.toJwsAlgorithm() =
this.algorithm.toJwsAlgorithm()
this.algorithm.toJwsAlgorithm()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package at.asitplus.signum.indispensable.josef

import at.asitplus.signum.indispensable.asn1.encoding.encodeTo4Bytes
import at.asitplus.awesn1.encoding.encodeTo4Bytes

object JwsExtensions {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ data class JwsHeader(
val publicKey: CryptoPublicKey? by lazy {
jsonWebKey?.toCryptoPublicKey()?.getOrNull()
?: keyId?.let { catching { CryptoPublicKey.fromDid(it) } }?.getOrNull()
?: certificateChain?.leaf?.decodedPublicKey?.getOrNull()
?: certificateChain?.leaf?.publicKey
}

val keyAttestationParsed: JwsCompactTyped<KeyAttestationJwt>? by lazy {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package at.asitplus.signum.indispensable.josef.io

import at.asitplus.signum.indispensable.decodeFromDer
import at.asitplus.signum.indispensable.encodeToDer
import at.asitplus.signum.indispensable.io.ByteArrayBase64Serializer
import at.asitplus.signum.indispensable.io.TransformingSerializerTemplate
import at.asitplus.signum.indispensable.pki.X509Certificate
import at.asitplus.signum.indispensable.pki.Certificate

object JwsCertificateSerializer : TransformingSerializerTemplate<X509Certificate, ByteArray>(
object JwsCertificateSerializer : TransformingSerializerTemplate<Certificate, ByteArray>(
parent = ByteArrayBase64Serializer,
encodeAs = X509Certificate::encodeToDer,
decodeAs = { X509Certificate.decodeFromDer(it) } //workaround iOS compilation bug KT-71498
encodeAs = Certificate::encodeToDer,
decodeAs = { Certificate.decodeFromDer(it) } //workaround iOS compilation bug KT-71498
)
10 changes: 10 additions & 0 deletions indispensable-josef/src/commonTest/kotlin/TestSessionConfig.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import at.asitplus.testballoon.matrix.ExecutionMode
import at.asitplus.testballoon.matrix.MatrixTestDefaults
import de.infix.testBalloon.framework.core.TestSession
import org.kotlincrypto.random.CryptoRand
import org.kotlincrypto.random.DelicateCryptoRandApi
import kotlin.random.Random

//Supercharge tests with concurrency!
class ModuleTestSession : TestSession(
testConfig = DefaultConfiguration.apply { MatrixTestDefaults { execution = ExecutionMode.Concurrent(64) } }
)

// CryptRand != Random, see https://github.com/KotlinCrypto/random/issues/50
@OptIn(DelicateCryptoRandApi::class)
object InsecureRandom : CryptoRand() {
override fun nextBytes(buf: ByteArray) = Random.nextBytes(buf)
fun nextBytes(n: Int) = ByteArray(n).also { nextBytes(it) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package at.asitplus.signum.indispensable.josef

import at.asitplus.signum.indispensable.CryptoPublicKey
import at.asitplus.signum.indispensable.ECCurve
import at.asitplus.signum.indispensable.asn1.Asn1Integer
import at.asitplus.awesn1.Asn1Integer
import at.asitplus.signum.indispensable.io.Base64UrlStrict
import at.asitplus.testballoon.matrix.*
import io.kotest.matchers.shouldBe
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package at.asitplus.signum.indispensable.josef

import at.asitplus.KmmResult
import at.asitplus.signum.indispensable.toX509SignatureAlgorithm
import at.asitplus.signum.indispensable.SignatureAlgorithm
import at.asitplus.testballoon.matrix.*
import io.kotest.matchers.shouldBe
import de.infix.testBalloon.framework.core.TestConfig
import kotlin.time.Duration.Companion.minutes
import de.infix.testBalloon.framework.core.testScope

//somehow including kmmresult-test makes this fail
infix fun <T> KmmResult<T>.shouldSucceedWith(b: T): T =
Expand All @@ -28,8 +25,8 @@ val ConversionTest by matrixSuite {
}
"JWS -> X509 -> JWS is stable" - {
data(JwsAlgorithm.Signature.entries) test {
it.toX509SignatureAlgorithm().getOrNull()?.let { x509 ->
x509.toJwsAlgorithm() shouldSucceedWith it
it.algorithm.asn1Representation.let { x509 ->
SignatureAlgorithm(x509).toJwsAlgorithm() shouldSucceedWith it
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package at.asitplus.signum.indispensable.josef
import at.asitplus.signum.indispensable.CryptoPublicKey
import at.asitplus.signum.indispensable.CryptoPublicKey.EC.Companion.fromUncompressed
import at.asitplus.signum.indispensable.ECCurve
import at.asitplus.signum.indispensable.asn1.Asn1Integer
import at.asitplus.signum.indispensable.asn1.toAsn1Integer
import at.asitplus.awesn1.Asn1Integer
import at.asitplus.awesn1.toAsn1Integer
import at.asitplus.signum.internals.ensureSize
import at.asitplus.testballoon.matrix.*
import io.kotest.matchers.nulls.shouldNotBeNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,6 @@ import java.net.URI
import javax.crypto.KeyGenerator
import kotlin.random.Random

// CryptRand != Random, see https://github.com/KotlinCrypto/random/issues/50
@OptIn(DelicateCryptoRandApi::class)
private object InsecureRandom : CryptoRand() {
override fun nextBytes(buf: ByteArray) = Random.nextBytes(buf)
fun nextBytes(n: Int) = ByteArray(n).also { nextBytes(it) }
}

@OptIn(HazardousMaterials::class)
val JweEncryptedTest by matrixSuite {

Expand Down
Loading
Loading