Hunter0x7c7
2022-08-11 a82f9cb69f63aaeba40c024960deda7d75b9fece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package aead
 
import (
    "crypto/hmac"
    "crypto/sha256"
    "hash"
)
 
func KDF(key []byte, path ...string) []byte {
    hmacCreator := &hMacCreator{value: []byte(KDFSaltConstVMessAEADKDF)}
    for _, v := range path {
        hmacCreator = &hMacCreator{value: []byte(v), parent: hmacCreator}
    }
    hmacf := hmacCreator.Create()
    hmacf.Write(key)
    return hmacf.Sum(nil)
}
 
type hMacCreator struct {
    parent *hMacCreator
    value  []byte
}
 
func (h *hMacCreator) Create() hash.Hash {
    if h.parent == nil {
        return hmac.New(sha256.New, h.value)
    }
    return hmac.New(h.parent.Create, h.value)
}
 
func KDF16(key []byte, path ...string) []byte {
    r := KDF(key, path...)
    return r[:16]
}