| 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); |
| } |
| |
| } |