From ee743ca042a374730479a1df43633c816854c2b4 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 7 Jun 2012 13:59:13 +0900 Subject: [PATCH] internal authenticate input check --- ChangeLog | 3 +++ src/openpgp.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index ae9ca35..1469014 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-06-07 Niibe Yutaka + * src/openpgp.c (cmd_internal_authenticate): Add check for input + length. + Implement key generation. * src/openpgp.c (cmd_pgp_gakp): Call gpg_do_keygen. * src/openpgp-do.c (proc_key_import): Call with modulus = NULL. diff --git a/src/openpgp.c b/src/openpgp.c index c5013af..a46e95e 100644 --- a/src/openpgp.c +++ b/src/openpgp.c @@ -744,6 +744,8 @@ cmd_pso (void) DEBUG_INFO ("PSO done.\r\n"); } + +#define MAX_DIGEST_INFO_LEN 102 /* 40% */ static void cmd_internal_authenticate (void) { @@ -763,6 +765,13 @@ cmd_internal_authenticate (void) return; } + if (len > MAX_DIGEST_INFO_LEN) + { + DEBUG_INFO ("input is too long."); + GPG_CONDITION_NOT_SATISFIED (); + return; + } + r = rsa_sign (apdu.cmd_apdu_data, res_APDU, len, &kd[GPG_KEY_FOR_AUTHENTICATION]); if (r < 0)