@@ -10,7 +10,6 @@ pub use yasna::models::{ObjectIdentifier, ParseOidError, TaggedDerValue};
10
10
use std:: borrow:: Cow ;
11
11
use std:: str;
12
12
use std:: fmt;
13
- use rustc_serialize:: hex:: ToHex ;
14
13
use chrono:: { self , Utc , Datelike , Timelike , TimeZone } ;
15
14
16
15
use { DerWrite , oid} ;
@@ -75,35 +74,35 @@ impl Name {
75
74
}
76
75
}
77
76
78
- fn format_oid ( oid : & ObjectIdentifier ) -> String {
79
- match oid :: OID_TO_NAME . get ( oid ) {
80
- Some ( o ) => o . to_string ( ) ,
81
- None => oid . components ( ) . iter ( ) . map ( |c| c . to_string ( ) ) . collect :: < Vec < _ > > ( ) . join ( "." )
82
- }
83
- }
77
+ impl fmt :: Display for Name {
78
+ fn fmt ( & self , f : & mut fmt :: Formatter ) -> fmt :: Result {
79
+ for ( i , v ) in self . value . iter ( ) . enumerate ( ) {
80
+ if i > 0 {
81
+ write ! ( f , ", " ) ? ;
82
+ }
84
83
85
- fn format_der ( der : & TaggedDerValue ) -> String {
86
- if der. pcbit ( ) == PCBit :: Constructed {
87
- der. value ( ) . to_hex ( )
88
- } else {
89
- match der. tag ( ) {
90
- TAG_NUMERICSTRING | TAG_PRINTABLESTRING | TAG_IA5STRING | TAG_UTF8STRING => {
91
- String :: from_utf8_lossy ( & der. value ( ) ) . to_string ( )
84
+ // print key (oid)
85
+ if let Some ( o) = oid:: OID_TO_NAME . get ( & v. 0 ) {
86
+ write ! ( f, "{}" , o) ?;
87
+ } else {
88
+ for ( j, c) in v. 0 . components ( ) . iter ( ) . enumerate ( ) {
89
+ if j > 0 {
90
+ write ! ( f, "." ) ?;
91
+ }
92
+ write ! ( f, "{}" , c) ?;
93
+ }
92
94
}
93
- _ => {
94
- der. value ( ) . to_hex ( )
95
+ write ! ( f, "=" ) ?;
96
+
97
+ // print value
98
+ match ( v. 1 . pcbit ( ) , v. 1 . tag ( ) ) {
99
+ ( PCBit :: Primitive , TAG_NUMERICSTRING ) | ( PCBit :: Primitive , TAG_PRINTABLESTRING ) | ( PCBit :: Primitive , TAG_IA5STRING ) | ( PCBit :: Primitive , TAG_UTF8STRING ) =>
100
+ write ! ( f, "{}" , String :: from_utf8_lossy( & v. 1 . value( ) ) ) ?,
101
+ _ => for & byte in v. 1 . value ( ) {
102
+ write ! ( f, "{:x}" , byte) ?;
103
+ } ,
95
104
}
96
105
}
97
- }
98
- }
99
-
100
- fn format_rdr ( rdr : & ( ObjectIdentifier , TaggedDerValue ) ) -> String {
101
- format ! ( "{}={}" , format_oid( & rdr. 0 ) , format_der( & rdr. 1 ) )
102
- }
103
-
104
- impl fmt:: Display for Name {
105
- fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
106
- write ! ( f, "{}" , self . value. iter( ) . map( |rdr| format_rdr( rdr) ) . collect:: <Vec <_>>( ) . join( ", " ) ) ?;
107
106
Ok ( ( ) )
108
107
}
109
108
}
0 commit comments