001: package org.bouncycastle.asn1.cmp;
002:
003: import org.bouncycastle.asn1.ASN1Encodable;
004: import org.bouncycastle.asn1.ASN1EncodableVector;
005: import org.bouncycastle.asn1.ASN1Sequence;
006: import org.bouncycastle.asn1.DERObject;
007: import org.bouncycastle.asn1.DERObjectIdentifier;
008: import org.bouncycastle.asn1.DERSequence;
009:
010: /**
011: * Example InfoTypeAndValue contents include, but are not limited
012: * to, the following (un-comment in this ASN.1 module and use as
013: * appropriate for a given environment):
014: * <pre>
015: * id-it-caProtEncCert OBJECT IDENTIFIER ::= {id-it 1}
016: * CAProtEncCertValue ::= CMPCertificate
017: * id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
018: * SignKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier
019: * id-it-encKeyPairTypes OBJECT IDENTIFIER ::= {id-it 3}
020: * EncKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier
021: * id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
022: * PreferredSymmAlgValue ::= AlgorithmIdentifier
023: * id-it-caKeyUpdateInfo OBJECT IDENTIFIER ::= {id-it 5}
024: * CAKeyUpdateInfoValue ::= CAKeyUpdAnnContent
025: * id-it-currentCRL OBJECT IDENTIFIER ::= {id-it 6}
026: * CurrentCRLValue ::= CertificateList
027: * id-it-unsupportedOIDs OBJECT IDENTIFIER ::= {id-it 7}
028: * UnsupportedOIDsValue ::= SEQUENCE OF OBJECT IDENTIFIER
029: * id-it-keyPairParamReq OBJECT IDENTIFIER ::= {id-it 10}
030: * KeyPairParamReqValue ::= OBJECT IDENTIFIER
031: * id-it-keyPairParamRep OBJECT IDENTIFIER ::= {id-it 11}
032: * KeyPairParamRepValue ::= AlgorithmIdentifer
033: * id-it-revPassphrase OBJECT IDENTIFIER ::= {id-it 12}
034: * RevPassphraseValue ::= EncryptedValue
035: * id-it-implicitConfirm OBJECT IDENTIFIER ::= {id-it 13}
036: * ImplicitConfirmValue ::= NULL
037: * id-it-confirmWaitTime OBJECT IDENTIFIER ::= {id-it 14}
038: * ConfirmWaitTimeValue ::= GeneralizedTime
039: * id-it-origPKIMessage OBJECT IDENTIFIER ::= {id-it 15}
040: * OrigPKIMessageValue ::= PKIMessages
041: * id-it-suppLangTags OBJECT IDENTIFIER ::= {id-it 16}
042: * SuppLangTagsValue ::= SEQUENCE OF UTF8String
043: *
044: * where
045: *
046: * id-pkix OBJECT IDENTIFIER ::= {
047: * iso(1) identified-organization(3)
048: * dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
049: * and
050: * id-it OBJECT IDENTIFIER ::= {id-pkix 4}
051: * </pre>
052: */
053: public class InfoTypeAndValue extends ASN1Encodable {
054: private DERObjectIdentifier infoType;
055: private ASN1Encodable infoValue;
056:
057: private InfoTypeAndValue(ASN1Sequence seq) {
058: infoType = DERObjectIdentifier.getInstance(seq.getObjectAt(0));
059:
060: if (seq.size() > 1) {
061: infoValue = (ASN1Encodable) seq.getObjectAt(1);
062: }
063: }
064:
065: public static InfoTypeAndValue getInstance(Object o) {
066: if (o instanceof InfoTypeAndValue) {
067: return (InfoTypeAndValue) o;
068: }
069:
070: if (o instanceof ASN1Sequence) {
071: return new InfoTypeAndValue((ASN1Sequence) o);
072: }
073:
074: throw new IllegalArgumentException("Invalid object: "
075: + o.getClass().getName());
076: }
077:
078: public DERObjectIdentifier getInfoType() {
079: return infoType;
080: }
081:
082: public ASN1Encodable getInfoValue() {
083: return infoValue;
084: }
085:
086: /**
087: * <pre>
088: * InfoTypeAndValue ::= SEQUENCE {
089: * infoType OBJECT IDENTIFIER,
090: * infoValue ANY DEFINED BY infoType OPTIONAL
091: * }
092: * </pre>
093: * @return a basic ASN.1 object representation.
094: */
095: public DERObject toASN1Object() {
096: ASN1EncodableVector v = new ASN1EncodableVector();
097:
098: v.add(infoType);
099:
100: if (infoValue != null) {
101: v.add(infoValue);
102: }
103:
104: return new DERSequence(v);
105: }
106: }
|