feat: add seeded flag generation
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
import random
|
||||
import secrets
|
||||
import sys
|
||||
|
||||
def generate_flag(length):
|
||||
characters = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
||||
return "".join([random.choice(characters) for _ in range(length)])
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print("[Codegen]", *args, file=sys.stderr, **kwargs)
|
||||
|
||||
@@ -47,16 +50,22 @@ def get_check_code(flag_part, user_part, c_mangler):
|
||||
return random.choice(variations)
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
eprint(f"Usage: {sys.argv[0]} <flag_format> <flag_length>")
|
||||
if len(sys.argv) != 3 and len(sys.argv) != 4:
|
||||
eprint(f"Usage: {sys.argv[0]} <flag_format> <flag_length> [flag_seed]")
|
||||
exit(1)
|
||||
|
||||
# Flag prefix is not used, currently the flag is just used as-is
|
||||
flag_format = sys.argv[1]
|
||||
flag_len = int(sys.argv[2])
|
||||
|
||||
if len(sys.argv) >= 4:
|
||||
# We might have a seed
|
||||
flag_seed = sys.argv[3]
|
||||
if flag_seed.lower() != "false":
|
||||
random.seed(flag_seed)
|
||||
|
||||
# Generate a secret
|
||||
secret = secrets.token_urlsafe(flag_len)
|
||||
secret = generate_flag(flag_len)
|
||||
secret = flag_format.replace("FLAG_GOES_HERE", secret)
|
||||
|
||||
eprint(f"Generated Flag: {secret}")
|
||||
|
||||
Reference in New Issue
Block a user