char pwbuf[256];
uint8_t encrypted_key[256];
char *tag = NULL;
+ int saved_errno = 0;
ssize_t encrypted_len = crypto_read_tagged_contents_from_file(fname,
ENC_KEY_HEADER,
encrypted_key,
sizeof(encrypted_key));
if (encrypted_len < 0) {
+ saved_errno = errno;
log_info(LD_OR, "%s is missing", fname);
r = 0;
goto done;
pwbuf, pwlen);
if (r == UNPWBOX_CORRUPTED) {
log_err(LD_OR, "%s is corrupted.", fname);
+ saved_errno = EINVAL;
goto done;
} else if (r == UNPWBOX_OKAY) {
break;
if (secret_len != ED25519_SECKEY_LEN) {
log_err(LD_OR, "%s is corrupted.", fname);
+ saved_errno = EINVAL;
goto done;
}
memcpy(out->seckey, secret, ED25519_SECKEY_LEN);
memwipe(secret, 0, secret_len);
tor_free(secret);
}
+ if (saved_errno)
+ errno = saved_errno;
return r;
}