mirror of
https://github.com/fhmq/hmq.git
synced 2026-09-01 23:34:52 +00:00
Plugins support (#46)
* modify * update * add acl * add feature * update dockerfile * add deploy * update * update * plugins * plugins * update * update * update * fixed * remove * fixed * add log * update * fixed * update * fix config * add http api * add http api * resp * add config for work chan * update * fixed * update * disable trace * fixed * change acl * fixed * fixed res * dd * dd * ddd * dd * update * fixed * update * add * fixed * update key * add log * update * format * update * update auth * update * update readme * added * update * fixed * fixed * fix * upade * update * update
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
package rfc4757
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"golang.org/x/crypto/md4"
|
||||
)
|
||||
|
||||
// StringToKey returns a key derived from the string provided according to the definition in RFC 4757.
|
||||
func StringToKey(secret string) ([]byte, error) {
|
||||
b := make([]byte, len(secret)*2, len(secret)*2)
|
||||
for i, r := range secret {
|
||||
u := fmt.Sprintf("%04x", r)
|
||||
c, err := hex.DecodeString(u)
|
||||
if err != nil {
|
||||
return []byte{}, errors.New("character could not be encoded")
|
||||
}
|
||||
// Swap round the two bytes to make little endian as we put into byte slice
|
||||
b[2*i] = c[1]
|
||||
b[2*i+1] = c[0]
|
||||
}
|
||||
r := bytes.NewReader(b)
|
||||
h := md4.New()
|
||||
_, err := io.Copy(h, r)
|
||||
if err != nil {
|
||||
return []byte{}, err
|
||||
}
|
||||
return h.Sum(nil), nil
|
||||
}
|
||||
|
||||
func deriveKeys(key, checksum []byte, usage uint32, export bool) (k1, k2, k3 []byte) {
|
||||
//if export {
|
||||
// L40 := make([]byte, 14, 14)
|
||||
// copy(L40, []byte(`fortybits`))
|
||||
// k1 = HMAC(key, L40)
|
||||
//} else {
|
||||
// tb := MessageTypeBytes(usage)
|
||||
// k1 = HMAC(key, tb)
|
||||
//}
|
||||
//k2 = k1[:16]
|
||||
//if export {
|
||||
// mask := []byte{0xAB,0xAB,0xAB,0xAB,0xAB,0xAB,0xAB,0xAB,0xAB}
|
||||
// copy(k1[7:16], mask)
|
||||
//}
|
||||
//k3 = HMAC(k1, checksum)
|
||||
//return
|
||||
k1 = key
|
||||
k2 = HMAC(k1, UsageToMSMsgType(usage))
|
||||
k3 = HMAC(k2, checksum)
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user