@@ -14,7 +14,7 @@ import dev.whyoleg.cryptography.serialization.asn1.*
1414import dev.whyoleg.cryptography.serialization.asn1.modules.*
1515import dev.whyoleg.cryptography.serialization.pem.*
1616
17- internal sealed class WebCryptoEc <PublicK : EC .PublicKey , PrivateK : EC .PrivateKey , KP : EC .KeyPair <PublicK , PrivateK >>(
17+ internal sealed class WebCryptoEc <PublicK : EC .PublicKey , PrivateK : EC .PrivateKey < PublicK > , KP : EC .KeyPair <PublicK , PrivateK >>(
1818 protected val algorithmName : String ,
1919 private val publicKeyWrapper : WebCryptoKeyWrapper <PublicK >,
2020 private val privateKeyWrapper : WebCryptoKeyWrapper <PrivateK >,
@@ -48,10 +48,20 @@ internal sealed class WebCryptoEc<PublicK : EC.PublicKey, PrivateK : EC.PrivateK
4848 keyProcessor = EcPublicKeyProcessor
4949 ), EC.PublicKey
5050
51- protected abstract class EcPrivateKey (val privateKey : CryptoKey ) : WebCryptoEncodableKey<EC.PrivateKey.Format>(
51+ protected abstract inner class EcPrivateKey (val privateKey : CryptoKey ) : WebCryptoEncodableKey<EC.PrivateKey.Format>(
5252 key = privateKey,
5353 keyProcessor = EcPrivateKeyProcessor
54- ), EC.PrivateKey
54+ ), EC.PrivateKey<PublicK> {
55+ final override suspend fun getPublicKey (): PublicK = publicKeyWrapper.wrap(
56+ WebCrypto .reimportPrivateKeyAsPublicKey(
57+ privateKey = privateKey,
58+ extractable = true ,
59+ keyUsages = publicKeyWrapper.usages,
60+ )
61+ )
62+
63+ final override fun getPublicKeyBlocking (): PublicK = nonBlocking()
64+ }
5565}
5666
5767private object EcPublicKeyProcessor : WebCryptoKeyProcessor<EC.PublicKey.Format>() {
@@ -77,7 +87,7 @@ private object EcPublicKeyProcessor : WebCryptoKeyProcessor<EC.PublicKey.Format>
7787 override fun afterEncoding (format : EC .PublicKey .Format , key : ByteArray ): ByteArray = when (format) {
7888 EC .PublicKey .Format .JWK -> key
7989 EC .PublicKey .Format .RAW -> key
80- EC .PublicKey .Format .RAW .Compressed
90+ EC .PublicKey .Format .RAW .Compressed ,
8191 -> compressPublicKey(key)
8292 EC .PublicKey .Format .DER -> key
8393 EC .PublicKey .Format .PEM -> wrapPem(PemLabel .PublicKey , key)
0 commit comments