EllipticCurves { public static byte[] ecdsaDer2Ieee(byte[] der, int ieeeLength) throws GeneralSecurityException { if (!isValidDerEncoding(der)) { throw new GeneralSecurityException("Invalid DER encoding"); } byte[] ieee = new byte[ieeeLength]; int length = der[1] & 0xff; int offset = 1 + 1 ; if (length >= 128) { offset++; } offset++; int rLength = der[offset++]; int extraZero = 0; if (der[offset] == 0) { extraZero = 1; } System.arraycopy( der, offset + extraZero, ieee, ieeeLength / 2 - rLength + extraZero, rLength - extraZero); offset += rLength + 1 ; int sLength = der[offset++]; extraZero = 0; if (der[offset] == 0) { extraZero = 1; } System.arraycopy( der, offset + extraZero, ieee, ieeeLength - sLength + extraZero, sLength - extraZero); return ieee; }  static ECParameterSpec getNistP256Params(); static ECParameterSpec getNistP384Params(); static ECParameterSpec getNistP521Params(); static boolean isNistEcParameterSpec(ECParameterSpec spec); static boolean isSameEcParameterSpec(ECParameterSpec one, ECParameterSpec two); static void validatePublicKey(ECPublicKey publicKey, ECPrivateKey privateKey); static BigInteger getModulus(EllipticCurve curve); static int fieldSizeInBytes(EllipticCurve curve); static BigInteger getY(BigInteger x, boolean lsb, EllipticCurve curve); static byte[] ecdsaIeee2Der(byte[] ieee); static byte[] ecdsaDer2Ieee(byte[] der, int ieeeLength); static boolean isValidDerEncoding(final byte[] sig); static int encodingSizeInBytes(EllipticCurve curve, PointFormatType format); @Deprecated static ECPoint ecPointDecode(EllipticCurve curve, PointFormatType format, byte[] encoded); static ECPoint pointDecode(CurveType curveType, PointFormatType format, byte[] encoded); static ECPoint pointDecode(EllipticCurve curve, PointFormatType format, byte[] encoded); static byte[] pointEncode(CurveType curveType, PointFormatType format, ECPoint point); static byte[] pointEncode(EllipticCurve curve, PointFormatType format, ECPoint point); static ECParameterSpec getCurveSpec(CurveType curve); static ECPublicKey getEcPublicKey(final byte[] x509PublicKey); static ECPublicKey getEcPublicKey(
      CurveType curve, PointFormatType pointFormat, final byte[] publicKey); static ECPublicKey getEcPublicKey(
      ECParameterSpec spec, PointFormatType pointFormat, final byte[] publicKey); static ECPublicKey getEcPublicKey(CurveType curve, final byte[] x, final byte[] y); static ECPrivateKey getEcPrivateKey(final byte[] pkcs8PrivateKey); static ECPrivateKey getEcPrivateKey(CurveType curve, final byte[] keyValue); static KeyPair generateKeyPair(CurveType curve); static KeyPair generateKeyPair(ECParameterSpec spec); static byte[] computeSharedSecret(ECPrivateKey myPrivateKey, ECPublicKey peerPublicKey); static byte[] computeSharedSecret(ECPrivateKey myPrivateKey, ECPoint publicPoint);  }
@Test public void testEcdsaDer2Ieee() throws Exception { for (EcdsaIeeeDer test : ieeeDerTestVector) { assertArrayEquals( Hex.decode(test.hexIeee), EllipticCurves.ecdsaDer2Ieee(Hex.decode(test.hexDer), test.hexIeee.length() / 2)); } }