AES-128 with Matyas-Meyer-Oseas and AES-NI intrinsics as a PRG.
More...
|
| | Aes128MmoRaw (const uint8_t keys[][16]) |
| | Constructor.
|
| cuda::std::array< int4, mul/2 > | GenHalf (int4 seed, bool right) |
| | Return the selected half of Gen() with the same call requirements.
|
| cuda::std::array< cuda::std::array< int4, mul >, 8 > | Gen8 (cuda::std::span< const int4, 8 > seeds) |
| | Batched 8-seed version of Gen().
|
template<int mul>
class fss::prg::Aes128MmoRaw< mul >
AES-128 with Matyas-Meyer-Oseas and AES-NI intrinsics as a PRG.
Host-only. Device use of Gen(), GenHalf(), or Gen8() fails to build with an unresolved-extern error naming fss_host_only_Aes128MmoRaw_used_in_device_code.
- Template Parameters
-
◆ Aes128MmoRaw()
Constructor.
- Parameters
-
| keys | mul 16-byte AES-128 keys. |
◆ Gen8()
template<int mul>
| cuda::std::array< cuda::std::array< int4, mul >, 8 > fss::prg::Aes128MmoRaw< mul >::Gen8 |
( |
cuda::std::span< const int4, 8 > | seeds | ) |
|
|
inline |
Batched 8-seed version of Gen().
Applies the same MMO construction to 8 independent seeds under the same key schedules, so out[j] is bit-exact with Gen(seeds[j]). The 8 streams are interleaved as 8 x 128b lanes: each AES round key is loaded once and consumed by 8 consecutive aesenc calls.
Only for host side.
See the HasGen8 concept for the effect on the schemes that batch their PRG expansion through this member and for when a backend gains from it.
- Parameters
-
| seeds | 8 independent 16B seeds. |
- Returns
- For each seed j, the mul MMO output blocks out[j][i] = E_{keys[i]}(seeds[j]) ^ seeds[j].
◆ GenHalf()
template<int mul>
requires (mul > 0 && mul % 2 == 0)
Return the selected half of Gen() with the same call requirements.
- Parameters
-
| seed | Seed block to expand, the same input Gen() takes. |
| right | false selects the first half, true selects the second half. |
The documentation for this class was generated from the following files: