From: PhiTux Date: Sun, 29 Dec 2024 11:10:30 +0000 (+0100) Subject: changed encryption to correct key X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=f1daed56af0ced3a5d3ae5f17b5d908cf989fb13;p=DailyTxT.git changed encryption to correct key --- diff --git a/backend/server/routers/logs.py b/backend/server/routers/logs.py index b4e161b..4562db5 100644 --- a/backend/server/routers/logs.py +++ b/backend/server/routers/logs.py @@ -43,8 +43,9 @@ async def saveLog(log: Log, cookie = Depends(users.isLoggedIn)): break # save new log - encrypted_text = security.encrypt_text(log.text, cookie["derived_key"]) - encrypted_date_written = security.encrypt_text(log.date_written, cookie["derived_key"]) + enc_key = security.get_enc_key(cookie["user_id"], cookie["derived_key"]) + encrypted_text = security.encrypt_text(log.text, enc_key) + encrypted_date_written = security.encrypt_text(log.date_written, enc_key) if "days" not in content.keys(): content["days"] = [] @@ -81,8 +82,9 @@ async def getLog(date: str, cookie = Depends(users.isLoggedIn)): for dayLog in content["days"]: if dayLog["day"] == day: - text = security.decrypt_text(dayLog["text"], cookie["derived_key"]) - date_written = security.decrypt_text(dayLog["date_written"], cookie["derived_key"]) + enc_key = security.get_enc_key(cookie["user_id"], cookie["derived_key"]) + text = security.decrypt_text(dayLog["text"], enc_key) + date_written = security.decrypt_text(dayLog["date_written"], enc_key) return {"text": text, "date_written": date_written} return {"text": "", "date_written": ""} \ No newline at end of file diff --git a/backend/server/utils/security.py b/backend/server/utils/security.py index 69602ad..68dd646 100644 --- a/backend/server/utils/security.py +++ b/backend/server/utils/security.py @@ -1,7 +1,9 @@ +from fastapi import HTTPException from passlib.hash import argon2 from argon2.low_level import hash_secret_raw, Type from cryptography.fernet import Fernet import base64 +from . import fileHandling def hash_password(password: str) -> str: return argon2.hash(password) @@ -18,10 +20,23 @@ def create_new_enc_enc_key(password: str, salt: str) -> bytes: f = Fernet(base64.urlsafe_b64encode(derived_key)) return f.encrypt(key) -def encrypt_text(text: str, derived_key: str) -> str: - f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key))) +def get_enc_key(user_id: int, derived_key: str) -> bytes: + content = fileHandling.getUsers() + + if not "users" in content.keys(): + raise HTTPException(status_code=500, detail="users.json is not in the correct format. Key 'users' is missing.") + + for user in content["users"]: + if user["user_id"] == user_id: + key = user["enc_enc_key"] + + f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key))) + return f.decrypt(key) + +def encrypt_text(text: str, key: str) -> str: + f = Fernet(base64.urlsafe_b64encode(base64.urlsafe_b64decode(key))) return f.encrypt(text.encode()).decode() -def decrypt_text(text: str, derived_key: str) -> str: - f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key))) +def decrypt_text(text: str, key: str) -> str: + f = Fernet(base64.urlsafe_b64encode(base64.urlsafe_b64decode(key))) return f.decrypt(text.encode()).decode() \ No newline at end of file