@@ -27,17 +27,21 @@ import dev.whyoleg.cryptography.serialization.asn1.modules.RsaKeyAlgorithmIdenti
2727import dev.whyoleg.cryptography.serialization.asn1.modules.RsaPrivateKey
2828import dev.whyoleg.cryptography.serialization.asn1.modules.RsaPublicKey
2929import dev.whyoleg.cryptography.serialization.asn1.modules.SubjectPublicKeyInfo
30+ import kotlinx.serialization.json.Json
3031
3132/* *
3233 * Computes the base64url-encoded SHA-256 hash of this JWK Thumbprint as defined by RFC 7638.
3334 *
3435 * @return The base64url-encoded SHA-256 digest of the canonical JSON representation of this thumbprint.
3536 */
3637@ExperimentalKJWTApi
37- public suspend fun Jwk.Thumbprint.hashed (): String {
38- val bytes = JwtJson .encodeToString(this ).encodeToByteArray()
38+ public suspend fun Jwk.Thumbprint.hashed (
39+ jsonInstance : Json = JwtJson ,
40+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
41+ ): String {
42+ val bytes = jsonInstance.encodeToString(this ).encodeToByteArray()
3943 val hash =
40- CryptographyProvider . Default
44+ cryptoProvider
4145 .get(SHA256 )
4246 .hasher()
4347 .hash(bytes)
@@ -52,8 +56,11 @@ public suspend fun Jwk.Thumbprint.hashed(): String {
5256 * Converts this [Jwk.Oct] to an [HMAC.Key] for the given [digest].
5357 */
5458@ExperimentalKJWTApi
55- public suspend fun Jwk.Oct.toHmacKey (digest : CryptographyAlgorithmId <Digest >): HMAC .Key =
56- CryptographyProvider .Default
59+ public suspend fun Jwk.Oct.toHmacKey (
60+ digest : CryptographyAlgorithmId <Digest >,
61+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
62+ ): HMAC .Key =
63+ cryptoProvider
5764 .get(HMAC )
5865 .keyDecoder(digest)
5966 .decodeFromByteArray(HMAC .Key .Format .RAW , k.decodeBase64Url())
@@ -120,48 +127,66 @@ private fun Jwk.Rsa.toPkcs8Der(): ByteArray {
120127
121128/* * Converts to [RSA.PKCS1.PublicKey] for RS256/RS384/RS512 verification. */
122129@ExperimentalKJWTApi
123- public suspend fun Jwk.Rsa.toRsaPkcs1PublicKey (digest : CryptographyAlgorithmId <Digest >): RSA .PKCS1 .PublicKey =
124- CryptographyProvider .Default
130+ public suspend fun Jwk.Rsa.toRsaPkcs1PublicKey (
131+ digest : CryptographyAlgorithmId <Digest >,
132+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
133+ ): RSA .PKCS1 .PublicKey =
134+ cryptoProvider
125135 .get(RSA .PKCS1 )
126136 .publicKeyDecoder(digest)
127137 .decodeFromByteArray(RSA .PublicKey .Format .DER , toSpkiDer())
128138
129139/* * Converts to [RSA.PKCS1.PrivateKey] for RS256/RS384/RS512 signing. */
130140@ExperimentalKJWTApi
131- public suspend fun Jwk.Rsa.toRsaPkcs1PrivateKey (digest : CryptographyAlgorithmId <Digest >): RSA .PKCS1 .PrivateKey =
132- CryptographyProvider .Default
141+ public suspend fun Jwk.Rsa.toRsaPkcs1PrivateKey (
142+ digest : CryptographyAlgorithmId <Digest >,
143+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
144+ ): RSA .PKCS1 .PrivateKey =
145+ cryptoProvider
133146 .get(RSA .PKCS1 )
134147 .privateKeyDecoder(digest)
135148 .decodeFromByteArray(RSA .PrivateKey .Format .DER , toPkcs8Der())
136149
137150/* * Converts to [RSA.PSS.PublicKey] for PS256/PS384/PS512 verification. */
138151@ExperimentalKJWTApi
139- public suspend fun Jwk.Rsa.toRsaPssPublicKey (digest : CryptographyAlgorithmId <Digest >): RSA .PSS .PublicKey =
140- CryptographyProvider .Default
152+ public suspend fun Jwk.Rsa.toRsaPssPublicKey (
153+ digest : CryptographyAlgorithmId <Digest >,
154+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
155+ ): RSA .PSS .PublicKey =
156+ cryptoProvider
141157 .get(RSA .PSS )
142158 .publicKeyDecoder(digest)
143159 .decodeFromByteArray(RSA .PublicKey .Format .DER , toSpkiDer())
144160
145161/* * Converts to [RSA.PSS.PrivateKey] for PS256/PS384/PS512 signing. */
146162@ExperimentalKJWTApi
147- public suspend fun Jwk.Rsa.toRsaPssPrivateKey (digest : CryptographyAlgorithmId <Digest >): RSA .PSS .PrivateKey =
148- CryptographyProvider .Default
163+ public suspend fun Jwk.Rsa.toRsaPssPrivateKey (
164+ digest : CryptographyAlgorithmId <Digest >,
165+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
166+ ): RSA .PSS .PrivateKey =
167+ cryptoProvider
149168 .get(RSA .PSS )
150169 .privateKeyDecoder(digest)
151170 .decodeFromByteArray(RSA .PrivateKey .Format .DER , toPkcs8Der())
152171
153172/* * Converts to [RSA.OAEP.PublicKey] for RSA-OAEP / RSA-OAEP-256 key encryption. */
154173@ExperimentalKJWTApi
155- public suspend fun Jwk.Rsa.toRsaOaepPublicKey (digest : CryptographyAlgorithmId <Digest >): RSA .OAEP .PublicKey =
156- CryptographyProvider .Default
174+ public suspend fun Jwk.Rsa.toRsaOaepPublicKey (
175+ digest : CryptographyAlgorithmId <Digest >,
176+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
177+ ): RSA .OAEP .PublicKey =
178+ cryptoProvider
157179 .get(RSA .OAEP )
158180 .publicKeyDecoder(digest)
159181 .decodeFromByteArray(RSA .PublicKey .Format .DER , toSpkiDer())
160182
161183/* * Converts to [RSA.OAEP.PrivateKey] for RSA-OAEP / RSA-OAEP-256 key decryption. */
162184@ExperimentalKJWTApi
163- public suspend fun Jwk.Rsa.toRsaOaepPrivateKey (digest : CryptographyAlgorithmId <Digest >): RSA .OAEP .PrivateKey =
164- CryptographyProvider .Default
185+ public suspend fun Jwk.Rsa.toRsaOaepPrivateKey (
186+ digest : CryptographyAlgorithmId <Digest >,
187+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
188+ ): RSA .OAEP .PrivateKey =
189+ cryptoProvider
165190 .get(RSA .OAEP )
166191 .privateKeyDecoder(digest)
167192 .decodeFromByteArray(RSA .PrivateKey .Format .DER , toPkcs8Der())
@@ -239,16 +264,20 @@ private fun Jwk.Ec.toPkcs8Der(): ByteArray {
239264
240265/* * Converts to [ECDSA.PublicKey] for ES256/ES384/ES512 verification. */
241266@ExperimentalKJWTApi
242- public suspend fun Jwk.Ec.toEcdsaPublicKey (): ECDSA .PublicKey =
243- CryptographyProvider .Default
267+ public suspend fun Jwk.Ec.toEcdsaPublicKey (
268+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
269+ ): ECDSA .PublicKey =
270+ cryptoProvider
244271 .get(ECDSA )
245272 .publicKeyDecoder(ecCurve(crv))
246273 .decodeFromByteArray(EC .PublicKey .Format .DER , toSpkiDer())
247274
248275/* * Converts to [ECDSA.PrivateKey] for ES256/ES384/ES512 signing. */
249276@ExperimentalKJWTApi
250- public suspend fun Jwk.Ec.toEcdsaPrivateKey (): ECDSA .PrivateKey =
251- CryptographyProvider .Default
277+ public suspend fun Jwk.Ec.toEcdsaPrivateKey (
278+ cryptoProvider : CryptographyProvider = CryptographyProvider .Default ,
279+ ): ECDSA .PrivateKey =
280+ cryptoProvider
252281 .get(ECDSA )
253282 .privateKeyDecoder(ecCurve(crv))
254283 .decodeFromByteArray(EC .PrivateKey .Format .DER , toPkcs8Der())
0 commit comments