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 | |
parent | 19f7e5e24a9fa2e9c0472c846416c6d186b2f5d4 (diff) |
experimental function to convert ASN1_TIME to tm, not used or even compiled in yet
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/asn1/a_gentm.c | 2 | ||||
-rw-r--r-- | crypto/asn1/a_time.c | 64 | ||||
-rw-r--r-- | crypto/asn1/a_utctm.c | 2 | ||||
-rw-r--r-- | crypto/asn1/asn1.h | 6 |
4 files changed, 68 insertions, 6 deletions
diff --git a/crypto/asn1/a_gentm.c b/crypto/asn1/a_gentm.c index c79c6f538c..2f72d4877c 100644 --- a/crypto/asn1/a_gentm.c +++ b/crypto/asn1/a_gentm.c @@ -115,7 +115,7 @@ err: #endif -int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d) +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *d) { static const int min[9]={ 0, 0, 1, 1, 0, 0, 0, 0, 0}; static const int max[9]={99, 99,12,31,23,59,59,12,59}; 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 diff --git a/crypto/asn1/a_utctm.c b/crypto/asn1/a_utctm.c index 072e236592..75608df336 100644 --- a/crypto/asn1/a_utctm.c +++ b/crypto/asn1/a_utctm.c @@ -112,7 +112,7 @@ err: #endif -int ASN1_UTCTIME_check(ASN1_UTCTIME *d) +int ASN1_UTCTIME_check(const ASN1_UTCTIME *d) { static const int min[8]={ 0, 1, 1, 0, 0, 0, 0, 0}; static const int max[8]={99,12,31,23,59,59,12,59}; diff --git a/crypto/asn1/asn1.h b/crypto/asn1/asn1.h index 45e8fe3159..674eec8fe9 100644 --- a/crypto/asn1/asn1.h +++ b/crypto/asn1/asn1.h @@ -839,7 +839,7 @@ int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) -int ASN1_UTCTIME_check(ASN1_UTCTIME *a); +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t); ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); @@ -849,7 +849,7 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); #endif -int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a); +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); @@ -886,7 +886,7 @@ DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t); ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s,time_t t, int offset_day, long offset_sec); -int ASN1_TIME_check(ASN1_TIME *t); +int ASN1_TIME_check(const ASN1_TIME *t); ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); |