def test_padding_bytes_will_be_size_of_padding_when_padding_one_byte(self):
        pt = bytearray("YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(1, padded[-1])
    def test_padding_should_work_with_one_byte_to_pad(self):
        pt = bytearray("YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(16, len(padded))
    def test_padding_multiple_of_blocksize_should_have_correct_padding_bytes(self):
        pt = bytearray("XXXX----XXXX----YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(1, padded[-1])
    def test_padding_bytes_will_be_size_of_padding_when_padding_one_byte(self):
        pt = bytearray("YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(1, padded[-1])
Ejemplo n.º 5
0
    def create_encrypted_response(self, headers, code, reason, body, aes):
        response = 'HTTP/1.1 {0} {1}'.format(code, reason)
        response += '\r\n' + str(headers) + '\r\n\r\n' + body

        payload = aes.encrypt(utils.pkcs7_pad(response))
        
        return payload
    def test_padding_should_work_when_padding_a_block_of_right_length(self):
        pt = bytearray("YELLOW SUBMARINE")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(32, len(padded))
    def test_padding_should_work_with_one_byte_to_pad(self):
        pt = bytearray("YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(16, len(padded))
    def test_padding_should_work_when_padding_a_block_of_right_length(self):
        pt = bytearray("YELLOW SUBMARINE")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(32, len(padded))
Ejemplo n.º 9
0
    def create_encrypted_response(self, headers, code, reason, body, aes):
        response = 'HTTP/1.1 {0} {1}'.format(code, reason)
        response += '\r\n' + str(headers) + '\r\n\r\n' + body

        payload = aes.encrypt(utils.pkcs7_pad(response))

        return payload
    def test_padding_multiple_of_blocksize_should_have_correct_padding_bytes(
            self):
        pt = bytearray("XXXX----XXXX----YELLOW SUBMARIN")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(1, padded[-1])
    def test_when_padding_two_bytes_they_should_have_value_of_3(self):
        pt = bytearray("YELLOW SUBMAR")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(3, padded[-1])
        self.assertEquals(3, padded[-2])
        self.assertEquals(3, padded[-3])
    def test_when_padding_two_bytes_they_should_have_value_of_3(self):
        pt = bytearray("YELLOW SUBMAR")
        blocksize = 16

        padded = pkcs7_pad(pt, blocksize)

        self.assertEquals(3, padded[-1])
        self.assertEquals(3, padded[-2])
        self.assertEquals(3, padded[-3])
Ejemplo n.º 13
0
def oracle(plain):
    random.seed(1337)
    aes_key = ''.join(chr(random.randint(0, 255)) for _ in range(16))

    prefix_nbr = random.randint(0, 50)  # random count of bytes
    prefix = ''.join(chr(random.randint(0, 255)) for _ in range(prefix_nbr))

    p = prefix + plain + UNKNOWN
    p_pad = pkcs7_pad(p, 16)
    c = aes_encrypt_ecb(p_pad, aes_key)
    return c
Ejemplo n.º 14
0
    def create_payload(self, headers, method, uri, body, pubkey):
        rng = Random.new()
        key = rng.read(32)
        iv = rng.read(16)

        a = AES.new(key, AES.MODE_CBC, iv)
        request = '{0} {1} HTTP/1.1'.format(method, uri)
        request += '\r\n' + str(headers) + '\r\n\r\n' + body

        payload = a.encrypt(utils.pkcs7_pad(request))
        
        return payload, pubkey.encrypt(key + iv, os.urandom(256)), a
Ejemplo n.º 15
0
    def create_payload(self, headers, method, uri, body, pubkey):
        rng = Random.new()
        key = rng.read(32)
        iv = rng.read(16)

        a = AES.new(key, AES.MODE_CBC, iv)
        request = '{0} {1} HTTP/1.1'.format(method, uri)
        request += '\r\n' + str(headers) + '\r\n\r\n' + body

        payload = a.encrypt(utils.pkcs7_pad(request))

        return payload, pubkey.encrypt(key + iv, os.urandom(256)), a
Ejemplo n.º 16
0
def aes_encrypt(m, k, mode, iv = None):
    aes = AES.new(k, AES.MODE_ECB)
    c = ""

    # Add padding
    if len(m) % BLOCK_SIZE() != 0:
        m = m + pkcs7_pad(len(m), BLOCK_SIZE())

    if mode == "CBC": 
        if iv is None:
            raise ValueError("CBC mode requires an IV.")
        else:
            for i in range(0, len(m), BLOCK_SIZE()):
                block = xor(m[i:i + BLOCK_SIZE()], iv)
                iv = aes.encrypt(block)
                c = c + iv
            return c
    elif mode == "ECB":
        for i in range(0, len(m), BLOCK_SIZE()):
            c = c + aes.encrypt(m[i:i + BLOCK_SIZE()])
        return c
    else:
        raise ValueError("Incorrect mode used: " + mode)
Ejemplo n.º 17
0
Archivo: 9.py Proyecto: max644/matasano
import utils

print(b"YELLOW SUBMARINE\x04\x04\x04\x04" == utils.pkcs7_pad(
    b"YELLOW SUBMARINE", 20))