Skip to content

Commit 85491ad

Browse files
committed
Remove LV G1 card support
WE2-940 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent 22372a2 commit 85491ad

16 files changed

+57
-883
lines changed

CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ add_library(${PROJECT_NAME}
2323
src/electronic-ids/pcsc/EstEIDIDEMIA.hpp
2424
src/electronic-ids/pcsc/FinEID.cpp
2525
src/electronic-ids/pcsc/FinEID.hpp
26-
src/electronic-ids/pcsc/LatEIDIDEMIACommon.hpp
27-
src/electronic-ids/pcsc/LatEIDIDEMIAv1.cpp
28-
src/electronic-ids/pcsc/LatEIDIDEMIAv1.hpp
2926
src/electronic-ids/pcsc/LatEIDIDEMIAv2.cpp
3027
src/electronic-ids/pcsc/LatEIDIDEMIAv2.hpp
3128
src/electronic-ids/pcsc/PcscElectronicID.hpp
@@ -78,7 +75,6 @@ add_executable(${MOCK_TEST_EXE}
7875
tests/mock/select-certificate-script-EST-IDEMIA.hpp
7976
tests/mock/select-certificate-script-FIN-V3.hpp
8077
tests/mock/select-certificate-script-FIN-V4.hpp
81-
tests/mock/select-certificate-script-LAT-V1.hpp
8278
tests/mock/select-certificate-script-LAT-V2.hpp
8379
tests/mock/test-autoselect-card.cpp
8480
tests/mock/test-find-masked-atr.cpp

src/electronic-id.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
#include "electronic-ids/pcsc/EstEIDIDEMIA.hpp"
2424
#include "electronic-ids/pcsc/FinEID.hpp"
25-
#include "electronic-ids/pcsc/LatEIDIDEMIAv1.hpp"
2625
#include "electronic-ids/pcsc/LatEIDIDEMIAv2.hpp"
2726

2827
#include "electronic-ids/pkcs11/Pkcs11ElectronicID.hpp"
@@ -71,10 +70,6 @@ const std::map<byte_vector, ElectronicIDConstructor> SUPPORTED_ATRS {
7170
{{0x3B, 0x7F, 0x96, 0x00, 0x00, 0x80, 0x31, 0xB8, 0x65, 0xB0,
7271
0x85, 0x05, 0x00, 0x11, 0x12, 0x24, 0x60, 0x82, 0x90, 0x00},
7372
constructor<FinEIDv4>},
74-
// LatEID Idemia v1.0
75-
{{0x3b, 0xdd, 0x18, 0x00, 0x81, 0x31, 0xfe, 0x45, 0x90, 0x4c, 0x41,
76-
0x54, 0x56, 0x49, 0x41, 0x2d, 0x65, 0x49, 0x44, 0x90, 0x00, 0x8c},
77-
constructor<LatEIDIDEMIAV1>},
7873
// LatEID Idemia v2.0
7974
{{0x3b, 0xdb, 0x96, 0x00, 0x80, 0xb1, 0xfe, 0x45, 0x1f, 0x83, 0x00,
8075
0x12, 0x42, 0x8f, 0x53, 0x65, 0x49, 0x44, 0x0f, 0x90, 0x00, 0x20},

src/electronic-ids/pcsc/EIDIDEMIA.cpp

Lines changed: 38 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,46 @@ using namespace electronic_id;
3030
namespace
3131
{
3232

33-
const byte_type PIN_PADDING_CHAR = 0xFF;
34-
const byte_type AUTH_PIN_REFERENCE = 0x01;
33+
constexpr byte_type PIN_PADDING_CHAR = 0xFF;
34+
constexpr byte_type AUTH_PIN_REFERENCE = 0x01;
35+
constexpr byte_type SIGN_PIN_REFERENCE = 0x85;
36+
37+
const auto MAIN_AID = CommandApdu::select(0x04,
38+
{0xA0, 0x00, 0x00, 0x00, 0x77, 0x01, 0x08, 0x00, 0x07,
39+
0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0x00});
40+
const auto ADF1_AID = CommandApdu::select(
41+
0x04, {0xe8, 0x28, 0xbd, 0x08, 0x0f, 0xf2, 0x50, 0x4f, 0x54, 0x20, 0x41, 0x57, 0x50});
42+
const auto ADF2_AID = CommandApdu::select(0x04,
43+
{0x51, 0x53, 0x43, 0x44, 0x20, 0x41, 0x70, 0x70, 0x6C,
44+
0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E});
45+
const auto AUTH_CERT = CommandApdu::select(0x09, {0xAD, 0xF1, 0x34, 0x01});
46+
const auto SIGN_CERT = CommandApdu::select(0x09, {0xAD, 0xF2, 0x34, 0x1F});
3547

3648
} // namespace
3749

50+
void EIDIDEMIA::selectADF1() const
51+
{
52+
transmitApduWithExpectedResponse(*card, ADF1_AID);
53+
}
54+
55+
void EIDIDEMIA::selectADF2() const
56+
{
57+
transmitApduWithExpectedResponse(*card, ADF2_AID);
58+
}
59+
3860
byte_vector EIDIDEMIA::getCertificateImpl(const CertificateType type) const
3961
{
40-
transmitApduWithExpectedResponse(*card, selectApplicationID().MAIN_AID);
41-
return electronic_id::getCertificate(*card,
42-
type.isAuthentication() ? selectCertificate().AUTH_CERT
43-
: selectCertificate().SIGN_CERT);
62+
transmitApduWithExpectedResponse(*card, MAIN_AID);
63+
return electronic_id::getCertificate(*card, type.isAuthentication() ? AUTH_CERT : SIGN_CERT);
4464
}
4565

4666
byte_vector EIDIDEMIA::signWithAuthKeyImpl(byte_vector&& pin, const byte_vector& hash) const
4767
{
48-
// Select authentication application and authentication security environment.
49-
transmitApduWithExpectedResponse(*card, selectApplicationID().MAIN_AID);
50-
transmitApduWithExpectedResponse(*card, selectApplicationID().AUTH_AID);
68+
selectADF1();
5169
selectAuthSecurityEnv();
5270

5371
verifyPin(*card, AUTH_PIN_REFERENCE, std::move(pin), authPinMinMaxLength().first,
54-
pinBlockLength(), PIN_PADDING_CHAR);
72+
authPinMinMaxLength().second, PIN_PADDING_CHAR);
5573

5674
return internalAuthenticate(*card,
5775
authSignatureAlgorithm().isRSAWithPKCS1Padding()
@@ -62,19 +80,19 @@ byte_vector EIDIDEMIA::signWithAuthKeyImpl(byte_vector&& pin, const byte_vector&
6280

6381
ElectronicID::PinRetriesRemainingAndMax EIDIDEMIA::authPinRetriesLeftImpl() const
6482
{
65-
transmitApduWithExpectedResponse(*card, selectApplicationID().MAIN_AID);
83+
transmitApduWithExpectedResponse(*card, MAIN_AID);
6684
return pinRetriesLeft(AUTH_PIN_REFERENCE);
6785
}
6886

6987
ElectronicID::Signature EIDIDEMIA::signWithSigningKeyImpl(byte_vector&& pin,
7088
const byte_vector& hash,
7189
const HashAlgorithm hashAlgo) const
7290
{
73-
// Select signing application and signing security environment.
74-
transmitApduWithExpectedResponse(*card, selectApplicationID().SIGN_AID);
91+
selectADF2();
7592
pcsc_cpp::byte_type algo = selectSignSecurityEnv();
7693
auto tmp = hash;
77-
if (algo == 0x54) {
94+
bool isECC = algo == 0x54;
95+
if (isECC) {
7896
constexpr size_t ECDSA384_INPUT_LENGTH = 384 / 8;
7997
if (tmp.size() < ECDSA384_INPUT_LENGTH) {
8098
// Zero-pad hashes that are shorter than SHA-384.
@@ -85,48 +103,17 @@ ElectronicID::Signature EIDIDEMIA::signWithSigningKeyImpl(byte_vector&& pin,
85103
}
86104
}
87105

88-
verifyPin(*card, signingPinReference(), std::move(pin), signingPinMinMaxLength().first,
89-
pinBlockLength(), PIN_PADDING_CHAR);
106+
verifyPin(*card, SIGN_PIN_REFERENCE, std::move(pin), signingPinMinMaxLength().first,
107+
signingPinMinMaxLength().second, PIN_PADDING_CHAR);
90108

91-
return {useInternalAuthenticateAndRSAWithPKCS1PaddingDuringSigning()
92-
? internalAuthenticate(*card, addRSAOID(hashAlgo, hash), name())
93-
: computeSignature(*card, tmp, name()),
94-
{signingSignatureAlgorithm(), hashAlgo}};
109+
return {computeSignature(*card, tmp, name()),
110+
{isECC ? SignatureAlgorithm::ES : SignatureAlgorithm::RS, hashAlgo}};
95111
}
96112

97113
ElectronicID::PinRetriesRemainingAndMax EIDIDEMIA::signingPinRetriesLeftImpl() const
98114
{
99-
transmitApduWithExpectedResponse(*card, selectApplicationID().SIGN_AID);
100-
return pinRetriesLeft(signingPinReference());
101-
}
102-
103-
const SelectApplicationIDCmds& EIDIDEMIA::selectApplicationID() const
104-
{
105-
static const SelectApplicationIDCmds selectAppIDCmds {
106-
// Main AID.
107-
CommandApdu::select(0x04,
108-
{0xA0, 0x00, 0x00, 0x00, 0x77, 0x01, 0x08, 0x00, 0x07, 0x00, 0x00, 0xFE,
109-
0x00, 0x00, 0x01, 0x00}),
110-
// AWP AID.
111-
CommandApdu::select(
112-
0x04, {0xe8, 0x28, 0xbd, 0x08, 0x0f, 0xf2, 0x50, 0x4f, 0x54, 0x20, 0x41, 0x57, 0x50}),
113-
// QSCD AID.
114-
CommandApdu::select(0x04,
115-
{0x51, 0x53, 0x43, 0x44, 0x20, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61,
116-
0x74, 0x69, 0x6F, 0x6E}),
117-
};
118-
return selectAppIDCmds;
119-
}
120-
121-
const SelectCertificateCmds& EIDIDEMIA::selectCertificate() const
122-
{
123-
static const SelectCertificateCmds selectCert1Cmds {
124-
// Authentication certificate.
125-
CommandApdu::select(0x09, {0xAD, 0xF1, 0x34, 0x01}),
126-
// Signing certificate.
127-
CommandApdu::select(0x09, {0xAD, 0xF2, 0x34, 0x1F}),
128-
};
129-
return selectCert1Cmds;
115+
selectADF2();
116+
return pinRetriesLeft(SIGN_PIN_REFERENCE);
130117
}
131118

132119
ElectronicID::PinRetriesRemainingAndMax EIDIDEMIA::pinRetriesLeft(byte_type pinReference) const

src/electronic-ids/pcsc/EIDIDEMIA.hpp

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,6 @@
2727
namespace electronic_id
2828
{
2929

30-
struct SelectApplicationIDCmds
31-
{
32-
const pcsc_cpp::CommandApdu MAIN_AID;
33-
const pcsc_cpp::CommandApdu AUTH_AID;
34-
const pcsc_cpp::CommandApdu SIGN_AID;
35-
};
36-
37-
struct SelectCertificateCmds
38-
{
39-
const pcsc_cpp::CommandApdu AUTH_CERT;
40-
const pcsc_cpp::CommandApdu SIGN_CERT;
41-
};
42-
4330
class EIDIDEMIA : public PcscElectronicID
4431
{
4532
public:
@@ -49,26 +36,18 @@ class EIDIDEMIA : public PcscElectronicID
4936
byte_vector getCertificateImpl(const CertificateType type) const override;
5037

5138
PinRetriesRemainingAndMax authPinRetriesLeftImpl() const override;
39+
virtual void selectAuthSecurityEnv() const = 0;
5240
byte_vector signWithAuthKeyImpl(byte_vector&& pin, const byte_vector& hash) const override;
5341

5442
PinRetriesRemainingAndMax signingPinRetriesLeftImpl() const override;
43+
virtual pcsc_cpp::byte_type selectSignSecurityEnv() const = 0;
5544
Signature signWithSigningKeyImpl(byte_vector&& pin, const byte_vector& hash,
5645
const HashAlgorithm hashAlgo) const override;
5746

58-
virtual const SelectApplicationIDCmds& selectApplicationID() const;
59-
virtual const SelectCertificateCmds& selectCertificate() const;
60-
virtual void selectAuthSecurityEnv() const = 0;
61-
virtual pcsc_cpp::byte_type selectSignSecurityEnv() const = 0;
62-
63-
virtual size_t pinBlockLength() const { return authPinMinMaxLength().second; }
64-
virtual byte_type signingPinReference() const { return 0x85; }
65-
virtual SignatureAlgorithm signingSignatureAlgorithm() const = 0;
6647
PinRetriesRemainingAndMax pinRetriesLeft(byte_type pinReference) const;
6748

68-
virtual bool useInternalAuthenticateAndRSAWithPKCS1PaddingDuringSigning() const
69-
{
70-
return false;
71-
}
49+
void selectADF1() const;
50+
void selectADF2() const;
7251
};
7352

7453
} // namespace electronic_id

src/electronic-ids/pcsc/EstEIDIDEMIA.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ class EstEIDIDEMIAV1 : public EIDIDEMIA
4040
PinMinMaxLength authPinMinMaxLength() const override { return {4, 12}; }
4141

4242
const std::set<SignatureAlgorithm>& supportedSigningAlgorithms() const override;
43-
SignatureAlgorithm signingSignatureAlgorithm() const override { return SignatureAlgorithm::ES; }
4443
PinMinMaxLength signingPinMinMaxLength() const override { return {5, 12}; }
4544

4645
std::string name() const override { return "EstEID IDEMIA v1"; }

src/electronic-ids/pcsc/LatEIDIDEMIACommon.hpp

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/electronic-ids/pcsc/LatEIDIDEMIAv1.cpp

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)