File: lfstest-genrandom.go

package info (click to toggle)
git-lfs 3.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,808 kB
  • sloc: sh: 21,256; makefile: 507; ruby: 417
file content (72 lines) | stat: -rw-r--r-- 1,599 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//go:build testtools
// +build testtools

package main

import (
	"crypto/rand"
	"encoding/base64"
	"encoding/binary"
	"fmt"
	"os"
	"strconv"
)

const usageFmt = "Usage: %s [--base64|--base64url] [<size>]\n"

func main() {
	offset := 1
	b64 := false
	b64url := false
	if len(os.Args) > offset && (os.Args[offset] == "--base64" || os.Args[offset] == "--base64url") {
		b64 = true
		b64url = os.Args[offset] == "--base64url"
		offset += 1
	}

	if len(os.Args) > offset+1 {
		fmt.Fprintf(os.Stderr, usageFmt, os.Args[0])
		os.Exit(2)
	}

	var count uint64 = ^uint64(0)
	if len(os.Args) == offset+1 {
		var err error
		if count, err = strconv.ParseUint(os.Args[offset], 10, 64); err != nil {
			fmt.Fprintf(os.Stderr, "Error reading size: %s, %v\n", os.Args[offset], err)
			os.Exit(3)
		}
	}

	b := make([]byte, 32)
	bb := make([]byte, max(base64.RawStdEncoding.EncodedLen(len(b)), base64.RawURLEncoding.EncodedLen(len(b))))
	for count > 0 {
		n, err := rand.Read(b)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error reading random bytes: %v\n", err)
			os.Exit(4)
		}
		if b64 {
			if b64url {
				base64.RawURLEncoding.Encode(bb, b[:n])
				n = base64.RawURLEncoding.EncodedLen(n)
			} else {
				base64.RawStdEncoding.Encode(bb, b[:n])
				n = base64.RawStdEncoding.EncodedLen(n)
			}
		}

		num := min(uint64(n), count)
		if b64 {
			err = binary.Write(os.Stdout, binary.LittleEndian, bb[:num])
		} else {
			err = binary.Write(os.Stdout, binary.LittleEndian, b[:num])
		}

		if err != nil {
			fmt.Fprintf(os.Stderr, "Error writing random bytes: %v\n", err)
			os.Exit(5)
		}
		count -= num
	}
}