001package org.apache.commons.ssl.org.bouncycastle.asn1.sec; 002 003import java.math.BigInteger; 004import java.util.Enumeration; 005 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 012import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 013import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 014import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 015import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString; 016import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 017import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 018import org.bouncycastle.util.BigIntegers; 019 020/** 021 * the elliptic curve private key object from SEC 1 022 * @deprecated use ECPrivateKey 023 */ 024public class ECPrivateKeyStructure 025 extends ASN1Object 026{ 027 private ASN1Sequence seq; 028 029 public ECPrivateKeyStructure( 030 ASN1Sequence seq) 031 { 032 this.seq = seq; 033 } 034 035 public ECPrivateKeyStructure( 036 BigInteger key) 037 { 038 byte[] bytes = BigIntegers.asUnsignedByteArray(key); 039 040 ASN1EncodableVector v = new ASN1EncodableVector(); 041 042 v.add(new ASN1Integer(1)); 043 v.add(new DEROctetString(bytes)); 044 045 seq = new DERSequence(v); 046 } 047 048 public ECPrivateKeyStructure( 049 BigInteger key, 050 ASN1Encodable parameters) 051 { 052 this(key, null, parameters); 053 } 054 055 public ECPrivateKeyStructure( 056 BigInteger key, 057 DERBitString publicKey, 058 ASN1Encodable parameters) 059 { 060 byte[] bytes = BigIntegers.asUnsignedByteArray(key); 061 062 ASN1EncodableVector v = new ASN1EncodableVector(); 063 064 v.add(new ASN1Integer(1)); 065 v.add(new DEROctetString(bytes)); 066 067 if (parameters != null) 068 { 069 v.add(new DERTaggedObject(true, 0, parameters)); 070 } 071 072 if (publicKey != null) 073 { 074 v.add(new DERTaggedObject(true, 1, publicKey)); 075 } 076 077 seq = new DERSequence(v); 078 } 079 080 public BigInteger getKey() 081 { 082 ASN1OctetString octs = (ASN1OctetString)seq.getObjectAt(1); 083 084 return new BigInteger(1, octs.getOctets()); 085 } 086 087 public DERBitString getPublicKey() 088 { 089 return (DERBitString)getObjectInTag(1); 090 } 091 092 public ASN1Primitive getParameters() 093 { 094 return getObjectInTag(0); 095 } 096 097 private ASN1Primitive getObjectInTag(int tagNo) 098 { 099 Enumeration e = seq.getObjects(); 100 101 while (e.hasMoreElements()) 102 { 103 ASN1Encodable obj = (ASN1Encodable)e.nextElement(); 104 105 if (obj instanceof ASN1TaggedObject) 106 { 107 ASN1TaggedObject tag = (ASN1TaggedObject)obj; 108 if (tag.getTagNo() == tagNo) 109 { 110 return (ASN1Primitive)((ASN1Encodable)tag.getObject()).toASN1Primitive(); 111 } 112 } 113 } 114 return null; 115 } 116 117 /** 118 * ECPrivateKey ::= SEQUENCE { 119 * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), 120 * privateKey OCTET STRING, 121 * parameters [0] Parameters OPTIONAL, 122 * publicKey [1] BIT STRING OPTIONAL } 123 */ 124 public ASN1Primitive toASN1Primitive() 125 { 126 return seq; 127 } 128}