version 1.105.2.1, 2003/04/01 00:12:14 |
version 1.105.2.2, 2003/09/16 21:20:27 |
|
|
/* The response is MD5 of decrypted challenge plus session id. */ |
/* The response is MD5 of decrypted challenge plus session id. */ |
len = BN_num_bytes(challenge); |
len = BN_num_bytes(challenge); |
if (len <= 0 || len > 32) { |
if (len <= 0 || len > 32) { |
log("process_authentication_challenge: bad challenge length %d", len); |
logit("process_authentication_challenge: bad challenge length %d", len); |
goto failure; |
goto failure; |
} |
} |
memset(buf, 0, 32); |
memset(buf, 0, 32); |
|
|
buffer_get_bignum(&e->request, key->rsa->n); |
buffer_get_bignum(&e->request, key->rsa->n); |
|
|
if (bits != key_size(key)) |
if (bits != key_size(key)) |
log("Warning: identity keysize mismatch: actual %u, announced %u", |
logit("Warning: identity keysize mismatch: actual %u, announced %u", |
key_size(key), bits); |
key_size(key), bits); |
break; |
break; |
case 2: |
case 2: |
|
|
process_add_smartcard_key (SocketEntry *e) |
process_add_smartcard_key (SocketEntry *e) |
{ |
{ |
char *sc_reader_id = NULL, *pin; |
char *sc_reader_id = NULL, *pin; |
int i, version, success = 0; |
int i, version, success = 0, death = 0, confirm = 0; |
Key **keys, *k; |
Key **keys, *k; |
Identity *id; |
Identity *id; |
Idtab *tab; |
Idtab *tab; |
|
|
sc_reader_id = buffer_get_string(&e->request, NULL); |
sc_reader_id = buffer_get_string(&e->request, NULL); |
pin = buffer_get_string(&e->request, NULL); |
pin = buffer_get_string(&e->request, NULL); |
|
|
|
while (buffer_len(&e->request)) { |
|
switch (buffer_get_char(&e->request)) { |
|
case SSH_AGENT_CONSTRAIN_LIFETIME: |
|
death = time(NULL) + buffer_get_int(&e->request); |
|
break; |
|
case SSH_AGENT_CONSTRAIN_CONFIRM: |
|
confirm = 1; |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
if (lifetime && !death) |
|
death = time(NULL) + lifetime; |
|
|
keys = sc_get_keys(sc_reader_id, pin); |
keys = sc_get_keys(sc_reader_id, pin); |
xfree(sc_reader_id); |
xfree(sc_reader_id); |
xfree(pin); |
xfree(pin); |
|
|
if (lookup_identity(k, version) == NULL) { |
if (lookup_identity(k, version) == NULL) { |
id = xmalloc(sizeof(Identity)); |
id = xmalloc(sizeof(Identity)); |
id->key = k; |
id->key = k; |
id->comment = xstrdup("smartcard key"); |
id->comment = sc_get_key_label(k); |
id->death = 0; |
id->death = death; |
id->confirm = 0; |
id->confirm = confirm; |
TAILQ_INSERT_TAIL(&tab->idlist, id, next); |
TAILQ_INSERT_TAIL(&tab->idlist, id, next); |
tab->nentries++; |
tab->nentries++; |
success = 1; |
success = 1; |
|
|
break; |
break; |
#ifdef SMARTCARD |
#ifdef SMARTCARD |
case SSH_AGENTC_ADD_SMARTCARD_KEY: |
case SSH_AGENTC_ADD_SMARTCARD_KEY: |
|
case SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED: |
process_add_smartcard_key(e); |
process_add_smartcard_key(e); |
break; |
break; |
case SSH_AGENTC_REMOVE_SMARTCARD_KEY: |
case SSH_AGENTC_REMOVE_SMARTCARD_KEY: |