All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dk.alexandra.fresco.tools.mascot.prg.FieldElementPrgImpl Maven / Gradle / Ivy

The newest version!
package dk.alexandra.fresco.tools.mascot.prg;

import dk.alexandra.fresco.framework.builder.numeric.field.FieldDefinition;
import dk.alexandra.fresco.framework.builder.numeric.field.FieldElement;
import dk.alexandra.fresco.framework.util.AesCtrDrbg;
import dk.alexandra.fresco.framework.util.AesCtrDrbgFactory;
import dk.alexandra.fresco.framework.util.Drng;
import dk.alexandra.fresco.framework.util.DrngImpl;
import dk.alexandra.fresco.framework.util.StrictBitVector;
import java.util.Objects;

public class FieldElementPrgImpl implements FieldElementPrg {

  private final Drng drng;
  private FieldDefinition definition;

  /**
   * Creates new FieldElement prg.
   *
   * @param seed seed to the underlying DRNG.
   */
  public FieldElementPrgImpl(StrictBitVector seed, FieldDefinition definition) {
    this.definition = Objects.requireNonNull(definition);
    byte[] bytes = seed.toByteArray();
    if (bytes.length != AesCtrDrbg.SEED_LENGTH) {
      this.drng = new DrngImpl(AesCtrDrbgFactory.fromDerivedSeed(bytes));
    } else {
      this.drng = new DrngImpl(AesCtrDrbgFactory.fromRandomSeed(bytes));
    }
  }

  @Override
  public FieldElement getNext() {
    return definition.createElement(drng.nextBigInteger(definition.getModulus()));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy