public byte[] getSbox() { if (null != dstuParams) { return dstuParams.getDKE(); } else { return DSTU4145Params.getDefaultDKE(); } }
public static DSTU4145PublicKey getInstance(Object obj) { if (obj instanceof DSTU4145PublicKey) { return (DSTU4145PublicKey)obj; } if (obj != null) { return new DSTU4145PublicKey(ASN1OctetString.getInstance(obj)); } return null; }
public static DSTU4145ECBinary getInstance(Object obj) { if (obj instanceof DSTU4145ECBinary) { return (DSTU4145ECBinary)obj; } if (obj != null) { return new DSTU4145ECBinary(ASN1Sequence.getInstance(obj)); } return null; }
DSTU4145Params dstuParams = DSTU4145Params.getInstance(keyInfo.getAlgorithm().getParameters()); if (dstuParams.isNamedCurve()) ASN1ObjectIdentifier curveOid = dstuParams.getNamedCurve(); ecDomain = DSTU4145NamedCurves.getByOID(curveOid); DSTU4145ECBinary binary = dstuParams.getECBinary(); byte[] b_bytes = binary.getB(); if (keyInfo.getAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) 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 (keyInfo.getAlgorithm().getAlgorithm().equals(UAObjectIdentifiers.dstu4145le)) ecDomain = new ECDomainParameters(curve, DSTU4145PointEncoder.decodePoint(curve, g_bytes), binary.getN()); return new ECPublicKeyParameters(DSTU4145PointEncoder.decodePoint(ecDomain.getCurve(), keyEnc), ecDomain);
public static DSTU4145Params getInstance(Object obj) { if (obj instanceof DSTU4145Params) { return (DSTU4145Params)obj; } if (obj != null) { ASN1Sequence seq = ASN1Sequence.getInstance(obj); DSTU4145Params params; if (seq.getObjectAt(0) instanceof ASN1ObjectIdentifier) { params = new DSTU4145Params(ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0))); } else { params = new DSTU4145Params(DSTU4145ECBinary.getInstance(seq.getObjectAt(0))); } if (seq.size() == 2) { params.dke = ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets(); if (params.dke.length != DSTU4145Params.DEFAULT_DKE.length) { throw new IllegalArgumentException("object parse error"); } } return params; } throw new IllegalArgumentException("object parse error"); }
public DSTU4145ECBinary(ECDomainParameters params) { ECCurve curve = params.getCurve(); if (!ECAlgorithms.isF2mCurve(curve)) { throw new IllegalArgumentException("only binary domain is possible"); } // We always use big-endian in parameter encoding PolynomialExtensionField field = (PolynomialExtensionField)curve.getField(); int[] exponents = field.getMinimalPolynomial().getExponentsPresent(); if (exponents.length == 3) { f = new DSTU4145BinaryField(exponents[2], exponents[1]); } else if (exponents.length == 5) { f = new DSTU4145BinaryField(exponents[4], exponents[1], exponents[2], exponents[3]); } a = new ASN1Integer(curve.getA().toBigInteger()); b = new DEROctetString(curve.getB().getEncoded()); n = new ASN1Integer(params.getN()); bp = new DEROctetString(DSTU4145PointEncoder.encodePoint(params.getG())); }
public static DSTU4145BinaryField getInstance(Object obj) { if (obj instanceof DSTU4145BinaryField) { return (DSTU4145BinaryField)obj; } if (obj != null) { return new DSTU4145BinaryField(ASN1Sequence.getInstance(obj)); } return null; }
public DSTU4145PublicKey(ECPoint pubKey) { // We always use big-endian in parameter encoding this.pubKey = new DEROctetString(DSTU4145PointEncoder.encodePoint(pubKey)); }
public static byte[] encodePoint(ECPoint Q) { /*if (!Q.isCompressed()) Q=new ECPoint.F2m(Q.getCurve(),Q.getX(),Q.getY(),true); byte[] bytes=Q.getEncoded(); if (bytes[0]==0x02) bytes[bytes.length-1]&=0xFE; else if (bytes[0]==0x02) bytes[bytes.length-1]|=0x01; return Arrays.copyOfRange(bytes, 1, bytes.length);*/ Q = Q.normalize(); ECFieldElement x = Q.getAffineXCoord(); byte[] bytes = x.getEncoded(); if (!x.isZero()) { ECFieldElement z = Q.getAffineYCoord().divide(x); if (trace(z).isOne()) { bytes[bytes.length - 1] |= 0x01; } else { bytes[bytes.length - 1] &= 0xFE; } } return bytes; }
public DSTU4145ParameterSpec( ECDomainParameters parameters) { this(parameters, EC5Util.convertToSpec(parameters), DSTU4145Params.getDefaultDKE()); }
private DSTU4145ECBinary(ASN1Sequence seq) { int index = 0; if (seq.getObjectAt(index) instanceof ASN1TaggedObject) { ASN1TaggedObject taggedVersion = (ASN1TaggedObject)seq.getObjectAt(index); if (taggedVersion.isExplicit() && 0 == taggedVersion.getTagNo()) { version = ASN1Integer.getInstance(taggedVersion.getLoadedObject()).getValue(); index++; } else { throw new IllegalArgumentException("object parse error"); } } f = DSTU4145BinaryField.getInstance(seq.getObjectAt(index)); index++; a = ASN1Integer.getInstance(seq.getObjectAt(index)); index++; b = ASN1OctetString.getInstance(seq.getObjectAt(index)); index++; n = ASN1Integer.getInstance(seq.getObjectAt(index)); index++; bp = ASN1OctetString.getInstance(seq.getObjectAt(index)); }
public static DSTU4145Params getInstance(Object obj) { if (obj instanceof DSTU4145Params) { return (DSTU4145Params)obj; } if (obj != null) { ASN1Sequence seq = ASN1Sequence.getInstance(obj); DSTU4145Params params; if (seq.getObjectAt(0) instanceof ASN1ObjectIdentifier) { params = new DSTU4145Params(ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0))); } else { params = new DSTU4145Params(DSTU4145ECBinary.getInstance(seq.getObjectAt(0))); } if (seq.size() == 2) { params.dke = ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets(); if (params.dke.length != DSTU4145Params.DEFAULT_DKE.length) { throw new IllegalArgumentException("object parse error"); } } return params; } throw new IllegalArgumentException("object parse error"); }
public DSTU4145ECBinary(ECDomainParameters params) { ECCurve curve = params.getCurve(); if (!ECAlgorithms.isF2mCurve(curve)) { throw new IllegalArgumentException("only binary domain is possible"); } // We always use big-endian in parameter encoding PolynomialExtensionField field = (PolynomialExtensionField)curve.getField(); int[] exponents = field.getMinimalPolynomial().getExponentsPresent(); if (exponents.length == 3) { f = new DSTU4145BinaryField(exponents[2], exponents[1]); } else if (exponents.length == 5) { f = new DSTU4145BinaryField(exponents[4], exponents[1], exponents[2], exponents[3]); } else { throw new IllegalArgumentException("curve must have a trinomial or pentanomial basis"); } a = new ASN1Integer(curve.getA().toBigInteger()); b = new DEROctetString(curve.getB().getEncoded()); n = new ASN1Integer(params.getN()); bp = new DEROctetString(DSTU4145PointEncoder.encodePoint(params.getG())); }
public static DSTU4145PublicKey getInstance(Object obj) { if (obj instanceof DSTU4145PublicKey) { return (DSTU4145PublicKey)obj; } if (obj != null) { return new DSTU4145PublicKey(ASN1OctetString.getInstance(obj)); } return null; }
public static DSTU4145ECBinary getInstance(Object obj) { if (obj instanceof DSTU4145ECBinary) { return (DSTU4145ECBinary)obj; } if (obj != null) { return new DSTU4145ECBinary(ASN1Sequence.getInstance(obj)); } return null; }
public static DSTU4145BinaryField getInstance(Object obj) { if (obj instanceof DSTU4145BinaryField) { return (DSTU4145BinaryField)obj; } if (obj != null) { return new DSTU4145BinaryField(ASN1Sequence.getInstance(obj)); } return null; }
public DSTU4145PublicKey(ECPoint pubKey) { // We always use big-endian in parameter encoding this.pubKey = new DEROctetString(DSTU4145PointEncoder.encodePoint(pubKey)); }
public static byte[] encodePoint(ECPoint Q) { /*if (!Q.isCompressed()) Q=new ECPoint.F2m(Q.getCurve(),Q.getX(),Q.getY(),true); byte[] bytes=Q.getEncoded(); if (bytes[0]==0x02) bytes[bytes.length-1]&=0xFE; else if (bytes[0]==0x02) bytes[bytes.length-1]|=0x01; return Arrays.copyOfRange(bytes, 1, bytes.length);*/ Q = Q.normalize(); ECFieldElement x = Q.getAffineXCoord(); byte[] bytes = x.getEncoded(); if (!x.isZero()) { ECFieldElement z = Q.getAffineYCoord().divide(x); if (trace(z).isOne()) { bytes[bytes.length - 1] |= 0x01; } else { bytes[bytes.length - 1] &= 0xFE; } } return bytes; }
protected void engineInitSign( PrivateKey privateKey) throws InvalidKeyException { CipherParameters param = null; if (privateKey instanceof BCDSTU4145PrivateKey) { // TODO: add parameters support. param = ECUtil.generatePrivateKeyParameter(privateKey); digest = new GOST3411Digest(expandSbox(DSTU4145Params.getDefaultDKE())); } else if (privateKey instanceof ECKey) { param = ECUtil.generatePrivateKeyParameter(privateKey); digest = new GOST3411Digest(expandSbox(DSTU4145Params.getDefaultDKE())); } if (appRandom != null) { signer.init(true, new ParametersWithRandom(param, appRandom)); } else { signer.init(true, param); } }
protected void engineInitVerify( PublicKey publicKey) throws InvalidKeyException { CipherParameters param; if (publicKey instanceof BCDSTU4145PublicKey) { param = ((BCDSTU4145PublicKey)publicKey).engineGetKeyParameters(); digest = new GOST3411Digest(expandSbox(((BCDSTU4145PublicKey)publicKey).getSbox())); } else { param = ECUtil.generatePublicKeyParameter(publicKey); digest = new GOST3411Digest(expandSbox(DSTU4145Params.getDefaultDKE())); } signer.init(false, param); }