예제 #1
0
def generate_arb_discrete_samples(n, params):
    try:
        assert len(params) >= 1
        probs = [float(p) for p in params]
        assert math.isclose(sum(probs), 1.0, abs_tol=0.001)
    except (ValueError, AssertionError):
        abort("invalid arb_discrete parameters")

    for _ in range(n):
        yield arb_discrete(probs)
예제 #2
0
def generate_geometric_samples(n, params):
    try:
        assert len(params) == 1
        p = float(params[0])
        assert 0 <= p <= 1
    except (ValueError, AssertionError):
        abort("invalid geometric parameters")

    for _ in range(n):
        yield geometric(p)
예제 #3
0
def generate_poisson_samples(n, params):
    try:
        assert len(params) == 1
        L = float(params[0])
        assert L > 0
    except (ValueError, AssertionError):
        abort("invalid poisson parameters")

    for _ in range(n):
        yield poisson(L)
예제 #4
0
def generate_bernoulli_samples(n, params):
    try:
        assert len(params) == 1
        p = float(params[0])
        assert 0 <= p <= 1
    except (ValueError, AssertionError):
        abort("invalid bernoulli parameters")

    for _ in range(n):
        yield bernoulli(p)
예제 #5
0
def generate_exponential_samples(n, params):
    try:
        assert len(params) == 1
        L = float(params[0])
        assert L > 0
    except (ValueError, AssertionError):
        abort("invalid exponential parameters")

    for _ in range(n):
        yield exponential(L)
예제 #6
0
def generate_uniform_samples(n, params):
    try:
        assert len(params) == 2
        a = float(params[0])
        b = float(params[1])
        assert a <= b
    except (ValueError, AssertionError):
        abort("invalid uniform parameters")

    for _ in range(n):
        yield uniform(a, b)
예제 #7
0
def generate_gamma_samples(n, params):
    try:
        assert len(params) == 2
        a = int(params[0])
        L = float(params[1])
        assert a >= 1
        assert L > 0
    except (ValueError, AssertionError):
        abort("invalid gamma parameters")

    for _ in range(n):
        yield gamma(a, L)
예제 #8
0
def generate_neg_binomial_samples(n, params):
    try:
        assert len(params) == 2
        k = int(params[0])
        p = float(params[1])
        assert k >= 1
        assert 0 <= p <= 1
    except (ValueError, AssertionError):
        abort("invalid neg_binomial parameters")

    for _ in range(n):
        yield neg_binomial(k, p)
예제 #9
0
def main():
    n, dist, params = parse_arguments()

    # random seed
    seed = time.time()
    random.seed(seed)

    try:
        generator = getattr(sample_generators, f"generate_{dist}_samples")
        samples = generator(n, params)
    except KeyError:
        abort("distribution not recognized")

    print_report(samples)
예제 #10
0
def generate_normal_samples(n, params):
    try:
        assert len(params) == 2
        u = float(params[0])
        s = float(params[1])
        assert s >= 0
    except (ValueError, AssertionError):
        abort("invalid normal parameters")

    count = 0
    while count < n:
        for x in normal(u, s):
            yield x
            count += 1
예제 #11
0
def connection():
    from helpers import abort

    cnx = None
    try:
        cnx = Connect(host='timbess.net',
                      user='******',
                      password='******',
                      database='test')
        curr = cnx.cursor(cursor=DictCursor)
        return cnx, curr
    except MySQLError as e:
        if cnx is not None:
            cnx.close()
        current_app.logger.exception(e)
        abort(500, message='Failed to connect to database')
예제 #12
0
파일: 1.py 프로젝트: cromize/cryptopals
#!/usr/bin/env python3
import sys
import binascii

sys.path.append('..')
from helpers import abort, xor
from base64 import b64encode, b64decode

if __name__ == "__main__":
    if len(sys.argv) == 2:
        i1 = binascii.unhexlify(sys.argv[1])
        print(str(b64encode(i1), 'ascii'))
    elif len(sys.argv) == 3 and sys.argv[1] == '-d':
        o1 = b64decode(sys.argv[2])
        print(str(binascii.hexlify(o1), 'ascii'))
    else:
        abort(f'{sys.argv[0]}: [-d] input')
예제 #13
0
파일: 12.py 프로젝트: cromize/cryptopals
        except Exception:
            pass
    return matches


