Search in sources :

Example 1 with DSTU4145BinaryField

use of com.github.zhenwei.core.asn1.ua.DSTU4145BinaryField in project LinLong-Java by zhenwei1108.

the class BCDSTU4145PrivateKey method populateFromPrivKeyInfo.

private void populateFromPrivKeyInfo(PrivateKeyInfo info) throws IOException {
    X962Parameters params = X962Parameters.getInstance(info.getPrivateKeyAlgorithm().getParameters());
    if (params.isNamedCurve()) {
        ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
        X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid);
        if (// DSTU Curve
        ecP == null) {
            ECDomainParameters gParam = DSTU4145NamedCurves.getByOID(oid);
            EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed());
            ecSpec = new ECNamedCurveSpec(oid.getId(), ellipticCurve, EC5Util.convertPoint(gParam.getG()), gParam.getN(), gParam.getH());
        } else {
            EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed());
            ecSpec = new ECNamedCurveSpec(ECUtil.getCurveName(oid), ellipticCurve, EC5Util.convertPoint(ecP.getG()), ecP.getN(), ecP.getH());
        }
    } else if (params.isImplicitlyCA()) {
        ecSpec = null;
    } else {
        ASN1Sequence seq = ASN1Sequence.getInstance(params.getParameters());
        if (seq.getObjectAt(0) instanceof ASN1Integer) {
            X9ECParameters ecP = X9ECParameters.getInstance(params.getParameters());
            EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed());
            this.ecSpec = new ECParameterSpec(ellipticCurve, EC5Util.convertPoint(ecP.getG()), ecP.getN(), ecP.getH().intValue());
        } else {
            DSTU4145Params dstuParams = DSTU4145Params.getInstance(seq);
            com.github.zhenwei.provider.jce.spec.ECParameterSpec spec;
            if (dstuParams.isNamedCurve()) {
                ASN1ObjectIdentifier curveOid = dstuParams.getNamedCurve();
                ECDomainParameters ecP = DSTU4145NamedCurves.getByOID(curveOid);
                spec = new ECNamedCurveParameterSpec(curveOid.getId(), ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed());
            } else {
                DSTU4145ECBinary binary = dstuParams.getECBinary();
                byte[] b_bytes = binary.getB();
                if (info.getPrivateKeyAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) {
                    reverseBytes(b_bytes);
                }
                DSTU4145BinaryField field = binary.getField();
                ECCurve curve = new ECCurve.F2m(field.getM(), field.getK1(), field.getK2(), field.getK3(), binary.getA(), new BigInteger(1, b_bytes));
                byte[] g_bytes = binary.getG();
                if (info.getPrivateKeyAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) {
                    reverseBytes(g_bytes);
                }
                spec = new com.github.zhenwei.provider.jce.spec.ECParameterSpec(curve, DSTU4145PointEncoder.decodePoint(curve, g_bytes), binary.getN());
            }
            EllipticCurve ellipticCurve = EC5Util.convertCurve(spec.getCurve(), spec.getSeed());
            this.ecSpec = new ECParameterSpec(ellipticCurve, EC5Util.convertPoint(spec.getG()), spec.getN(), spec.getH().intValue());
        }
    }
    ASN1Encodable privKey = info.parsePrivateKey();
    if (privKey instanceof ASN1Integer) {
        ASN1Integer derD = ASN1Integer.getInstance(privKey);
        this.d = derD.getValue();
    } else {
        com.github.zhenwei.core.asn1.sec.ECPrivateKey ec = com.github.zhenwei.core.asn1.sec.ECPrivateKey.getInstance(privKey);
        this.d = ec.getKey();
        this.publicKey = ec.getPublicKey();
    }
}
Also used : ECDomainParameters(com.github.zhenwei.core.crypto.params.ECDomainParameters) DSTU4145ECBinary(com.github.zhenwei.core.asn1.ua.DSTU4145ECBinary) X9ECParameters(com.github.zhenwei.core.asn1.x9.X9ECParameters) ASN1Integer(com.github.zhenwei.core.asn1.ASN1Integer) DSTU4145Params(com.github.zhenwei.core.asn1.ua.DSTU4145Params) X962Parameters(com.github.zhenwei.core.asn1.x9.X962Parameters) ASN1Sequence(com.github.zhenwei.core.asn1.ASN1Sequence) DSTU4145BinaryField(com.github.zhenwei.core.asn1.ua.DSTU4145BinaryField) EllipticCurve(java.security.spec.EllipticCurve) ECParameterSpec(java.security.spec.ECParameterSpec) ECNamedCurveParameterSpec(com.github.zhenwei.provider.jce.spec.ECNamedCurveParameterSpec) ECCurve(com.github.zhenwei.core.math.ec.ECCurve) BigInteger(java.math.BigInteger) ASN1Encodable(com.github.zhenwei.core.asn1.ASN1Encodable) ASN1ObjectIdentifier(com.github.zhenwei.core.asn1.ASN1ObjectIdentifier) ECNamedCurveSpec(com.github.zhenwei.provider.jce.spec.ECNamedCurveSpec)

