diff options
author | Ben Laurie <ben@openssl.org> | 2012-06-03 22:03:37 +0000 |
---|---|---|
committer | Ben Laurie <ben@openssl.org> | 2012-06-03 22:03:37 +0000 |
commit | 68d2cf51bcfc1c2c1d0deec9be21c3d743737656 (patch) | |
tree | 7b8ed6018e595520ff18873c4fc267228b552f85 /crypto/asn1 | |
parent | 19eedffcafe5e703f28e015bad417bc50266c19b (diff) |
Reduce version skew: trivia (I hope).
Diffstat (limited to 'crypto/asn1')
-rw-r--r-- | crypto/asn1/a_time.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/crypto/asn1/a_time.c b/crypto/asn1/a_time.c index e2eb9b243e..1cf8867573 100644 --- a/crypto/asn1/a_time.c +++ b/crypto/asn1/a_time.c @@ -196,3 +196,65 @@ int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) return 1; } + +#if 0 +static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *s) + { + const unsigned char *p; + + if (!ASN1_TIME_check(s)) + return 0; + + memset(tm, 0 ,sizeof tm); + p = s->data; + +#define g2(p) (((p)[0] - '0') * 10 + ((p)[1] - '0')) + if (s->type == V_ASN1_GENERALIZEDTIME) + { + int yr = g2(p) * 100 + g2(p + 2); + if (yr < 1900) + return 0; + tm->tm_year = yr - 1900; + p += 4; + } + else + { + tm->tm_year=g2(p); + if(tm->tm_year < 50) + tm->tm_year+=100; + p += 2; + } + tm->tm_mon=g2(p)-1; + tm->tm_mday=g2(p + 2); + tm->tm_hour=g2(p + 4); + tm->tm_min=g2(p + 6); + p += 8; + /* Seconds optional in UTCTime */ + if (s->type == V_ASN1_GENERALIZEDTIME || (*p >= '0' && *p <= '9')) + { + tm->tm_sec=g2(p); + p += 2; + } + else + tm->tm_sec = 0; + if (s->type == V_ASN1_GENERALIZEDTIME) + { + /* Skip any fractional seconds */ + if (*p == '.') + { + p++; + while (*p >= '0' && *p <= '9') + p++; + } + } + /* Timezone */ + if(*p != 'Z') + { + int off_sec = g2(p + 1) * 3600 + g2(p + 3) * 60; + if(*p == '-') + off_sec = -off_sec; + OPENSSL_gmtime_adj(tm, 0, off_sec); + } + return 1; + } +#endif |