package org.bouncycastle.asn1.ua; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1Integer; import org.bouncycastle.asn1.ASN1Object; import org.bouncycastle.asn1.ASN1Primitive; import org.bouncycastle.asn1.ASN1Sequence; import org.bouncycastle.asn1.DERSequence; public class DSTU4145BinaryField extends ASN1Object { private int m, k, j, l; private DSTU4145BinaryField(ASN1Sequence seq) { m = ASN1Integer.getInstance(seq.getObjectAt(0)).getPositiveValue().intValue(); if (seq.getObjectAt(1) instanceof ASN1Integer) { k = ((ASN1Integer)seq.getObjectAt(1)).getPositiveValue().intValue(); } else if (seq.getObjectAt(1) instanceof ASN1Sequence) { ASN1Sequence coefs = ASN1Sequence.getInstance(seq.getObjectAt(1)); k = ASN1Integer.getInstance(coefs.getObjectAt(0)).getPositiveValue().intValue(); j = ASN1Integer.getInstance(coefs.getObjectAt(1)).getPositiveValue().intValue(); l = ASN1Integer.getInstance(coefs.getObjectAt(2)).getPositiveValue().intValue(); } else { throw new IllegalArgumentException("object parse error"); } } 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 DSTU4145BinaryField(int m, int k1, int k2, int k3) { this.m = m; this.k = k1; this.j = k2; this.l = k3; } public int getM() { return m; } public int getK1() { return k; } public int getK2() { return j; } public int getK3() { return l; } public DSTU4145BinaryField(int m, int k) { this(m, k, 0, 0); } /** * BinaryField ::= SEQUENCE { * M INTEGER, * CHOICE {Trinomial, Pentanomial} * Trinomial::= INTEGER * Pentanomial::= SEQUENCE { * k INTEGER, * j INTEGER, * l INTEGER} */ public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new ASN1Integer(m)); if (j == 0) //Trinomial { v.add(new ASN1Integer(k)); } else { ASN1EncodableVector coefs = new ASN1EncodableVector(); coefs.add(new ASN1Integer(k)); coefs.add(new ASN1Integer(j)); coefs.add(new ASN1Integer(l)); v.add(new DERSequence(coefs)); } return new DERSequence(v); } }