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]
| }
|
|