| 122 | } |
| 123 | |
| 124 | void 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 | |
| 161 | uint64_t isaac64_next_uint64(isaac64_ctx *_ctx){ |
| 162 | if(!_ctx->n)isaac64_update(_ctx); |
no test coverage detected