Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
goelp14
GitHub Repository: goelp14/easyctf-iv-problems
Path: blob/master/hidden_key/grader.py
671 views
1
import math
2
from Crypto.PublicKey import RSA
3
import binascii
4
import os
5
from io import StringIO
6
import binascii
7
8
import random as rdom
9
10
_mrpt_num_trials = 5
11
12
13
def gen_flag(random):
14
return "".join([random.choice("abcdefghijklmnopqrstuvwxyz1234567890") for _ in range(18)])
15
16
17
def generate_c(random):
18
flag = "easyctf{" + gen_flag(random) + "}"
19
M = int(binascii.hexlify(bytes(flag, "utf-8")), 16)
20
21
key = RSA.generate(2048)
22
n = key.n
23
e = key.e
24
p = key.p
25
q = key.q
26
27
phi = (p-1)*(q-1)
28
d = key.d
29
30
leak = 2*d+phi
31
32
c = pow(M, e, n)
33
txt = "n={}\ne={}\nc={}\n2d+phi(n)={}".format(n, e, c, leak)
34
# txt = 'n='+str(n)+'\ne= 65537\nc='+str(c)+'\n2d+phi(n)='+leak
35
return StringIO(txt)
36
37
38
def generate(random):
39
return dict(files={
40
"hiddenkey.txt": generate_c(random)
41
})
42
43
44
def grade(random, key):
45
flag = gen_flag(random)
46
if key.find(flag) >= 0:
47
return True, "Correct!"
48
return False, "Nope."
49
50