safing-jess/hashtools/hashtool.go
2020-01-13 00:15:58 +01:00

51 lines
1 KiB
Go

package hashtools
import (
"crypto"
"hash"
)
// HashTool holds generic information about a hash tool.
type HashTool struct {
Name string
Hash crypto.Hash
DigestSize int // in bytes
BlockSize int // in bytes
SecurityLevel int // approx. attack complexity as 2^n
Comment string
Author string
}
// New returns a new hash.Hash instance of the hash tool.
func (ht *HashTool) New() hash.Hash {
return ht.Hash.New()
}
// With uses the original HashTool as a template for a new HashTool and returns the new HashTool.
func (ht *HashTool) With(changes *HashTool) *HashTool {
if changes.Name == "" {
changes.Name = ht.Name
}
if changes.Hash == 0 {
changes.Hash = ht.Hash
}
if changes.DigestSize == 0 {
changes.DigestSize = ht.DigestSize
}
if changes.BlockSize == 0 {
changes.BlockSize = ht.BlockSize
}
if changes.SecurityLevel == 0 {
changes.SecurityLevel = ht.SecurityLevel
}
if changes.Comment == "" {
changes.Comment = ht.Comment
}
if changes.Author == "" {
changes.Author = ht.Author
}
return changes
}