mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2026-04-22 23:57:20 +08:00
36 lines
813 B
Go
36 lines
813 B
Go
package dtls
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/base64"
|
|
"strings"
|
|
)
|
|
|
|
func CalculateAuthKey(enr, mac string) []byte {
|
|
data := enr + strings.ToUpper(mac)
|
|
hash := sha256.Sum256([]byte(data))
|
|
b64 := base64.StdEncoding.EncodeToString(hash[:6])
|
|
b64 = strings.ReplaceAll(b64, "+", "Z")
|
|
b64 = strings.ReplaceAll(b64, "/", "9")
|
|
b64 = strings.ReplaceAll(b64, "=", "A")
|
|
return []byte(b64)
|
|
}
|
|
|
|
func DerivePSK(enr string) []byte {
|
|
// DerivePSK derives the DTLS PSK from ENR
|
|
// TUTK SDK treats the PSK as a NULL-terminated C string, so if SHA256(ENR)
|
|
// contains a 0x00 byte, the PSK is truncated at that position.
|
|
hash := sha256.Sum256([]byte(enr))
|
|
pskLen := 32
|
|
for i := range 32 {
|
|
if hash[i] == 0x00 {
|
|
pskLen = i
|
|
break
|
|
}
|
|
}
|
|
|
|
psk := make([]byte, 32)
|
|
copy(psk[:pskLen], hash[:pskLen])
|
|
return psk
|
|
}
|