/****************************************************************************** * dom_mem_ops.c * * Code to handle memory related requests from domains eg. balloon driver. * * Copyright (c) 2003-2004, B Dragovic & K A Fraser. */ #include #include #include #include #include #include #include #include static long alloc_dom_mem(struct domain *d, unsigned long *extent_list, unsigned long nr_extents, unsigned int extent_order) { struct pfn_info *page; unsigned long i; if ( (extent_order != 0) && !IS_CAPABLE_PHYSDEV(current) ) { DPRINTK("Only I/O-capable domains may allocate > order-0 memory.\n"); return 0; } for ( i = 0; i < nr_extents; i++ ) { if ( unlikely((page = alloc_domheap_pages(d, extent_order)) == NULL) ) { DPRINTK("Could not allocate a frame\n"); return i; } /* Inform the domain of the new page's machine address. */ if ( unlikely(put_user(page_to_pfn(page), &extent_list[i]) != 0) ) return i; } return i; } static long free_dom_mem(struct domain *d, unsigned long *extent_list, unsigned long nr_extents, unsigned int extent_order) { struct pfn_info *page; unsigned long i, j, mpfn; for ( i = 0; i < nr_extents; i++ ) { if ( unlikely(get_user(mpfn, &extent_list[i]) != 0) ) return i; for ( j = 0; j < (1 << extent_order); j++ ) { if ( unlikely((mpfn + j) >= max_page) ) { DPRINTK("Domain %u page number out of range (%08lx>=%08lx)\n", d->domain, mpfn + j, max_page); return i; } page = &frame_table[mpfn + j]; if ( unlikely(!get_page(page, d)) ) { DPRINTK("Bad page free for domain %u\n", d->domain); return i; } if ( test_and_clear_bit(_PGC_guest_pinned, &page->u.inuse.count_info) ) put_page_and_type(page); if ( test_and_clear_bit(_PGC_allocated, &page->u.inuse.count_info) ) put_page(page); put_page(page); } } return i; } long do_dom_mem_op(unsigned int op, unsigned long *extent_list, unsigned long nr_extents, unsigned int extent_order) { if ( op == MEMOP_increase_reservation ) return alloc_dom_mem(current, extent_list, nr_extents, extent_order); if ( op == MEMOP_decrease_reservation ) return free_dom_mem(current, extent_list, nr_extents, extent_order); return -ENOSYS; } yptography/tree/tests/hazmat/primitives?id=d6b059885af9ddf36f464d9decd61a80db3ed96c'>primitives/test_arc4.py
blob: acd306b236f0da022665c055e9b60491132d7a61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.

from __future__ import absolute_import, division, print_function

import binascii
import os

import pytest

from cryptography.hazmat.backends.interfaces import CipherBackend
from cryptography.hazmat.primitives.ciphers import algorithms

from .utils import generate_stream_encryption_test
from ...utils import load_nist_vectors


@pytest.mark.supported(
    only_if=lambda backend: backend.cipher_supported(
        algorithms.ARC4("\x00" * 16), None
    ),
    skip_message="Does not support ARC4",
)
@pytest.mark.requires_backend_interface(interface=CipherBackend)
class TestARC4(object):
    test_rfc = generate_stream_encryption_test(
        load_nist_vectors,
        os.path.join("ciphers", "ARC4"),
        [
            "rfc-6229-40.txt",
            "rfc-6229-56.txt",
            "rfc-6229-64.txt",
            "rfc-6229-80.txt",
            "rfc-6229-128.txt",
            "rfc-6229-192.txt",
            "rfc-6229-256.txt",
        ],
        lambda key, **kwargs: algorithms.ARC4(binascii.unhexlify(key)),
    )