package security import ( "fmt" "math" ) // SafeUint64ToUint32 converts uint64 to uint32 with overflow check func SafeUint64ToUint32(value uint64) (uint32, error) { if value > math.MaxUint32 { return 0, fmt.Errorf("value %d exceeds maximum uint32 value %d", value, math.MaxUint32) } return uint32(value), nil } // SafeUint64ToInt64 converts uint64 to int64 with bounds check func SafeUint64ToInt64(value uint64) (int64, error) { if value > math.MaxInt64 { return 0, fmt.Errorf("value %d exceeds maximum int64 value %d", value, math.MaxInt64) } return int64(value), nil } // SafeUint64ToUint32WithDefault converts uint64 to uint32 with overflow check and default value func SafeUint64ToUint32WithDefault(value uint64, defaultValue uint32) uint32 { if value > math.MaxUint32 { return defaultValue } return uint32(value) } // SafeAddUint64 adds two uint64 values with overflow check func SafeAddUint64(a, b uint64) (uint64, error) { if a > math.MaxUint64-b { return 0, fmt.Errorf("addition overflow: %d + %d exceeds maximum uint64 value", a, b) } return a + b, nil } // SafeSubtractUint64 subtracts b from a with underflow check func SafeSubtractUint64(a, b uint64) (uint64, error) { if a < b { return 0, fmt.Errorf("subtraction underflow: %d - %d results in negative value", a, b) } return a - b, nil } // SafeMultiplyUint64 multiplies two uint64 values with overflow check func SafeMultiplyUint64(a, b uint64) (uint64, error) { if b != 0 && a > math.MaxUint64/b { return 0, fmt.Errorf("multiplication overflow: %d * %d exceeds maximum uint64 value", a, b) } return a * b, nil }