diff --git a/Cargo.lock b/Cargo.lock
index 775a1c3..ac5de88 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -106,6 +106,12 @@ dependencies = [
"rustc-demangle",
]
+[[package]]
+name = "base32"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa"
+
[[package]]
name = "base64"
version = "0.21.7"
@@ -329,6 +335,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
+ "subtle",
]
[[package]]
@@ -531,6 +538,15 @@ version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
[[package]]
name = "http"
version = "0.2.12"
@@ -725,6 +741,7 @@ name = "lprs"
version = "1.2.1"
dependencies = [
"aes",
+ "base32",
"base64 0.22.1",
"bincode",
"cbc",
@@ -742,6 +759,7 @@ dependencies = [
"serde_json",
"sha2",
"thiserror",
+ "totp-lite",
]
[[package]]
@@ -1165,6 +1183,17 @@ dependencies = [
"serde",
]
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
[[package]]
name = "sha2"
version = "0.10.8"
@@ -1243,6 +1272,12 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
[[package]]
name = "syn"
version = "2.0.60"
@@ -1374,6 +1409,18 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "totp-lite"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8e43134db17199f7f721803383ac5854edd0d3d523cc34dba321d6acfbe76c3"
+dependencies = [
+ "digest",
+ "hmac",
+ "sha1",
+ "sha2",
+]
+
[[package]]
name = "tower-service"
version = "0.3.2"
diff --git a/Cargo.toml b/Cargo.toml
index 5e0c137..dd39c15 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -30,6 +30,8 @@ sha2 = "0.10.8"
serde_json = "1.0.116"
base64 = "0.22.1"
clap_complete = "4.5.2"
+totp-lite = "2.0.1"
+base32 = "0.4.0"
[features]
default = ["update-notify"]
diff --git a/src/cli/add_command.rs b/src/cli/add_command.rs
index 709cd1a..8c3fa8d 100644
--- a/src/cli/add_command.rs
+++ b/src/cli/add_command.rs
@@ -31,10 +31,14 @@ use crate::{
pub struct Add {
#[command(flatten)]
vault_info: Vault,
- /// The password, if there is no value for it you will prompt it
+ /// The password, if there is no value you will prompt it
#[arg(short, long)]
#[allow(clippy::option_option)]
password: Option