PKIHeader.java :  » Authentication-Authorization » ejbca » com » novosec » pkix » asn1 » cmp » Java Open Source

Java Open Source » Authentication Authorization » ejbca 
ejbca » com » novosec » pkix » asn1 » cmp » PKIHeader.java
// CMP implementation copyright (c) 2003 NOVOSEC AG (http://www.novosec.com)
//
// Author: Maik Stohn
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this 
// software and associated documentation files (the "Software"), to deal in the Software 
// without restriction, including without limitation the rights to use, copy, modify, merge, 
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 
// to whom the Software is furnished to do so, subject to the following conditions: 
//
// The above copyright notice and this permission notice shall be included in all copies or 
// substantial portions of the Software. 
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 

package com.novosec.pkix.asn1.cmp;

import java.util.Enumeration;
import java.util.Vector;

import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DEREncodable;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERObject;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.GeneralName;

/**
 * ASN.1 structure DER En/DeCoder.
 *
 * <pre>
 *  PKIHeader ::= SEQUENCE {
 *      pvno                INTEGER     { ietf-version2 (1) },
 *      sender              GeneralName,                        -- identifies the sender
 *      recipient           GeneralName,                        -- identifies the intended recipient
 *      messageTime     [0] GeneralizedTime         OPTIONAL,   -- time of production of this message
 *      protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,   -- algorithm used for calculation of protection bits
 *      senderKID       [2] KeyIdentifier           OPTIONAL,   -- (OCTET STRING)
 *      recipKID        [3] KeyIdentifier           OPTIONAL,   -- (OCTET STRING) to identify specific keys used for protection
 *      transactionID   [4] OCTET STRING            OPTIONAL,   -- identifies the transaction; i.e., this will be the same in corresponding request, response and confirmation messages
 *      senderNonce     [5] OCTET STRING            OPTIONAL,
 *      recipNonce      [6] OCTET STRING            OPTIONAL,   -- nonces used to provide replay protection, senderNonce is inserted by the creator of this message; recipNonce is a nonce previously inserted in a related message by the intended recipient of this message
 *      freeText        [7] PKIFreeText             OPTIONAL,   -- this may be used to indicate context-specific instructions (this field is intended for human consumption)
 *      generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
 *                             InfoTypeAndValue     OPTIONAL    -- this may be used to convey context-specific information (this field not primarily intended for human consumption)
 *  }     
 *
 * </pre>
 */
public class PKIHeader implements DEREncodable
{
    DERInteger           pvno;
    GeneralName          sender;
    GeneralName          recipient;
    DERGeneralizedTime   messageTime;
    AlgorithmIdentifier  protectionAlg;
    DEROctetString       senderKID;
    DEROctetString       recipKID;
    DEROctetString       transactionID;
    DEROctetString       senderNonce;
    DEROctetString       recipNonce;
    PKIFreeText          freeText;
    Vector               generalInfos = new Vector();

    public static PKIHeader getInstance( ASN1TaggedObject obj, boolean explicit )
    {
        return getInstance(ASN1Sequence.getInstance(obj, explicit));
    }

    public static PKIHeader getInstance( Object obj )
    {
        if (obj instanceof PKIHeader)
        {
            return (PKIHeader)obj;
        }
        else if (obj instanceof ASN1Sequence)
        {
            return new PKIHeader((ASN1Sequence)obj);
        }

        throw new IllegalArgumentException("unknown object in factory");
    }
  
    public PKIHeader( ASN1Sequence seq )
    {
      Enumeration e = seq.getObjects();

      pvno      = DERInteger.getInstance(e.nextElement());
      sender    = GeneralName.getInstance(e.nextElement());
      recipient = GeneralName.getInstance(e.nextElement());
      
      while (e.hasMoreElements())
      {
        ASN1TaggedObject tagObj = (ASN1TaggedObject)e.nextElement();

        switch (tagObj.getTagNo())
        {
          case 0: messageTime   = DERGeneralizedTime.getInstance(tagObj.getObject()); break;
          case 1: protectionAlg = AlgorithmIdentifier.getInstance(tagObj.getObject()); break;
          case 2: senderKID     = (DEROctetString)DEROctetString.getInstance(tagObj); break;
          case 3: recipKID      = (DEROctetString)DEROctetString.getInstance(tagObj); break;
          case 4: transactionID = (DEROctetString)DEROctetString.getInstance(tagObj); break;
          case 5: senderNonce   = (DEROctetString)DEROctetString.getInstance(tagObj); break;
          case 6: recipNonce    = (DEROctetString)DEROctetString.getInstance(tagObj); break;
          case 7: freeText      = PKIFreeText.getInstance(tagObj.getObject()); break;
          case 8: 
            ASN1Sequence s = (ASN1Sequence)tagObj.getObject();
            for( int i=0; i<s.size(); i++ )
              generalInfos.addElement( InfoTypeAndValue.getInstance(s.getObjectAt(i)) );
            break;
        }
      }
    }

