Skip to content

ghostproxies/pulsefield

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

PulseField™

PulseField™

Table of Contents

Introduction

PulseField™ enables independent parallel sequences for efficient PRNGs (such as BlastCircuit™ and RecoilFuse™).

Furthermore, PulseField™ has a minimum period, hyper-fast speed and reversibility.

Author

PulseField™ was created by William Stafford Parsons as a product of GhostProxies.

License

PulseField™ is licensed with the BSD-3-Clause license.

Reference

The following C code block demonstrates an iterative PulseField™ procedure.

a = ROTATE_LEFT(a, CIRCULAR_SHIFT) ^ b;
b += INCREMENT;

Both a and b must have a matching bits length of BITS_LENGTH (or ) as a power of 2 that's a supported data type length greater than or equal to 8.

b must be a Weyl sequence (or a counter) that wraps around BITS_LENGTH bits.

Each instance within a set of parallel PRNG instances that use PulseField™ must adhere to the following 4 seeding requirements before generating parallel PRNG sequences.

  • CIRCULAR_SHIFT must be a number (greater than 0 and less than BITS_LENGTH) that's consistent among the set of parallel instances.
  • INCREMENT must be an odd number (greater than 0 and less than 2ⁿ) that's consistent among the set of parallel instances.
  • a must be a number that's unique among the set of parallel instances.
  • b must be a number that's consistent among the set of parallel instances.

PulseField™ can generate up to 2ⁿ parallel instances that each avoid full state collisions (for at least 2ⁿ output results) among the set of parallel instances.

For example, the following PulseField™ seed values are valid for a set of 3 parallel PRNG instances.

a: 0
b: 0

a: 1
b: 0

a: 2
b: 0

After seeding a set of parallel PRNG instances that use PulseField™, assigning a value (outside of an iterative PulseField™ procedure) to a, b, CIRCULAR_SHIFT or INCREMENT may void the aforementioned parallelism properties.

After each iterative PulseField™ procedure (depending on the specific PRNG implementation requirements), a should either be output directly or mixed into additional state (excluding b) that affects the PRNG output.

pulsefield.c is an exhaustive PulseField™ validation (when BITS_LENGTH is 8 and the stdint.h header defines an 8-bit, unsigned integral type for uint8_t).

About

PulseField™ divides parallel PRNG sequences.

Resources

License

Security policy

Stars

Watchers

Forks

Contributors

Languages