Guest User

Untitled

a guest
Jun 17th, 2026
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.42 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. DURATION=${1:-3}
  4. THREADS=${2:-1}
  5.  
  6. if ! [[ "$DURATION" =~ ^[0-9]+$ ]] || [ "$DURATION" -lt 1 ]; then
  7.     echo "Usage: $0 [seconds] [threads]" >&2
  8.     echo "Example: $0 10 4" >&2
  9.     exit 1
  10. fi
  11.  
  12. if ! [[ "$THREADS" =~ ^[0-9]+$ ]] || [ "$THREADS" -lt 1 ]; then
  13.     echo "Error: thread count must be an integer >= 1" >&2
  14.     exit 1
  15. fi
  16.  
  17. MULTI_FLAG=()
  18. [ "$THREADS" -gt 1 ] && MULTI_FLAG=(-multi "$THREADS")
  19.  
  20. CIPHERS=("aes-128-gcm" "aes-256-gcm" "chacha20-poly1305")
  21. DEFAULT_SIZES=(16 64 256 1024 8192 16384)
  22. EXTRA_SIZES=(1440)
  23. SHOW_SIZES=(256 1024 1440 8192)
  24.  
  25. declare -A VALS
  26.  
  27. TOTAL=$(( ${#CIPHERS[@]} * 2 * DURATION ))
  28. echo "Running benchmarks (${DURATION}s per run, ${THREADS} thread(s), ~${TOTAL}s total)..." >&2
  29.  
  30. for cipher in "${CIPHERS[@]}"; do
  31.     echo "  → $cipher" >&2
  32.  
  33.     # Standard run: produces results for 16/64/256/1024/8192/16384 B
  34.     raw=$(openssl speed -seconds "$DURATION" "${MULTI_FLAG[@]}" -evp "$cipher" 2>&1)
  35.     line=$(echo "$raw" | grep -i "^${cipher} ")
  36.     i=0
  37.     while IFS= read -r val; do
  38.         VALS["${cipher}_${DEFAULT_SIZES[$i]}"]="$val"
  39.         i=$((i + 1))
  40.     done < <(echo "$line" | awk '{
  41.        for (j = 2; j <= NF; j++) {
  42.            v = $j; gsub(/k/, "", v)
  43.            printf "%.2f\n", v / 1000000
  44.        }
  45.    }')
  46.  
  47.     # Separate run for 1440 B (WireGuard inner MTU)
  48.     raw1440=$(openssl speed -seconds "$DURATION" "${MULTI_FLAG[@]}" -evp "$cipher" -bytes 1440 2>&1)
  49.     line1440=$(echo "$raw1440" | grep -i "^${cipher} ")
  50.     VALS["${cipher}_1440"]=$(echo "$line1440" | awk '{v=$2; gsub(/k/,"",v); printf "%.2f", v/1000000}')
  51. done
  52.  
  53. C=11
  54. W=$((24 + C * ${#SHOW_SIZES[@]}))
  55. SEP=$(printf '%.0s─' $(seq 1 $W))
  56.  
  57. echo ""
  58. echo "  $(openssl version)"
  59. echo "  CPU: $(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | xargs)"
  60. echo ""
  61. printf "  %-24s" "Algorithm"
  62. for s in "${SHOW_SIZES[@]}"; do printf "%${C}s" "${s} B"; done
  63. echo ""
  64. printf "  %-24s" ""
  65. for s in "${SHOW_SIZES[@]}"; do printf "%${C}s" "(GB/s)"; done
  66. echo ""
  67. echo "  $SEP"
  68.  
  69. for cipher in "${CIPHERS[@]}"; do
  70.     printf "  %-24s" "$cipher"
  71.     for s in "${SHOW_SIZES[@]}"; do
  72.         printf "%${C}s" "${VALS[${cipher}_${s}]:-—}"
  73.     done
  74.     echo ""
  75. done
  76.  
  77. echo "  $SEP"
  78. echo ""
  79. echo "  * 1440 B — WireGuard inner MTU (separate run with -bytes 1440)."
  80. echo "  * Duration: ${DURATION}s per run (-seconds ${DURATION})."
  81. echo "  * Threads: ${THREADS} (-multi ${THREADS})."
  82. echo ""
Advertisement
Add Comment
Please, Sign In to add comment