I'm trying to generate EC key Pair and I want to send PublicKey in base64 to backend but I'm getting errors: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: Detect premature EOF
and java.lang.IllegalArgumentException: Illegal base64 character 4
Key pair generate:
let keyAttribute = [kSecAttrType as String: kSecAttrKeyTypeECSECPrimeRandom,
kSecAttrKeySizeInBits as String: 256] as CFDictionary
func generatePair() {
SecKeyGeneratePair(keyAttribute, &publicKeySec, &privateKeySec)
}
getting base64 public key:
if let publicKeySec = publicKeySec, let cfData = SecKeyCopyExternalRepresentation(publicKeySec, &error) {
let data: Data = cfData as Data
let b64Key = data.base64EncodedString()
return b64Key
}
here is how to backend is trying to decode my publicKey:
private static PublicKey decodePublicKey(String base64PublicKey) {
PublicKey publicKey = null;
try {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("EC");
publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
} catch (Exception e) {
e.printStackTrace();
}
return publicKey;
}