# crossfire distributed brute force infrastructure takes the difficulty out of creating custom brute force jobs ## status ### base - 🚧 input space manipulation functions - βœ… data types: using data/integer-set, pattern (vector of integer-set) - βœ… basic manipulation functions - βœ… representation of input space as a flat integer - 🚧 #lang for configuration/definitions - (input) mode - stdio: user program gets input by stdio, integers separated by space, one per line - callback: input generator compiled into user program, user main calls `crossfire_main` with callback function that returns true or false - other modes?? - SMP: performed by crossfire or performed by the user code - "performed by user code" can also mean GPU, for example - 🚧 codegen for input generator (in C) - βœ… stdio mode - 🚧 callback mode - success reporting mechanism - low priority: configurable "character" type -- currently a "character" is a uint64\_t ### server: distribute jobs to workers - βœ… base definitions of input classes and how to divide them - βœ… dynamic slicing and scheduling based on agents' reported work rate - low priority: randomized input space distribution - low priority: store common configuration templates for clients - low priority: track upload/download progress - streaming interface for file transfers - βœ… accept submitted projects (with client-compiled input generator) and distribute to agents - βœ… low priority: support for multiple architectures - βœ… agent authentication - βœ… client authentication ### agent: accept and run jobs - βœ… securely connect to server - βœ… retrieve assigned tasks - handle smp correctly - βœ… report completions - 🚧 report errors - βœ… report successes - low priority: defer to external brute force program (eg, hashcat on GPU) - this could be implemented on top of the existing project format - low priority: support finding _all_ matching inputs for a project, rather than just the first one - the architecture currently doesn't stop on the first match so it could be a thing ### client: submit jobs and view progress - βœ…securely connect to server - command line interface - `crossfire new`: create new crossfire project - `crossfire test`: test project locally, replicates configuration of server with single local agent to debug issues - low priority: `crossfire node-test`: submit a mini-task to a node that has the necessary resources to debug issues - `crossfire submit`: submit task to server - `crossfire cancel`: cancels submitted task - `crossfire status`: check status of task (or network as a whole) - low priority: gui interface (racket/gui & framework time) ## misc ### porting currently only linux is supported for the server and agent. the server might run on macOS but it's not guaranteed. if you are interested in porting this to a new platform, take a look at `agent-deployment` for the embedded build of racket for the all-in-one agent binary, and perhaps create additional makefiles for other platforms. additionally, platform-specific racket code is marked with an `XXX` comment