Signature.java revision 4eb438010b8024cfa97cdad1906a8e6963a16f5b
1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1EncodableVector; 4import org.bouncycastle.asn1.ASN1Object; 5import org.bouncycastle.asn1.ASN1Primitive; 6import org.bouncycastle.asn1.ASN1Sequence; 7import org.bouncycastle.asn1.ASN1TaggedObject; 8import org.bouncycastle.asn1.DERBitString; 9import org.bouncycastle.asn1.DERSequence; 10import org.bouncycastle.asn1.DERTaggedObject; 11import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 12 13public class Signature 14 extends ASN1Object 15{ 16 AlgorithmIdentifier signatureAlgorithm; 17 DERBitString signature; 18 ASN1Sequence certs; 19 20 public Signature( 21 AlgorithmIdentifier signatureAlgorithm, 22 DERBitString signature) 23 { 24 this.signatureAlgorithm = signatureAlgorithm; 25 this.signature = signature; 26 } 27 28 public Signature( 29 AlgorithmIdentifier signatureAlgorithm, 30 DERBitString signature, 31 ASN1Sequence certs) 32 { 33 this.signatureAlgorithm = signatureAlgorithm; 34 this.signature = signature; 35 this.certs = certs; 36 } 37 38 private Signature( 39 ASN1Sequence seq) 40 { 41 signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0)); 42 signature = (DERBitString)seq.getObjectAt(1); 43 44 if (seq.size() == 3) 45 { 46 certs = ASN1Sequence.getInstance( 47 (ASN1TaggedObject)seq.getObjectAt(2), true); 48 } 49 } 50 51 public static Signature getInstance( 52 ASN1TaggedObject obj, 53 boolean explicit) 54 { 55 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 56 } 57 58 public static Signature getInstance( 59 Object obj) 60 { 61 if (obj instanceof Signature) 62 { 63 return (Signature)obj; 64 } 65 else if (obj != null) 66 { 67 return new Signature(ASN1Sequence.getInstance(obj)); 68 } 69 70 return null; 71 } 72 73 public AlgorithmIdentifier getSignatureAlgorithm() 74 { 75 return signatureAlgorithm; 76 } 77 78 public DERBitString getSignature() 79 { 80 return signature; 81 } 82 83 public ASN1Sequence getCerts() 84 { 85 return certs; 86 } 87 88 /** 89 * Produce an object suitable for an ASN1OutputStream. 90 * <pre> 91 * Signature ::= SEQUENCE { 92 * signatureAlgorithm AlgorithmIdentifier, 93 * signature BIT STRING, 94 * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL} 95 * </pre> 96 */ 97 public ASN1Primitive toASN1Primitive() 98 { 99 ASN1EncodableVector v = new ASN1EncodableVector(); 100 101 v.add(signatureAlgorithm); 102 v.add(signature); 103 104 if (certs != null) 105 { 106 v.add(new DERTaggedObject(true, 0, certs)); 107 } 108 109 return new DERSequence(v); 110 } 111} 112