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

Collapse All | Expand All

(-)scard-opensc.c (+31 lines)
Lines 143-153 sc_prkey_op_init(RSA *rsa, struct sc_pkc Link Here
143
		*key_obj_out = key_obj;
149
		*key_obj_out = key_obj;
144
		return 0;
150
		return 0;
145
	} else if (r) {
151
	} else if (r) {
152
		/* some other OpenSC internal error */
146
		error("Unable to find PIN object from SmartCard: %s",
153
		error("Unable to find PIN object from SmartCard: %s",
147
		      sc_strerror(r));
154
		      sc_strerror(r));
148
		goto err;
155
		goto err;
149
	}
156
	}
150
	pin = pin_obj->data;
157
	pin = pin_obj->data;
158
159
	if ((pin->auth_id.len > 0) && (! sc_pin)) {
160
		/* we need a pin, we don't have one. let's ask. */
161
		char *passphrase;
162
		passphrase = read_passphrase("Enter passphrase for key:", 0);
163
		if (! passphrase)
164
			goto err;
165
		if (strcmp(passphrase, "") == 0) 
166
			goto err;
167
		r = sc_lock(card);
168
		if (r) {
169
			error("Unable to lock smartcard: %s",
170
					sc_strerror(r));
171
			memset(passphrase, 0, strlen(passphrase));
172
			xfree(passphrase);
173
			goto err;
174
		}
175
		r = sc_pkcs15_verify_pin(p15card, pin, 
176
			passphrase, strlen(passphrase));
177
		memset(passphrase, 0, strlen(passphrase));
178
		xfree(passphrase);
179
		if (r) {
180
			sc_unlock(card);
181
			error("PIN code verification failed: %s",
182
					sc_strerror(r));
183
			goto err;
184
		}
185
		*key_obj_out = key_obj;
186
		return 0;
187
	}
151
	r = sc_lock(card);
188
	r = sc_lock(card);
152
	if (r) {
189
	if (r) {
153
		error("Unable to lock smartcard: %s", sc_strerror(r));
190
		error("Unable to lock smartcard: %s", sc_strerror(r));

Return to bug 608