diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2010-05-03 12:17:44 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2010-05-03 12:17:44 +0000 |
commit | 359b0c9fb8ccb5f492cc918f7e4c6319e15af16b (patch) | |
tree | b48c104d5e847b3ed212713bda78dfd4088e3da3 /crypto/asn1/a_time.c | |
parent | 19f7e5e24a9fa2e9c0472c846416c6d186b2f5d4 (diff) | |
download | openssl-359b0c9fb8ccb5f492cc918f7e4c6319e15af16b.tar.gz |
experimental function to convert ASN1_TIME to tm, not used or even compiled in yet
Diffstat (limited to 'crypto/asn1/a_time.c')
-rw-r--r-- | crypto/asn1/a_time.c | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/crypto/asn1/a_time.c b/crypto/asn1/a_time.c index e2eb9b243e..57bc199376 100644 --- a/crypto/asn1/a_time.c +++ b/crypto/asn1/a_time.c @@ -125,7 +125,7 @@ ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec); } -int ASN1_TIME_check(ASN1_TIME *t) +int ASN1_TIME_check(const ASN1_TIME *t) { if (t->type == V_ASN1_GENERALIZEDTIME) return ASN1_GENERALIZEDTIME_check(t); @@ -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 |