|
|
@@ -30,8 +30,6 @@ const (
|
|
|
var (
|
|
|
ErrorInvalidUser = errors.New("Invalid User")
|
|
|
ErrorInvalidVerion = errors.New("Invalid Version")
|
|
|
-
|
|
|
- emptyIV = make([]byte, blockSize)
|
|
|
)
|
|
|
|
|
|
// VMessRequest implements the request message of VMess protocol. It only contains
|
|
|
@@ -70,7 +68,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
|
|
|
|
|
|
log.Debug("Read user hash: %v", buffer[:nBytes])
|
|
|
|
|
|
- userId, valid := r.vUserSet.GetUser(buffer[:nBytes])
|
|
|
+ userId, timeSec, valid := r.vUserSet.GetUser(buffer[:nBytes])
|
|
|
if !valid {
|
|
|
return nil, ErrorInvalidUser
|
|
|
}
|
|
|
@@ -80,7 +78,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- aesStream := cipher.NewCFBDecrypter(aesCipher, emptyIV)
|
|
|
+ aesStream := cipher.NewCFBDecrypter(aesCipher, core.TimestampHash(timeSec))
|
|
|
decryptor := v2io.NewCryptionReader(aesStream, reader)
|
|
|
|
|
|
if err != nil {
|
|
|
@@ -189,7 +187,7 @@ func NewVMessRequestWriter() *VMessRequestWriter {
|
|
|
|
|
|
func (w *VMessRequestWriter) Write(writer io.Writer, request *VMessRequest) error {
|
|
|
buffer := make([]byte, 0, 300)
|
|
|
- userHash := request.UserId.TimeRangeHash(30)
|
|
|
+ userHash, timeSec := request.UserId.TimeRangeHash(30)
|
|
|
|
|
|
log.Debug("Writing userhash: %v", userHash)
|
|
|
buffer = append(buffer, userHash...)
|
|
|
@@ -245,7 +243,7 @@ func (w *VMessRequestWriter) Write(writer io.Writer, request *VMessRequest) erro
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- aesStream := cipher.NewCFBEncrypter(aesCipher, emptyIV)
|
|
|
+ aesStream := cipher.NewCFBEncrypter(aesCipher, core.TimestampHash(timeSec))
|
|
|
cWriter := v2io.NewCryptionWriter(aesStream, writer)
|
|
|
|
|
|
_, err = writer.Write(buffer[0:encryptionBegin])
|