218 lines
4.0 KiB
Go
218 lines
4.0 KiB
Go
package dongle
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/sha1"
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
|
|
"github.com/golang-module/dongle/md2"
|
|
"golang.org/x/crypto/blake2b"
|
|
"golang.org/x/crypto/blake2s"
|
|
"golang.org/x/crypto/md4"
|
|
"golang.org/x/crypto/ripemd160"
|
|
"golang.org/x/crypto/sha3"
|
|
)
|
|
|
|
// ByMd2 encrypts by md2.
|
|
// 通过 md2 加密
|
|
func (e Encrypter) ByMd2() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
h := md2.New()
|
|
h.Write(e.src)
|
|
e.dst = h.Sum(nil)
|
|
return e
|
|
}
|
|
|
|
// ByMd4 encrypts by md4.
|
|
// 通过 md4 加密
|
|
func (e Encrypter) ByMd4() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
h := md4.New()
|
|
h.Write(e.src)
|
|
e.dst = h.Sum(nil)
|
|
return e
|
|
}
|
|
|
|
// ByMd5 encrypts by md5.
|
|
// 通过 md5 加密
|
|
func (e Encrypter) ByMd5() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
dst := md5.Sum(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
|
|
// BySha1 encrypts by sha1.
|
|
// 通过 sha1 加密
|
|
func (e Encrypter) BySha1() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
dst := sha1.Sum(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
|
|
// BySha3 encrypts by sha3.
|
|
// 通过 sha3 加密
|
|
func (e Encrypter) BySha3(size int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
switch size {
|
|
case 224:
|
|
dst := sha3.Sum224(e.src)
|
|
e.dst = dst[:]
|
|
case 256:
|
|
dst := sha3.Sum256(e.src)
|
|
e.dst = dst[:]
|
|
case 384:
|
|
dst := sha3.Sum384(e.src)
|
|
e.dst = dst[:]
|
|
case 512:
|
|
dst := sha3.Sum512(e.src)
|
|
e.dst = dst[:]
|
|
default:
|
|
e.Error = invalidHashSizeError()
|
|
}
|
|
return e
|
|
}
|
|
|
|
// BySha224 encrypts by sha224.
|
|
// 通过 sha224 加密
|
|
func (e Encrypter) BySha224() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
dst := sha256.Sum224(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
|
|
// BySha256 encrypts by sha256.
|
|
// 通过 sha256 加密
|
|
func (e Encrypter) BySha256() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
dst := sha256.Sum256(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
|
|
// BySha384 encrypts by sha384.
|
|
// 通过 sha384 加密
|
|
func (e Encrypter) BySha384() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
dst := sha512.Sum384(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
|
|
// BySha512 encrypts by sha512.
|
|
// 通过 sha512 加密
|
|
func (e Encrypter) BySha512(size ...int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
if len(size) == 0 {
|
|
dst := sha512.Sum512(e.src)
|
|
e.dst = dst[:]
|
|
return e
|
|
}
|
|
switch size[0] {
|
|
case 224:
|
|
dst := sha512.Sum512_224(e.src)
|
|
e.dst = dst[:]
|
|
case 256:
|
|
dst := sha512.Sum512_256(e.src)
|
|
e.dst = dst[:]
|
|
default:
|
|
e.Error = invalidHashSizeError()
|
|
}
|
|
return e
|
|
}
|
|
|
|
// ByShake128 encrypts by shake128.
|
|
// 通过 shake128 加密
|
|
func (e Encrypter) ByShake128(size int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
h := make([]byte, size/8)
|
|
sha3.ShakeSum128(h, e.src)
|
|
e.dst = h
|
|
return e
|
|
}
|
|
|
|
// ByShake256 encrypts by shake256.
|
|
// 通过 shake256 加密
|
|
func (e Encrypter) ByShake256(size int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
h := make([]byte, size/8)
|
|
sha3.ShakeSum256(h, e.src)
|
|
e.dst = h
|
|
return e
|
|
}
|
|
|
|
// ByRipemd160 encrypts by ripemd160.
|
|
// 通过 ripemd160 加密
|
|
func (e Encrypter) ByRipemd160() Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
h := ripemd160.New()
|
|
h.Write(e.src)
|
|
e.dst = h.Sum(nil)
|
|
return e
|
|
}
|
|
|
|
// ByBlake2b encrypts by blake2b.
|
|
// 通过 blake2b 加密
|
|
func (e Encrypter) ByBlake2b(size int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
switch size {
|
|
case 256:
|
|
dst := blake2b.Sum256(e.src)
|
|
e.dst = dst[:]
|
|
case 384:
|
|
dst := blake2b.Sum384(e.src)
|
|
e.dst = dst[:]
|
|
case 512:
|
|
dst := blake2b.Sum512(e.src)
|
|
e.dst = dst[:]
|
|
default:
|
|
e.Error = invalidHashSizeError()
|
|
}
|
|
return e
|
|
}
|
|
|
|
// ByBlake2s encrypts by blake2s.
|
|
// 通过 blake2s 加密
|
|
func (e Encrypter) ByBlake2s(size int) Encrypter {
|
|
if len(e.src) == 0 || e.Error != nil {
|
|
return e
|
|
}
|
|
switch size {
|
|
case 256:
|
|
dst := blake2s.Sum256(e.src)
|
|
e.dst = dst[:]
|
|
default:
|
|
e.Error = invalidHashSizeError()
|
|
}
|
|
return e
|
|
}
|