1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DEREncodable; 96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERNull; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERObject; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERObjectIdentifier; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class AlgorithmIdentifier 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam extends ASN1Encodable 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private DERObjectIdentifier objectId; 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private DEREncodable parameters; 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private boolean parametersDefined = false; 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static AlgorithmIdentifier getInstance( 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return getInstance(ASN1Sequence.getInstance(obj, explicit)); 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static AlgorithmIdentifier getInstance( 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj== null || obj instanceof AlgorithmIdentifier) 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (AlgorithmIdentifier)obj; 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj instanceof DERObjectIdentifier) 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new AlgorithmIdentifier((DERObjectIdentifier)obj); 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj instanceof String) 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new AlgorithmIdentifier((String)obj); 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj instanceof ASN1Sequence) 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new AlgorithmIdentifier((ASN1Sequence)obj); 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier( 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DERObjectIdentifier objectId) 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.objectId = objectId; 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier( 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String objectId) 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.objectId = new DERObjectIdentifier(objectId); 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier( 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DERObjectIdentifier objectId, 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DEREncodable parameters) 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parametersDefined = true; 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.objectId = objectId; 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.parameters = parameters; 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier( 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() < 1 || seq.size() > 2) 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("Bad sequence size: " 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam + seq.size()); 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam objectId = DERObjectIdentifier.getInstance(seq.getObjectAt(0)); 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() == 2) 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parametersDefined = true; 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parameters = seq.getObjectAt(1); 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parameters = null; 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public ASN1ObjectIdentifier getAlgorithm() 986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new ASN1ObjectIdentifier(objectId.getId()); 1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @deprecated use getAlgorithm 1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @return 1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERObjectIdentifier getObjectId() 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return objectId; 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DEREncodable getParameters() 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return parameters; 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Produce an object suitable for an ASN1OutputStream. 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre> 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * AlgorithmIdentifier ::= SEQUENCE { 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * algorithm OBJECT IDENTIFIER, 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * parameters ANY DEFINED BY algorithm OPTIONAL } 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre> 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERObject toASN1Object() 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(objectId); 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (parametersDefined) 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 1326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (parameters != null) 1336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom v.add(parameters); 1356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 1376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom v.add(DERNull.INSTANCE); 1396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 145