package cybersecurity

import "math"

// EntropyShannon calcula la entropia de Shannon de los datos proporcionados.
// Devuelve un valor entre 0 (datos uniformes) y 8 (datos completamente aleatorios para bytes).
func EntropyShannon(data []byte) float64 {
	if len(data) == 0 {
		return 0
	}

	var freq [256]float64
	for _, b := range data {
		freq[b]++
	}

	n := float64(len(data))
	entropy := 0.0
	for _, f := range freq {
		if f > 0 {
			p := f / n
			entropy -= p * math.Log2(p)
		}
	}
	return entropy
}
