mirror of
https://github.com/xcat2/confluent.git
synced 2025-09-21 17:48:28 +00:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/go-crypt/crypt/algorithm/shacrypt"
|
|
"os"
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"crypto/hmac"
|
|
"crypto/sha256"
|
|
)
|
|
|
|
func genpasshmac(hmackeyfile string) (string, string, string, error) {
|
|
randbytes := make([]byte, 36)
|
|
_, err := rand.Read(randbytes)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
password := base64.StdEncoding.EncodeToString(randbytes)
|
|
hasher, err := shacrypt.New(shacrypt.WithVariant(shacrypt.VariantSHA256), shacrypt.WithIterations(5000))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
digest, err := hasher.Hash(password)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
cryptpass := digest.Encode()
|
|
hmackey, err := os.ReadFile(hmackeyfile)
|
|
if err != nil { return "", "", "", err }
|
|
keylines := bytes.Split(hmackey, []byte("\n"))
|
|
if bytes.Contains(keylines[0], []byte("apitoken:")) {
|
|
keyparts := bytes.Split(keylines[0], []byte(" "))
|
|
hmackey = keyparts[1]
|
|
}
|
|
|
|
hmacer := hmac.New(sha256.New, hmackey)
|
|
hmacer.Write([]byte(cryptpass))
|
|
hmacresult := hmacer.Sum(nil)
|
|
hmacout := base64.StdEncoding.EncodeToString(hmacresult)
|
|
return password, cryptpass, hmacout, nil
|
|
}
|
|
|