You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Xray-core/proxy/vmess/aead/kdf.go

34 lines
521 B

4 years ago
package aead
import (
"crypto/hmac"
"crypto/sha256"
"hash"
)
type hash2 struct {
hash.Hash
}
4 years ago
func KDF(key []byte, path ...string) []byte {
hmacf := hmac.New(sha256.New, []byte(KDFSaltConstVMessAEADKDF))
for _, v := range path {
first := true
4 years ago
hmacf = hmac.New(func() hash.Hash {
if first {
first = false
return hash2{hmacf}
}
4 years ago
return hmacf
}, []byte(v))
}
hmacf.Write(key)
return hmacf.Sum(nil)
}
func KDF16(key []byte, path ...string) []byte {
r := KDF(key, path...)
return r[:16]
}