    public PKIHeader( DERInteger pvno, GeneralName sender, GeneralName recipient )
    {
        this.pvno = pvno;
        this.sender = sender;
        this.recipient = recipient;
    }

    public DERInteger getPvno()
    {
        return pvno;
    }

    public GeneralName getSender()
    {
        return sender;
    }

    public GeneralName getRecipient()
    {
        return recipient;
    }
    
    public void setMessageTime( DERGeneralizedTime messageTime )
    {
      this.messageTime = messageTime;
    }

    public DERGeneralizedTime getMessageTime()
    {
      return messageTime;
    }

    public void setProtectionAlg( AlgorithmIdentifier protectionAlg )
    {
      this.protectionAlg = protectionAlg;
    }

    public AlgorithmIdentifier getProtectionAlg()
    {
      return protectionAlg;
    }

    public void setSenderKID( DEROctetString senderKID )
    {
      this.senderKID = senderKID;
    }

    public DEROctetString getSenderKID()
    {
      return senderKID;
    }

    public void setRecipKID( DEROctetString recipKID )
    {
      this.recipKID = recipKID;
    }

    public DEROctetString getRecipKID()
    {
      return recipKID;
    }

    public void setTransactionID( DEROctetString transactionID )
    {
      this.transactionID = transactionID;
    }

    public DEROctetString getTransactionID()
    {
      return transactionID;
    }

    public void setSenderNonce( DEROctetString senderNonce )
    {
      this.senderNonce = senderNonce;
    }

    public DEROctetString getSenderNonce()
    {
      return senderNonce;
    }

    public void setRecipNonce( DEROctetString recipNonce )
    {
      this.recipNonce = recipNonce;
    }

    public DEROctetString getRecipNonce()
    {
      return recipNonce;
    }

    public void setFreeText( PKIFreeText freeText )
    {
      this.freeText = freeText;
    }

    public PKIFreeText getFreeText()
    {
      return freeText;
    }

    public void addGeneralInfo( InfoTypeAndValue generalInfo )
    {
      this.generalInfos.addElement(generalInfo);
    }

    public InfoTypeAndValue getGeneralInfo(int nr)
    {
      if (generalInfos.size() > nr)
        return (InfoTypeAndValue)generalInfos.elementAt(nr);

      return null;
    }

    public DERObject getDERObject()
    {
      ASN1EncodableVector  v = new ASN1EncodableVector();

      v.add( pvno );
      v.add( sender );
      v.add( recipient );
      
      if( messageTime != null )
        v.add( new DERTaggedObject( true, 0, messageTime ) );

      if( protectionAlg != null )
        v.add( new DERTaggedObject( true, 1, protectionAlg ) );

      if( senderKID != null )
        v.add( new DERTaggedObject( true, 2, senderKID ) );

      if( recipKID != null )
        v.add( new DERTaggedObject( true, 3, recipKID ) );

      if( transactionID != null )
        v.add( new DERTaggedObject( true, 4, transactionID ) );

      if( senderNonce != null )
        v.add( new DERTaggedObject( true, 5, senderNonce ) );

      if( recipNonce != null )
        v.add( new DERTaggedObject( true, 6, recipNonce ) );

      if( freeText != null )
        v.add( new DERTaggedObject( true, 7, freeText ) );

      if( generalInfos.size() > 0 )
      {
        ASN1EncodableVector giv = new ASN1EncodableVector();
  
        for (int i=0;i<generalInfos.size();i++)
          giv.add((InfoTypeAndValue)generalInfos.elementAt(i));
  
        v.add( new DERTaggedObject( true, 8, new DERSequence(giv) ) );
      }
      
      return new DERSequence(v);
    }

    public String toString()
    {
      String s = "PKIHeader: ( pvno: " + pvno + ", sender: " + sender + ", recipient: " + recipient + ", ";

      if( messageTime != null )
        s += "messageTime: "  + messageTime + ", ";

      if( protectionAlg != null )
        s += "protectionAlg: "  + protectionAlg + ", ";

      if( senderKID != null )
        s += "senderKID: "  + senderKID + ", ";

      if( recipKID != null )
        s += "recipKID: "  + recipKID + ", ";

      if( transactionID != null )
        s += "transactionID: "  + transactionID + ", ";

      if( senderNonce != null )
        s += "senderNonce: "  + senderNonce + ", ";

      if( recipNonce != null )
        s += "recipNonce: "  + recipNonce + ", ";
      
      if( freeText != null )
        s += "freeText: "  + freeText + ", ";

      if( generalInfos.size() > 0 )
      {
        s += "generalInfo: (";
        for (int i=0;i<generalInfos.size();i++)
          s += generalInfos.elementAt(i) + ", ";
        s += ")";
      }        
      
      return s;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.