diff --git a/sign.go b/sign.go index 746f407..676de68 100644 --- a/sign.go +++ b/sign.go @@ -7,7 +7,6 @@ import ( "encoding/base64" "encoding/hex" "errors" - "fmt" "github.com/ugorji/go/codec" "hash/crc64" "strings" @@ -51,21 +50,13 @@ func (tc TokenCoder) SeedHex() string { return hex.EncodeToString(tc.Seed()) } -func NewTokenCoder(seed []byte, pubKeys ...[]byte) (tc TokenCoder, err error) { - tc.pubKeys = make([]ed25519.PublicKey, len(pubKeys)+1, len(pubKeys)+1) - if len(seed) == 0 { - seed = make([]byte, ed25519.SeedSize, ed25519.SeedSize) - _, err = rand.Read(seed) - if err != nil { - return - } - } - +func NewTokenCoderWithSeed(seed []byte, pubKeys ...[]byte) (tc TokenCoder, err error) { if len(seed) != ed25519.SeedSize { err = errors.New("Incorrect seed size") return } + tc.pubKeys = make([]ed25519.PublicKey, len(pubKeys)+1, len(pubKeys)+1) tc.privKey = ed25519.NewKeyFromSeed(seed) tc.pubKeys[len(pubKeys)] = tc.privKey.Public().(ed25519.PublicKey) @@ -80,7 +71,16 @@ func NewTokenCoder(seed []byte, pubKeys ...[]byte) (tc TokenCoder, err error) { return } -func NewTokenCoderHex(seed string, pubKeys ...string) (tc TokenCoder, err error) { +func NewTokenCoder(pubKeys ...[]byte) (tc TokenCoder, err error) { + seed := make([]byte, ed25519.SeedSize, ed25519.SeedSize) + _, err = rand.Read(seed) + if err != nil { + return + } + return NewTokenCoderWithSeed(seed, pubKeys...) +} + +func NewTokenCoderHexWithSeed(seed string, pubKeys ...string) (tc TokenCoder, err error) { var rawSeed []byte rawPubKeys := make([][]byte, len(pubKeys), len(pubKeys)) rawSeed, err = hex.DecodeString(seed) @@ -93,7 +93,18 @@ func NewTokenCoderHex(seed string, pubKeys ...string) (tc TokenCoder, err error) return } } - return NewTokenCoder(rawSeed, rawPubKeys...) + return NewTokenCoderWithSeed(rawSeed, rawPubKeys...) +} + +func NewTokenCoderHex(pubKeys ...string) (tc TokenCoder, err error) { + rawPubKeys := make([][]byte, len(pubKeys), len(pubKeys)) + for pos, pubKey := range pubKeys { + rawPubKeys[pos], err = hex.DecodeString(pubKey) + if err != nil { + return + } + } + return NewTokenCoder(rawPubKeys...) } func trim(r rune) bool {