mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-10-19 15:55:08 +00:00
87 lines
2.4 KiB
Go
87 lines
2.4 KiB
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package algorithm
|
|
|
|
import (
|
|
"crypto"
|
|
"fmt"
|
|
"hash"
|
|
)
|
|
|
|
// Hash is an official hash function algorithm. See RFC 4880, section 9.4.
|
|
type Hash interface {
|
|
// Id returns the algorithm ID, as a byte, of Hash.
|
|
Id() uint8
|
|
// Available reports whether the given hash function is linked into the binary.
|
|
Available() bool
|
|
// HashFunc simply returns the value of h so that Hash implements SignerOpts.
|
|
HashFunc() crypto.Hash
|
|
// New returns a new hash.Hash calculating the given hash function. New
|
|
// panics if the hash function is not linked into the binary.
|
|
New() hash.Hash
|
|
// Size returns the length, in bytes, of a digest resulting from the given
|
|
// hash function. It doesn't require that the hash function in question be
|
|
// linked into the program.
|
|
Size() int
|
|
// String is the name of the hash function corresponding to the given
|
|
// OpenPGP hash id.
|
|
String() string
|
|
}
|
|
|
|
// The following vars mirror the crypto/Hash supported hash functions.
|
|
var (
|
|
MD5 Hash = cryptoHash{1, crypto.MD5}
|
|
SHA1 Hash = cryptoHash{2, crypto.SHA1}
|
|
RIPEMD160 Hash = cryptoHash{3, crypto.RIPEMD160}
|
|
SHA256 Hash = cryptoHash{8, crypto.SHA256}
|
|
SHA384 Hash = cryptoHash{9, crypto.SHA384}
|
|
SHA512 Hash = cryptoHash{10, crypto.SHA512}
|
|
SHA224 Hash = cryptoHash{11, crypto.SHA224}
|
|
)
|
|
|
|
// HashById represents the different hash functions specified for OpenPGP. See
|
|
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-14
|
|
var (
|
|
HashById = map[uint8]Hash{
|
|
MD5.Id(): MD5,
|
|
SHA1.Id(): SHA1,
|
|
RIPEMD160.Id(): RIPEMD160,
|
|
SHA256.Id(): SHA256,
|
|
SHA384.Id(): SHA384,
|
|
SHA512.Id(): SHA512,
|
|
SHA224.Id(): SHA224,
|
|
}
|
|
)
|
|
|
|
// cryptoHash contains pairs relating OpenPGP's hash identifier with
|
|
// Go's crypto.Hash type. See RFC 4880, section 9.4.
|
|
type cryptoHash struct {
|
|
id uint8
|
|
crypto.Hash
|
|
}
|
|
|
|
// Id returns the algorithm ID, as a byte, of cryptoHash.
|
|
func (h cryptoHash) Id() uint8 {
|
|
return h.id
|
|
}
|
|
|
|
var hashNames = map[uint8]string{
|
|
MD5.Id(): "MD5",
|
|
SHA1.Id(): "SHA1",
|
|
RIPEMD160.Id(): "RIPEMD160",
|
|
SHA256.Id(): "SHA256",
|
|
SHA384.Id(): "SHA384",
|
|
SHA512.Id(): "SHA512",
|
|
SHA224.Id(): "SHA224",
|
|
}
|
|
|
|
func (h cryptoHash) String() string {
|
|
s, ok := hashNames[h.id]
|
|
if !ok {
|
|
panic(fmt.Sprintf("Unsupported hash function %d", h.id))
|
|
}
|
|
return s
|
|
}
|