mirror of
https://git.um-react.app/um/cli.git
synced 2025-11-28 03:33:02 +00:00
feat(ximalaya): initial support
This commit is contained in:
40
algo/ximalaya/x3m_crypto.go
Normal file
40
algo/ximalaya/x3m_crypto.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package ximalaya
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
var x3mKey = [...]byte{
|
||||
'3', '9', '8', '9', 'd', '1', '1', '1',
|
||||
'a', 'a', 'd', '5', '6', '1', '3', '9',
|
||||
'4', '0', 'f', '4', 'f', 'c', '4', '4',
|
||||
'b', '6', '3', '9', 'b', '2', '9', '2',
|
||||
}
|
||||
|
||||
const x3mHeaderSize = 1024
|
||||
|
||||
var x3mScrambleTable = [x3mHeaderSize]uint16{}
|
||||
|
||||
//go:embed x3m_scramble_table.bin
|
||||
var x3mScrambleTableBytes []byte
|
||||
|
||||
func init() {
|
||||
if len(x3mScrambleTableBytes) != 2*x3mHeaderSize {
|
||||
panic("invalid x3m scramble table")
|
||||
}
|
||||
for i := range x3mScrambleTable {
|
||||
x3mScrambleTable[i] = binary.LittleEndian.Uint16(x3mScrambleTableBytes[i*2:])
|
||||
}
|
||||
}
|
||||
|
||||
// decryptX3MHeader decrypts the header of ximalaya .x3m file.
|
||||
// make sure input src is 1024 (x3mHeaderSize) bytes long.
|
||||
func decryptX3MHeader(src []byte) []byte {
|
||||
dst := make([]byte, len(src))
|
||||
for dstIdx := range src {
|
||||
srcIdx := x3mScrambleTable[dstIdx]
|
||||
dst[dstIdx] = src[srcIdx] ^ x3mKey[dstIdx%len(x3mKey)]
|
||||
}
|
||||
return dst
|
||||
}
|
||||
Reference in New Issue
Block a user