def setup(cls, transportConfig): """ Called once when obfsproxy starts. """ log.error( "\n\n################################################\n" "Do NOT rely on ScrambleSuit for strong security!\n" "################################################\n" ) util.setStateLocation(transportConfig.getStateLocation()) cls.weAreClient = transportConfig.weAreClient cls.weAreServer = not cls.weAreClient cls.weAreExternal = transportConfig.weAreExternal # If we are server and in managed mode, we should get the # shared secret from the server transport options. if cls.weAreServer and not cls.weAreExternal: cfg = transportConfig.getServerTransportOptions() if cfg and "password" in cfg: try: cls.uniformDHSecret = base64.b32decode(util.sanitiseBase32(cfg["password"])) except (TypeError, AttributeError) as error: raise base.TransportSetupFailed("Password could not be base32 decoded (%s)" % error) cls.uniformDHSecret = cls.uniformDHSecret.strip() if cls.weAreServer: if not hasattr(cls, "uniformDHSecret"): log.debug("Using fallback password for descriptor file.") srv = state.load() cls.uniformDHSecret = srv.fallbackPassword if len(cls.uniformDHSecret) != const.SHARED_SECRET_LENGTH: raise base.TransportSetupFailed( "Wrong password length (%d instead of %d)" % len(cls.uniformDHSecret), const.SHARED_SECRET_LENGTH ) if not const.STATE_LOCATION: raise base.TransportSetupFailed( "No state location set. If you are using external mode, " "please set it using the --data-dir switch." ) state.writeServerPassword(cls.uniformDHSecret)
def setup(cls, transportConfig): """ Called once when obfsproxy starts. """ log.error("\n\n################################################\n" "Do NOT rely on ScrambleSuit for strong security!\n" "################################################\n") util.setStateLocation(transportConfig.getStateLocation()) cls.weAreClient = transportConfig.weAreClient cls.weAreServer = not cls.weAreClient cls.weAreExternal = transportConfig.weAreExternal # If we are server and in managed mode, we should get the # shared secret from the server transport options. if cls.weAreServer and not cls.weAreExternal: cfg = transportConfig.getServerTransportOptions() if cfg and "password" in cfg: try: cls.uniformDHSecret = base64.b32decode( util.sanitiseBase32(cfg["password"])) except (TypeError, AttributeError) as error: raise base.TransportSetupFailed( "Password could not be base32 decoded (%s)" % error) cls.uniformDHSecret = cls.uniformDHSecret.strip() if cls.weAreServer: if not hasattr(cls, "uniformDHSecret"): log.debug("Using fallback password for descriptor file.") srv = state.load() cls.uniformDHSecret = srv.fallbackPassword if len(cls.uniformDHSecret) != const.SHARED_SECRET_LENGTH: raise base.TransportSetupFailed( "Wrong password length (%d instead of %d)" % len(cls.uniformDHSecret), const.SHARED_SECRET_LENGTH) if not const.STATE_LOCATION: raise base.TransportSetupFailed( "No state location set. If you are using external mode, " \ "please set it using the --data-dir switch.") state.writeServerPassword(cls.uniformDHSecret)