package ssh
import (
"crypto/hmac"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
"hash"
)
type macMode struct {
keySize int
etm bool
new func (key []byte ) hash .Hash
}
type truncatingMAC struct {
length int
hmac hash .Hash
}
func (t truncatingMAC ) Write (data []byte ) (int , error ) {
return t .hmac .Write (data )
}
func (t truncatingMAC ) Sum (in []byte ) []byte {
out := t .hmac .Sum (in )
return out [:len (in )+t .length ]
}
func (t truncatingMAC ) Reset () {
t .hmac .Reset ()
}
func (t truncatingMAC ) Size () int {
return t .length
}
func (t truncatingMAC ) BlockSize () int { return t .hmac .BlockSize () }
var macModes = map [string ]*macMode {
"hmac-sha2-512-etm@openssh.com" : {64 , true , func (key []byte ) hash .Hash {
return hmac .New (sha512 .New , key )
}},
"hmac-sha2-256-etm@openssh.com" : {32 , true , func (key []byte ) hash .Hash {
return hmac .New (sha256 .New , key )
}},
"hmac-sha2-512" : {64 , false , func (key []byte ) hash .Hash {
return hmac .New (sha512 .New , key )
}},
"hmac-sha2-256" : {32 , false , func (key []byte ) hash .Hash {
return hmac .New (sha256 .New , key )
}},
"hmac-sha1" : {20 , false , func (key []byte ) hash .Hash {
return hmac .New (sha1 .New , key )
}},
"hmac-sha1-96" : {20 , false , func (key []byte ) hash .Hash {
return truncatingMAC {12 , hmac .New (sha1 .New , key )}
}},
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .