本文整理汇总了Golang中crypto.Hash类的典型用法代码示例。如果您正苦于以下问题:Golang Hash类的具体用法?Golang Hash怎么用?Golang Hash使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Hash类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Sign
func (s *Su3File) Sign(privkey *rsa.PrivateKey) error {
var hashType crypto.Hash
switch s.SignatureType {
case SIGTYPE_DSA:
hashType = crypto.SHA1
case SIGTYPE_ECDSA_SHA256, SIGTYPE_RSA_SHA256:
hashType = crypto.SHA256
case SIGTYPE_ECDSA_SHA384, SIGTYPE_RSA_SHA384:
hashType = crypto.SHA384
case SIGTYPE_ECDSA_SHA512, SIGTYPE_RSA_SHA512:
hashType = crypto.SHA512
default:
return fmt.Errorf("Unknown signature type.")
}
h := hashType.New()
h.Write(s.BodyBytes())
digest := h.Sum(nil)
sig, err := rsa.SignPKCS1v15(rand.Reader, privkey, 0, digest)
if nil != err {
return err
}
s.Signature = sig
return nil
}
开发者ID:MDrollette,项目名称:i2p-tools,代码行数:28,代码来源:su3.go
示例2: verifyDetachedSignature
func verifyDetachedSignature(key *packet.PublicKey, contentf, sigf io.Reader) error {
var hashFunc crypto.Hash
packets := packet.NewReader(sigf)
p, err := packets.Next()
if err != nil {
return err
}
switch sig := p.(type) {
case *packet.Signature:
hashFunc = sig.Hash
case *packet.SignatureV3:
hashFunc = sig.Hash
default:
return errors.UnsupportedError("unrecognized signature")
}
h := hashFunc.New()
if _, err := io.Copy(h, contentf); err != nil && err != io.EOF {
return err
}
switch sig := p.(type) {
case *packet.Signature:
err = key.VerifySignature(h, sig)
case *packet.SignatureV3:
err = key.VerifySignatureV3(h, sig)
default:
panic("unreachable")
}
return err
}
开发者ID:u-root,项目名称:u-root,代码行数:31,代码来源:gpgv.go
示例3: generateHash
func generateHash(algo HashAlgorithm, data []byte) ([]byte, crypto.Hash, error) {
var hashType crypto.Hash
switch algo {
case MD5:
hashType = crypto.MD5
case SHA1:
hashType = crypto.SHA1
case SHA224:
hashType = crypto.SHA224
case SHA256:
hashType = crypto.SHA256
case SHA384:
hashType = crypto.SHA384
case SHA512:
hashType = crypto.SHA512
default:
return nil, hashType, fmt.Errorf("unsupported Algorithm.Hash in signature: %v", algo)
}
hasher := hashType.New()
if _, err := hasher.Write(data); err != nil {
return nil, hashType, fmt.Errorf("failed to write to hasher: %v", err)
}
return hasher.Sum([]byte{}), hashType, nil
}
开发者ID:jfrazelle,项目名称:cfssl,代码行数:25,代码来源:signature.go
示例4: RsaOpensslSign
func RsaOpensslSign(pub *rsa.PrivateKey, h crypto.Hash, msg []byte) (s []byte, err error) {
h1 := h.New()
h1.Write(msg)
digest := h1.Sum(nil)
s, err = rsa.SignPKCS1v15(nil, pub, h, digest)
return
}
开发者ID:keysonZZZ,项目名称:kmg,代码行数:7,代码来源:rsa.go
示例5: verifyPayload
// Verify the given payload
func (ctx rsaEncrypterVerifier) verifyPayload(payload []byte, signature []byte, alg SignatureAlgorithm) error {
var hash crypto.Hash
switch alg {
case RS256, PS256:
hash = crypto.SHA256
case RS384, PS384:
hash = crypto.SHA384
case RS512, PS512:
hash = crypto.SHA512
default:
return ErrUnsupportedAlgorithm
}
hasher := hash.New()
// According to documentation, Write() on hash never fails
_, _ = hasher.Write(payload)
hashed := hasher.Sum(nil)
switch alg {
case RS256, RS384, RS512:
return rsa.VerifyPKCS1v15(ctx.publicKey, hash, hashed, signature)
case PS256, PS384, PS512:
return rsa.VerifyPSS(ctx.publicKey, hash, hashed, signature, nil)
}
return ErrUnsupportedAlgorithm
}
开发者ID:ossrs,项目名称:go-oryx-lib,代码行数:30,代码来源:asymmetric.go
示例6: sigSerializeUserAttribute
// sigSerializeUserAttribute calculates the user attribute packet hash
// TODO: clean up & contribute this to go.crypto/openpgp
func (pubkey *Pubkey) sigSerializeUserAttribute(uat *UserAttribute, hashFunc crypto.Hash) (h hash.Hash, err error) {
if !hashFunc.Available() {
return nil, errors.UnsupportedError("hash function")
}
h = hashFunc.New()
// Get user attribute opaque packet
var uatOpaque *packet.OpaquePacket
if uatOpaque, err = uat.GetOpaquePacket(); err != nil {
return
}
// Get public key opaque packet.
var pkOpaque *packet.OpaquePacket
if pkOpaque, err = pubkey.GetOpaquePacket(); err != nil {
return
}
// RFC 4880, section 5.2.4
// Write the signature prefix and public key contents to hash
pubkey.PublicKey.SerializeSignaturePrefix(h)
h.Write(pkOpaque.Contents)
// V4 certification hash
var buf [5]byte
// User attribute constant
buf[0] = 0xd1
// Big-endian length of user attribute contents
l := len(uatOpaque.Contents)
buf[1] = byte(l >> 24)
buf[2] = byte(l >> 16)
buf[3] = byte(l >> 8)
buf[4] = byte(l)
h.Write(buf[:])
// User attribute contents
h.Write(uatOpaque.Contents)
return
}
开发者ID:kisom,项目名称:hockeypuck,代码行数:37,代码来源:pubkey.go
示例7: RsaOpensslVerify
//这个接口应该和php版的openssl_verify在使用rsa公钥的时候有完全相同的输入输出,加密的坑简直太多了..
//msg是需要验证签名的消息,sig是签名之后生成的
func RsaOpensslVerify(pub *rsa.PublicKey, h crypto.Hash, msg []byte, sig []byte) (err error) {
h1 := h.New()
h1.Write(msg)
digest := h1.Sum(nil)
err = rsa.VerifyPKCS1v15(pub, h, digest, sig)
return
}
开发者ID:keysonZZZ,项目名称:kmg,代码行数:9,代码来源:rsa.go
示例8: setupKeys
// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as
// described in RFC 4253, section 6.4. direction should either be serverKeys
// (to setup server->client keys) or clientKeys (for client->server keys).
func (c *common) setupKeys(d direction, K, H, sessionId []byte, hashFunc crypto.Hash) error {
cipherMode := cipherModes[c.cipherAlgo]
macKeySize := 20
iv := make([]byte, cipherMode.ivSize)
key := make([]byte, cipherMode.keySize)
macKey := make([]byte, macKeySize)
h := hashFunc.New()
generateKeyMaterial(iv, d.ivTag, K, H, sessionId, h)
generateKeyMaterial(key, d.keyTag, K, H, sessionId, h)
generateKeyMaterial(macKey, d.macKeyTag, K, H, sessionId, h)
c.mac = truncatingMAC{12, hmac.NewSHA1(macKey)}
cipher, err := cipherMode.createCipher(key, iv)
if err != nil {
return err
}
c.cipher = cipher
return nil
}
开发者ID:davecheney,项目名称:ssh,代码行数:28,代码来源:transport.go
示例9: populateHash
func populateHash(hashFunc crypto.Hash, msg []byte) (hash.Hash, error) {
h := hashFunc.New()
if _, err := h.Write(msg); err != nil {
return nil, err
}
return h, nil
}
开发者ID:40a,项目名称:ejson,代码行数:7,代码来源:private_key_test.go
示例10: generate_digest2
func generate_digest2(hash crypto.Hash, key, src []byte) ([]byte, error) {
key1 := make([]byte, SNMP_EXTENDED_KEY_SIZ)
key2 := make([]byte, SNMP_EXTENDED_KEY_SIZ)
extkey := make([]byte, SNMP_EXTENDED_KEY_SIZ)
copy(extkey, key)
for i := 0; i < SNMP_EXTENDED_KEY_SIZ; i++ {
key1[i] = extkey[i] ^ 0x36
key2[i] = extkey[i] ^ 0x5c
}
calc := hash.New()
_, err := calc.Write(key1)
if nil != err {
return nil, err
}
_, err = calc.Write(src)
if nil != err {
return nil, err
}
internal := calc.Sum(nil)
calc = hash.New()
_, err = calc.Write(key2)
if nil != err {
return nil, err
}
_, err = calc.Write(internal)
if nil != err {
return nil, err
}
return calc.Sum(nil)[0:SNMP_USM_AUTH_SIZE], nil
}
开发者ID:runner-mei,项目名称:snmpclient,代码行数:33,代码来源:crypto.go
示例11: kexDH
// kexDH performs Diffie-Hellman key agreement on a ServerConnection.
func (s *ServerConn) kexDH(group *dhGroup, hashFunc crypto.Hash, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
packet, err := s.readPacket()
if err != nil {
return
}
var kexDHInit kexDHInitMsg
if err = unmarshal(&kexDHInit, packet, msgKexDHInit); err != nil {
return
}
y, err := rand.Int(s.config.rand(), group.p)
if err != nil {
return
}
Y := new(big.Int).Exp(group.g, y, group.p)
kInt, err := group.diffieHellman(kexDHInit.X, y)
if err != nil {
return nil, err
}
hostKeyBytes := MarshalPublicKey(priv.PublicKey())
h := hashFunc.New()
writeString(h, magics.clientVersion)
writeString(h, magics.serverVersion)
writeString(h, magics.clientKexInit)
writeString(h, magics.serverKexInit)
writeString(h, hostKeyBytes)
writeInt(h, kexDHInit.X)
writeInt(h, Y)
K := make([]byte, intLength(kInt))
marshalInt(K, kInt)
h.Write(K)
H := h.Sum(nil)
// H is already a hash, but the hostkey signing will apply its
// own key specific hash algorithm.
sig, err := signAndMarshal(priv, s.config.rand(), H)
if err != nil {
return nil, err
}
kexDHReply := kexDHReplyMsg{
HostKey: hostKeyBytes,
Y: Y,
Signature: sig,
}
packet = marshal(msgKexDHReply, kexDHReply)
err = s.writePacket(packet)
return &kexResult{
H: H,
K: K,
HostKey: hostKeyBytes,
Hash: hashFunc,
}, nil
}
开发者ID:AndreasBriese,项目名称:go.crypto,代码行数:61,代码来源:server.go
示例12: Thumbprint
// Thumbprint returns the JWK thumbprint using the indicated
// hashing algorithm, according to RFC 7638
func (k EcdsaPublicKey) Thumbprint(hash crypto.Hash) ([]byte, error) {
const tmpl = `{"crv":"%s","kty":"EC","x":"%s","y":"%s"}`
csize := k.Curve.Size()
// We need to truncate the buffer at curve size
xbuf := k.X.Bytes()
if len(xbuf) > csize {
xbuf = xbuf[:csize]
}
ybuf := k.Y.Bytes()
if len(ybuf) > csize {
ybuf = ybuf[:csize]
}
enc := base64.RawURLEncoding
x64 := make([]byte, enc.EncodedLen(len(xbuf)))
enc.Encode(x64, xbuf)
y64 := make([]byte, enc.EncodedLen(len(ybuf)))
enc.Encode(y64, ybuf)
v := fmt.Sprintf(tmpl, k.Curve.String(), x64, y64)
h := hash.New()
h.Write([]byte(v))
return h.Sum(nil), nil
}
开发者ID:lestrrat,项目名称:go-jwx,代码行数:27,代码来源:ecdsa.go
示例13: Sign
func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
var hashFunc crypto.Hash
switch key := s.pubKey.(type) {
case *rsaPublicKey, *dsaPublicKey:
hashFunc = crypto.SHA1
case *ecdsaPublicKey:
hashFunc = ecHash(key.Curve)
case ed25519PublicKey:
default:
return nil, fmt.Errorf("ssh: unsupported key type %T", key)
}
var digest []byte
if hashFunc != 0 {
h := hashFunc.New()
h.Write(data)
digest = h.Sum(nil)
} else {
digest = data
}
signature, err := s.signer.Sign(rand, digest, hashFunc)
if err != nil {
return nil, err
}
// crypto.Signer.Sign is expected to return an ASN.1-encoded signature
// for ECDSA and DSA, but that's not the encoding expected by SSH, so
// re-encode.
switch s.pubKey.(type) {
case *ecdsaPublicKey, *dsaPublicKey:
type asn1Signature struct {
R, S *big.Int
}
asn1Sig := new(asn1Signature)
_, err := asn1.Unmarshal(signature, asn1Sig)
if err != nil {
return nil, err
}
switch s.pubKey.(type) {
case *ecdsaPublicKey:
signature = Marshal(asn1Sig)
case *dsaPublicKey:
signature = make([]byte, 40)
r := asn1Sig.R.Bytes()
s := asn1Sig.S.Bytes()
copy(signature[20-len(r):20], r)
copy(signature[40-len(s):40], s)
}
}
return &Signature{
Format: s.pubKey.Type(),
Blob: signature,
}, nil
}
开发者ID:naunga,项目名称:vault,代码行数:59,代码来源:keys.go
示例14: checksumFor
func checksumFor(h crypto.Hash, payload []byte) ([]byte, error) {
if !h.Available() {
return nil, errors.New("requested hash function not available")
}
hash := h.New()
hash.Write(payload) // guaranteed not to error
return hash.Sum([]byte{}), nil
}
开发者ID:tjyang,项目名称:go-update,代码行数:8,代码来源:apply.go
示例15: SignBytes
// the core function of the Signer, generates the raw hmac of he bytes.
func (p *signer) SignBytes(h crypto.Hash, buf []byte) (signature []byte, err os.Error) {
hasher := hmac.New(func() hash.Hash { return h.New() }, p.secretAccessKey)
_, err = hasher.Write(buf)
if err == nil {
signature = hasher.Sum()
}
return
}
开发者ID:pombredanne,项目名称:dsocial.go,代码行数:9,代码来源:signer.go
示例16: ToDS
// ToDS converts a DNSKEY record to a DS record.
func (k *DNSKEY) ToDS(h uint8) *DS {
if k == nil {
return nil
}
ds := new(DS)
ds.Hdr.Name = k.Hdr.Name
ds.Hdr.Class = k.Hdr.Class
ds.Hdr.Rrtype = TypeDS
ds.Hdr.Ttl = k.Hdr.Ttl
ds.Algorithm = k.Algorithm
ds.DigestType = h
ds.KeyTag = k.KeyTag()
keywire := new(dnskeyWireFmt)
keywire.Flags = k.Flags
keywire.Protocol = k.Protocol
keywire.Algorithm = k.Algorithm
keywire.PublicKey = k.PublicKey
wire := make([]byte, DefaultMsgSize)
n, err := PackStruct(keywire, wire, 0)
if err != nil {
return nil
}
wire = wire[:n]
owner := make([]byte, 255)
off, err1 := PackDomainName(strings.ToLower(k.Hdr.Name), owner, 0, nil, false)
if err1 != nil {
return nil
}
owner = owner[:off]
// RFC4034:
// digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA);
// "|" denotes concatenation
// DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key.
// digest buffer
digest := append(owner, wire...) // another copy
var hash crypto.Hash
switch h {
case SHA1:
hash = crypto.SHA1
case SHA256:
hash = crypto.SHA256
case SHA384:
hash = crypto.SHA384
case SHA512:
hash = crypto.SHA512
default:
return nil
}
s := hash.New()
s.Write(digest)
ds.Digest = hex.EncodeToString(s.Sum(nil))
return ds
}
开发者ID:GaizkaRubio,项目名称:mesos-dns,代码行数:59,代码来源:dnssec.go
示例17: SignBytes
// the core function of the Signer, generates the raw hmac of he bytes.
func (self *Signer) SignBytes(h crypto.Hash, buff []byte) (sig []byte, err error) {
hh := hmac.New(func() hash.Hash {
return h.New()
}, self.secretAccessKey)
_, err = hh.Write(buff)
if err == nil {
sig = hh.Sum(nil)
}
return
}
开发者ID:ncw,项目名称:GoAWS,代码行数:11,代码来源:signer.go
示例18: Sign
func (pkcs1v15 *pkcs1v15Sign) Sign(src []byte, hash crypto.Hash, prk *rsa.PrivateKey) ([]byte, error) {
if !hash.Available() {
return nil, errors.New("unsupport hash type")
}
h := hash.New()
h.Write(src)
hashed := h.Sum(nil)
return rsa.SignPKCS1v15(rand.Reader, prk, hash, hashed)
}
开发者ID:89hmdys,项目名称:toast,代码行数:10,代码来源:mode.go
示例19: keySignatureHash
// keySignatureHash returns a Hash of the message that needs to be signed for
// pk to assert a subkey relationship to signed.
func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) {
if !hashFunc.Available() {
return nil, errors.UnsupportedError("hash function")
}
h = hashFunc.New()
updateKeySignatureHash(pk, signed, h)
return
}
开发者ID:qbit,项目名称:client,代码行数:12,代码来源:public_key.go
示例20: userIdSignatureHash
// userIdSignatureHash returns a Hash of the message that needs to be signed
// to assert that pk is a valid key for id.
func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) {
if !hashFunc.Available() {
return nil, errors.UnsupportedError("hash function")
}
h = hashFunc.New()
updateUserIdSignatureHash(id, pk, h)
return
}
开发者ID:qbit,项目名称:client,代码行数:12,代码来源:public_key.go
注:本文中的crypto.Hash类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论