diff --git a/app/src/main/java/i2p/bote/crypto/ECUtils.java b/app/src/main/java/i2p/bote/crypto/ECUtils.java new file mode 100644 index 0000000..5ad4303 --- /dev/null +++ b/app/src/main/java/i2p/bote/crypto/ECUtils.java @@ -0,0 +1,35 @@ +package i2p.bote.crypto; + +import org.spongycastle.asn1.nist.NISTNamedCurves; +import org.spongycastle.asn1.x9.X9ECParameters; +import org.spongycastle.jcajce.provider.asymmetric.util.EC5Util; +import org.spongycastle.jce.ECPointUtil; +import org.spongycastle.jce.spec.ECNamedCurveSpec; + +import java.security.spec.ECParameterSpec; +import java.security.spec.ECPoint; +import java.security.spec.EllipticCurve; + +/** + * A wrapper around the SpongyCastle EC classes. + */ +public class ECUtils { + public static ECParameterSpec getParameters(String curveName) { + X9ECParameters params = NISTNamedCurves.getByName(curveName); + return new ECNamedCurveSpec(curveName, params.getCurve(), params.getG(), params.getN(), params.getH(), null); + } + + public static byte[] encodePoint( + ECParameterSpec ecSpec, + ECPoint point, + boolean withCompression) { + org.spongycastle.math.ec.ECPoint bcPoint = EC5Util.convertPoint(ecSpec, point, withCompression); + return bcPoint.getEncoded(); + } + + public static ECPoint decodePoint( + EllipticCurve curve, + byte[] encoded) { + return ECPointUtil.decodePoint(curve, encoded); + } +}