Skip to content

Commit 409466f

Browse files
committed
argon2id - implement using argon2-cffi
1 parent 12a0038 commit 409466f

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ classifiers = [
3535
requires-python = ">=3.10"
3636
dependencies = [
3737
"hkdf >=0.0.3",
38+
"argon2-cffi >= 25.1.0",
3839
"pycryptodome >=3.17.0",
3940
"pydantic >=2.5.0",
4041
"httpx >=0.24.1",

src/vaultwarden/utils/crypto.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,18 @@ def make_master_key(password: str, salt: str, kdf: "vaultwarden.models.bitwarden
127127
match kdf.Kdf:
128128
case vaultwarden.models.bitwarden.KdfType.Pbkdf2:
129129
return pbkdf2_hmac("sha256", password, salt, kdf.KdfIterations)
130-
case vaultwarden.models.bitwarden.KdfType.Argon2:
131-
raise NotImplementedError("x")
130+
case vaultwarden.models.bitwarden.KdfType.Argon2id:
131+
# c.f.
132+
# https://github.com/vaultwarden/vw_web_builds/blob/355bddc6c9d5c110e55fe74c5fcfa86ddd85572c/libs/common/src/platform/services/key-generation.service.ts#L55-L75
133+
import argon2
134+
hsalt = hashlib.new("sha256",salt).digest()
135+
v = argon2.low_level.hash_secret_raw(password, hsalt,
136+
time_cost=kdf.KdfIterations,
137+
memory_cost=kdf.KdfMemory * 1024,
138+
parallelism=kdf.KdfParallelism,
139+
hash_len=32,
140+
type=argon2.Type.ID)
141+
return v
132142
case _:
133143
return None
134144

0 commit comments

Comments
 (0)