summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/openai/proofofwork.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g4f/Provider/openai/proofofwork.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/g4f/Provider/openai/proofofwork.py b/g4f/Provider/openai/proofofwork.py
new file mode 100644
index 00000000..e44ef6f7
--- /dev/null
+++ b/g4f/Provider/openai/proofofwork.py
@@ -0,0 +1,39 @@
+import random
+import hashlib
+import json
+import base64
+from datetime import datetime, timedelta, timezone
+
+def generate_proof_token(required: bool, seed: str, difficulty: str, user_agent: str):
+ if not required:
+ return
+
+ cores = [8, 12, 16, 24]
+ screens = [3000, 4000, 6000]
+
+ core = random.choice(cores)
+ screen = random.choice(screens)
+
+ # Get current UTC time
+ now_utc = datetime.now(timezone.utc)
+ # Convert UTC time to Eastern Time
+ now_et = now_utc.astimezone(timezone(timedelta(hours=-5)))
+
+ parse_time = now_et.strftime('%a, %d %b %Y %H:%M:%S GMT')
+
+ config = [core + screen, parse_time, 4294705152, 0, user_agent]
+
+ diff_len = len(difficulty) // 2
+
+ for i in range(100000):
+ config[3] = i
+ json_data = json.dumps(config)
+ base = base64.b64encode(json_data.encode()).decode()
+ hash_value = hashlib.sha3_512((seed + base).encode()).digest()
+
+ if hash_value.hex()[:diff_len] <= difficulty:
+ result = "gAAAAAB" + base
+ return result
+
+ fallback_base = base64.b64encode(f'"{seed}"'.encode()).decode()
+ return "gAAAAABwQ8Lk5FbGpA2NcR9dShT6gYjU7VxZ4D" + fallback_base