@@ -22,6 +22,11 @@ const RESBUF_ID_REGISTRATION: u8 = 0;
2222const RESBUF_ID_KEYHANDLE : u8 = 1 ;
2323const RESBUF_ID_SIGNATURE : u8 = 2 ;
2424const RESBUF_ID_APPID : u8 = 3 ;
25+ const RESBUF_ID_VENDOR_NAME : u8 = 4 ;
26+ const RESBUF_ID_DEVICE_NAME : u8 = 5 ;
27+ const RESBUF_ID_FIRMWARE_MAJOR : u8 = 6 ;
28+ const RESBUF_ID_FIRMWARE_MINOR : u8 = 7 ;
29+ const RESBUF_ID_FIRMWARE_BUILD : u8 = 8 ;
2530
2631// Generates a new 64-bit transaction id with collision probability 2^-32.
2732fn new_tid ( ) -> u64 {
@@ -233,9 +238,14 @@ pub unsafe extern "C" fn rust_u2f_mgr_register(
233238 key_handles,
234239 move |rv| {
235240 let result = match rv {
236- Ok ( registration) => {
241+ Ok ( ( registration, dev_info ) ) => {
237242 let mut bufs = HashMap :: new ( ) ;
238243 bufs. insert ( RESBUF_ID_REGISTRATION , registration) ;
244+ bufs. insert ( RESBUF_ID_VENDOR_NAME , dev_info. vendor_name ) ;
245+ bufs. insert ( RESBUF_ID_DEVICE_NAME , dev_info. device_name ) ;
246+ bufs. insert ( RESBUF_ID_FIRMWARE_MAJOR , vec ! [ dev_info. version_major] ) ;
247+ bufs. insert ( RESBUF_ID_FIRMWARE_MINOR , vec ! [ dev_info. version_minor] ) ;
248+ bufs. insert ( RESBUF_ID_FIRMWARE_BUILD , vec ! [ dev_info. version_build] ) ;
239249 U2FResult :: Success ( bufs)
240250 }
241251 Err ( e) => U2FResult :: Error ( e) ,
@@ -288,11 +298,16 @@ pub unsafe extern "C" fn rust_u2f_mgr_sign(
288298 let tid = new_tid ( ) ;
289299 let res = ( * mgr) . sign ( flags, timeout, challenge, app_ids, key_handles, move |rv| {
290300 let result = match rv {
291- Ok ( ( app_id, key_handle, signature) ) => {
301+ Ok ( ( app_id, key_handle, signature, dev_info ) ) => {
292302 let mut bufs = HashMap :: new ( ) ;
293303 bufs. insert ( RESBUF_ID_KEYHANDLE , key_handle) ;
294304 bufs. insert ( RESBUF_ID_SIGNATURE , signature) ;
295305 bufs. insert ( RESBUF_ID_APPID , app_id) ;
306+ bufs. insert ( RESBUF_ID_VENDOR_NAME , dev_info. vendor_name ) ;
307+ bufs. insert ( RESBUF_ID_DEVICE_NAME , dev_info. device_name ) ;
308+ bufs. insert ( RESBUF_ID_FIRMWARE_MAJOR , vec ! [ dev_info. version_major] ) ;
309+ bufs. insert ( RESBUF_ID_FIRMWARE_MINOR , vec ! [ dev_info. version_minor] ) ;
310+ bufs. insert ( RESBUF_ID_FIRMWARE_BUILD , vec ! [ dev_info. version_build] ) ;
296311 U2FResult :: Success ( bufs)
297312 }
298313 Err ( e) => U2FResult :: Error ( e) ,
0 commit comments