if __name__ == "__main__":
    if len(sys.argv) == 1:
        blocksize = ecb_determine_blocksize()
        is_ecb = aes_mode_oracle(oracle(32 * b"a", key))

        print("block size:", blocksize)
        print("is ECB:", is_ecb)
        print()

        if not is_ecb:
            abort("** cipher doesn't use ECB mode")

        cracked = b""
        written = 0
        while len(cracked) <= len(b64decode(append)):
            cracked_block = ecb_crack_block(blocksize, cracked or 16 * b"a",
                                            written)
            cracked += cracked_block
            written += len(cracked_block)

        print(pkcs7_unpad(cracked).decode())
        print("plain len: ", len(b64decode(append)))
        print("cracked len: ", len(cracked))

    else:
        abort(f'{sys.argv[0]}: filename')
예제 #14
0
파일: 10.py 프로젝트: cromize/cryptopals
#!/usr/bin/env python3
import sys
sys.path.append('..')
from helpers import abort
from block_crypto import aes_cbc_encrypt, aes_cbc_decrypt, pkcs7_pad
from base64 import b64encode, b64decode

if __name__ == "__main__":
    if len(sys.argv) == 4 and not sys.argv[1] == '-d':
        with open(sys.argv[1], 'rb') as f:
            plain = f.read().rstrip()
            key = sys.argv[2].encode()
            iv = bytes([int(sys.argv[3])])
            plain = pkcs7_pad(plain, 16)
            ciphertext = aes_cbc_encrypt(plain, key, iv)
            print(b64encode(ciphertext))

    elif len(sys.argv) == 5 and sys.argv[1] == '-d':
        with open(sys.argv[2], 'rb') as f:
            cipher = b64decode(f.read().rstrip())
            key = sys.argv[3].encode()
            iv = bytes([int(sys.argv[4])])
            plaintext = aes_cbc_decrypt(cipher, key, iv).decode()
            print(plaintext)
    else:
        abort(f'{sys.argv[0]}: [-d] filename password iv')
예제 #15
0
#!/usr/bin/env python3
import sys
import binascii
sys.path.append('..')
from helpers import abort, xor

if __name__ == "__main__":
  if len(sys.argv) == 3 and not sys.argv[1] == '-h':
    i1 = binascii.unhexlify(sys.argv[1])
    i2 = binascii.unhexlify(sys.argv[2])
    xored = xor(i1, i2)
    print(str(binascii.hexlify(xored), 'ascii'))
  elif len(sys.argv) == 4 and sys.argv[1] == '-h':
    i1 = binascii.unhexlify(sys.argv[2])
    i2 = binascii.unhexlify(sys.argv[3])
    xored = xor(i1, i2)
    print(str(xored, 'ascii'))
  else:
    abort(f'{sys.argv[0]}: [-h] input1 input2')

예제 #16
0
#!/usr/bin/env python3
import sys
import binascii
sys.path.append('..')
from helpers import abort
from base64 import b64decode
from xor import crack_multibyte_xor

if __name__ == "__main__":
    if len(sys.argv) == 2:
        with open(sys.argv[1]) as input_file:
            cipher = input_file.read().rstrip()
            cipher = b64decode(cipher)
            plaintext, key = crack_multibyte_xor(cipher)
            print(plaintext.decode())
            print("key: ", key)
    else:
        abort(f'{sys.argv[0]}: filename')
예제 #17
0
파일: 9.py 프로젝트: cromize/cryptopals
#!/usr/bin/env python3
import sys
sys.path.append('..')
from helpers import abort
from block_crypto import pkcs7_pad

if __name__ == "__main__":
    if len(sys.argv) == 3:
        padded = pkcs7_pad(sys.argv[1].encode(), int(sys.argv[2]))
        print(padded)
    else:
        abort(f'{sys.argv[0]}: text pad_length')
예제 #18
0
#!/usr/bin/env python3
import sys
import binascii
sys.path.append('..')
from helpers import abort, xor
from xor import crack_singlebyte_xor

if __name__ == "__main__":
    if len(sys.argv) == 2:
        plaintext = crack_singlebyte_xor(binascii.unhexlify(
            sys.argv[1]))[0].decode()
        print(plaintext)
    else:
        abort(f'{sys.argv[0]}: input')