Example 2 with DSTU4145BinaryField

use of com.github.zhenwei.core.asn1.ua.DSTU4145BinaryField in project LinLong-Java by zhenwei1108.

the class BCDSTU4145PublicKey method populateFromPubKeyInfo.

private void populateFromPubKeyInfo(SubjectPublicKeyInfo info) {
    ASN1BitString bits = info.getPublicKeyData();
    ASN1OctetString key;
    this.algorithm = "DSTU4145";
    try {
        key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes());
    } catch (IOException ex) {
        throw new IllegalArgumentException("error recovering public key");
    }
    byte[] keyEnc = key.getOctets();
    if (info.getAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) {
        reverseBytes(keyEnc);
    }
    ASN1Sequence seq = ASN1Sequence.getInstance(info.getAlgorithm().getParameters());
    com.github.zhenwei.provider.jce.spec.ECParameterSpec spec = null;
    X9ECParameters x9Params = null;
    if (seq.getObjectAt(0) instanceof ASN1Integer) {
        x9Params = X9ECParameters.getInstance(seq);
        spec = new com.github.zhenwei.provider.jce.spec.ECParameterSpec(x9Params.getCurve(), x9Params.getG(), x9Params.getN(), x9Params.getH(), x9Params.getSeed());
    } else {
        dstuParams = DSTU4145Params.getInstance(seq);
        if (dstuParams.isNamedCurve()) {
            ASN1ObjectIdentifier curveOid = dstuParams.getNamedCurve();
            ECDomainParameters ecP = DSTU4145NamedCurves.getByOID(curveOid);
            spec = new ECNamedCurveParameterSpec(curveOid.getId(), ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed());
        } else {
            DSTU4145ECBinary binary = dstuParams.getECBinary();
            byte[] b_bytes = binary.getB();
            if (info.getAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) {
                reverseBytes(b_bytes);
            }
            DSTU4145BinaryField field = binary.getField();
            ECCurve curve = new ECCurve.F2m(field.getM(), field.getK1(), field.getK2(), field.getK3(), binary.getA(), new BigInteger(1, b_bytes));
            byte[] g_bytes = binary.getG();
            if (info.getAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) {
                reverseBytes(g_bytes);
            }
            spec = new com.github.zhenwei.provider.jce.spec.ECParameterSpec(curve, DSTU4145PointEncoder.decodePoint(curve, g_bytes), binary.getN());
        }
    }
    ECCurve curve = spec.getCurve();
    EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed());
    if (dstuParams != null) {
        ECPoint g = EC5Util.convertPoint(spec.getG());
        if (dstuParams.isNamedCurve()) {
            String name = dstuParams.getNamedCurve().getId();
            ecSpec = new ECNamedCurveSpec(name, ellipticCurve, g, spec.getN(), spec.getH());
        } else {
            ecSpec = new ECParameterSpec(ellipticCurve, g, spec.getN(), spec.getH().intValue());
        }
    } else {
        ecSpec = EC5Util.convertToSpec(x9Params);
    }
    // this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false);
    this.ecPublicKey = new ECPublicKeyParameters(DSTU4145PointEncoder.decodePoint(curve, keyEnc), EC5Util.getDomainParameters(null, ecSpec));
}
Also used : ASN1OctetString(com.github.zhenwei.core.asn1.ASN1OctetString) ECDomainParameters(com.github.zhenwei.core.crypto.params.ECDomainParameters) X9ECParameters(com.github.zhenwei.core.asn1.x9.X9ECParameters) ASN1BitString(com.github.zhenwei.core.asn1.ASN1BitString) ASN1OctetString(com.github.zhenwei.core.asn1.ASN1OctetString) DEROctetString(com.github.zhenwei.core.asn1.DEROctetString) ECPublicKeyParameters(com.github.zhenwei.core.crypto.params.ECPublicKeyParameters) ASN1BitString(com.github.zhenwei.core.asn1.ASN1BitString) ECNamedCurveParameterSpec(com.github.zhenwei.provider.jce.spec.ECNamedCurveParameterSpec) DSTU4145ECBinary(com.github.zhenwei.core.asn1.ua.DSTU4145ECBinary) IOException(java.io.IOException) ASN1Integer(com.github.zhenwei.core.asn1.ASN1Integer) X9ECPoint(com.github.zhenwei.core.asn1.x9.X9ECPoint) ECPoint(java.security.spec.ECPoint) ASN1Sequence(com.github.zhenwei.core.asn1.ASN1Sequence) DSTU4145BinaryField(com.github.zhenwei.core.asn1.ua.DSTU4145BinaryField) EllipticCurve(java.security.spec.EllipticCurve) ECParameterSpec(java.security.spec.ECParameterSpec) ECCurve(com.github.zhenwei.core.math.ec.ECCurve) BigInteger(java.math.BigInteger) ASN1ObjectIdentifier(com.github.zhenwei.core.asn1.ASN1ObjectIdentifier) ECNamedCurveSpec(com.github.zhenwei.provider.jce.spec.ECNamedCurveSpec)

