From df7d82dc37692a4bdac5d293522c3897c186c925 Mon Sep 17 00:00:00 2001 From: nathan Date: Sat, 12 Mar 2016 12:51:12 +0100 Subject: [PATCH] Chanced EccProvateKeySerializer to use RefelectASM for access to setting the curve coordinate (solves problem with differences in classes in signed packages - ie: if it's signed, all files in package must have the same signer.) --- .../util/serialization/EccPrivateKeySerializer.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Dorkbox-Util/src/dorkbox/util/serialization/EccPrivateKeySerializer.java b/Dorkbox-Util/src/dorkbox/util/serialization/EccPrivateKeySerializer.java index 702e99e..30bbc31 100644 --- a/Dorkbox-Util/src/dorkbox/util/serialization/EccPrivateKeySerializer.java +++ b/Dorkbox-Util/src/dorkbox/util/serialization/EccPrivateKeySerializer.java @@ -19,12 +19,12 @@ import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.Serializer; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; +import com.esotericsoftware.reflectasm.FieldAccess; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.crypto.ec.CustomNamedCurves; import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.math.ec.ECAccessor; import org.bouncycastle.math.ec.ECCurve; import org.bouncycastle.math.ec.ECPoint; @@ -36,6 +36,11 @@ import java.math.BigInteger; public class EccPrivateKeySerializer extends Serializer { + // we use ASM here + private static final FieldAccess ecCurveAccess = FieldAccess.get(ECCurve.class); + private static final int ecCoordIndex = ecCurveAccess.getIndex("coord"); + + private static final byte usesName = (byte) 1; private static final byte usesOid = (byte) 2; @@ -245,7 +250,7 @@ class EccPrivateKeySerializer extends Serializer { int coordinateSystem = input.readInt(true); curve = new ECCurve.Fp(q, a, b, order, cofactor); - ECAccessor.setCoordSystem(curve, coordinateSystem); + ecCurveAccess.setInt(curve, ecCoordIndex, coordinateSystem); } return curve; }