mirror of
https://github.com/xcat2/confluent.git
synced 2026-02-18 05:38:59 +00:00
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
//"fmt"
|
|
"github.com/go-crypt/crypt/algorithm/shacrypt"
|
|
"os"
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"crypto/hmac"
|
|
"crypto/sha256"
|
|
)
|
|
|
|
func main() {
|
|
hmackeyfile := flag.String("k", "", "Key file for HMAC calculation")
|
|
passfile := flag.String("p", "", "File to write generated password to")
|
|
cryptfile := flag.String("c", "", "File to write crypted form of key to")
|
|
hmacfile := flag.String("m", "", "File to write HMAC value to")
|
|
flag.Parse()
|
|
randbytes := make([]byte, 36)
|
|
_, err := rand.Read(randbytes)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
newpasswd := base64.StdEncoding.EncodeToString(randbytes)
|
|
hasher, err := shacrypt.New(shacrypt.WithVariant(shacrypt.VariantSHA256), shacrypt.WithIterations(5000))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
digest, err := hasher.Hash(newpasswd)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
cryptdata := []byte(digest.Encode())
|
|
err = os.WriteFile(*passfile, []byte(newpasswd), 0600)
|
|
if err != nil { panic(err )}
|
|
err = os.WriteFile(*cryptfile, cryptdata, 0600)
|
|
if err != nil { panic(err )}
|
|
keydata, err := os.ReadFile(*hmackeyfile)
|
|
if err != nil { panic(err )}
|
|
hmacer := hmac.New(sha256.New, keydata)
|
|
hmacer.Write(cryptdata)
|
|
hmacresult := hmacer.Sum(nil)
|
|
hmacout := []byte(base64.StdEncoding.EncodeToString(hmacresult))
|
|
err = os.WriteFile(*hmacfile, hmacout, 0600)
|
|
if err != nil { panic(err )}
|
|
}
|
|
|