Aggregations

ASN1Integer (com.github.zhenwei.core.asn1.ASN1Integer)2 ASN1ObjectIdentifier (com.github.zhenwei.core.asn1.ASN1ObjectIdentifier)2 ASN1Sequence (com.github.zhenwei.core.asn1.ASN1Sequence)2 DSTU4145BinaryField (com.github.zhenwei.core.asn1.ua.DSTU4145BinaryField)2 DSTU4145ECBinary (com.github.zhenwei.core.asn1.ua.DSTU4145ECBinary)2 X9ECParameters (com.github.zhenwei.core.asn1.x9.X9ECParameters)2 ECDomainParameters (com.github.zhenwei.core.crypto.params.ECDomainParameters)2 ECCurve (com.github.zhenwei.core.math.ec.ECCurve)2 ECNamedCurveParameterSpec (com.github.zhenwei.provider.jce.spec.ECNamedCurveParameterSpec)2 ECNamedCurveSpec (com.github.zhenwei.provider.jce.spec.ECNamedCurveSpec)2 BigInteger (java.math.BigInteger)2 ECParameterSpec (java.security.spec.ECParameterSpec)2 EllipticCurve (java.security.spec.EllipticCurve)2 ASN1BitString (com.github.zhenwei.core.asn1.ASN1BitString)1 ASN1Encodable (com.github.zhenwei.core.asn1.ASN1Encodable)1 ASN1OctetString (com.github.zhenwei.core.asn1.ASN1OctetString)1 DEROctetString (com.github.zhenwei.core.asn1.DEROctetString)1 DSTU4145Params (com.github.zhenwei.core.asn1.ua.DSTU4145Params)1 X962Parameters (com.github.zhenwei.core.asn1.x9.X962Parameters)1 X9ECPoint (com.github.zhenwei.core.asn1.x9.X9ECPoint)1