|
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; |