View | Details | Raw Unified | Return to bug 2240 | Differences between
and this patch

Collapse All | Expand All

(-)a/ssh-pkcs11.c (-10 / +15 lines)
Lines 255-276 pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, Link Here
255
	si = &k11->provider->slotinfo[k11->slotidx];
255
	si = &k11->provider->slotinfo[k11->slotidx];
256
	if ((si->token.flags & CKF_LOGIN_REQUIRED) && !si->logged_in) {
256
	if ((si->token.flags & CKF_LOGIN_REQUIRED) && !si->logged_in) {
257
		if (!pkcs11_interactive) {
257
		if (!pkcs11_interactive) {
258
			error("need pin");
258
			error("need pin entry%s", 
259
				(si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH) ? " on reader keypad" : "");
259
			return (-1);
260
			return (-1);
260
		}
261
		}
261
		snprintf(prompt, sizeof(prompt), "Enter PIN for '%s': ",
262
		if (si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH) {
262
		    si->token.label);
263
			verbose("Deferring PIN entry to keypad of chipcard reader.");
263
		pin = read_passphrase(prompt, RP_ALLOW_EOF);
264
			pin = NULL;
264
		if (pin == NULL)
265
		} else {
265
			return (-1);	/* bail out */
266
			snprintf(prompt, sizeof(prompt), "Enter PIN for '%s': ",
266
		rv = f->C_Login(si->session, CKU_USER,
267
			    si->token.label);
267
		    (u_char *)pin, strlen(pin));
268
			pin = read_passphrase(prompt, RP_ALLOW_EOF);
269
			if (pin == NULL)
270
				return (-1);	/* bail out */
271
		};
272
		rv = f->C_Login(si->session, CKU_USER, pin, pin ? strlen(pin): 0);
273
		if (pin) free(pin);
274
268
		if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
275
		if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
269
			free(pin);
270
			error("C_Login failed: %lu", rv);
276
			error("C_Login failed: %lu", rv);
271
			return (-1);
277
			return (-1);
272
		}
278
		}
273
		free(pin);
274
		si->logged_in = 1;
279
		si->logged_in = 1;
275
	}
280
	}
276
	key_filter[1].pValue = k11->keyid;
281
	key_filter[1].pValue = k11->keyid;

Return to bug 2240