mirror of https://github.com/cbeuw/Cloak
Make sure times are UTC and correctly subtract the timestamp window from the server time. (#134)
This commit is contained in:
parent
0f6e0d37b5
commit
b7e7bfb314
|
|
@ -33,7 +33,7 @@ func makeAuthenticationPayload(authInfo AuthInfo) (ret authenticationPayload, sh
|
||||||
copy(plaintext, authInfo.UID)
|
copy(plaintext, authInfo.UID)
|
||||||
copy(plaintext[16:28], authInfo.ProxyMethod)
|
copy(plaintext[16:28], authInfo.ProxyMethod)
|
||||||
plaintext[28] = authInfo.EncryptionMethod
|
plaintext[28] = authInfo.EncryptionMethod
|
||||||
binary.BigEndian.PutUint64(plaintext[29:37], uint64(authInfo.WorldState.Now().Unix()))
|
binary.BigEndian.PutUint64(plaintext[29:37], uint64(authInfo.WorldState.Now().UTC().Unix()))
|
||||||
binary.BigEndian.PutUint32(plaintext[37:41], authInfo.SessionId)
|
binary.BigEndian.PutUint32(plaintext[37:41], authInfo.SessionId)
|
||||||
|
|
||||||
if authInfo.Unordered {
|
if authInfo.Unordered {
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ func decryptClientInfo(fragments authFragments, serverTime time.Time) (info Clie
|
||||||
|
|
||||||
timestamp := int64(binary.BigEndian.Uint64(plaintext[29:37]))
|
timestamp := int64(binary.BigEndian.Uint64(plaintext[29:37]))
|
||||||
clientTime := time.Unix(timestamp, 0)
|
clientTime := time.Unix(timestamp, 0)
|
||||||
if !(clientTime.After(serverTime.Truncate(timestampTolerance)) && clientTime.Before(serverTime.Add(timestampTolerance))) {
|
if !(clientTime.After(serverTime.Add(-timestampTolerance)) && clientTime.Before(serverTime.Add(timestampTolerance))) {
|
||||||
err = fmt.Errorf("%v: received timestamp %v", ErrTimestampOutOfWindow, timestamp)
|
err = fmt.Errorf("%v: received timestamp %v", ErrTimestampOutOfWindow, timestamp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -77,7 +77,7 @@ func AuthFirstPacket(firstPacket []byte, transport Transport, sta *State) (info
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err = decryptClientInfo(fragments, sta.WorldState.Now())
|
info, err = decryptClientInfo(fragments, sta.WorldState.Now().UTC())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debug(err)
|
log.Debug(err)
|
||||||
err = fmt.Errorf("%w: %v", ErrBadDecryption, err)
|
err = fmt.Errorf("%w: %v", ErrBadDecryption, err)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue