Initial import
This commit is contained in:
60
cmd/generate-token/main.go
Normal file
60
cmd/generate-token/main.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"crypto/ed25519"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"flag"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flagKey := flag.String("key", "jwt.key", "key file")
|
||||
flag.Parse()
|
||||
|
||||
pub, key, err := loadKey(*flagKey)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodEdDSA, jwt.MapClaims{
|
||||
"publickey": hex.EncodeToString(pub),
|
||||
"iat": time.Now().UTC().Unix(),
|
||||
})
|
||||
s, err := token.SignedString(key)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
fmt.Println(s)
|
||||
}
|
||||
|
||||
func loadKey(name string) (ed25519.PublicKey, crypto.Signer, error) {
|
||||
b, err := os.ReadFile(name)
|
||||
if err == nil {
|
||||
key := ed25519.NewKeyFromSeed(b)
|
||||
pub := key.Public().(ed25519.PublicKey)
|
||||
return pub, key, nil
|
||||
}
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
var (
|
||||
key ed25519.PrivateKey
|
||||
pub ed25519.PublicKey
|
||||
)
|
||||
if pub, key, err = ed25519.GenerateKey(nil); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if err = os.WriteFile(name, key.Seed(), 0600); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return pub, key, nil
|
||||
}
|
||||
Reference in New Issue
Block a user