Add checksum verification for portable backups

This commit is contained in:
thePR0M3TH3AN committed 2025-07-01 21:43:52 -04:00
1 parent 6faead9f9a
commit c10e2380e5
5 files changed
+71 -11

No files matched your search

+8 -1
View File
@@ -14,7 +14,12 @@ try:
EncryptionMode,
DEFAULT_ENCRYPTION_MODE,
)
from .checksum import calculate_checksum, verify_checksum
from .checksum import (
calculate_checksum,
verify_checksum,
json_checksum,
canonical_json_dumps,
)
from .password_prompt import prompt_for_password
if logger.isEnabledFor(logging.DEBUG):
@@ -31,6 +36,8 @@ __all__ = [
"DEFAULT_ENCRYPTION_MODE",
"calculate_checksum",
"verify_checksum",
"json_checksum",
"canonical_json_dumps",
"exclusive_lock",
"shared_lock",
"prompt_for_password",
+13 -1
View File
@@ -14,8 +14,9 @@ import hashlib
import logging
import sys
import os
import json
import traceback
from typing import Optional
from typing import Optional, Any
from termcolor import colored
@@ -25,6 +26,17 @@ from constants import APP_DIR, SCRIPT_CHECKSUM_FILE
logger = logging.getLogger(__name__)
def canonical_json_dumps(data: Any) -> str:
"""Serialize ``data`` into a canonical JSON string."""
return json.dumps(data, sort_keys=True, separators=(",", ":"))
def json_checksum(data: Any) -> str:
"""Return SHA-256 checksum of canonical JSON serialization of ``data``."""
canon = canonical_json_dumps(data)
return hashlib.sha256(canon.encode("utf-8")).hexdigest()
def calculate_checksum(file_path: str) -> Optional[str]:
"""
Calculates the SHA-256 checksum of the given file.