commit
909db53116
5 changed files with 198 additions and 0 deletions
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
# common |
||||
-- |
||||
import "git.tcp.direct/kayos/common" |
||||
|
||||
stuff I use a lot. |
||||
|
||||
|
||||
#### func Abs |
||||
|
||||
```go |
||||
func Abs(n int) int |
||||
``` |
||||
|
||||
#### func CompareChecksums |
||||
|
||||
```go |
||||
func CompareChecksums(a []byte, b []byte) bool |
||||
``` |
||||
|
||||
#### func Fprint |
||||
|
||||
```go |
||||
func Fprint(w io.Writer, s string) |
||||
``` |
||||
Fprint is fmt.Fprint with error handling. |
||||
|
||||
#### func RNG |
||||
|
||||
```go |
||||
func RNG(n int) int |
||||
``` |
||||
|
||||
Random Number Generator (uses a combo of crypto/rand and math/rand for better performance) |
||||
|
||||
#### func RangeIterate |
||||
|
||||
```go |
||||
func RangeIterate(ips interface{}) chan *ipa.IP |
||||
``` |
||||
|
||||
IP Address iteration |
||||
|
||||
#### func SnoozeMS |
||||
|
||||
```go |
||||
func SnoozeMS(n int) |
||||
``` |
||||
|
||||
Random sleep, max of n seconds. |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
module git.tcp.direct/kayos/common |
||||
|
||||
go 1.17 |
||||
|
||||
require ( |
||||
github.com/rs/zerolog v1.26.1 |
||||
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e |
||||
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6 |
||||
) |
||||
|
||||
require ( |
||||
go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect |
||||
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37 // indirect |
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e // indirect |
||||
) |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= |
||||
github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= |
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= |
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= |
||||
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= |
||||
github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= |
||||
github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= |
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= |
||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= |
||||
go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE= |
||||
go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA= |
||||
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37 h1:Tx9kY6yUkLge/pFG7IEMwDZy6CS2ajFc9TvQdPCW0uA= |
||||
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E= |
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= |
||||
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e h1:1SzTfNOXwIS2oWiMF+6qu0OUDKb0dauo6MoDUQyu+yU= |
||||
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= |
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= |
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= |
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= |
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= |
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= |
||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= |
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA= |
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= |
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= |
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= |
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= |
||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= |
||||
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= |
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
||||
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6 h1:acCzuUSQ79tGsM/O50VRFySfMm19IoMKL+sZztZkCxw= |
||||
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6/go.mod h1:y3MGhcFMlh0KZPMuXXow8mpjxxAk3yoDNsp4cQz54i8= |
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
package common |
||||
|
||||
import ipa "inet.af/netaddr" |
||||
|
||||
func RangeIterate(ips interface{}) chan *ipa.IP { |
||||
var addrs ipa.IPRange |
||||
|
||||
switch ips.(type) { |
||||
case ipa.IPRange: |
||||
addrs = ips.(ipa.IPRange) |
||||
case ipa.IPPrefix: |
||||
addrs = ips.(ipa.IPPrefix).Range() |
||||
} |
||||
|
||||
ch := make(chan *ipa.IP) |
||||
go func() { |
||||
var head ipa.IP |
||||
head = addrs.From() |
||||
end := addrs.To() |
||||
for head != end { |
||||
if !head.IsUnspecified() { |
||||
ch <- &head |
||||
} |
||||
head = head.Next() |
||||
} |
||||
close(ch) |
||||
}() |
||||
return ch |
||||
} |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
package common |
||||
|
||||
import ( |
||||
"fmt" |
||||
"io" |
||||
|
||||
crip "crypto/rand" |
||||
"encoding/binary" |
||||
"math/rand" |
||||
"time" |
||||
|
||||
"github.com/rs/zerolog/log" |
||||
"golang.org/x/crypto/blake2b" |
||||
) |
||||
|
||||
// Fprint is fmt.Fprint with error handling.
|
||||
func Fprint(w io.Writer, s string) { |
||||
_, err := fmt.Fprint(w, s) |
||||
if err != nil { |
||||
log.Error().Str("data", s).Err(err).Msg("Fprint failed!") |
||||
} |
||||
} |
||||
|
||||
func bytesToHash(b []byte) []byte { |
||||
Hasha, _ := blake2b.New(64, nil) |
||||
Hasha.Write(b) |
||||
return Hasha.Sum(nil) |
||||
} |
||||
|
||||
func CompareChecksums(a []byte, b []byte) bool { |
||||
ahash := bytesToHash(a) |
||||
bhash := bytesToHash(b) |
||||
return string(ahash) == string(bhash) |
||||
} |
||||
|
||||
func RNG(n int) int { |
||||
var seed int64 |
||||
err := binary.Read(crip.Reader, binary.BigEndian, &seed) |
||||
if err != nil { |
||||
panic(err) |
||||
} |
||||
rng := rand.New(rand.NewSource(seed)) |
||||
return rng.Intn(n) |
||||
} |
||||
|
||||
func SnoozeMS(n int) { |
||||
time.Sleep(time.Duration(RNG(n)) * time.Millisecond) |
||||
} |
||||
|
||||
func Abs(n int) int { |
||||
// ayyee smash 6ros
|
||||
n64 := int64(n) |
||||
y := n64 >> 63 |
||||
n64 = (n64 ^ y) - y |
||||
return int(n64) |
||||
} |
Loading…
Reference in new issue