@@ -55,10 +55,9 @@ const auto SELECT_MAIN_AID = CommandApdu::select(
5555
5656} // namespace
5757
58- ElectronicID::PinRetriesRemainingAndMax
59- EIDThales::authPinRetriesLeftImpl (const SmartCard::Session& session) const
58+ ElectronicID::PinInfo EIDThales::authPinInfoImpl (const SmartCard::Session& session) const
6059{
61- return pinRetriesLeft (session, authPinReference ());
60+ return pinRetriesLeft (session, authPinReference (), true );
6261}
6362
6463byte_vector EIDThales::getCertificateImpl (const SmartCard::Session& session,
@@ -68,8 +67,8 @@ byte_vector EIDThales::getCertificateImpl(const SmartCard::Session& session,
6867 return readFile (session, type.isAuthentication () ? authCertFile () : signCertFile ());
6968}
7069
71- ElectronicID::PinRetriesRemainingAndMax EIDThales::pinRetriesLeft (const SmartCard::Session& session,
72- byte_type pinReference) const
70+ ElectronicID::PinInfo EIDThales::pinRetriesLeft (const SmartCard::Session& session,
71+ byte_type pinReference, bool pinActive ) const
7372{
7473 const auto GET_DATA = smartcard ().protocol () == SmartCard::Protocol::T1
7574 ? CommandApdu {0x00 , 0xCB , 0x00 , 0xFF , {0xA0 , 0x03 , 0x83 , 0x01 , pinReference}, 0x00 }
@@ -78,8 +77,9 @@ ElectronicID::PinRetriesRemainingAndMax EIDThales::pinRetriesLeft(const SmartCar
7877 if (!response.isOK ()) {
7978 THROW (SmartCardError, " Command GET DATA failed with error " + response);
8079 }
81- if (TLV info = TLV (response.data ).find (0xA0 )[0xdf21 ]) {
82- return {*info.begin , maximumPinRetries ()};
80+ if (TLV info = TLV (response.data ).find (0xA0 ); TLV count = info[0xdf21 ]) {
81+ TLV pinChanged = info[0xdf2f ];
82+ return {*count.begin , maximumPinRetries (), pinActive || *pinChanged.begin };
8383 }
8484 THROW (SmartCardError,
8585 " Command GET DATA failed: received data does not contain the PIN remaining retries info" );
@@ -147,10 +147,9 @@ byte_vector EIDThales::sign(const SmartCard::Session& session, const HashAlgorit
147147 return std::move (signature.data );
148148}
149149
150- ElectronicID::PinRetriesRemainingAndMax
151- EIDThales::signingPinRetriesLeftImpl (const SmartCard::Session& session) const
150+ ElectronicID::PinInfo EIDThales::signingPinInfoImpl (const SmartCard::Session& session) const
152151{
153- return pinRetriesLeft (session, SIGNING_PIN_REFERENCE);
152+ return pinRetriesLeft (session, SIGNING_PIN_REFERENCE, false );
154153}
155154
156155byte_vector EIDThales::signWithAuthKeyImpl (const SmartCard::Session& session, byte_vector&& pin,
0 commit comments