miniflux-v2/crypto/crypto.go

45 lines
1.1 KiB
Go
Raw Normal View History

2018-01-03 04:15:08 +01:00
// Copyright 2018 Frédéric Guillot. All rights reserved.
2017-11-20 06:10:04 +01:00
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
2018-08-25 06:51:50 +02:00
package crypto // import "miniflux.app/crypto"
2017-11-20 06:10:04 +01:00
import (
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
2017-11-20 06:10:04 +01:00
"fmt"
)
// HashFromBytes returns a SHA-256 checksum of the input.
func HashFromBytes(value []byte) string {
sum := sha256.Sum256(value)
return fmt.Sprintf("%x", sum)
}
// Hash returns a SHA-256 checksum of a string.
func Hash(value string) string {
return HashFromBytes([]byte(value))
}
// GenerateRandomBytes returns random bytes.
func GenerateRandomBytes(size int) []byte {
b := make([]byte, size)
if _, err := rand.Read(b); err != nil {
2017-11-25 01:09:10 +01:00
panic(err)
2017-11-20 06:10:04 +01:00
}
return b
}
// GenerateRandomString returns a random string.
func GenerateRandomString(size int) string {
return base64.URLEncoding.EncodeToString(GenerateRandomBytes(size))
}
// GenerateRandomStringHex returns a random hexadecimal string.
func GenerateRandomStringHex(size int) string {
return hex.EncodeToString(GenerateRandomBytes(size))
}