53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package bloat
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"fmt"
|
|
|
|
"aead.dev/minisign"
|
|
"filippo.io/age"
|
|
)
|
|
|
|
type Bloat[T any] struct {
|
|
SignPub minisign.PublicKey
|
|
signPriv minisign.PrivateKey
|
|
RequireEnc bool
|
|
Enc age.X25519Identity
|
|
// EncPub age.X25519Recipient
|
|
// encPriv age.X25519Identity // Scrypt is the password one?
|
|
}
|
|
|
|
func NewPlainBloat[T any]() (Bloat[T], error) {
|
|
pub, sign, err := minisign.GenerateKey(rand.Reader)
|
|
if err != nil {
|
|
fmt.Println("problem generating minisign")
|
|
fmt.Println(err)
|
|
return Bloat[T]{}, err
|
|
}
|
|
res := Bloat[T]{
|
|
SignPub: pub,
|
|
signPriv: sign,
|
|
RequireEnc: false,
|
|
}
|
|
return res, nil
|
|
}
|
|
func NewEncBloat[T any]() (Bloat[T], error) {
|
|
res, err := NewPlainBloat[T]()
|
|
res.RequireEnc = true
|
|
if err != nil {
|
|
fmt.Println("problem generating signing part")
|
|
}
|
|
enc, err := age.GenerateX25519Identity()
|
|
if err != nil {
|
|
fmt.Println("unable to generate")
|
|
fmt.Println(err)
|
|
return Bloat[T]{}, err
|
|
}
|
|
// recip := enc.Recipient()
|
|
res.Enc = *enc
|
|
// res.encPriv = *enc
|
|
// res.EncPub = *recip
|
|
// fmt.Printf("made age key: %s\n", enc.Recipient().String())
|
|
return res, nil
|
|
|
|
}
|