1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

* app-openpgp.c (do_check_pin): Add hack to allow verification of

CHV3.
(get_public_key): Don't use gcry functions to create S-expressions.
(do_deinit, do_readkey, do_genkey, send_keypair_info): Adjust for
above change.
This commit is contained in:
Werner Koch 2005-04-11 16:20:10 +00:00
parent 45eba6e5de
commit 6b002f0602
5 changed files with 241 additions and 90 deletions

View file

@ -108,7 +108,7 @@ do_reset (ctrl_t ctrl, int do_close)
static void
reset_notify (ASSUAN_CONTEXT ctx)
reset_notify (assuan_context_t ctx)
{
CTRL ctrl = assuan_get_pointer (ctx);
@ -117,7 +117,7 @@ reset_notify (ASSUAN_CONTEXT ctx)
static int
option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
option_handler (assuan_context_t ctx, const char *key, const char *value)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
@ -248,6 +248,10 @@ cmd_serialno (assuan_context_t ctx, char *line)
time_t stamp;
/* Clear the remove flag so that the open_card is able to reread it. */
/* FIXME: We can't do that if we are in a locked state. Retrun an
appropriate erro r in that case. IF the card has not been
removed we may very well continue. */
if (ctrl->server_local->card_removed)
do_reset (ctrl, 0);
@ -333,9 +337,10 @@ cmd_serialno (assuan_context_t ctx, char *line)
The URL to be used for locating the entire public key.
Note, that this function may be even be used on a locked card.
*/
static int
cmd_learn (ASSUAN_CONTEXT ctx, char *line)
cmd_learn (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc = 0;
@ -481,9 +486,10 @@ cmd_learn (ASSUAN_CONTEXT ctx, char *line)
/* READCERT <hexified_certid>
Note, that this function may be even be used on a locked card.
*/
static int
cmd_readcert (ASSUAN_CONTEXT ctx, char *line)
cmd_readcert (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -524,7 +530,10 @@ cmd_readcert (ASSUAN_CONTEXT ctx, char *line)
/* READKEY <hexified_certid>
Return the public key for the given cert or key ID as an standard
S-Expression. */
S-Expression.
Note, that this function may be even be used on a locked card.
*/
static int
cmd_readkey (assuan_context_t ctx, char *line)
{
@ -619,14 +628,16 @@ cmd_readkey (assuan_context_t ctx, char *line)
The client should use this command to tell us the data he want to
sign. */
static int
cmd_setdata (ASSUAN_CONTEXT ctx, char *line)
cmd_setdata (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int n;
char *p;
unsigned char *buf;
/* parse the hexstring */
/* FIXME: If we are locked return an error. */
/* Parse the hexstring. */
for (p=line,n=0; hexdigitp (p); p++, n++)
;
if (*p)
@ -652,7 +663,7 @@ cmd_setdata (ASSUAN_CONTEXT ctx, char *line)
static int
pin_cb (void *opaque, const char *info, char **retstr)
{
ASSUAN_CONTEXT ctx = opaque;
assuan_context_t ctx = opaque;
char *command;
int rc;
unsigned char *value;
@ -687,7 +698,7 @@ pin_cb (void *opaque, const char *info, char **retstr)
*/
static int
cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
cmd_pksign (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -695,6 +706,8 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
size_t outdatalen;
char *keyidstr;
/* FIXME: If we are locked return an error. */
if ((rc = open_card (ctrl, NULL)))
return rc;
@ -738,7 +751,7 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_pkauth (ASSUAN_CONTEXT ctx, char *line)
cmd_pkauth (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -746,6 +759,8 @@ cmd_pkauth (ASSUAN_CONTEXT ctx, char *line)
size_t outdatalen;
char *keyidstr;
/* FIXME: If we are locked return an error. */
if ((rc = open_card (ctrl, NULL)))
return rc;
@ -785,7 +800,7 @@ cmd_pkauth (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
cmd_pkdecrypt (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -793,6 +808,8 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
size_t outdatalen;
char *keyidstr;
/* FIXME: If we are locked return an error. */
if ((rc = open_card (ctrl, NULL)))
return rc;
@ -834,14 +851,15 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
This command is used to retrieve data from a smartcard. The
allowed names depend on the currently selected smartcard
application. NAME must be percent and '+' escaped. The value is
returned through status message, see the LESRN command for details.
returned through status message, see the LEARN command for details.
However, the current implementation assumes that Name is not escaped;
this works as long as noone uses arbitrary escaping.
Note, that this function may even be used on a locked card.
*/
static int
cmd_getattr (ASSUAN_CONTEXT ctx, char *line)
cmd_getattr (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -858,6 +876,8 @@ cmd_getattr (ASSUAN_CONTEXT ctx, char *line)
/* (We ignore any garbage for now.) */
/* FIXME: Applications should not return sensistive data if the card
is locked. */
rc = app_getattr (ctrl->app_ctx, ctrl, keyword);
TEST_CARD_REMOVAL (ctrl, rc);
@ -878,7 +898,7 @@ cmd_getattr (ASSUAN_CONTEXT ctx, char *line)
setattr function of the actually used application (app-*.c) for
details. */
static int
cmd_setattr (ASSUAN_CONTEXT ctx, char *orig_line)
cmd_setattr (assuan_context_t ctx, char *orig_line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -887,6 +907,8 @@ cmd_setattr (ASSUAN_CONTEXT ctx, char *orig_line)
size_t nbytes;
char *line, *linebuf;
/* FIXME: If we are locked return an error. */
if ((rc = open_card (ctrl, NULL)))
return rc;
@ -932,13 +954,15 @@ cmd_setattr (ASSUAN_CONTEXT ctx, char *orig_line)
*/
static int
cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
cmd_genkey (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
char *keyno;
int force = has_option (line, "--force");
/* FIXME: If we are locked return an error. */
/* Skip over options. */
while ( *line == '-' && line[1] == '-' )
{
@ -974,9 +998,11 @@ cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
/* RANDOM <nbytes>
Get NBYTES of random from the card and send them back as data.
Note, that this function may be even be used on a locked card.
*/
static int
cmd_random (ASSUAN_CONTEXT ctx, char *line)
cmd_random (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
@ -1016,13 +1042,15 @@ cmd_random (ASSUAN_CONTEXT ctx, char *line)
Change the PIN or reset thye retry counter of the card holder
verfication vector CHVNO. */
static int
cmd_passwd (ASSUAN_CONTEXT ctx, char *line)
cmd_passwd (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
char *chvnostr;
int reset_mode = has_option (line, "--reset");
/* FIXME: If we are locked return an error. */
/* Skip over options. */
while (*line == '-' && line[1] == '-')
{
@ -1061,12 +1089,14 @@ cmd_passwd (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_checkpin (ASSUAN_CONTEXT ctx, char *line)
cmd_checkpin (assuan_context_t ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
int rc;
char *keyidstr;
/* FIXME: If we are locked return an error. */
if ((rc = open_card (ctrl, NULL)))
return rc;