Documentation ¶
Overview ¶
Package crypto is a collection of cryptographic utilities.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type HMACEncoder ¶
type HMACEncoder struct {
// contains filtered or unexported fields
}
HMACEncoder is an encoder that can verify and optionally encrypt message
func NewHMACEncoder ¶
func NewHMACEncoder(hashKey, blockKey []byte) (*HMACEncoder, error)
NewHMACEncoder returns a new instance of the HMACEncoder. Hash key must be 32 or 64 bytes. Block key can be nil, which will disable encryption, or 16|24|32 bytes (AES-128|192|256).
func (*HMACEncoder) Decode ¶
func (s *HMACEncoder) Decode(name string, data []byte, dst *[]byte) error
Decode restores the data processed by Encode().
func (*HMACEncoder) DecodeWithTTL ¶
func (s *HMACEncoder) DecodeWithTTL(name string, minAge, maxAge int64, data []byte, dst *[]byte) error
DecodeWithTTL restores the data processed by Encode(). An error occurs if minAge or maxAge TTL (seconds) check fails with the embedded message timestamp.
Example ¶
package main import ( "fmt" "time" "github.com/gozl/crypto" ) func main() { src := "this is a secret message" hashKey := crypto.GetBytes(32) blockKey := crypto.GetBytes(32) // pass in nil instead of blockKey if you don't need encryption encoder, _ := crypto.NewHMACEncoder(hashKey, blockKey) encrypted, _ := encoder.Encode("test1", []byte(src)) time.Sleep(4 * time.Second) var decrypted []byte err := encoder.DecodeWithTTL("test1", 0, 2, encrypted, &decrypted) if err != nil { fmt.Println(err.Error()) } else { fmt.Println(string(decrypted)) } err2 := encoder.DecodeWithTTL("test1", 0, 5, encrypted, &decrypted) if err2 != nil { fmt.Println(err2.Error()) } else { fmt.Println(string(decrypted)) } }
Output: data has expired this is a secret message
func (*HMACEncoder) Encode ¶
func (s *HMACEncoder) Encode(name string, data []byte) ([]byte, error)
Encode produces a base64 encoded value that is HMAC signed. It will also be encrypted if the HMACEncoder is initialized with blockKeys.
Example ¶
package main import ( "fmt" "github.com/gozl/crypto" ) func main() { src := "this is a secret message" hashKey := crypto.GetBytes(32) blockKey := crypto.GetBytes(32) // pass in nil instead of blockKey if you don't need encryption encoder, err1 := crypto.NewHMACEncoder(hashKey, blockKey) if err1 != nil { fmt.Println(err1.Error()) } encrypted, err2 := encoder.Encode("test1", []byte(src)) if err2 != nil { fmt.Println(err2.Error()) } var decrypted []byte err3 := encoder.Decode("test1", encrypted, &decrypted) if err3 != nil { fmt.Println(err3.Error()) } fmt.Println("Original : " + src) //fmt.Println("Encoded : " + string(encrypted)) fmt.Println("Restored : " + string(decrypted)) }
Output: Original : this is a secret message Restored : this is a secret message