// generateRandomKey creates a random key with the given strength. func generateRandomKey(strength int) []byte { k := make([]byte, strength) if n, err := io.ReadFull(rand.Reader, k); n != strength || err != nil { return utils.RandomCreateBytes(strength) } return k }
func BenchmarkNewImage(b *testing.B) { b.StopTimer() d := utils.RandomCreateBytes(challengeNums, defaultChars...) b.StartTimer() for i := 0; i < b.N; i++ { NewImage(d, stdWidth, stdHeight) } }
// XsrfToken creates a xsrf token string and returns. func (ctx *Context) XsrfToken(key string, expire int64) string { if ctx._xsrf_token == "" { token, ok := ctx.GetSecureCookie(key, "_xsrf") if !ok { token = string(utils.RandomCreateBytes(32)) ctx.SetSecureCookie(key, "_xsrf", token, expire) } ctx._xsrf_token = token } return ctx._xsrf_token }
func BenchmarkImageWriteTo(b *testing.B) { b.StopTimer() d := utils.RandomCreateBytes(challengeNums, defaultChars...) b.StartTimer() counter := &byteCounter{} for i := 0; i < b.N; i++ { img := NewImage(d, stdWidth, stdHeight) img.WriteTo(counter) b.SetBytes(counter.n) counter.n = 0 } }
// create a new captcha id func (c *Captcha) CreateCaptcha() (string, error) { // generate captcha id id := string(utils.RandomCreateBytes(15)) // get the captcha chars chars := c.genRandChars() // save to store if err := c.store.Put(c.key(id), chars, c.Expiration); err != nil { return "", err } return id, nil }
// generate session id with rand string, unix nano time, remote addr by hash function. func (manager *Manager) sessionId(r *http.Request) (sid string) { bs := make([]byte, 32) if n, err := io.ReadFull(rand.Reader, bs); n != 32 || err != nil { bs = utils.RandomCreateBytes(32) } sig := fmt.Sprintf("%s%d%s", r.RemoteAddr, time.Now().UnixNano(), bs) if manager.config.SessionIDHashFunc == "md5" { h := md5.New() h.Write([]byte(sig)) sid = hex.EncodeToString(h.Sum(nil)) } else if manager.config.SessionIDHashFunc == "sha1" { h := hmac.New(sha1.New, []byte(manager.config.SessionIDHashKey)) fmt.Fprintf(h, "%s", sig) sid = hex.EncodeToString(h.Sum(nil)) } else { h := hmac.New(sha1.New, []byte(manager.config.SessionIDHashKey)) fmt.Fprintf(h, "%s", sig) sid = hex.EncodeToString(h.Sum(nil)) } return }
// generate rand chars with default chars func (c *Captcha) genRandChars() []byte { return utils.RandomCreateBytes(c.ChallengeNums, defaultChars...) }