DERGeneralizedTime.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:4k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. import java.util.*;
  4. import java.io.*;
  5. import java.text.*;
  6. /**
  7.  * Generalized time object.
  8.  */
  9. public class DERGeneralizedTime
  10.     extends DERObject
  11. {
  12.     String      time;
  13.     /**
  14.      * return a generalized time from the passed in object
  15.      *
  16.      * @exception IllegalArgumentException if the object cannot be converted.
  17.      */
  18.     public static DERGeneralizedTime getInstance(
  19.         Object  obj)
  20.     {
  21.         if (obj == null || obj instanceof DERGeneralizedTime)
  22.         {
  23.             return (DERGeneralizedTime)obj;
  24.         }
  25.         if (obj instanceof ASN1OctetString)
  26.         {
  27.             return new DERGeneralizedTime(((ASN1OctetString)obj).getOctets());
  28.         }
  29.         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
  30.     }
  31.     /**
  32.      * return a Generalized Time object from a tagged object.
  33.      *
  34.      * @param obj the tagged object holding the object we want
  35.      * @param explicit true if the object is meant to be explicitly
  36.      *              tagged false otherwise.
  37.      * @exception IllegalArgumentException if the tagged object cannot
  38.      *               be converted.
  39.      */
  40.     public static DERGeneralizedTime getInstance(
  41.         ASN1TaggedObject obj,
  42.         boolean          explicit)
  43.     {
  44.         return getInstance(obj.getObject());
  45.     }
  46.     
  47.     /**
  48.      * The correct format for this is YYYYMMDDHHMMSSZ, or without the Z
  49.      * for local time, or Z+-HHMM on the end, for difference between local
  50.      * time and UTC time.
  51.      * <p>
  52.      *
  53.      * @param time the time string.
  54.      */
  55.     public DERGeneralizedTime(
  56.         String  time)
  57.     {
  58.         this.time = time;
  59.     }
  60.     /**
  61.      * base constructer from a java.util.date object
  62.      */
  63.     public DERGeneralizedTime(
  64.         Date time)
  65.     {
  66.         SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
  67.         dateF.setTimeZone(new SimpleTimeZone(0,"Z"));
  68.         this.time = dateF.format(time);
  69.     }
  70.     DERGeneralizedTime(
  71.         byte[]  bytes)
  72.     {
  73.         //
  74.         // explicitly convert to characters
  75.         //
  76.         char[]  dateC = new char[bytes.length];
  77.         for (int i = 0; i != dateC.length; i++)
  78.         {
  79.             dateC[i] = (char)(bytes[i] & 0xff);
  80.         }
  81.         this.time = new String(dateC);
  82.     }
  83.     /**
  84.      * return the time - always in the form of 
  85.      *  YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm).
  86.      * <p>
  87.      * Normally in a certificate we would expect "Z" rather than "GMT",
  88.      * however adding the "GMT" means we can just use:
  89.      * <pre>
  90.      *     dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
  91.      * </pre>
  92.      * To read in the time and get a date which is compatible with our local
  93.      * time zone.
  94.      */
  95.     public String getTime()
  96.     {
  97.         //
  98.         // standardise the format.
  99.         //
  100.         if (time.length() == 15)
  101.         {
  102.             return time.substring(0, 14) + "GMT+00:00";
  103.         }
  104.         else if (time.length() == 17)
  105.         {
  106.             return time.substring(0, 14) + "GMT" + time.substring(15, 17) + ":" + time.substring(17, 19);
  107.         }
  108.         return time;
  109.     }
  110.     private byte[] getOctets()
  111.     {
  112.         char[]  cs = time.toCharArray();
  113.         byte[]  bs = new byte[cs.length];
  114.         for (int i = 0; i != cs.length; i++)
  115.         {
  116.             bs[i] = (byte)cs[i];
  117.         }
  118.         return bs;
  119.     }
  120.     void encode(
  121.         DEROutputStream  out)
  122.         throws IOException
  123.     {
  124.         out.writeEncoded(GENERALIZED_TIME, this.getOctets());
  125.     }
  126.     
  127.     public boolean equals(
  128.         Object  o)
  129.     {
  130.         if ((o == null) || !(o instanceof DERGeneralizedTime))
  131.         {
  132.             return false;
  133.         }
  134.         return time.equals(((DERGeneralizedTime)o).time);
  135.     }
  136. }