$ nc 111.186.59.11 16256 Show me your computation: 2^(2^10839575) mod 18430349691130984455653758459763818735123125315616520868044937078564476220884826010073662755433151553014915091221715272584999168440833812257356157301435273413022448333856092986075794460810348537912091730922337038551649739290135460889939415385861839125461043205821543512247526910812418671832464041927757236703 = ? You have 10 seconds. gogogo! Your answer:
from pwn import * from tqdm import tqdm context.log_level = 'debug' import gmpy2
deffast_mod(e,n): i_2 = 2**(2**0) result = 1 for _ in tqdm(range(1,e)): i_2 = (i_2 << 1 ) % n result = (result * i_2) % n return (result % n)
p = remote("111.186.59.11",16256)
print(p.recvline()) line = p.recvline() e = int(line.split(b"^")[2].split(b")")[0]) n = int(line.split(b"mod")[1].split(b"=")[0]) print(e,n) # result = gmpy2.powmod(2,2**e,n) result = fast_mod(e,n) print(result) p.recv() p.sendline(str(result)) p.interactive()
voidmain(int argc, char **argv){ int intpow = atoi(argv[1]); constchar *str = argv[2]; mpz_t a,b,c,d,base; mpz_init_set_ui(base,2U); //No way around this. You must initialize every mpz_t type whenever you want to use them. mpz_inits(a,b,c,d,NULL); mpz_set_ui(a,2U); mpz_set_str(c,str,10); mpz_pow_ui(b,base,intpow); //Just change the numbers I guess. mpz_powm(d,a,b,c); //d will give you the answer. gmp_printf("%Zd\n",d); //Do you need this o.o }