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)