42 lines
642 B
Go
42 lines
642 B
Go
package telegram
|
|
|
|
import "errors"
|
|
|
|
var ErrNotEqual = errors.New("credentials hash and credentials data hash is not equal")
|
|
|
|
func (dc *DataCredentials) decrypt(d string) (data []byte, err error) {
|
|
secret, err := decodeField(dc.Secret)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
hash, err := decodeField(dc.DataHash)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
key, iv := decryptSecretHash(secret, hash)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
data, err = decodeField(d)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
data, err = decryptData(key, iv, data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if !match(hash, data) {
|
|
err = ErrNotEqual
|
|
}
|
|
|
|
offset := int(data[0])
|
|
data = data[offset:]
|
|
|
|
return
|
|
}
|