qemu/tests/tcg/aarch64/system/pauth-3.c
<<
>>
Prefs
   1#include <inttypes.h>
   2#include <minilib.h>
   3
   4int main()
   5{
   6    /*
   7     * Test vector from QARMA paper (https://eprint.iacr.org/2016/444.pdf)
   8     * to verify one computation of the pauth_computepac() function,
   9     * which uses sbox2.
  10     *
  11     * Use PACGA, because it returns the most bits from ComputePAC.
  12     * We still only get the most significant 32-bits of the result.
  13     */
  14
  15    static const uint64_t d[5] = {
  16        0xfb623599da6e8127ull,
  17        0x477d469dec0b8762ull,
  18        0x84be85ce9804e94bull,
  19        0xec2802d4e0a488e9ull,
  20        0xc003b93999b33765ull & 0xffffffff00000000ull
  21    };
  22    uint64_t r;
  23
  24    asm("msr apgakeyhi_el1, %[w0]\n\t"
  25        "msr apgakeylo_el1, %[k0]\n\t"
  26        "pacga %[r], %[P], %[T]"
  27        : [r] "=r"(r)
  28        : [P] "r" (d[0]),
  29          [T] "r" (d[1]),
  30          [w0] "r" (d[2]),
  31          [k0] "r" (d[3]));
  32
  33    if (r == d[4]) {
  34        ml_printf("OK\n");
  35        return 0;
  36    } else {
  37        ml_printf("FAIL: %lx != %lx\n", r, d[4]);
  38        return 1;
  39    }
  40}
  41