/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.xml.security.algorithms.implementations;

import java.io.IOException;
import java.math.BigInteger;
import java.security.interfaces.ECPublicKey;
import java.security.spec.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public final class ECDSAUtils {

    private ECDSAUtils() {
        // complete
    }

    /**
     * Converts an ASN.1 ECDSA value to a XML Signature ECDSA Value.
     * <p></p>
     * The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r, s) value
     * pairs; the XML Signature requires the core BigInteger values.
     *
     * @param asn1Bytes
     * @return the decode bytes
     * @throws IOException
     * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
     * @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
     */
    public static byte[] convertASN1toXMLDSIG(byte[] asn1Bytes) throws IOException {

        if (asn1Bytes.length < 8 || asn1Bytes[0] != 48) {
            throw new IOException("Invalid ASN.1 format of ECDSA signature");
        }
        int offset;
        if (asn1Bytes[1] > 0) {
            offset = 2;
        } else if (asn1Bytes[1] == (byte) 0x81) {
            offset = 3;
        } else {
            throw new IOException("Invalid ASN.1 format of ECDSA signature");
        }

        byte rLength = asn1Bytes[offset + 1];
        int i;

        for (i = rLength; i > 0 && asn1Bytes[offset + 2 + rLength - i] == 0; i--); //NOPMD

        byte sLength = asn1Bytes[offset + 2 + rLength + 1];
        int j;

        for (j = sLength; j > 0 && asn1Bytes[offset + 2 + rLength + 2 + sLength - j] == 0; j--); //NOPMD

        int rawLen = Math.max(i, j);

        if ((asn1Bytes[offset - 1] & 0xff) != asn1Bytes.length - offset
                || (asn1Bytes[offset - 1] & 0xff) != 2 + rLength + 2 + sLength
                || asn1Bytes[offset] != 2
                || asn1Bytes[offset + 2 + rLength] != 2) {
            throw new IOException("Invalid ASN.1 format of ECDSA signature");
        }
        byte[] xmldsigBytes = new byte[2 * rawLen];

        System.arraycopy(asn1Bytes, offset + 2 + rLength - i, xmldsigBytes, rawLen - i, i);
        System.arraycopy(asn1Bytes, offset + 2 + rLength + 2 + sLength - j, xmldsigBytes,
                2 * rawLen - j, j);

        return xmldsigBytes;
    }

    /**
     * Converts a XML Signature ECDSA Value to an ASN.1 DSA value.
     * <p></p>
     * The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r, s) value
     * pairs; the XML Signature requires the core BigInteger values.
     *
     * @param xmldsigBytes
     * @return the encoded ASN.1 bytes
     * @throws IOException
     * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
     * @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
     */
    public static byte[] convertXMLDSIGtoASN1(byte[] xmldsigBytes) throws IOException {

        int rawLen = xmldsigBytes.length / 2;

        int i;

        for (i = rawLen; i > 0 && xmldsigBytes[rawLen - i] == 0; i--); //NOPMD

        int j = i;

        if (xmldsigBytes[rawLen - i] < 0) {
            j += 1;
        }

        int k;

        for (k = rawLen; k > 0 && xmldsigBytes[2 * rawLen - k] == 0; k--); //NOPMD

        int l = k;

        if (xmldsigBytes[2 * rawLen - k] < 0) {
            l += 1;
        }

        int len = 2 + j + 2 + l;
        if (len > 255) {
            throw new IOException("Invalid XMLDSIG format of ECDSA signature");
        }
        int offset;
        byte[] asn1Bytes;
        if (len < 128) {
            asn1Bytes = new byte[2 + 2 + j + 2 + l];
            offset = 1;
        } else {
            asn1Bytes = new byte[3 + 2 + j + 2 + l];
            asn1Bytes[1] = (byte) 0x81;
            offset = 2;
        }
        asn1Bytes[0] = 48;
        asn1Bytes[offset++] = (byte) len;
        asn1Bytes[offset++] = 2;
        asn1Bytes[offset++] = (byte) j;

        System.arraycopy(xmldsigBytes, rawLen - i, asn1Bytes, offset + j - i, i);

        offset += j;

        asn1Bytes[offset++] = 2;
        asn1Bytes[offset++] = (byte) l;

        System.arraycopy(xmldsigBytes, 2 * rawLen - k, asn1Bytes, offset + l - k, k);

        return asn1Bytes;
    }

    private static final List<ECCurveDefinition> ecCurveDefinitions = new ArrayList<>();

    static {
        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp112r1",
                        "1.3.132.0.6",
                        "db7c2abf62e35e668076bead208b",
                        "db7c2abf62e35e668076bead2088",
                        "659ef8ba043916eede8911702b22",
                        "09487239995a5ee76b55f9c2f098",
                        "a89ce5af8724c0a23e0e0ff77500",
                        "db7c2abf62e35e7628dfac6561c5",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp112r2",
                        "1.3.132.0.7",
                        "db7c2abf62e35e668076bead208b",
                        "6127c24c05f38a0aaaf65c0ef02c",
                        "51def1815db5ed74fcc34c85d709",
                        "4ba30ab5e892b4e1649dd0928643",
                        "adcd46f5882e3747def36e956e97",
                        "36df0aafd8b8d7597ca10520d04b",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp128r1",
                        "1.3.132.0.28",
                        "fffffffdffffffffffffffffffffffff",
                        "fffffffdfffffffffffffffffffffffc",
                        "e87579c11079f43dd824993c2cee5ed3",
                        "161ff7528b899b2d0c28607ca52c5b86",
                        "cf5ac8395bafeb13c02da292dded7a83",
                        "fffffffe0000000075a30d1b9038a115",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp128r2",
                        "1.3.132.0.29",
                        "fffffffdffffffffffffffffffffffff",
                        "d6031998d1b3bbfebf59cc9bbff9aee1",
                        "5eeefca380d02919dc2c6558bb6d8a5d",
                        "7b6aa5d85e572983e6fb32a7cdebc140",
                        "27b6916a894d3aee7106fe805fc34b44",
                        "3fffffff7fffffffbe0024720613b5a3",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp160k1",
                        "1.3.132.0.9",
                        "fffffffffffffffffffffffffffffffeffffac73",
                        "0000000000000000000000000000000000000000",
                        "0000000000000000000000000000000000000007",
                        "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
                        "938cf935318fdced6bc28286531733c3f03c4fee",
                        "0100000000000000000001b8fa16dfab9aca16b6b3",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp160r1",
                        "1.3.132.0.8",
                        "ffffffffffffffffffffffffffffffff7fffffff",
                        "ffffffffffffffffffffffffffffffff7ffffffc",
                        "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
                        "4a96b5688ef573284664698968c38bb913cbfc82",
                        "23a628553168947d59dcc912042351377ac5fb32",
                        "0100000000000000000001f4c8f927aed3ca752257",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp160r2",
                        "1.3.132.0.30",
                        "fffffffffffffffffffffffffffffffeffffac73",
                        "fffffffffffffffffffffffffffffffeffffac70",
                        "b4e134d3fb59eb8bab57274904664d5af50388ba",
                        "52dcb034293a117e1f4ff11b30f7199d3144ce6d",
                        "feaffef2e331f296e071fa0df9982cfea7d43f2e",
                        "0100000000000000000000351ee786a818f3a1a16b",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp192k1",
                        "1.3.132.0.31",
                        "fffffffffffffffffffffffffffffffffffffffeffffee37",
                        "000000000000000000000000000000000000000000000000",
                        "000000000000000000000000000000000000000000000003",
                        "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
                        "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d",
                        "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp192r1 [NIST P-192, X9.62 prime192v1]",
                        "1.2.840.10045.3.1.1",
                        "fffffffffffffffffffffffffffffffeffffffffffffffff",
                        "fffffffffffffffffffffffffffffffefffffffffffffffc",
                        "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
                        "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
                        "07192b95ffc8da78631011ed6b24cdd573f977a11e794811",
                        "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp224k1",
                        "1.3.132.0.32",
                        "fffffffffffffffffffffffffffffffffffffffffffffffeffffe56d",
                        "00000000000000000000000000000000000000000000000000000000",
                        "00000000000000000000000000000000000000000000000000000005",
                        "a1455b334df099df30fc28a169a467e9e47075a90f7e650eb6b7a45c",
                        "7e089fed7fba344282cafbd6f7e319f7c0b0bd59e2ca4bdb556d61a5",
                        "010000000000000000000000000001dce8d2ec6184caf0a971769fb1f7",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp224r1 [NIST P-224]",
                        "1.3.132.0.33",
                        "ffffffffffffffffffffffffffffffff000000000000000000000001",
                        "fffffffffffffffffffffffffffffffefffffffffffffffffffffffe",
                        "b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4",
                        "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21",
                        "bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34",
                        "ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp256k1",
                        "1.3.132.0.10",
                        "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
                        "0000000000000000000000000000000000000000000000000000000000000000",
                        "0000000000000000000000000000000000000000000000000000000000000007",
                        "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
                        "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
                        "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp256r1 [NIST P-256, X9.62 prime256v1]",
                        "1.2.840.10045.3.1.7",
                        "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
                        "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
                        "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
                        "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
                        "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5",
                        "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp384r1 [NIST P-384]",
                        "1.3.132.0.34",
                        "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff",
                        "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc",
                        "b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef",
                        "aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7",
                        "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f",
                        "ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "secp521r1 [NIST P-521]",
                        "1.3.132.0.35",
                        "01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
                        "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc",
                        "0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00",
                        "00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66",
                        "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650",
                        "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 prime192v2",
                        "1.2.840.10045.3.1.2",
                        "fffffffffffffffffffffffffffffffeffffffffffffffff",
                        "fffffffffffffffffffffffffffffffefffffffffffffffc",
                        "cc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953",
                        "eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a",
                        "6574d11d69b6ec7a672bb82a083df2f2b0847de970b2de15",
                        "fffffffffffffffffffffffe5fb1a724dc80418648d8dd31",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 prime192v3",
                        "1.2.840.10045.3.1.3",
                        "fffffffffffffffffffffffffffffffeffffffffffffffff",
                        "fffffffffffffffffffffffffffffffefffffffffffffffc",
                        "22123dc2395a05caa7423daeccc94760a7d462256bd56916",
                        "7d29778100c65a1da1783716588dce2b8b4aee8e228f1896",
                        "38a90f22637337334b49dcb66a6dc8f9978aca7648a943b0",
                        "ffffffffffffffffffffffff7a62d031c83f4294f640ec13",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 prime239v1",
                        "1.2.840.10045.3.1.4",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc",
                        "6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a",
                        "0ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf",
                        "7debe8e4e90a5dae6e4054ca530ba04654b36818ce226b39fccb7b02f1ae",
                        "7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 prime239v2",
                        "1.2.840.10045.3.1.5",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc",
                        "617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c",
                        "38af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7",
                        "5b0125e4dbea0ec7206da0fc01d9b081329fb555de6ef460237dff8be4ba",
                        "7fffffffffffffffffffffff800000cfa7e8594377d414c03821bc582063",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 prime239v3",
                        "1.2.840.10045.3.1.6",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff",
                        "7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc",
                        "255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e",
                        "6768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a",
                        "1607e6898f390c06bc1d552bad226f3b6fcfe48b6e818499af18e3ed6cf3",
                        "7fffffffffffffffffffffff7fffff975deb41b3a6057c3c432146526551",
                        1)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect113r1",
                        "1.3.132.0.4",
                        "020000000000000000000000000201",
                        "003088250ca6e7c7fe649ce85820f7",
                        "00e8bee4d3e2260744188be0e9c723",
                        "009d73616f35f4ab1407d73562c10f",
                        "00a52830277958ee84d1315ed31886",
                        "0100000000000000d9ccec8a39e56f",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect113r2",
                        "1.3.132.0.5",
                        "020000000000000000000000000201",
                        "00689918dbec7e5a0dd6dfc0aa55c7",
                        "0095e9a9ec9b297bd4bf36e059184f",
                        "01a57a6a7b26ca5ef52fcdb8164797",
                        "00b3adc94ed1fe674c06e695baba1d",
                        "010000000000000108789b2496af93",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect131r1",
                        "1.3.132.0.22",
                        "080000000000000000000000000000010d",
                        "07a11b09a76b562144418ff3ff8c2570b8",
                        "0217c05610884b63b9c6c7291678f9d341",
                        "0081baf91fdf9833c40f9c181343638399",
                        "078c6e7ea38c001f73c8134b1b4ef9e150",
                        "0400000000000000023123953a9464b54d",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect131r2",
                        "1.3.132.0.23",
                        "080000000000000000000000000000010d",
                        "03e5a88919d7cafcbf415f07c2176573b2",
                        "04b8266a46c55657ac734ce38f018f2192",
                        "0356dcd8f2f95031ad652d23951bb366a8",
                        "0648f06d867940a5366d9e265de9eb240f",
                        "0400000000000000016954a233049ba98f",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect163k1 [NIST K-163]",
                        "1.3.132.0.1",
                        "0800000000000000000000000000000000000000c9",
                        "000000000000000000000000000000000000000001",
                        "000000000000000000000000000000000000000001",
                        "02fe13c0537bbc11acaa07d793de4e6d5e5c94eee8",
                        "0289070fb05d38ff58321f2e800536d538ccdaa3d9",
                        "04000000000000000000020108a2e0cc0d99f8a5ef",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect163r1",
                        "1.3.132.0.2",
                        "0800000000000000000000000000000000000000c9",
                        "07b6882caaefa84f9554ff8428bd88e246d2782ae2",
                        "0713612dcddcb40aab946bda29ca91f73af958afd9",
                        "0369979697ab43897789566789567f787a7876a654",
                        "00435edb42efafb2989d51fefce3c80988f41ff883",
                        "03ffffffffffffffffffff48aab689c29ca710279b",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect163r2 [NIST B-163]",
                        "1.3.132.0.15",
                        "0800000000000000000000000000000000000000c9",
                        "000000000000000000000000000000000000000001",
                        "020a601907b8c953ca1481eb10512f78744a3205fd",
                        "03f0eba16286a2d57ea0991168d4994637e8343e36",
                        "00d51fbc6c71a0094fa2cdd545b11c5c0c797324f1",
                        "040000000000000000000292fe77e70c12a4234c33",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect193r1",
                        "1.3.132.0.24",
                        "02000000000000000000000000000000000000000000008001",
                        "0017858feb7a98975169e171f77b4087de098ac8a911df7b01",
                        "00fdfb49bfe6c3a89facadaa7a1e5bbc7cc1c2e5d831478814",
                        "01f481bc5f0ff84a74ad6cdf6fdef4bf6179625372d8c0c5e1",
                        "0025e399f2903712ccf3ea9e3a1ad17fb0b3201b6af7ce1b05",
                        "01000000000000000000000000c7f34a778f443acc920eba49",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect193r2",
                        "1.3.132.0.25",
                        "02000000000000000000000000000000000000000000008001",
                        "0163f35a5137c2ce3ea6ed8667190b0bc43ecd69977702709b",
                        "00c9bb9e8927d4d64c377e2ab2856a5b16e3efb7f61d4316ae",
                        "00d9b67d192e0367c803f39e1a7e82ca14a651350aae617e8f",
                        "01ce94335607c304ac29e7defbd9ca01f596f927224cdecf6c",
                        "010000000000000000000000015aab561b005413ccd4ee99d5",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect233k1 [NIST K-233]",
                        "1.3.132.0.26",
                        "020000000000000000000000000000000000000004000000000000000001",
                        "000000000000000000000000000000000000000000000000000000000000",
                        "000000000000000000000000000000000000000000000000000000000001",
                        "017232ba853a7e731af129f22ff4149563a419c26bf50a4c9d6eefad6126",
                        "01db537dece819b7f70f555a67c427a8cd9bf18aeb9b56e0c11056fae6a3",
                        "008000000000000000000000000000069d5bb915bcd46efb1ad5f173abdf",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect233r1 [NIST B-233]",
                        "1.3.132.0.27",
                        "020000000000000000000000000000000000000004000000000000000001",
                        "000000000000000000000000000000000000000000000000000000000001",
                        "0066647ede6c332c7f8c0923bb58213b333b20e9ce4281fe115f7d8f90ad",
                        "00fac9dfcbac8313bb2139f1bb755fef65bc391f8b36f8f8eb7371fd558b",
                        "01006a08a41903350678e58528bebf8a0beff867a7ca36716f7e01f81052",
                        "01000000000000000000000000000013e974e72f8a6922031d2603cfe0d7",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect239k1",
                        "1.3.132.0.3",
                        "800000000000000000004000000000000000000000000000000000000001",
                        "000000000000000000000000000000000000000000000000000000000000",
                        "000000000000000000000000000000000000000000000000000000000001",
                        "29a0b6a887a983e9730988a68727a8b2d126c44cc2cc7b2a6555193035dc",
                        "76310804f12e549bdb011c103089e73510acb275fc312a5dc6b76553f0ca",
                        "2000000000000000000000000000005a79fec67cb6e91f1c1da800e478a5",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect283k1 [NIST K-283]",
                        "1.3.132.0.16",
                        "0800000000000000000000000000000000000000000000000000000000000000000010a1",
                        "000000000000000000000000000000000000000000000000000000000000000000000000",
                        "000000000000000000000000000000000000000000000000000000000000000000000001",
                        "0503213f78ca44883f1a3b8162f188e553cd265f23c1567a16876913b0c2ac2458492836",
                        "01ccda380f1c9e318d90f95d07e5426fe87e45c0e8184698e45962364e34116177dd2259",
                        "01ffffffffffffffffffffffffffffffffffe9ae2ed07577265dff7f94451e061e163c61",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect283r1 [NIST B-283]",
                        "1.3.132.0.17",
                        "0800000000000000000000000000000000000000000000000000000000000000000010a1",
                        "000000000000000000000000000000000000000000000000000000000000000000000001",
                        "027b680ac8b8596da5a4af8a19a0303fca97fd7645309fa2a581485af6263e313b79a2f5",
                        "05f939258db7dd90e1934f8c70b0dfec2eed25b8557eac9c80e2e198f8cdbecd86b12053",
                        "03676854fe24141cb98fe6d4b20d02b4516ff702350eddb0826779c813f0df45be8112f4",
                        "03ffffffffffffffffffffffffffffffffffef90399660fc938a90165b042a7cefadb307",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect409k1 [NIST K-409]",
                        "1.3.132.0.36",
                        "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001",
                        "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                        "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
                        "0060f05f658f49c1ad3ab1890f7184210efd0987e307c84c27accfb8f9f67cc2c460189eb5aaaa62ee222eb1b35540cfe9023746",
                        "01e369050b7c4e42acba1dacbf04299c3460782f918ea427e6325165e9ea10e3da5f6c42e9c55215aa9ca27a5863ec48d8e0286b",
                        "007ffffffffffffffffffffffffffffffffffffffffffffffffffe5f83b2d4ea20400ec4557d5ed3e3e7ca5b4b5c83b8e01e5fcf",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect409r1 [NIST B-409]",
                        "1.3.132.0.37",
                        "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001",
                        "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
                        "0021a5c2c8ee9feb5c4b9a753b7b476b7fd6422ef1f3dd674761fa99d6ac27c8a9a197b272822f6cd57a55aa4f50ae317b13545f",
                        "015d4860d088ddb3496b0c6064756260441cde4af1771d4db01ffe5b34e59703dc255a868a1180515603aeab60794e54bb7996a7",
                        "0061b1cfab6be5f32bbfa78324ed106a7636b9c5a7bd198d0158aa4f5488d08f38514f1fdf4b4f40d2181b3681c364ba0273c706",
                        "010000000000000000000000000000000000000000000000000001e2aad6a612f33307be5fa47c3c9e052f838164cd37d9a21173",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect571k1 [NIST K-571]",
                        "1.3.132.0.38",
                        "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425",
                        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
                        "026eb7a859923fbc82189631f8103fe4ac9ca2970012d5d46024804801841ca44370958493b205e647da304db4ceb08cbbd1ba39494776fb988b47174dca88c7e2945283a01c8972",
                        "0349dc807f4fbf374f4aeade3bca95314dd58cec9f307a54ffc61efc006d8a2c9d4979c0ac44aea74fbebbb9f772aedcb620b01a7ba7af1b320430c8591984f601cd4c143ef1c7a3",
                        "020000000000000000000000000000000000000000000000000000000000000000000000131850e1f19a63e4b391a8db917f4138b630d84be5d639381e91deb45cfe778f637c1001",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "sect571r1 [NIST B-571]",
                        "1.3.132.0.39",
                        "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425",
                        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
                        "02f40e7e2221f295de297117b7f3d62f5c6a97ffcb8ceff1cd6ba8ce4a9a18ad84ffabbd8efa59332be7ad6756a66e294afd185a78ff12aa520e4de739baca0c7ffeff7f2955727a",
                        "0303001d34b856296c16c0d40d3cd7750a93d1d2955fa80aa5f40fc8db7b2abdbde53950f4c0d293cdd711a35b67fb1499ae60038614f1394abfa3b4c850d927e1e7769c8eec2d19",
                        "037bf27342da639b6dccfffeb73d69d78c6c27a6009cbbca1980f8533921e8a684423e43bab08a576291af8f461bb2a8b3531d2f0485c19b16e2f1516e23dd3c1a4827af1b8ac15b",
                        "03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ce18ff55987308059b186823851ec7dd9ca1161de93d5174d66e8382e9bb2fe84e47",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb191v1",
                        "1.2.840.10045.3.0.5",
                        "800000000000000000000000000000000000000000000201",
                        "2866537b676752636a68f56554e12640276b649ef7526267",
                        "2e45ef571f00786f67b0081b9495a3d95462f5de0aa185ec",
                        "36b3daf8a23206f9c4f299d7b21a9c369137f2c84ae1aa0d",
                        "765be73433b3f95e332932e70ea245ca2418ea0ef98018fb",
                        "40000000000000000000000004a20e90c39067c893bbb9a5",
                        2)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb191v2",
                        "1.2.840.10045.3.0.6",
                        "800000000000000000000000000000000000000000000201",
                        "401028774d7777c7b7666d1366ea432071274f89ff01e718",
                        "0620048d28bcbd03b6249c99182b7c8cd19700c362c46a01",
                        "3809b2b7cc1b28cc5a87926aad83fd28789e81e2c9e3bf10",
                        "17434386626d14f3dbf01760d9213a3e1cf37aec437d668a",
                        "20000000000000000000000050508cb89f652824e06b8173",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb191v3",
                        "1.2.840.10045.3.0.7",
                        "800000000000000000000000000000000000000000000201",
                        "6c01074756099122221056911c77d77e77a777e7e7e77fcb",
                        "71fe1af926cf847989efef8db459f66394d90f32ad3f15e8",
                        "375d4ce24fde434489de8746e71786015009e66e38a926dd",
                        "545a39176196575d985999366e6ad34ce0a77cd7127b06be",
                        "155555555555555555555555610c0b196812bfb6288a3ea3",
                        6)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb239v1",
                        "1.2.840.10045.3.0.11",
                        "800000000000000000000000000000000000000000000000001000000001",
                        "32010857077c5431123a46b808906756f543423e8d27877578125778ac76",
                        "790408f2eedaf392b012edefb3392f30f4327c0ca3f31fc383c422aa8c16",
                        "57927098fa932e7c0a96d3fd5b706ef7e5f5c156e16b7e7c86038552e91d",
                        "61d8ee5077c33fecf6f1a16b268de469c3c7744ea9a971649fc7a9616305",
                        "2000000000000000000000000000000f4d42ffe1492a4993f1cad666e447",
                        4)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb239v2",
                        "1.2.840.10045.3.0.12",
                        "800000000000000000000000000000000000000000000000001000000001",
                        "4230017757a767fae42398569b746325d45313af0766266479b75654e65f",
                        "5037ea654196cff0cd82b2c14a2fcf2e3ff8775285b545722f03eacdb74b",
                        "28f9d04e900069c8dc47a08534fe76d2b900b7d7ef31f5709f200c4ca205",
                        "5667334c45aff3b5a03bad9dd75e2c71a99362567d5453f7fa6e227ec833",
                        "1555555555555555555555555555553c6f2885259c31e3fcdf154624522d",
                        6)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb239v3",
                        "1.2.840.10045.3.0.13",
                        "800000000000000000000000000000000000000000000000001000000001",
                        "01238774666a67766d6676f778e676b66999176666e687666d8766c66a9f",
                        "6a941977ba9f6a435199acfc51067ed587f519c5ecb541b8e44111de1d40",
                        "70f6e9d04d289c4e89913ce3530bfde903977d42b146d539bf1bde4e9c92",
                        "2e5a0eaf6e5e1305b9004dce5c0ed7fe59a35608f33837c816d80b79f461",
                        "0cccccccccccccccccccccccccccccac4912d2d9df903ef9888b8a0e4cff",
                        0xA)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb359v1",
                        "1.2.840.10045.3.0.18",
                        "800000000000000000000000000000000000000000000000000000000000000000000000100000000000000001",
                        "5667676a654b20754f356ea92017d946567c46675556f19556a04616b567d223a5e05656fb549016a96656a557",
                        "2472e2d0197c49363f1fe7f5b6db075d52b6947d135d8ca445805d39bc345626089687742b6329e70680231988",
                        "3c258ef3047767e7ede0f1fdaa79daee3841366a132e163aced4ed2401df9c6bdcde98e8e707c07a2239b1b097",
                        "53d7e08529547048121e9c95f3791dd804963948f34fae7bf44ea82365dc7868fe57e4ae2de211305a407104bd",
                        "01af286bca1af286bca1af286bca1af286bca1af286bc9fb8f6b85c556892c20a7eb964fe7719e74f490758d3b",
                        0x4C)
        );

        ecCurveDefinitions.add(
                new ECCurveDefinition(
                        "X9.62 c2tnb431r1",
                        "1.2.840.10045.3.0.20",
                        "800000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001",
                        "1a827ef00dd6fc0e234caf046c6a5d8a85395b236cc4ad2cf32a0cadbdc9ddf620b0eb9906d0957f6c6feacd615468df104de296cd8f",
                        "10d9b4a3d9047d8b154359abfb1b7f5485b04ceb868237ddc9deda982a679a5a919b626d4e50a8dd731b107a9962381fb5d807bf2618",
                        "120fc05d3c67a99de161d2f4092622feca701be4f50f4758714e8a87bbf2a658ef8c21e7c5efe965361f6c2999c0c247b0dbd70ce6b7",
                        "20d0af8903a96f8d5fa2c255745d3c451b302c9346d9b7e485e7bce41f6b591f3e8f6addcbb0bc4c2f947a7de1a89b625d6a598b3760",
                        "0340340340340340340340340340340340340340340340340340340323c313fab50589703b5ec68d3587fec60d161cc149c1ad4a91",
                        0x2760)
        );
    }

    public static String getOIDFromPublicKey(ECPublicKey ecPublicKey) {
        ECParameterSpec ecParameterSpec = ecPublicKey.getParams();
        BigInteger order = ecParameterSpec.getOrder();
        BigInteger affineX = ecParameterSpec.getGenerator().getAffineX();
        BigInteger affineY = ecParameterSpec.getGenerator().getAffineY();
        BigInteger a = ecParameterSpec.getCurve().getA();
        BigInteger b = ecParameterSpec.getCurve().getB();
        int h = ecParameterSpec.getCofactor();
        ECField ecField = ecParameterSpec.getCurve().getField();
        BigInteger field;
        if (ecField instanceof ECFieldFp) {
            ECFieldFp ecFieldFp = (ECFieldFp) ecField;
            field = ecFieldFp.getP();
        } else {
            ECFieldF2m ecFieldF2m = (ECFieldF2m) ecField;
            field = ecFieldF2m.getReductionPolynomial();
        }

        Iterator<ECCurveDefinition> ecCurveDefinitionIterator = ecCurveDefinitions.iterator();
        while (ecCurveDefinitionIterator.hasNext()) {
            ECCurveDefinition ecCurveDefinition = ecCurveDefinitionIterator.next();
            String oid = ecCurveDefinition.equals(field, a, b, affineX, affineY, order, h);
            if (oid != null) {
                return oid;
            }
        }
        return null;
    }

    public static ECCurveDefinition getECCurveDefinition(String oid) {
        Iterator<ECCurveDefinition> ecCurveDefinitionIterator = ecCurveDefinitions.iterator();
        while (ecCurveDefinitionIterator.hasNext()) {
            ECCurveDefinition ecCurveDefinition = ecCurveDefinitionIterator.next();
            if (ecCurveDefinition.getOid().equals(oid)) {
                return ecCurveDefinition;
            }
        }
        return null;
    }

    public static class ECCurveDefinition {

        private final String name;
        private final String oid;
        private final String field;
        private final String a;
        private final String b;
        private final String x;
        private final String y;
        private final String n;
        private final int h;

        public ECCurveDefinition(String name, String oid, String field, String a, String b, String x, String y, String n, int h) {
            this.name = name;
            this.oid = oid;
            this.field = field;
            this.a = a;
            this.b = b;
            this.x = x;
            this.y = y;
            this.n = n;
            this.h = h;
        }

        /**
         * returns the ec oid if parameter are equal to this definition
         */
        public String equals(BigInteger field, BigInteger a, BigInteger b, BigInteger x, BigInteger y, BigInteger n, int h) {
            if (this.field.equals(field.toString(16))
                    && this.a.equals(a.toString(16))
                    && this.b.equals(b.toString(16))
                    && this.x.equals(x.toString(16))
                    && this.y.equals(y.toString(16))
                    && this.n.equals(n.toString(16))
                    && this.h == h) {
                return this.oid;
            }
            return null;
        }

        public String getName() {
            return name;
        }

        public String getOid() {
            return oid;
        }

        public String getField() {
            return field;
        }

        public String getA() {
            return a;
        }

        public String getB() {
            return b;
        }

        public String getX() {
            return x;
        }

        public String getY() {
            return y;
        }

        public String getN() {
            return n;
        }

        public int getH() {
            return h;
        }
    }

    public static byte[] encodePoint(ECPoint ecPoint, EllipticCurve ellipticCurve) {
        int size = (ellipticCurve.getField().getFieldSize() + 7) / 8;
        byte[] affineXBytes = stripLeadingZeros(ecPoint.getAffineX().toByteArray());
        byte[] affineYBytes = stripLeadingZeros(ecPoint.getAffineY().toByteArray());
        byte[] encodedBytes = new byte[size * 2 + 1];
        encodedBytes[0] = 0x04; //uncompressed
        System.arraycopy(affineXBytes, 0, encodedBytes, size - affineXBytes.length + 1, affineXBytes.length);
        System.arraycopy(affineYBytes, 0, encodedBytes, encodedBytes.length - affineYBytes.length, affineYBytes.length);
        return encodedBytes;
    }

    public static ECPoint decodePoint(byte[] encodedBytes, EllipticCurve elliptiCcurve) {
        if (encodedBytes[0] != 0x04) {
            throw new IllegalArgumentException("Only uncompressed format is supported");
        }

        int size = (elliptiCcurve.getField().getFieldSize() + 7) / 8;
        byte[] affineXBytes = new byte[size];
        byte[] affineYBytes = new byte[size];
        System.arraycopy(encodedBytes, 1, affineXBytes, 0, size);
        System.arraycopy(encodedBytes, size + 1, affineYBytes, 0, size);
        return new ECPoint(new BigInteger(1, affineXBytes), new BigInteger(1, affineYBytes));
    }

    public static byte[] stripLeadingZeros(byte[] bytes) {
        int i;
        for (i = 0; i < bytes.length - 1; i++) {
            if (bytes[i] != 0) {
                break;
            }
        }

        if (i == 0) {
            return bytes;
        } else {
            byte[] stripped = new byte[bytes.length - i];
            System.arraycopy(bytes, i, stripped, 0, stripped.length);
            return stripped;
        }
    }
}
