⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecfieldelement.java

📁 进行与数字证书相关开发必须的java源码
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   ECFieldElement.java

package jit.math.ec;

import jit.math.BigInteger;

// Referenced classes of package jit.math.ec:
//            ECConstants

public abstract class ECFieldElement
    implements ECConstants
{
    public static class Fp extends ECFieldElement
    {

        public String getFieldName()
        {
            return "Fp";
        }

        public ECFieldElement add(ECFieldElement b)
        {
            return new Fp(p, x.add(b.x).mod(p));
        }

        public ECFieldElement subtract(ECFieldElement b)
        {
            return new Fp(p, x.subtract(b.x).mod(p));
        }

        public ECFieldElement multiply(ECFieldElement b)
        {
            return new Fp(p, x.multiply(b.x).mod(p));
        }

        public ECFieldElement divide(ECFieldElement b)
        {
            return new Fp(p, x.multiply(b.x.modInverse(p)).mod(p));
        }

        public ECFieldElement negate()
        {
            return new Fp(p, x.negate().mod(p));
        }

        public ECFieldElement square()
        {
            return new Fp(p, x.multiply(x).mod(p));
        }

        public ECFieldElement invert()
        {
            return new Fp(p, x.modInverse(p));
        }

        public ECFieldElement sqrt()
        {
            if(p.testBit(1))
            {
                ECFieldElement z = new Fp(p, x.modPow(p.shiftRight(2).add(ECConstants.ONE), p));
                return z.square().equals(this) ? z : null;
            } else
            {
                throw new RuntimeException("not done yet");
            }
        }

        public Fp(BigInteger q, BigInteger x)
        {
            super(q, x);
        }
    }


    BigInteger x;
    BigInteger p;

    protected ECFieldElement(BigInteger q, BigInteger x)
    {
        if(x.compareTo(q) >= 0)
        {
            throw new IllegalArgumentException("x value too large in field element");
        } else
        {
            this.x = x;
            p = q;
            return;
        }
    }

    public BigInteger toBigInteger()
    {
        return x;
    }

    public BigInteger getQ()
    {
        return p;
    }

    public boolean equals(Object other)
    {
        if(other == this)
            return true;
        if(!(other instanceof ECFieldElement))
        {
            return false;
        } else
        {
            ECFieldElement o = (ECFieldElement)other;
            return p.equals(o.p) && x.equals(o.x);
        }
    }

    public abstract String getFieldName();

    public abstract ECFieldElement add(ECFieldElement ecfieldelement);

    public abstract ECFieldElement subtract(ECFieldElement ecfieldelement);

    public abstract ECFieldElement multiply(ECFieldElement ecfieldelement);

    public abstract ECFieldElement divide(ECFieldElement ecfieldelement);

    public abstract ECFieldElement negate();

    public abstract ECFieldElement square();

    public abstract ECFieldElement invert();

    public abstract ECFieldElement sqrt();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -