Time.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpackage org.bouncycastle.asn1.cms; 241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport java.text.ParseException; 441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport java.text.SimpleDateFormat; 541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport java.util.Date; 641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport java.util.SimpleTimeZone; 741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.ASN1Choice; 941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.ASN1Object; 1041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.ASN1Primitive; 1141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.ASN1TaggedObject; 1241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.DERGeneralizedTime; 1341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgimport org.bouncycastle.asn1.DERUTCTime; 1441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic class Time 1641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org extends ASN1Object 1741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org implements ASN1Choice 1841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org{ 1941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ASN1Primitive time; 2041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public static Time getInstance( 2241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ASN1TaggedObject obj, 2341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org boolean explicit) 2441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 2541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return getInstance(obj.getObject()); 2641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 2741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public Time( 2941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ASN1Primitive time) 3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (!(time instanceof DERUTCTime) 3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org && !(time instanceof DERGeneralizedTime)) 3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 3441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org throw new IllegalArgumentException("unknown object passed to Time"); 3541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 3641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org this.time = time; 3841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 3941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /** 4141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * creates a time object from a given date - if the date is between 1950 4241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime 4341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * is used. 4441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org */ 4541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public Time( 4641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Date date) 4741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 4841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); 4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss"); 5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org dateF.setTimeZone(tz); 5241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org String d = dateF.format(date) + "Z"; 5441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int year = Integer.parseInt(d.substring(0, 4)); 5541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (year < 1950 || year > 2049) 5741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 5841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org time = new DERGeneralizedTime(d); 5941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 6041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org else 6141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 6241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org time = new DERUTCTime(d.substring(2)); 6341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 6441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 6541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public static Time getInstance( 6741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Object obj) 6841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 6941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (obj == null || obj instanceof Time) 7041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 7141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return (Time)obj; 7241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org else if (obj instanceof DERUTCTime) 7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return new Time((DERUTCTime)obj); 7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 7741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org else if (obj instanceof DERGeneralizedTime) 7841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 7941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return new Time((DERGeneralizedTime)obj); 8041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 8141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 8341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 8441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public String getTime() 8641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 8741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (time instanceof DERUTCTime) 8841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 8941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return ((DERUTCTime)time).getAdjustedTime(); 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 9141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org else 9241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return ((DERGeneralizedTime)time).getTime(); 9441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 9541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 9641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public Date getDate() 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 9941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org try 10041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 10141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (time instanceof DERUTCTime) 10241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 10341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return ((DERUTCTime)time).getAdjustedDate(); 10441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 10541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org else 10641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 10741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return ((DERGeneralizedTime)time).getDate(); 10841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 10941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 11041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org catch (ParseException e) 11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { // this should never happen 11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org throw new IllegalStateException("invalid date string: " + e.getMessage()); 11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 11441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 11541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 11641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /** 11741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * Produce an object suitable for an ASN1OutputStream. 11841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * <pre> 11941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * Time ::= CHOICE { 12041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * utcTime UTCTime, 12141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * generalTime GeneralizedTime } 12241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * </pre> 12341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org */ 12441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org public ASN1Primitive toASN1Primitive() 12541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org { 12641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return time; 12741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 12841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 12941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org