To generate an ECDH keypair I have written below code which is the same as server's one which is using open-ssl. But my public key to Hex is like this (176):
3056301006072a8648ce3d020106052b8104000a0342000462bf4308171cffa3a3ed74a9e72cd3d5fde26d760322a5e39cd67166240f75f87edaffa52bef5e0895a37751f5b90b7b8fc077a90d76893e7cb857c1a49e4818
And the server public key is shorter, like this (130):
041f13436e59b8a4e61952b1f184052b330977732f7f8a0505c46028da82bdafd34ded7444a19acdbbf5de91cd914437c3ac9b827dac2f899a4bba961fd72a7ea3
Code:
KeyPairGenerator kpgen = KeyPairGenerator.getInstance("ECDH", "SC");
ECGenParameterSpec genspec = new ECGenParameterSpec("secp256k1");
kpgen.initialize(genspec);
What's the cause of this discrepancy? Iuse this line to turn public key into byte array:
kpgen.generateKeyPair().getPublic().getEncoded()).getBytes();
I tried to convert Android-generated public key by:
PublicKey pub = kpgen.generateKeyPair().getPublic();
byte[] pubBytes = pub.getEncoded();
SubjectPublicKeyInfo spkInfo = SubjectPublicKeyInfo.getInstance(pubBytes);
ASN1Primitive primitive = spkInfo.parsePublicKey();
byte[] publicKeyPKCS1 = primitive.getEncoded();
But I get this error:
java.io.EOFException: DEF length 126 object truncated by 63 2021-04-01 17:52:56.113 20381-24882/ at org.spongycastle.asn1.DefiniteLengthInputStream.toByteArray(DefiniteLengthInputStream.java:103) 2021-04-01 17:52:56.113 20381-24882/... W/System.err: at org.spongycastle.asn1.ASN1InputStream.createPrimitiveDERObject(ASN1InputStream.java:455) 2021-04-01 17:52:56.113 20381-24882/... W/System.err: at org.spongycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:190) 2021-04-01 17:52:56.113 20381-24882/... W/System.err: at org.spongycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:278) 2021-04-01 17:52:56.113 20381-24882/... W/System.err: at org.spongycastle.asn1.x509.SubjectPublicKeyInfo.parsePublicKey(SubjectPublicKeyInfo.java:112)