package main

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
)

// checksum menghitung sidik jari sha256 dari isi module,
// meniru format baris go.sum (prefiks h1:).
func checksum(konten string) string {
	sum := sha256.Sum256([]byte(konten))
	return "h1:" + hex.EncodeToString(sum[:])
}

func main() {
	// Checksum dicatat ke go.sum saat dependensi pertama kali diunduh.
	tercatat := checksum("package util v1.2.0")

	// Skenario 1: dependensi terunduh utuh, isinya tidak berubah.
	utuh := checksum("package util v1.2.0")

	// Skenario 2: dependensi dimodifikasi penyerang di tengah jalan.
	dimanipulasi := checksum("package util v1.2.0 backdoor")

	fmt.Println("go.sum       :", tercatat)
	fmt.Println("unduhan utuh :", utuh)
	fmt.Println("dimodifikasi :", dimanipulasi)
	fmt.Println()
	if utuh == tercatat {
		fmt.Println("utuh         : checksum cocok, dependensi diterima")
	}
	if dimanipulasi != tercatat {
		fmt.Println("dimodifikasi : checksum berbeda, build dihentikan")
	}
}
