-
AxKeyStore is an open source command line tool which stores keys and passwords securely in the user's GitHub repo.
-
User should setup a private GitHub repo to store the keys and passwords.
-
AxKeyStore authenticates user using their GitHub OAUTH credentials. The token is stored in the user's local machine in encrypted form using master key.
-
Once the authentication is through, user should give write access to the already setup private GitHub repo to AxKeyStore application. Repo name is stored locally in encrypted form.
-
Once the application receives the write access, the application is ready to store the keys and passwords.
-
User can use the axkeystore command to store the keys and passwords.
-
User can add key values, get key values, update key values and delete key values.
-
User can also add categories to organize the keys and passwords.
-
if no value is given for a key, generate a alpha numeric value with only alphabets. Max length shall be 36 characters. Minimum shall be 6. Then show that value to the user and ask for confirmation.
-
User shall be able to list all versions of a key. List 10 versions at a time. User can ask for more versions.
-
User shall be able to get the value of a previous version of a key.
-
User can set a master password for the application.
-
User cannot remove the master password for the application.
-
If master password is not set, user shall be asked to set it.
-
If master password is set, user shall be asked to enter it before storing or retrieving any key.
-
If master password is set, user shall be asked to enter it before updating or deleting any key.
-
The master password is used to encrypt a 36 character long random string. This encrypted string is called master key.
-
Master key shall be stored in github private repo in encrypted form.
-
The master key shall be used to encrypt the actual key values.
-
36 character long random string is generated. This is called as local master key
-
Local master key is stored in the user's local machine in encrypted form using master password.
-
Local master key is used to encrypt auth credentials (refresh token and repo name) for each profile.
-
User shall be able to reset their password.
-
User shall be asked to enter the old password.
-
User shall be asked to enter the new password.
-
User shall be asked to confirm the new password.
-
If the new password and confirmation password match, the password shall be updated.
-
If the new password and confirmation password do not match, the password shall not be updated.
-
If the old password is incorrect, the password shall not be updated.
-
local and remote master keys shall be decrypted using old password and encrypted using new password.
-
the new encrypted local key shall be saved to local config file.
-
the new encrypted remote key shall be saved to remote config file.
-
remote key will be saved first. Ony on successful updation of remote key, local key shall be updated.
-
In case of any failure, the old password shall be used to decrypt the local and remote master keys.
- User can create multiple profiles.
- Each profile will have its own login, master password and github repo.
- User can switch between profiles.
- User can delete profiles.
- User can list all profiles.
- User can set a profile when running the init, store, get, history or delete commands.
- If no profile is provided along with the command, it will use the directory axkeystore.
- If profile is provided along with the command, it will use the directory axkeystore/<profile_name>.
- Profile name shall contain only alphabets and numbers. No spaces or special characters except '_' and '-'.