1package org.bouncycastle.asn1.x9; 2 3import java.io.IOException; 4 5import org.bouncycastle.asn1.ASN1Choice; 6import org.bouncycastle.asn1.ASN1Null; 7import org.bouncycastle.asn1.ASN1Object; 8import org.bouncycastle.asn1.ASN1ObjectIdentifier; 9import org.bouncycastle.asn1.ASN1Primitive; 10import org.bouncycastle.asn1.ASN1TaggedObject; 11 12/** 13 * The Parameters ASN.1 CHOICE from X9.62. 14 */ 15public class X962Parameters 16 extends ASN1Object 17 implements ASN1Choice 18{ 19 private ASN1Primitive params = null; 20 21 public static X962Parameters getInstance( 22 Object obj) 23 { 24 if (obj == null || obj instanceof X962Parameters) 25 { 26 return (X962Parameters)obj; 27 } 28 29 if (obj instanceof ASN1Primitive) 30 { 31 return new X962Parameters((ASN1Primitive)obj); 32 } 33 34 if (obj instanceof byte[]) 35 { 36 try 37 { 38 return new X962Parameters(ASN1Primitive.fromByteArray((byte[])obj)); 39 } 40 catch (IOException e) 41 { 42 throw new IllegalArgumentException("unable to parse encoded data: " + e.getMessage()); 43 } 44 } 45 46 throw new IllegalArgumentException("unknown object in getInstance()"); 47 } 48 49 public static X962Parameters getInstance( 50 ASN1TaggedObject obj, 51 boolean explicit) 52 { 53 return getInstance(obj.getObject()); // must be explicitly tagged 54 } 55 56 public X962Parameters( 57 X9ECParameters ecParameters) 58 { 59 this.params = ecParameters.toASN1Primitive(); 60 } 61 62 public X962Parameters( 63 ASN1ObjectIdentifier namedCurve) 64 { 65 this.params = namedCurve; 66 } 67 68 public X962Parameters( 69 ASN1Null obj) 70 { 71 this.params = obj; 72 } 73 74 /** 75 * @deprecated use getInstance() 76 */ 77 public X962Parameters( 78 ASN1Primitive obj) 79 { 80 this.params = obj; 81 } 82 83 public boolean isNamedCurve() 84 { 85 return (params instanceof ASN1ObjectIdentifier); 86 } 87 88 public boolean isImplicitlyCA() 89 { 90 return (params instanceof ASN1Null); 91 } 92 93 public ASN1Primitive getParameters() 94 { 95 return params; 96 } 97 98 /** 99 * Produce an object suitable for an ASN1OutputStream. 100 * <pre> 101 * Parameters ::= CHOICE { 102 * ecParameters ECParameters, 103 * namedCurve CURVES.&id({CurveNames}), 104 * implicitlyCA NULL 105 * } 106 * </pre> 107 */ 108 public ASN1Primitive toASN1Primitive() 109 { 110 return (ASN1Primitive)params; 111 } 112} 113