Add support for deleting specific keys
Initialize the variable to prevent a potential crash

In issue_mok_request(), old_req.Data must be intialized before
"goto error", or the process would segfault when freeing old_req.Data.
Only change terminal settings

tcgetattr() will fail if we send password through a pipeline instead
of a TTY.
Use getopt() to parse options
Adopt new password hash format

old format: MokNew + sha256sum(MokNew + password)
new format: salt + sha256sum(salt + password)
The new format makes a preset hash possible.
Close the key file
Get rid of misused while statement
Read the password hash from the file
Add a new command to generate the password hash
Amend help
New commands to revoke the import or delete request
Apply stricter permissions to some variables

The UEFI variables which contain the password or the password hash
should not be accessed by normal users.
Extend the password hash format

Several new fields were added to support hash from /etc/shadow.

[Hash Method][Interation Count][Salt Size][Salt][hash]

Besides, the salt is hashed with the 8-bit char password instead of
an efi_char16_t password array.
Use crypt_r() to generate the password hash

1. We now use crypt_r() from glibc to generate the password hash.

2. The password length is changed to be compatible with the password
   hash from /etc/shadow.

3. The password hash structure was modified to be compatible with
   the change in MokManager.
Support SHA512-based crypt_r() hash
Add the new option to import root password hash
Support blowfish-based crypt() hash
Simplify the hash generation
Support MD5-based crypt() hash
Fix SHA256/SHA512 parsing on hashes with no salt