У меня проблема с созданием закрытого ключа из массива байтов в Kotlin (с помощью Android Studio).
Я должен загрузить закрытый ключ, который я определил, как показано ниже.Из того, что я знаю, этот закрытый ключ EC имеет длину 32 байта, что соответствует кривой secp256r1
0x3C, 0x6D, etc... (this have 32 in total)
Вот что у меня есть:
val privateKeyArray = arrayOf(0x3C, 0x6D, etc...) //this have 32 size
Затем я пытаюсь преобразовать его вbyteArray:
val privateKeyBytes = privateKeyArray.map { it.toByte() }.toByteArray())
И затем я хочу подписать с ним некоторые данные:
val keyFactory = KeyFactory.getInstance("EC")
val privateKey = keyFactory.generatePrivate(PKCS8EncodedKeySpec(privateKeyBytes)) //THIS line gives the Exception
val content = "random string".toByteArray()
val signer = Signature.getInstance("SHA256withECDSA")
signer.initSign(privateKey)
signer.update(content)
val signature = signer.sign()
Однако, когда я пытаюсь сгенерировать privateKey из keyFactory, я получаю следующее исключение:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: ошибка: 0c000079: подпрограммы кодирования ASN.1: OPENSSL_internal: HEADER_TOO_LONG в android.app.ActivityThread.performLaunchAava: Activity2927)
Как правильно прочитать закрытый ключ в этом случае?