44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package token
|
|
|
|
import (
|
|
"github.com/indra-labs/indra"
|
|
"github.com/indra-labs/indra/pkg/crypto/sha256"
|
|
log2 "github.com/indra-labs/indra/pkg/proc/log"
|
|
"github.com/indra-labs/indra/pkg/types"
|
|
"github.com/indra-labs/indra/pkg/util/slice"
|
|
"github.com/indra-labs/indra/pkg/wire/magicbytes"
|
|
)
|
|
|
|
var (
|
|
log = log2.GetLogger(indra.PathBase)
|
|
check = log.E.Chk
|
|
MagicString = "tk"
|
|
Magic = slice.Bytes(MagicString)
|
|
MinLen = magicbytes.Len + sha256.Len
|
|
_ types.Onion = &OnionSkin{}
|
|
)
|
|
|
|
// A OnionSkin is a 32 byte value.
|
|
type OnionSkin sha256.Hash
|
|
|
|
func NewOnionSkin() *OnionSkin {
|
|
var os sha256.Hash
|
|
return (*OnionSkin)(&os)
|
|
}
|
|
|
|
func (x *OnionSkin) Inner() types.Onion { return nil }
|
|
func (x *OnionSkin) Insert(_ types.Onion) {}
|
|
func (x *OnionSkin) Len() int { return MinLen }
|
|
func (x *OnionSkin) Encode(b slice.Bytes, c *slice.Cursor) {
|
|
copy(b[*c:c.Inc(magicbytes.Len)], Magic)
|
|
copy(b[*c:c.Inc(sha256.Len)], x[:sha256.Len])
|
|
}
|
|
func (x *OnionSkin) Decode(b slice.Bytes, c *slice.Cursor) (e error) {
|
|
if len(b[*c:]) < MinLen-magicbytes.Len {
|
|
return magicbytes.TooShort(len(b[*c:]), MinLen-magicbytes.Len,
|
|
string(Magic))
|
|
}
|
|
copy(x[:], b[*c:c.Inc(sha256.Len)])
|
|
return
|
|
}
|