@@ -781,61 +781,35 @@ internal static DateTime ExtractValidityDateTime(IntPtr validityDatePtr)
781781 Debug . Assert (
782782 bytes . Length == 13 || bytes . Length == 15 ,
783783 "DateTime value should be UTCTime (13 bytes) or GeneralizedTime (15 bytes)" ) ;
784-
785784 Debug . Assert (
786785 bytes [ bytes . Length - 1 ] == 'Z' ,
787786 "DateTime value should end with Z marker" ) ;
788787
789- if ( bytes == null || bytes . Length < 1 || bytes [ bytes . Length - 1 ] != 'Z' )
790- {
791- throw new CryptographicException ( ) ;
792- }
793-
794- string dateString = Encoding . ASCII . GetString ( bytes ) ;
795-
796- if ( s_validityDateTimeFormatInfo == null )
797- {
798- DateTimeFormatInfo validityFormatInfo =
799- ( DateTimeFormatInfo ) CultureInfo . InvariantCulture . DateTimeFormat . Clone ( ) ;
800-
801- // Two-digit years are 1950-2049
802- validityFormatInfo . Calendar . TwoDigitYearMax = 2049 ;
803-
804- s_validityDateTimeFormatInfo = validityFormatInfo ;
805- }
806-
807- if ( bytes . Length == 13 )
788+ if ( bytes != null && bytes . Length is 13 or 15 && bytes [ ^ 1 ] == 'Z' )
808789 {
809- DateTime utcTime ;
790+ Span < char > dateString = stackalloc char [ Encoding . ASCII . GetCharCount ( bytes ) ] ;
791+ Encoding . ASCII . GetChars ( bytes , dateString ) ;
810792
811- if ( ! DateTime . TryParseExact (
812- dateString ,
813- "yyMMddHHmmss'Z'" ,
814- s_validityDateTimeFormatInfo ,
815- DateTimeStyles . AssumeUniversal | DateTimeStyles . AdjustToUniversal ,
816- out utcTime ) )
793+ if ( s_validityDateTimeFormatInfo == null )
817794 {
818- throw new CryptographicException ( ) ;
819- }
795+ DateTimeFormatInfo validityFormatInfo =
796+ ( DateTimeFormatInfo ) CultureInfo . InvariantCulture . DateTimeFormat . Clone ( ) ;
820797
821- return utcTime . ToLocalTime ( ) ;
822- }
798+ // Two-digit years are 1950-2049
799+ validityFormatInfo . Calendar . TwoDigitYearMax = 2049 ;
823800
824- if ( bytes . Length == 15 )
825- {
826- DateTime generalizedTime ;
801+ s_validityDateTimeFormatInfo = validityFormatInfo ;
802+ }
827803
828- if ( ! DateTime . TryParseExact (
804+ if ( DateTime . TryParseExact (
829805 dateString ,
830- "yyyyMMddHHmmss'Z'" ,
806+ bytes . Length == 13 ? "yyMMddHHmmss'Z'" : "yyyyMMddHHmmss'Z'" ,
831807 s_validityDateTimeFormatInfo ,
832808 DateTimeStyles . AssumeUniversal | DateTimeStyles . AdjustToUniversal ,
833- out generalizedTime ) )
809+ out DateTime time ) )
834810 {
835- throw new CryptographicException ( ) ;
811+ return time . ToLocalTime ( ) ;
836812 }
837-
838- return generalizedTime . ToLocalTime ( ) ;
839813 }
840814
841815 throw new CryptographicException ( ) ;
0 commit comments