Skip to content

Instantly share code, notes, and snippets.

from subprocess import Popen, PIPE
import base64
import random
import re
import requests
import select
import socket
import string
import struct
import sys
tenpows = [10**i for i in range(1000)]
def cantor(hi):
res = 0
iters = 0
while hi > 0:
if iters % 100 == 0: print 'Progress: %d' % hi
iters += 1
hi_s = str(hi)
memo = {}
@niklasb
niklasb / whiteout.cpp
Last active September 5, 2016 20:13
Computational "proof" for solution of "whiteout" from Tokyo Westerns/MMA CTF 2016
// We want to prove that 5618427494400 is the maximum sigma in range 1..10^12
//
// The following algorithm will explore the entire search space and prune it
// using an upper bound for sigma, while considering the lower bound given by
// our example of sigma(995886571680) = 5618427494400
//
// We consider only primes up to sqrt(10^12). A single prime p is obviously
// not the solution because the sum of its divisors is
// p + 1 < 10^12 < 5618427494400
@niklasb
niklasb / pow.sage
Last active October 18, 2015 16:17
pow pow
import random
import socket
import subprocess
import hashlib
p = 195589859419604305972182309315916027436941011486827038011731627454673222943892428912238183097741291556130905026403820602489277325267966860236965344971798765628107804393049178848883490619438682809554522593445569865108465536075671326806730534242861732627383004696136244305728794347161769919436748766859796527723
g = pow(2, 2*4759647095086827597559114855685975263112106458932414012998147177848303887783492510354911068366203455488902018600593880874117783509946030773587965941, p)
gens = [pow(g,3**(336-i),p) for i in range(336)]
memo = {}
def p(n,k):
if (n,k) in memo: return memo[n,k]
if (n,k) == (0,0): return 1
if n < k or (n > 0 and k == 0): return 0
memo[n,k] = p(n-k,k) + p(n-1,k-1)
return memo[n,k]
def rsolve(coeff, values, rhs=0, nonhom_sol=0):
R.<x> = CC[]
f = 0
for i, c in enumerate(coeff):
f += c * x**i
h = 0
n = var('n')
cs = []
cnt = 0
@niklasb
niklasb / signer2.py
Created September 13, 2015 10:15
LCGsign
# from https://github.com/ctfs/write-ups-2015/tree/master/mma-ctf-2015/crypto/LCG-sign-400
from Crypto.Util.number import *
from hashlib import sha256
import random
import sys
import key
p = 267336782497463360204553349940982883027638137556242083062698936408269688347005688891456763746542347101087588816598516438470521580823690287174602955234443428763823316700034360179480125173290116352018408224011457777828019316565914911469044306734393178495267664516045383245055214352730843748251826260401437050527
q = 133668391248731680102276674970491441513819068778121041531349468204134844173502844445728381873271173550543794408299258219235260790411845143587301477617221714381911658350017180089740062586645058176009204112005728888914009658282957455734522153367196589247633832258022691622527607176365421874125913130200718525263
g = 2
@niklasb
niklasb / MonologSlackHandler.php
Last active September 1, 2015 17:28
Monolog handler for Slack's (new?) incoming webooks
class MonologSlackHandler extends \Monolog\Handler\MailHandler {
protected $hook_url;
protected $channel;
protected $username;
protected $icon;
/**
* @param string $hook_url The URL of your incoming web hook (e.g.
* https://hooks.slack.com/services/$token)
* @param string $channel Slack channel to post in (with leading # sign)
@niklasb
niklasb / bitonic.cpp
Created July 6, 2015 22:51
bitonic sort
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;
void make_leq(int& a, int& b) {
if (a > b) swap(a,b);
}
void bitonic(vector<int>& xs) {
int n = xs.size();
@niklasb
niklasb / lazy.sage
Created April 20, 2015 15:00
Solution for 'lazy' in PlaidCTF 2015
from ast import literal_eval
ciphertext = int(open("ciphertext.txt", 'rb').read())
pubkey = literal_eval(open("pubkey.txt", 'rb').read())
def mat(pubkey, ciphertext, B):
n = len(pubkey)
A = Matrix(ZZ,n+1,n+1)
for i in range(n):
A[i,i] = 1