001package org.apache.commons.ssl.org.bouncycastle.asn1.ua; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 009 010public class DSTU4145BinaryField 011 extends ASN1Object 012{ 013 014 private int m, k, j, l; 015 016 private DSTU4145BinaryField(ASN1Sequence seq) 017 { 018 m = ASN1Integer.getInstance(seq.getObjectAt(0)).getPositiveValue().intValue(); 019 020 if (seq.getObjectAt(1) instanceof ASN1Integer) 021 { 022 k = ((ASN1Integer)seq.getObjectAt(1)).getPositiveValue().intValue(); 023 } 024 else if (seq.getObjectAt(1) instanceof ASN1Sequence) 025 { 026 ASN1Sequence coefs = ASN1Sequence.getInstance(seq.getObjectAt(1)); 027 028 k = ASN1Integer.getInstance(coefs.getObjectAt(0)).getPositiveValue().intValue(); 029 j = ASN1Integer.getInstance(coefs.getObjectAt(1)).getPositiveValue().intValue(); 030 l = ASN1Integer.getInstance(coefs.getObjectAt(2)).getPositiveValue().intValue(); 031 } 032 else 033 { 034 throw new IllegalArgumentException("object parse error"); 035 } 036 } 037 038 public static DSTU4145BinaryField getInstance(Object obj) 039 { 040 if (obj instanceof DSTU4145BinaryField) 041 { 042 return (DSTU4145BinaryField)obj; 043 } 044 045 if (obj != null) 046 { 047 return new DSTU4145BinaryField(ASN1Sequence.getInstance(obj)); 048 } 049 050 return null; 051 } 052 053 public DSTU4145BinaryField(int m, int k1, int k2, int k3) 054 { 055 this.m = m; 056 this.k = k1; 057 this.j = k2; 058 this.l = k3; 059 } 060 061 public int getM() 062 { 063 return m; 064 } 065 066 public int getK1() 067 { 068 return k; 069 } 070 071 public int getK2() 072 { 073 return j; 074 } 075 076 public int getK3() 077 { 078 return l; 079 } 080 081 public DSTU4145BinaryField(int m, int k) 082 { 083 this(m, k, 0, 0); 084 } 085 086 /** 087 * BinaryField ::= SEQUENCE { 088 * M INTEGER, 089 * CHOICE {Trinomial, Pentanomial} 090 * Trinomial::= INTEGER 091 * Pentanomial::= SEQUENCE { 092 * k INTEGER, 093 * j INTEGER, 094 * l INTEGER} 095 */ 096 public ASN1Primitive toASN1Primitive() 097 { 098 099 ASN1EncodableVector v = new ASN1EncodableVector(); 100 101 v.add(new ASN1Integer(m)); 102 if (j == 0) //Trinomial 103 { 104 v.add(new ASN1Integer(k)); 105 } 106 else 107 { 108 ASN1EncodableVector coefs = new ASN1EncodableVector(); 109 coefs.add(new ASN1Integer(k)); 110 coefs.add(new ASN1Integer(j)); 111 coefs.add(new ASN1Integer(l)); 112 113 v.add(new DERSequence(coefs)); 114 } 115 116 return new DERSequence(v); 117 } 118 119}