#!/usr/bin/env bash
# ============================================================================
# PHM Open Source — Segurança Defensiva & Integridade
# Script 01: Verificador de Hash Criptográfico SHA-256 e MD5
# Autor: Prof. Paulo Henrique Maciel · PHM Tech
# ============================================================================
# 
# CONCEITO DIDÁTICO:
# O hash criptográfico é uma função matemática unidirecional que gera uma
# assinatura de tamanho fixo para qualquer arquivo. Uma alteração de um único
# bit no arquivo original gera um hash completamente diferente (Efeito Avalanche).
# 
# COMO EXECUTAR:
# ./01_verificador_sha256.sh nome_do_arquivo.ext
# ============================================================================

set -e

if [ $# -eq 0 ]; then
    echo "============================================================"
    echo "    PHM TECH — VERIFICADOR DE INTEGRIDADE SHA-256 / MD5     "
    echo "============================================================"
    echo "Uso: $0 <caminho_do_arquivo>"
    echo "Exemplo: $0 meu_documento.pdf"
    exit 1
fi

ARQUIVO="$1"

if [ ! -f "$ARQUIVO" ]; then
    echo "[ERRO] O arquivo '$ARQUIVO' nao foi encontrado!"
    exit 2
fi

echo "============================================================"
echo "    ANALISE DE INTEGRIDADE CRIPTOGRAFICA DE ARQUIVO        "
echo "============================================================"
echo " - Arquivo Analisado : $ARQUIVO"
echo " - Tamanho em Bytes  : $(wc -c < "$ARQUIVO") bytes"
echo " - Ultima Modificacao: $(stat -c '%y' "$ARQUIVO" 2>/dev/null || stat -f '%Sm' "$ARQUIVO" 2>/dev/null || echo 'N/D')"
echo ""

echo "Assinaturas Criptograficas Geradas:"
if command -v sha256sum >/dev/null 2>&1; then
    echo " -> SHA-256 : $(sha256sum "$ARQUIVO" | awk '{print $1}')"
elif command -v shasum >/dev/null 2>&1; then
    echo " -> SHA-256 : $(shasum -a 256 "$ARQUIVO" | awk '{print $1}')"
fi

if command -v md5sum >/dev/null 2>&1; then
    echo " -> MD5     : $(md5sum "$ARQUIVO" | awk '{print $1}')"
elif command -v md5 >/dev/null 2>&1; then
    echo " -> MD5     : $(md5 -q "$ARQUIVO")"
fi

echo ""
echo "============================================================"
echo " Verificacao concluida de forma 100% segura e defensiva."
echo "============================================================"