diff options
| author | beck <> | 2017-08-13 19:47:49 +0000 |
|---|---|---|
| committer | beck <> | 2017-08-13 19:47:49 +0000 |
| commit | 9fc3669524ffd3d0ffaf2b50d35ed87ba2c123f7 (patch) | |
| tree | 634fa74bb5ef06aea9f9743d7bd052703b25d395 /src/lib/libcrypto/asn1 | |
| parent | cde37b72cb59adfc12216ed65e5ec3b132080ec2 (diff) | |
| download | openbsd-9fc3669524ffd3d0ffaf2b50d35ed87ba2c123f7.tar.gz openbsd-9fc3669524ffd3d0ffaf2b50d35ed87ba2c123f7.tar.bz2 openbsd-9fc3669524ffd3d0ffaf2b50d35ed87ba2c123f7.zip | |
Add ability to clamp a notafter to values representable in a 32 bit time_t
This will only be used in portable. As noted, necessary to
make us conformant to RFC 5280 4.1.2.5.
ok jsing@ bcook@
Diffstat (limited to 'src/lib/libcrypto/asn1')
| -rw-r--r-- | src/lib/libcrypto/asn1/a_time_tm.c | 18 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1_locl.h | 4 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/lib/libcrypto/asn1/a_time_tm.c b/src/lib/libcrypto/asn1/a_time_tm.c index f0afc00be4..48f9f8b5e1 100644 --- a/src/lib/libcrypto/asn1/a_time_tm.c +++ b/src/lib/libcrypto/asn1/a_time_tm.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: a_time_tm.c,v 1.12 2017/05/06 17:12:59 beck Exp $ */ | 1 | /* $OpenBSD: a_time_tm.c,v 1.13 2017/08/13 19:47:49 beck Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2015 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2015 Bob Beck <beck@openbsd.org> |
| 4 | * | 4 | * |
| @@ -58,6 +58,22 @@ ASN1_time_tm_cmp(struct tm *tm1, struct tm *tm2) { | |||
| 58 | return 0; | 58 | return 0; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | int | ||
| 62 | ASN1_time_tm_clamp_notafter(struct tm *tm) | ||
| 63 | { | ||
| 64 | #ifdef SMALL_TIME_T | ||
| 65 | struct tm broken_os_epoch_tm; | ||
| 66 | time_t broken_os_epoch_time = INT_MAX; | ||
| 67 | |||
| 68 | if (gmtime_r(&broken_os_epoch_time, &broken_os_epoch_tm) == NULL) | ||
| 69 | return 0; | ||
| 70 | |||
| 71 | if (ASN1_time_tm_cmp(tm, &broken_os_epoch_tm) == 1) | ||
| 72 | memcpy(tm, &broken_os_epoch_tm, sizeof(*tm)); | ||
| 73 | #endif | ||
| 74 | return 1; | ||
| 75 | } | ||
| 76 | |||
| 61 | /* Format a time as an RFC 5280 format Generalized time */ | 77 | /* Format a time as an RFC 5280 format Generalized time */ |
| 62 | char * | 78 | char * |
| 63 | gentime_string_from_tm(struct tm *tm) | 79 | gentime_string_from_tm(struct tm *tm) |
diff --git a/src/lib/libcrypto/asn1/asn1_locl.h b/src/lib/libcrypto/asn1/asn1_locl.h index 17bb4157a9..68f71dfc4a 100644 --- a/src/lib/libcrypto/asn1/asn1_locl.h +++ b/src/lib/libcrypto/asn1/asn1_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1_locl.h,v 1.8 2016/12/21 15:49:29 jsing Exp $ */ | 1 | /* $OpenBSD: asn1_locl.h,v 1.9 2017/08/13 19:47:49 beck Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -152,4 +152,6 @@ struct x509_crl_method_st { | |||
| 152 | int UTF8_getc(const unsigned char *str, int len, unsigned long *val); | 152 | int UTF8_getc(const unsigned char *str, int len, unsigned long *val); |
| 153 | int UTF8_putc(unsigned char *str, int len, unsigned long value); | 153 | int UTF8_putc(unsigned char *str, int len, unsigned long value); |
| 154 | 154 | ||
| 155 | int ASN1_time_tm_clamp_notafter(struct tm *tm); | ||
| 156 | |||
| 155 | __END_HIDDEN_DECLS | 157 | __END_HIDDEN_DECLS |
