     override public func didRead(data: Data, from socket: RawTCPSocketProtocol) {
         super.didRead(data: data, from: socket)
 
-        switch internalStatus {
-        case .forwarding:
+        if readIV == nil {
+            readIV = data
+            readData()
+        } else {
             var data = streamObfuscater.input(data: data)
             decryptData(&data)
             delegate?.didRead(data: data, from: self)
-        case .readingIV:
-            // IV is only read when the first read is requested
-            readIV = data
-            internalStatus = .forwarding
-            readData()
-        default:
-            return
         }
     }
 

        switch internalStatus {
        case .forwarding:
            delegate?.didWrite(data: data, by: self)
        case .waitingIV:
            observer?.signal(.readyForForward(self))
            delegate?.didBecomeReadyToForwardWith(socket: self)
        default:

        encryptData(&requestData)
        helloData.append(requestData)

        internalStatus = .sendingIV
        write(rawData: helloData)
    }

