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

📄 jceecpublickey.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        ECUtil.getCurveName(oid),                        ellipticCurve,                        new ECPoint(                                ecP.getG().getX().toBigInteger(),                                ecP.getG().getY().toBigInteger()),                        ecP.getN(),                        ecP.getH());            }            else if (params.isImplicitlyCA())            {                ecSpec = null;                curve = ProviderUtil.getEcImplicitlyCa().getCurve();            }            else            {                X9ECParameters          ecP = new X9ECParameters((ASN1Sequence)params.getParameters());                                curve = ecP.getCurve();                ellipticCurve = EC5Util.convertCurve(curve, ecP.getSeed());                this.ecSpec = new ECParameterSpec(                        ellipticCurve,                        new ECPoint(                                ecP.getG().getX().toBigInteger(),                                ecP.getG().getY().toBigInteger()),                        ecP.getN(),                        ecP.getH().intValue());            }            DERBitString    bits = info.getPublicKeyData();            byte[]          data = bits.getBytes();            ASN1OctetString key = new DEROctetString(data);                //            // extra octet string - one of our old certs...            //            if (data[0] == 0x04 && data[1] == data.length - 2                 && (data[2] == 0x02 || data[2] == 0x03))            {                int qLength = new X9IntegerConverter().getByteLength(curve);                if (qLength >= data.length - 3)                {                    try                    {                        key = (ASN1OctetString) ASN1Object.fromByteArray(data);                    }                    catch (IOException ex)                    {                        throw new IllegalArgumentException("error recovering public key");                    }                }            }            X9ECPoint       derQ = new X9ECPoint(curve, key);                this.q = derQ.getPoint();        }    }    public String getAlgorithm()    {        return algorithm;    }    public String getFormat()    {        return "X.509";    }    public byte[] getEncoded()    {        ASN1Encodable        params;        SubjectPublicKeyInfo info;        if (algorithm.equals("ECGOST3410"))        {            if (gostParams != null)            {                params = gostParams;            }            else            {                params = new GOST3410PublicKeyAlgParameters(                                   ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()),                                   CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet);            }            BigInteger      bX = this.q.getX().toBigInteger();            BigInteger      bY = this.q.getY().toBigInteger();            byte[]          encKey = new byte[64];            extractBytes(encKey, 0, bX);            extractBytes(encKey, 32, bY);            info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), new DEROctetString(encKey));        }        else        {            if (ecSpec instanceof ECNamedCurveSpec)            {                DERObjectIdentifier curveOid = ECUtil.getNamedCurveOid(((ECNamedCurveSpec)ecSpec).getName());                                params = new X962Parameters(curveOid);            }            else if (ecSpec == null)            {                params = new X962Parameters(DERNull.INSTANCE);            }            else            {                ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve());                X9ECParameters ecP = new X9ECParameters(                    curve,                    EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression),                    ecSpec.getOrder(),                    BigInteger.valueOf(ecSpec.getCofactor()),                    ecSpec.getCurve().getSeed());                params = new X962Parameters(ecP);            }            ECCurve curve = this.engineGetQ().getCurve();            ASN1OctetString p = (ASN1OctetString)                new X9ECPoint(curve.createPoint(this.getQ().getX().toBigInteger(), this.getQ().getY().toBigInteger(), withCompression)).getDERObject();            info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.getDERObject()), p.getOctets());        }        return info.getDEREncoded();    }    private void extractBytes(byte[] encKey, int offSet, BigInteger bI)    {        byte[] val = bI.toByteArray();        if (val.length < 32)        {            byte[] tmp = new byte[32];            System.arraycopy(val, 0, tmp, tmp.length - val.length, val.length);        }        for (int i = 0; i != 32; i++)        {            encKey[offSet + i] = val[val.length - 1 - i];        }    }    public ECParameterSpec getParams()    {        return ecSpec;    }    public org.bouncycastle.jce.spec.ECParameterSpec getParameters()    {        if (ecSpec == null)     // implictlyCA        {            return null;        }        return EC5Util.convertSpec(ecSpec, withCompression);    }    public ECPoint getW()    {        return new ECPoint(q.getX().toBigInteger(), q.getY().toBigInteger());    }    public org.bouncycastle.math.ec.ECPoint getQ()    {        if (ecSpec == null)        {            if (q instanceof org.bouncycastle.math.ec.ECPoint.Fp)            {                return new org.bouncycastle.math.ec.ECPoint.Fp(null, q.getX(), q.getY());            }            else            {                return new org.bouncycastle.math.ec.ECPoint.F2m(null, q.getX(), q.getY());            }        }        return q;    }    public org.bouncycastle.math.ec.ECPoint engineGetQ()    {        return q;    }    org.bouncycastle.jce.spec.ECParameterSpec engineGetSpec()    {        if (ecSpec != null)        {            return EC5Util.convertSpec(ecSpec, withCompression);        }        return ProviderUtil.getEcImplicitlyCa();    }    public String toString()    {        StringBuffer    buf = new StringBuffer();        String          nl = System.getProperty("line.separator");        buf.append("EC Public Key").append(nl);        buf.append("            X: ").append(this.q.getX().toBigInteger().toString(16)).append(nl);        buf.append("            Y: ").append(this.q.getY().toBigInteger().toString(16)).append(nl);        return buf.toString();    }        public void setPointFormat(String style)    {       withCompression = !("UNCOMPRESSED".equalsIgnoreCase(style));    }    public boolean equals(Object o)    {        if (!(o instanceof JCEECPublicKey))        {            return false;        }        JCEECPublicKey other = (JCEECPublicKey)o;        return engineGetQ().equals(other.engineGetQ()) && (engineGetSpec().equals(other.engineGetSpec()));    }    public int hashCode()    {        return engineGetQ().hashCode() ^ engineGetSpec().hashCode();    }}

⌨️ 快捷键说明

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