Использование пары ключей эллиптической кривой на Android - PullRequest
0 голосов
/ 05 мая 2018

Мне нужно использовать пару ключей эллиптической кривой на Android, чтобы подписать и проверить строки. Я использую следующий код для генерации пары ключей

val parameterSpec = ECNamedCurveTable.getParameterSpec("secp160r1")

fun genKeyPair(): KeyPair{
    val keyPairGenerator = KeyPairGenerator.getInstance(
            "EC", "SC")
    keyPairGenerator.initialize(parameterSpec, SecureRandom())
    val keyPair: KeyPair = keyPairGenerator.genKeyPair()
    return keyPair
}

Приложение написано на Kotlin, но я рад любому ответу, связанному с Java. Кто-нибудь знает, где я могу найти хорошие ресурсы или примеры кода?

1 Ответ

0 голосов
/ 28 ноября 2018

Хорошую документацию можно найти на сайте разработчика Android: https://developer.android.com/training/articles/keystore#kotlin Есть примеры того, как генерировать, хранить в хранилище ключей, подписывать и проверять данные.

EDITED

Например, чтобы создать KeyPair

val kpg: KeyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC,
    "AndroidKeyStore")
val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder("alias",
    KeyProperties.PURPOSE_SIGN).run {
    setDigests(KeyProperties.DIGEST_SHA256)
    build()
    }
kpg.initialize(parameterSpec)
val keyPair = kpg.generateKeyPair()

Если вы хотите поделиться своим открытым ключом с сервером

val pubKey = keyPair.public
val pubKeyString = String(Base64.encode(pubKey.encoded, 0))

Данные подписи

val signature: ByteArray = Signature.getInstance("SHA256withECDSA").run {
    initSign(privKey)
    update(data)
    sign()
    }

Проверка данных

val valid: Boolean = Signature.getInstance("SHA256withECDSA").run {
    initVerify(pubKey)
    update(data)
    verify(signature)
    }
...