Я пытаюсь создать ECC с сгенерированным ключом, используя web3j. У меня есть объект ECKeyPair , но для cipher.init()
требуется, чтобы вторым параметром был объект Key
. ECKeyPair возвращает BigInteger
закрытого ключа и открытого ключа, как я могу преобразовать их в KeyPair
, который содержит PrivateKey
и PublicKey
объект?
Я пробовал (ссылка: CryptoUtil.java ):
private fun decodeKeyPair(ecKeyPair: ECKeyPair): KeyPair {
val xp = getNamedCurveByName("secp256k1")
val p = ECNamedCurveSpec("secp256k1", xp.curve, xp.g, xp.n, xp.h, null)
val curve = convertCurve(p.curve)
val g = EC5Util.convertPoint(curve, p.generator, false)
val n = p.order
val h = BigInteger.valueOf(p.cofactor.toLong())
val dp = ECDomainParameters(curve, g, n, h)
val bytes = Numeric.toBytesPadded(ecKeyPair.publicKey, 64)
val x = Numeric.toBigInt(Arrays.copyOfRange(bytes, 0, 32))
val y = Numeric.toBigInt(Arrays.copyOfRange(bytes, 32, 64))
val q = curve.createPoint(x, y)
val publicKey = BCECPublicKey(
"EC",
ECPublicKeyParameters(q, dp),
BouncyCastleProvider.CONFIGURATION
)
val privateKey = BCECPrivateKey(
"EC",
ECPrivateKeyParameters(ecKeyPair.privateKey, dp),
publicKey,
p,
BouncyCastleProvider.CONFIGURATION
)
return KeyPair(publicKey, privateKey)
}
но это возвращает ошибку:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.bouncycastle.math.ec.ECCurve org.bouncycastle.jce.spec.ECParameterSpec.getCurve()' on a null object reference
Есть ли другой способ конвертировать Web3j ECKeyPair в KeyPair
?