45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package pk
|
|
|
|
import (
|
|
"crypto/rand"
|
|
|
|
"maunium.net/go/mautrix/crypto/goolm"
|
|
"maunium.net/go/mautrix/crypto/goolm/crypto"
|
|
"maunium.net/go/mautrix/id"
|
|
)
|
|
|
|
// Signing is used for signing a pk
|
|
type Signing struct {
|
|
KeyPair crypto.Ed25519KeyPair `json:"key_pair"`
|
|
Seed []byte `json:"seed"`
|
|
}
|
|
|
|
// NewSigningFromSeed constructs a new Signing based on a seed.
|
|
func NewSigningFromSeed(seed []byte) (*Signing, error) {
|
|
s := &Signing{}
|
|
s.Seed = seed
|
|
s.KeyPair = crypto.Ed25519GenerateFromSeed(seed)
|
|
return s, nil
|
|
}
|
|
|
|
// NewSigning returns a Signing based on a random seed
|
|
func NewSigning() (*Signing, error) {
|
|
seed := make([]byte, 32)
|
|
_, err := rand.Read(seed)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return NewSigningFromSeed(seed)
|
|
}
|
|
|
|
// Sign returns the signature of the message base64 encoded.
|
|
func (s Signing) Sign(message []byte) []byte {
|
|
signature := s.KeyPair.Sign(message)
|
|
return goolm.Base64Encode(signature)
|
|
}
|
|
|
|
// PublicKey returns the public key of the key pair base 64 encoded.
|
|
func (s Signing) PublicKey() id.Ed25519 {
|
|
return s.KeyPair.B64Encoded()
|
|
}
|