@@ -26,6 +26,7 @@ use crypto::key::{
2626use ledger_lib:: Exchange ;
2727use serialization:: { Decode , DecodeAll , Encode } ;
2828use utils:: ensure;
29+ use wallet_types:: hw_data:: LedgerDataFullInfo ;
2930
3031use crate :: signer:: { ledger_signer:: LedgerError , SignerError , SignerResult } ;
3132
@@ -38,6 +39,7 @@ const TX_VERSION: u8 = 1;
3839struct Ins { }
3940
4041impl Ins {
42+ const APP_VER : u8 = 0x03 ;
4143 const APP_NAME : u8 = 0x04 ;
4244 const PUB_KEY : u8 = 0x05 ;
4345 const SIGN_TX : u8 = 0x06 ;
@@ -177,8 +179,13 @@ pub async fn get_app_name<L: Exchange>(ledger: &mut L) -> Result<Vec<u8>, ledger
177179 ledger. exchange ( & msg_buf, Duration :: from_millis ( 100 ) ) . await
178180}
179181
182+ async fn get_app_version < L : Exchange > ( ledger : & mut L ) -> Result < Vec < u8 > , ledger_lib:: Error > {
183+ let msg_buf = [ CLA , Ins :: APP_VER , 0 , P2 :: DONE ] ;
184+ ledger. exchange ( & msg_buf, Duration :: from_millis ( 100 ) ) . await
185+ }
186+
180187#[ allow( dead_code) ]
181- pub async fn check_current_app < L : Exchange > ( ledger : & mut L ) -> SignerResult < ( ) > {
188+ pub async fn check_current_app < L : Exchange > ( ledger : & mut L ) -> SignerResult < LedgerDataFullInfo > {
182189 let resp = get_app_name ( ledger)
183190 . await
184191 . map_err ( |err| LedgerError :: DeviceError ( err. to_string ( ) ) ) ?;
@@ -190,7 +197,19 @@ pub async fn check_current_app<L: Exchange>(ledger: &mut L) -> SignerResult<()>
190197 LedgerError :: DifferentActiveApp ( name)
191198 ) ;
192199
193- Ok ( ( ) )
200+ let ver = get_app_version ( ledger)
201+ . await
202+ . map_err ( |err| LedgerError :: DeviceError ( err. to_string ( ) ) ) ?;
203+ let firmware_version = match ver. as_slice ( ) {
204+ [ major, minor, patch] => common:: primitives:: semver:: SemVer {
205+ major : * major,
206+ minor : * minor,
207+ patch : * patch as u16 ,
208+ } ,
209+ _ => return Err ( SignerError :: LedgerError ( LedgerError :: InvalidResponse ) ) ,
210+ } ;
211+
212+ Ok ( LedgerDataFullInfo { firmware_version } )
194213}
195214
196215pub async fn get_extended_public_key < L : Exchange > (
0 commit comments