From 7c335a5d575470ba944cb41d0ac655d7087422d1 Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Wed, 27 Apr 2016 15:40:03 +0100 Subject: ASN1: Use an explicit locale for ASN1 UTC / Generalized times. Using the default locale can result in bad behaviour, for example when the locales numberformat doesn't use arabic numerals. bug: 28384942 Change-Id: I4e240d9710c0427d809410df3a762c80125a821c --- .../org/bouncycastle/asn1/ASN1GeneralizedTime.java | 42 +++++++++++++++++----- .../java/org/bouncycastle/asn1/ASN1UTCTime.java | 22 +++++++++--- .../main/java/org/bouncycastle/asn1/cms/Time.java | 12 +++++-- .../main/java/org/bouncycastle/asn1/x509/Time.java | 12 +++++-- 4 files changed, 72 insertions(+), 16 deletions(-) diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java index 089526e1..0e2be644 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java @@ -3,6 +3,7 @@ package org.bouncycastle.asn1; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.SimpleTimeZone; @@ -109,7 +110,10 @@ public class ASN1GeneralizedTime public ASN1GeneralizedTime( Date time) { - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'"); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'", Locale.US); + // END android-changed dateF.setTimeZone(new SimpleTimeZone(0, "Z")); @@ -127,7 +131,11 @@ public class ASN1GeneralizedTime Date time, Locale locale) { - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'", locale); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'", locale); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'", Locale.US); + dateF.setCalendar(Calendar.getInstance(Locale.US)); + // END android-changed dateF.setTimeZone(new SimpleTimeZone(0, "Z")); @@ -252,11 +260,17 @@ public class ASN1GeneralizedTime { if (hasFractionalSeconds()) { - dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS'Z'"); + // BEGIN android-changed + // Was: dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS'Z'"); + dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS'Z'", Locale.US); + // END android-changed } else { - dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'"); + // BEGIN android-changed + // Was: dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'"); + dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'", Locale.US); + // END android-changed } dateF.setTimeZone(new SimpleTimeZone(0, "Z")); @@ -266,11 +280,17 @@ public class ASN1GeneralizedTime d = this.getTime(); if (hasFractionalSeconds()) { - dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSz"); + // BEGIN android-changed + // Was: dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSz"); + dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSz", Locale.US); + // END android-changed } else { - dateF = new SimpleDateFormat("yyyyMMddHHmmssz"); + // BEGIN android-changed + // Was: dateF = new SimpleDateFormat("yyyyMMddHHmmssz"); + dateF = new SimpleDateFormat("yyyyMMddHHmmssz", Locale.US); + // END android-changed } dateF.setTimeZone(new SimpleTimeZone(0, "Z")); @@ -279,11 +299,17 @@ public class ASN1GeneralizedTime { if (hasFractionalSeconds()) { - dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS"); + // BEGIN android-changed + // dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS"); + dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS", Locale.US); + // END android-changed } else { - dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + // BEGIN android-changed + // Was: dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + dateF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + // END android-changed } dateF.setTimeZone(new SimpleTimeZone(0, TimeZone.getDefault().getID())); diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java index 2c82df30..41ce8177 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java @@ -3,6 +3,7 @@ package org.bouncycastle.asn1; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.SimpleTimeZone; @@ -123,7 +124,10 @@ public class ASN1UTCTime public ASN1UTCTime( Date time) { - SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'"); + SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'", Locale.US); + // END android-changed dateF.setTimeZone(new SimpleTimeZone(0,"Z")); @@ -141,7 +145,11 @@ public class ASN1UTCTime Date time, Locale locale) { - SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'", locale); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'", locale); + SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmss'Z'", Locale.US); + dateF.setCalendar(Calendar.getInstance(locale)); + // END android-changed dateF.setTimeZone(new SimpleTimeZone(0,"Z")); @@ -164,7 +172,10 @@ public class ASN1UTCTime public Date getDate() throws ParseException { - SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmssz"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmssz"); + SimpleDateFormat dateF = new SimpleDateFormat("yyMMddHHmmssz", Locale.US); + // END android-changed return dateF.parse(getTime()); } @@ -179,7 +190,10 @@ public class ASN1UTCTime public Date getAdjustedDate() throws ParseException { - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz"); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz", Locale.US); + // END android-changed dateF.setTimeZone(new SimpleTimeZone(0, "Z")); diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/cms/Time.java b/bcprov/src/main/java/org/bouncycastle/asn1/cms/Time.java index 84f12a9c..ed9a6c03 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/cms/Time.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/cms/Time.java @@ -2,6 +2,7 @@ package org.bouncycastle.asn1.cms; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.SimpleTimeZone; @@ -70,7 +71,10 @@ public class Time Date time) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + // END android-changed dateF.setTimeZone(tz); @@ -101,7 +105,11 @@ public class Time Locale locale) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", locale); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", locale); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + dateF.setCalendar(Calendar.getInstance(locale)); + // END android-changed dateF.setTimeZone(tz); diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/x509/Time.java b/bcprov/src/main/java/org/bouncycastle/asn1/x509/Time.java index 77d36b31..989de4c9 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/x509/Time.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/x509/Time.java @@ -2,6 +2,7 @@ package org.bouncycastle.asn1.x509; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.SimpleTimeZone; @@ -51,7 +52,10 @@ public class Time Date time) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + // END android-changed dateF.setTimeZone(tz); @@ -82,7 +86,11 @@ public class Time Locale locale) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); - SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", locale); + // BEGIN android-changed + // Was: SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", locale); + SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); + dateF.setCalendar(Calendar.getInstance(locale)); + // END android-changed dateF.setTimeZone(tz); -- cgit v1.2.3