mirror of
https://github.com/deneraraujo/OpenVPNAdapter.git
synced 2026-04-24 00:00:05 +08:00
Merge commit '86cc97e55fe346502462284d2e636a2b3708163e' as 'Sources/OpenVPN3'
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
diff -ur mbedtls-1.3.17/library/x509.c polarssl.new/library/x509.c
|
||||
--- mbedtls-1.3.17/library/x509.c 2016-06-27 13:00:26.000000000 -0600
|
||||
+++ polarssl.new/library/x509.c 2016-08-04 17:21:52.000000000 -0600
|
||||
@@ -490,6 +490,73 @@
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Parse an ASN1_UTC_TIME (yearlen=2) or ASN1_GENERALIZED_TIME (yearlen=4) field.
|
||||
+ */
|
||||
+static int x509_parse_time(unsigned char **p, size_t len, unsigned int yearlen, x509_time *time)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* minimum length is 10 or 12 depending on yearlen */
|
||||
+ if (len < yearlen + 8)
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+ len -= yearlen + 8;
|
||||
+
|
||||
+ /* parse year, month, day, hour, minute */
|
||||
+ CHECK( x509_parse_int( p, yearlen, &time->year ) );
|
||||
+ if (yearlen == 2)
|
||||
+ {
|
||||
+ if (time->year < 50)
|
||||
+ time->year += 100;
|
||||
+ time->year += 1900;
|
||||
+ }
|
||||
+ CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
+
|
||||
+ /* parse seconds if present */
|
||||
+ if (len >= 2 && **p >= '0' && **p <= '9')
|
||||
+ {
|
||||
+ CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
+ len -= 2;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+#if defined(POLARSSL_RELAXED_X509_DATE)
|
||||
+ /* if relaxed mode, allow seconds to be absent */
|
||||
+ time->sec = 0;
|
||||
+#else
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
+ /* parse trailing 'Z' if present */
|
||||
+ if (len == 1 && **p == 'Z')
|
||||
+ {
|
||||
+ (*p)++;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#if defined(POLARSSL_RELAXED_X509_DATE)
|
||||
+ /* if relaxed mode, allow timezone to be present */
|
||||
+ else if (len == 5 && **p == '+')
|
||||
+ {
|
||||
+ int tz; /* throwaway timezone */
|
||||
+ (*p)++;
|
||||
+ CHECK( x509_parse_int( p, 4, &tz ) );
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ /* okay if no trailing 'Z' or timezone specified */
|
||||
+ else if (len == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ else
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Time ::= CHOICE {
|
||||
* utcTime UTCTime,
|
||||
* generalTime GeneralizedTime }
|
||||
@@ -515,20 +582,7 @@
|
||||
if( ret != 0 )
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE + ret );
|
||||
|
||||
- CHECK( x509_parse_int( p, 2, &time->year ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
- if( len > 10 )
|
||||
- CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
- if( len > 12 && *(*p)++ != 'Z' )
|
||||
- return( POLARSSL_ERR_X509_INVALID_DATE );
|
||||
-
|
||||
- time->year += 100 * ( time->year < 50 );
|
||||
- time->year += 1900;
|
||||
-
|
||||
- return( 0 );
|
||||
+ return x509_parse_time(p, len, 2, time);
|
||||
}
|
||||
else if( tag == ASN1_GENERALIZED_TIME )
|
||||
{
|
||||
@@ -538,17 +592,7 @@
|
||||
if( ret != 0 )
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE + ret );
|
||||
|
||||
- CHECK( x509_parse_int( p, 4, &time->year ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
- if( len > 12 )
|
||||
- CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
- if( len > 14 && *(*p)++ != 'Z' )
|
||||
- return( POLARSSL_ERR_X509_INVALID_DATE );
|
||||
-
|
||||
- return( 0 );
|
||||
+ return x509_parse_time(p, len, 4, time);
|
||||
}
|
||||
else
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE +
|
||||
Reference in New Issue
Block a user