package com.example.geocachingapp;

import java.math.BigInteger;

public class Secp192k1 {
    protected static final byte p[] = {
            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xfe, (byte) 0xff, (byte) 0xff, (byte) 0xee, (byte) 0x37
    };
    protected static final byte a[] = {
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
    };
    protected static final byte b[] = {
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03
    };
    protected static final byte G[] = {
            (byte) 0x04, (byte) 0xdb, (byte) 0x4f, (byte) 0xf1, (byte) 0x0e, (byte) 0xc0, (byte) 0x57, (byte) 0xe9, (byte) 0xae,
            (byte) 0x26, (byte) 0xb0, (byte) 0x7d, (byte) 0x02, (byte) 0x80, (byte) 0xb7, (byte) 0xf4, (byte) 0x34,
            (byte) 0x1d, (byte) 0xa5, (byte) 0xd1, (byte) 0xb1, (byte) 0xea, (byte) 0xe0, (byte) 0x6c, (byte) 0x7d,
            (byte) 0x9b, (byte) 0x2f, (byte) 0x2f, (byte) 0x6d, (byte) 0x9c, (byte) 0x56, (byte) 0x28, (byte) 0xa7,
            (byte) 0x84, (byte) 0x41, (byte) 0x63, (byte) 0xd0, (byte) 0x15, (byte) 0xbe, (byte) 0x86, (byte) 0x34,
            (byte) 0x40, (byte) 0x82, (byte) 0xaa, (byte) 0x88, (byte) 0xd9, (byte) 0x5e, (byte) 0x2f, (byte) 0x9d
    };
    protected static final byte n[] = {
            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
            (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xfe, (byte) 0x26, (byte) 0xf2, (byte) 0xfc, (byte) 0x17,
            (byte) 0x0f, (byte) 0x69, (byte) 0x46, (byte) 0x6a, (byte) 0x74, (byte) 0xde, (byte) 0xfd, (byte) 0x8d
    };
    protected static final byte h = (byte)0x01;

    static final short SECP256K1_KEY_SIZE = 256;

    /*
    static final short SECP256K1_FP_SIZE = 32;
    static final short SECP256K1_A_SIZE = 32;
    static final short SECP256K1_B_SIZE = 32;
    static final short SECP256K1_G_SIZE = 65;
    static final short SECP256K1_R_SIZE = 32;
    static final short SECP256K1_K_SIZE = 1;
    */

    // protected static ECKey setCommonCurveParameters(ECKey key) {
    // try {
    // key.setA(SECP256K1_A, (short)0, (short)SECP256K1_A.length);
    // key.setB(SECP256K1_B, (short)0, (short)SECP256K1_B.length);
    // key.setFieldFP(SECP256K1_FP, (short)0, (short)SECP256K1_FP.length);
    // key.setG(SECP256K1_G, (short)0, (short)SECP256K1_G.length);
    // key.setR(SECP256K1_R, (short)0, (short)SECP256K1_R.length);
    // key.setK(SECP256K1_K);

    // return key;
    // }
    // catch(Exception e) {
    // return false;
    // }

    // }

    public BigInteger getp() {
        //BigInteger gp = new BigInteger(p);
        BigInteger gp = new BigInteger("fffffffffffffffffffffffffffffffffffffffeffffee37", 16);

        return gp;
    }

    public BigInteger geta() {
        //BigInteger ga = new BigInteger(a);
        BigInteger ga = new BigInteger("000000000000000000000000000000000000000000000000", 16);

        return ga;
    }

    public BigInteger getb() {
        //BigInteger gb = new BigInteger(b);
        BigInteger gb = new BigInteger("000000000000000000000000000000000000000000000003", 16);

        return gb;
    }

    public BigInteger getG() {
        //BigInteger gG = new BigInteger(G);
        BigInteger gG = new BigInteger("db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d", 16);

        return gG;
    }

    public BigInteger getGx() {
        //BigInteger gG = new BigInteger(G);
        BigInteger gG = new BigInteger("db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d", 16);

        return gG;
    }

    public BigInteger getGy() {
        //BigInteger gG = new BigInteger(G);
        BigInteger gG = new BigInteger("9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d", 16);

        return gG;
    }

    public BigInteger getn() {
        //BigInteger gn = new BigInteger(n);
        BigInteger gn = new BigInteger("fffffffffffffffffffffffe26f2fc170f69466a74defd8d", 16);

        return gn;
    }

    public int geth() {
        int gh = 1;

        return gh;
    }
}
