1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.math.BigInteger; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Enumeration; 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom/** 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use org.bouncycastle.asn1.pkcs.RSAPublicKey 164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class RSAPublicKeyStructure 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private BigInteger modulus; 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private BigInteger publicExponent; 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static RSAPublicKeyStructure getInstance( 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return getInstance(ASN1Sequence.getInstance(obj, explicit)); 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static RSAPublicKeyStructure getInstance( 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if(obj == null || obj instanceof RSAPublicKeyStructure) 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (RSAPublicKeyStructure)obj; 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if(obj instanceof ASN1Sequence) 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new RSAPublicKeyStructure((ASN1Sequence)obj); 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("Invalid RSAPublicKeyStructure: " + obj.getClass().getName()); 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public RSAPublicKeyStructure( 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam BigInteger modulus, 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam BigInteger publicExponent) 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.modulus = modulus; 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.publicExponent = publicExponent; 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public RSAPublicKeyStructure( 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() != 2) 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("Bad sequence size: " 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam + seq.size()); 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Enumeration e = seq.getObjects(); 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom modulus = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom publicExponent = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public BigInteger getModulus() 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return modulus; 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public BigInteger getPublicExponent() 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return publicExponent; 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * This outputs the key in PKCS1v2 format. 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre> 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * RSAPublicKey ::= SEQUENCE { 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * modulus INTEGER, -- n 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * publicExponent INTEGER, -- e 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * } 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre> 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <p> 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom v.add(new ASN1Integer(getModulus())); 944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom v.add(new ASN1Integer(getPublicExponent())); 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 99