mirror of
https://git.unlock-music.dev/um/cli.git
synced 2025-05-23 00:26:19 +08:00
31 lines
770 B
Go
31 lines
770 B
Go
package kgm
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"unlock-music.dev/cli/algo/common"
|
|
"unlock-music.dev/cli/algo/kgm/pc_kugou_db"
|
|
"unlock-music.dev/cli/algo/qmc"
|
|
)
|
|
|
|
func newKgmCryptoV5(header *header, kggDatabasePath string) (common.StreamDecoder, error) {
|
|
if header.AudioHash == "" {
|
|
return nil, fmt.Errorf("kgm v5: missing audio hash")
|
|
}
|
|
|
|
if kggDatabasePath == "" {
|
|
return nil, fmt.Errorf("kgm v5: missing kgg database path")
|
|
}
|
|
|
|
m, err := pc_kugou_db.CachedDumpEKey(kggDatabasePath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("kgm v5: decrypt kgg database: %w", err)
|
|
}
|
|
ekey, ok := m[header.AudioHash]
|
|
if !ok || ekey == "" {
|
|
return nil, fmt.Errorf("kgm v5: ekey missing from db (audio_hash=%s)", header.AudioHash)
|
|
}
|
|
|
|
return qmc.NewQmcCipherDecoderFromEKey([]byte(ekey))
|
|
}
|