MCPcopy Create free account
hub / github.com/NetHack/NetHack / isaac64_reseed

Function isaac64_reseed

src/isaac64.c:124–159  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

122}
123
124void isaac64_reseed(isaac64_ctx *_ctx,const unsigned char *_seed,int _nseed){
125 uint64_t *m;
126 uint64_t *r;
127 uint64_t x[8];
128 int i;
129 int j;
130 m=_ctx->m;
131 r=_ctx->r;
132 if(_nseed>ISAAC64_SEED_SZ_MAX)_nseed=ISAAC64_SEED_SZ_MAX;
133 for(i=0;i<_nseed>>3;i++){
134 r[i]^=(uint64_t)_seed[i<<3|7]<<56|(uint64_t)_seed[i<<3|6]<<48|
135 (uint64_t)_seed[i<<3|5]<<40|(uint64_t)_seed[i<<3|4]<<32|
136 (uint64_t)_seed[i<<3|3]<<24|(uint64_t)_seed[i<<3|2]<<16|
137 (uint64_t)_seed[i<<3|1]<<8|_seed[i<<3];
138 }
139 _nseed-=i<<3;
140 if(_nseed>0){
141 uint64_t ri;
142 ri=_seed[i<<3];
143 for(j=1;j<_nseed;j++)ri|=(uint64_t)_seed[i<<3|j]<<(j<<3);
144 r[i++]^=ri;
145 }
146 x[0]=x[1]=x[2]=x[3]=x[4]=x[5]=x[6]=x[7]=(uint64_t)0x9E3779B97F4A7C13ULL;
147 for(i=0;i<4;i++)isaac64_mix(x);
148 for(i=0;i<ISAAC64_SZ;i+=8){
149 for(j=0;j<8;j++)x[j]+=r[i+j];
150 isaac64_mix(x);
151 memcpy(m+i,x,sizeof(x));
152 }
153 for(i=0;i<ISAAC64_SZ;i+=8){
154 for(j=0;j<8;j++)x[j]+=m[i+j];
155 isaac64_mix(x);
156 memcpy(m+i,x,sizeof(x));
157 }
158 isaac64_update(_ctx);
159}
160
161uint64_t isaac64_next_uint64(isaac64_ctx *_ctx){
162 if(!_ctx->n)isaac64_update(_ctx);

Callers 1

isaac64_initFunction · 0.85

Calls 2

isaac64_mixFunction · 0.85
isaac64_updateFunction · 0.85

Tested by

no test coverage detected