#endif
/*
+ * Exports from pageantc.c
+ */
+void agent_query(void *in, int inlen, void **out, int *outlen);
+int agent_exists(void);
+
+/*
* We need this to link with the RSA code, because rsaencrypt()
* pads its data with random bytes. Since we only use rsadecrypt()
* and the signing functions, which are deterministic, this should
static void keylist_update(void) {
struct RSAKey *rkey;
struct ssh2_userkey *skey;
- enum234 e;
+ int i;
if (keylist) {
SendDlgItemMessage(keylist, 100, LB_RESETCONTENT, 0, 0);
- for (rkey = first234(rsakeys, &e); rkey; rkey = next234(&e)) {
+ for (i = 0; NULL != (rkey = index234(rsakeys, i)); i++) {
char listentry[512], *p;
/*
* Replace two spaces in the fingerprint with tabs, for
SendDlgItemMessage (keylist, 100, LB_ADDSTRING,
0, (LPARAM)listentry);
}
- for (skey = first234(ssh2keys, &e); skey; skey = next234(&e)) {
+ for (i = 0; NULL != (skey = index234(ssh2keys, i)); i++) {
char listentry[512], *p;
int len;
/*
* Reply with SSH1_AGENT_RSA_IDENTITIES_ANSWER.
*/
{
- enum234 e;
struct RSAKey *key;
int len, nkeys;
+ int i;
/*
* Count up the number and length of keys we hold.
*/
len = nkeys = 0;
- for (key = first234(rsakeys, &e); key; key = next234(&e)) {
+ for (i = 0; NULL != (key = index234(rsakeys, i)); i++) {
nkeys++;
len += 4; /* length field */
len += ssh1_bignum_length(key->exponent);
ret[4] = SSH1_AGENT_RSA_IDENTITIES_ANSWER;
PUT_32BIT(ret+5, nkeys);
p = ret + 5 + 4;
- for (key = first234(rsakeys, &e); key; key = next234(&e)) {
+ for (i = 0; NULL != (key = index234(rsakeys, i)); i++) {
PUT_32BIT(p, bignum_bitcount(key->modulus));
p += 4;
p += ssh1_write_bignum(p, key->exponent);
* Reply with SSH2_AGENT_IDENTITIES_ANSWER.
*/
{
- enum234 e;
struct ssh2_userkey *key;
int len, nkeys;
unsigned char *blob;
int bloblen;
+ int i;
/*
* Count up the number and length of keys we hold.
*/
len = nkeys = 0;
- for (key = first234(ssh2keys, &e); key; key = next234(&e)) {
+ for (i = 0; NULL != (key = index234(ssh2keys, i)); i++) {
nkeys++;
len += 4; /* length field */
blob = key->alg->public_blob(key->data, &bloblen);
ret[4] = SSH2_AGENT_IDENTITIES_ANSWER;
PUT_32BIT(ret+5, nkeys);
p = ret + 5 + 4;
- for (key = first234(ssh2keys, &e); key; key = next234(&e)) {
+ for (i = 0; NULL != (key = index234(ssh2keys, i)); i++) {
blob = key->alg->public_blob(key->data, &bloblen);
PUT_32BIT(p, bloblen);
p += 4;
*/
{
struct RSAKey *rkey;
- enum234 e;
- while ( (rkey = first234(rsakeys, &e)) != NULL ) {
+ while ( (rkey = index234(rsakeys, 0)) != NULL ) {
del234(rsakeys, rkey);
freersakey(rkey);
sfree(rkey);
*/
{
struct ssh2_userkey *skey;
- enum234 e;
- while ( (skey = first234(ssh2keys, &e)) != NULL ) {
+ while ( (skey = index234(ssh2keys, 0)) != NULL ) {
del234(ssh2keys, skey);
skey->alg->freekey(skey->data);
sfree(skey);
*/
static int CALLBACK KeyListProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam) {
- enum234 e;
struct RSAKey *rkey;
struct ssh2_userkey *skey;
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
int n = SendDlgItemMessage (hwnd, 100, LB_GETCURSEL, 0, 0);
+ int i;
if (n == LB_ERR) {
MessageBeep(0);
break;
}
- for (rkey = first234(rsakeys, &e); rkey; rkey = next234(&e))
+ for (i = 0; NULL != (rkey = index234(rsakeys, i)); i++)
if (n-- == 0)
break;
if (rkey) {
freersakey(rkey);
sfree(rkey);
} else {
- for (skey = first234(ssh2keys, &e); skey; skey = next234(&e))
+ for (i = 0; NULL != (skey = index234(ssh2keys, i)); i++)
if (n-- == 0)
break;
if (skey) {
* Find out if Pageant is already running.
*/
already_running = FALSE;
- if (FindWindow("Pageant", "Pageant"))
+ if (agent_exists())
already_running = TRUE;
else {