aboutsummaryrefslogtreecommitdiffstats
path: root/scd/app-openpgp.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2021-07-06 05:52:29 +0000
committerNIIBE Yutaka <[email protected]>2021-07-06 05:52:29 +0000
commit044e5a3c3801fde7fa3b26986825377016e73103 (patch)
tree45e26e9ad43d1a12a5fce7942ebc981a1ccb4638 /scd/app-openpgp.c
parentartwork: Explain the license for the logo (diff)
downloadgnupg-044e5a3c3801fde7fa3b26986825377016e73103.tar.gz
gnupg-044e5a3c3801fde7fa3b26986825377016e73103.zip
scd: Detect external interference when PCSC_SHARED.
* scd/app-common.h (check_aid): New method. * scd/app-openpgp.c (do_check_aid): New. * scd/app-piv.c (do_check_aid): New. * scd/app.c (check_external_interference): New. (maybe_switch_app): Check interference to determine switching is needed. -- GnuPG-bug-id: 5484 Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'scd/app-openpgp.c')
-rw-r--r--scd/app-openpgp.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index feea1905b..1fa865f69 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -6134,6 +6134,18 @@ do_reselect (app_t app, ctrl_t ctrl)
}
+/* Check if AID is the correct one. */
+static gpg_error_t
+do_check_aid (app_t app, ctrl_t ctrl, const unsigned char *aid, size_t aidlen)
+{
+ if (aidlen >= sizeof openpgp_aid
+ && memcmp (aid, openpgp_aid, sizeof openpgp_aid) == 0)
+ return 0;
+
+ return gpg_error (GPG_ERR_WRONG_CARD);
+}
+
+
/* Select the OpenPGP application on the card in SLOT. This function
must be used before any other OpenPGP application functions. */
gpg_error_t
@@ -6322,6 +6334,7 @@ app_select_openpgp (app_t app)
app->fnc.change_pin = do_change_pin;
app->fnc.check_pin = do_check_pin;
app->fnc.with_keygrip = do_with_keygrip;
+ app->fnc.check_aid = do_check_aid;
}
leave: