2020-11-25 13:01:53 +02:00
|
|
|
package aead
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/hmac"
|
|
|
|
"crypto/sha256"
|
|
|
|
"hash"
|
|
|
|
)
|
|
|
|
|
2021-02-17 05:02:03 +02:00
|
|
|
type hash2 struct {
|
|
|
|
hash.Hash
|
|
|
|
}
|
|
|
|
|
2020-11-25 13:01:53 +02:00
|
|
|
func KDF(key []byte, path ...string) []byte {
|
|
|
|
hmacf := hmac.New(sha256.New, []byte(KDFSaltConstVMessAEADKDF))
|
|
|
|
|
|
|
|
for _, v := range path {
|
2021-02-17 05:02:03 +02:00
|
|
|
first := true
|
2020-11-25 13:01:53 +02:00
|
|
|
hmacf = hmac.New(func() hash.Hash {
|
2021-02-17 05:02:03 +02:00
|
|
|
if first {
|
|
|
|
first = false
|
|
|
|
return hash2{hmacf}
|
|
|
|
}
|
2020-11-25 13:01:53 +02:00
|
|
|
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]
|
|
|
|
}
|