@@ -201,16 +201,14 @@ copy(src::AESNI4x) = copyto!(AESNI4x(), src)
201201== (r1:: AESNI4x , r2:: AESNI4x ) = unsafe_compare (r1, r2, UInt128, 2 ) &&
202202 r1. key == r2. key && r1. p == r2. p
203203
204- function get_key (o:: Union{AESNI1x, AESNI4x} ):: NTuple{11, __m128i}
204+ function get_key__m128i (o:: Union{AESNI1x, AESNI4x} ):: NTuple{11, __m128i}
205205 k = o. key
206206 (k. key1,k. key2,k. key3,k. key4,k. key5,k. key6,k. key7,k. key8,k. key9,k. key10,k. key11)
207207end
208- function get_ctr (o:: AESNI4x ):: Tuple{__m128i}
209- (o. ctr1,)
210- end
211- function get_ctr (o:: AESNI1x ):: Tuple{__m128i}
212- (o. ctr,)
213- end
208+ get_ctr__m128i (o:: AESNI4x ):: Tuple{__m128i} = (o. ctr1,)
209+ get_ctr__m128i (o:: AESNI1x ):: Tuple{__m128i} = (o. ctr,)
210+ get_key (o:: Union{AESNI1x, AESNI4x} ):: NTuple{11,UInt128} = map (UInt128, get_key__m128i (o))
211+ get_ctr (o:: Union{AESNI1x, AESNI4x} ):: Tuple{UInt128} = map (UInt128, get_ctr__m128i (o))
214212
215213@inline function aesni (key:: NTuple{11,__m128i} , ctr:: Tuple{__m128i} ):: Tuple{__m128i}
216214 key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11 = key
@@ -229,12 +227,25 @@ end
229227 (x,)
230228end
231229
230+ """
231+ aesni(key::NTuple{11,UInt128}, ctr::Tuple{UInt128})::Tuple{UInt128}
232+
233+ Functional variant of [`AESNI1x`](@ref) and [`AESNI4x`](@ref).
234+ This function if free of mutability and side effects.
235+ """
236+ @inline function aesni (key:: NTuple{11,UInt128} , ctr:: Tuple{UInt128} ):: Tuple{UInt128}
237+ k = map (__m128i, key)
238+ c = map (__m128i, ctr)
239+ map (UInt128,aesni (k,c))
240+ end
241+
242+
232243@inline function random123_r (r:: AESNI1x )
233- r. x = only (aesni (get_key (r), get_ctr (r)))
244+ r. x = only (aesni (get_key__m128i (r), get_ctr__m128i (r)))
234245 (UInt128 (r. x),)
235246end
236247
237248@inline function random123_r (r:: AESNI4x )
238- r. x = only (aesni (get_key (r), get_ctr (r)))
249+ r. x = only (aesni (get_key__m128i (r), get_ctr__m128i (r)))
239250 split_uint (UInt128 (r. x), UInt32)
240251end
0 commit comments