Refactor rres
This commit is contained in:
parent
8cd17bd7a9
commit
e9123b8b25
2 changed files with 94 additions and 74 deletions
166
raylib/rres.go
166
raylib/rres.go
|
@ -68,84 +68,18 @@ func LoadResource(reader io.ReadSeeker, rresID int, key []byte) (data rres.Data)
|
||||||
reader.Read(b)
|
reader.Read(b)
|
||||||
|
|
||||||
// Uncompress data
|
// Uncompress data
|
||||||
switch infoHeader.CompType {
|
data.Data, err = uncompress(b, int(infoHeader.CompType), int(infoHeader.UncompSize))
|
||||||
case rres.CompNone:
|
if err != nil {
|
||||||
data.Data = b
|
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
||||||
case rres.CompDeflate:
|
|
||||||
r := flate.NewReader(bytes.NewReader(b))
|
|
||||||
|
|
||||||
u := make([]byte, infoHeader.UncompSize)
|
|
||||||
r.Read(u)
|
|
||||||
|
|
||||||
data.Data = u
|
|
||||||
|
|
||||||
r.Close()
|
|
||||||
case rres.CompLZ4:
|
|
||||||
r := lz4.NewReader(bytes.NewReader(b))
|
|
||||||
|
|
||||||
u := make([]byte, infoHeader.UncompSize)
|
|
||||||
r.Read(u)
|
|
||||||
|
|
||||||
data.Data = u
|
|
||||||
case rres.CompLZMA2:
|
|
||||||
r, err := xz.NewReader(bytes.NewReader(b))
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
u := make([]byte, infoHeader.UncompSize)
|
|
||||||
r.Read(u)
|
|
||||||
|
|
||||||
data.Data = u
|
|
||||||
case rres.CompBZIP2:
|
|
||||||
r, err := bzip2.NewReader(bytes.NewReader(b), &bzip2.ReaderConfig{})
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
u := make([]byte, infoHeader.UncompSize)
|
|
||||||
r.Read(u)
|
|
||||||
|
|
||||||
data.Data = u
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decrypt data
|
// Decrypt data
|
||||||
switch infoHeader.CryptoType {
|
data.Data, err = decrypt(key, data.Data, int(infoHeader.CryptoType))
|
||||||
case rres.CryptoXOR:
|
if err != nil {
|
||||||
c, err := encrypt.NewXor(string(key))
|
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b := c.Encode(data.Data)
|
|
||||||
data.Data = b
|
|
||||||
case rres.CryptoAES:
|
|
||||||
b, err := decryptAES(key, data.Data)
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
data.Data = b
|
|
||||||
case rres.Crypto3DES:
|
|
||||||
b, err := decrypt3DES(key, data.Data)
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
data.Data = b
|
|
||||||
case rres.CryptoBlowfish:
|
|
||||||
b, err := decryptBlowfish(key, data.Data)
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
data.Data = b
|
|
||||||
case rres.CryptoXTEA:
|
|
||||||
b, err := decryptXTEA(key, data.Data)
|
|
||||||
if err != nil {
|
|
||||||
TraceLog(LogWarning, "[ID %d] %v", infoHeader.ID, err)
|
|
||||||
}
|
|
||||||
data.Data = b
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.Data != nil {
|
if data.Data != nil && len(data.Data) == int(infoHeader.UncompSize) {
|
||||||
TraceLog(LogInfo, "[ID %d] Resource data loaded successfully", infoHeader.ID)
|
TraceLog(LogInfo, "[ID %d] Resource data loaded successfully", infoHeader.ID)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -161,6 +95,92 @@ func LoadResource(reader io.ReadSeeker, rresID int, key []byte) (data rres.Data)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// decrypt data
|
||||||
|
func decrypt(key, data []byte, cryptoType int) ([]byte, error) {
|
||||||
|
switch cryptoType {
|
||||||
|
case rres.CryptoXOR:
|
||||||
|
c, err := encrypt.NewXor(string(key))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
b := c.Encode(data)
|
||||||
|
return b, nil
|
||||||
|
case rres.CryptoAES:
|
||||||
|
b, err := decryptAES(key, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
case rres.Crypto3DES:
|
||||||
|
b, err := decrypt3DES(key, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
case rres.CryptoBlowfish:
|
||||||
|
b, err := decryptBlowfish(key, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
case rres.CryptoXTEA:
|
||||||
|
b, err := decryptXTEA(key, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
default:
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// uncompress data
|
||||||
|
func uncompress(data []byte, compType, uncompSize int) ([]byte, error) {
|
||||||
|
switch compType {
|
||||||
|
case rres.CompNone:
|
||||||
|
return data, nil
|
||||||
|
case rres.CompDeflate:
|
||||||
|
r := flate.NewReader(bytes.NewReader(data))
|
||||||
|
|
||||||
|
u := make([]byte, uncompSize)
|
||||||
|
r.Read(u)
|
||||||
|
|
||||||
|
r.Close()
|
||||||
|
|
||||||
|
return u, nil
|
||||||
|
case rres.CompLZ4:
|
||||||
|
r := lz4.NewReader(bytes.NewReader(data))
|
||||||
|
|
||||||
|
u := make([]byte, uncompSize)
|
||||||
|
r.Read(u)
|
||||||
|
|
||||||
|
return u, nil
|
||||||
|
case rres.CompLZMA2:
|
||||||
|
r, err := xz.NewReader(bytes.NewReader(data))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
u := make([]byte, uncompSize)
|
||||||
|
r.Read(u)
|
||||||
|
|
||||||
|
return u, nil
|
||||||
|
case rres.CompBZIP2:
|
||||||
|
r, err := bzip2.NewReader(bytes.NewReader(data), &bzip2.ReaderConfig{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
u := make([]byte, uncompSize)
|
||||||
|
r.Read(u)
|
||||||
|
|
||||||
|
return u, nil
|
||||||
|
default:
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// unpad
|
// unpad
|
||||||
func unpad(src []byte) ([]byte, error) {
|
func unpad(src []byte) ([]byte, error) {
|
||||||
length := len(src)
|
length := len(src)
|
||||||
|
|
|
@ -442,7 +442,7 @@ func compress(data []byte, compType int) ([]byte, error) {
|
||||||
case rres.CompDeflate:
|
case rres.CompDeflate:
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
|
|
||||||
w, err := flate.NewWriter(buf, flate.BestCompression)
|
w, err := flate.NewWriter(buf, flate.DefaultCompression)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue