private void CreateInitialState() { ulong[] array = (ulong[])SkeinEngine.INITIAL_STATES[SkeinEngine.VariantIdentifier(this.BlockSize, this.OutputSize)]; if (this.key == null && array != null) { this.chain = Arrays.Clone(array); } else { this.chain = new ulong[this.BlockSize / 8]; if (this.key != null) { this.UbiComplete(0, this.key); } this.UbiComplete(4, new SkeinEngine.Configuration((long)(this.outputSizeBytes * 8)).Bytes); } if (this.preMessageParameters != null) { for (int i = 0; i < this.preMessageParameters.Length; i++) { SkeinEngine.Parameter parameter = this.preMessageParameters[i]; this.UbiComplete(parameter.Type, parameter.Value); } } this.initialState = Arrays.Clone(this.chain); }
private void CopyIn(SkeinEngine engine) { ubi.Reset(engine.ubi); chain = Arrays.Clone(engine.chain, chain); initialState = Arrays.Clone(engine.initialState, initialState); key = Arrays.Clone(engine.key, key); preMessageParameters = Clone(engine.preMessageParameters, preMessageParameters); postMessageParameters = Clone(engine.postMessageParameters, postMessageParameters); }
private void CopyIn(SkeinEngine engine) { this.ubi.Reset(engine.ubi); this.chain = Arrays.Clone(engine.chain, this.chain); this.initialState = Arrays.Clone(engine.initialState, this.initialState); this.key = Arrays.Clone(engine.key, this.key); this.preMessageParameters = Clone(engine.preMessageParameters, this.preMessageParameters); this.postMessageParameters = Clone(engine.postMessageParameters, this.postMessageParameters); }
public void Reset(IMemoable other) { SkeinEngine skeinEngine = (SkeinEngine)other; if (BlockSize != skeinEngine.BlockSize || outputSizeBytes != skeinEngine.outputSizeBytes) { throw new MemoableResetException("Incompatible parameters in provided SkeinEngine."); } CopyIn(skeinEngine); }
public SkeinEngine(SkeinEngine engine) : this(engine.BlockSize * 8, engine.OutputSize * 8) { CopyIn(engine); }
public UBI(SkeinEngine engine, int blockSize) { this.engine = engine; currentBlock = new byte[blockSize]; message = new ulong[currentBlock.Length / 8]; }
/// <summary> /// Creates a SkeinEngine as an exact copy of an existing instance. /// </summary> public SkeinEngine(SkeinEngine engine) : this(engine.BlockSize * 8, engine.OutputSize * 8) { CopyIn(engine); }
private static void InitialState(int blockSize, int outputSize, ulong[] state) { SkeinEngine.INITIAL_STATES.Add(SkeinEngine.VariantIdentifier(blockSize / 8, outputSize / 8), state); }
public SkeinMac(SkeinMac mac) { this.engine = new SkeinEngine(mac.engine); }
/// <summary> /// Constructs a Skein MAC with an internal state size and output size. /// </summary> /// <param name="stateSizeBits">the internal state size in bits - one of <see cref="SKEIN_256"/> <see cref="SKEIN_512"/> or /// <see cref="SKEIN_1024"/>.</param> /// <param name="digestSizeBits">the output/MAC size to produce in bits, which must be an integral number of /// bytes.</param> public SkeinMac(int stateSizeBits, int digestSizeBits) { this.engine = new SkeinEngine(stateSizeBits, digestSizeBits); }
public SkeinDigest(SkeinDigest digest) { this.engine = new SkeinEngine(digest.engine); }
/// <summary> /// Constructs a Skein digest with an internal state size and output size. /// </summary> /// <param name="stateSizeBits">the internal state size in bits - one of <see cref="SKEIN_256"/> <see cref="SKEIN_512"/> or /// <see cref="SKEIN_1024"/>.</param> /// <param name="digestSizeBits">the output/digest size to produce in bits, which must be an integral number of /// bytes.</param> public SkeinDigest(int stateSizeBits, int digestSizeBits) { this.engine = new SkeinEngine(stateSizeBits, digestSizeBits); Init(null); }
static SkeinEngine() { SkeinEngine.INITIAL_STATES = Platform.CreateHashtable(); SkeinEngine.InitialState(256, 128, new ulong[] { 16217771249220022880uL, 9817190399063458076uL, 1155188648486244218uL, 14769517481627992514uL }); SkeinEngine.InitialState(256, 160, new ulong[] { 1450197650740764312uL, 3081844928540042640uL, 15310647011875280446uL, 3301952811952417661uL }); SkeinEngine.InitialState(256, 224, new ulong[] { 14270089230798940683uL, 9758551101254474012uL, 11082101768697755780uL, 4056579644589979102uL }); SkeinEngine.InitialState(256, 256, new ulong[] { 18202890402666165321uL, 3443677322885453875uL, 12915131351309911055uL, 7662005193972177513uL }); SkeinEngine.InitialState(512, 128, new ulong[] { 12158729379475595090uL, 2204638249859346602uL, 3502419045458743507uL, 13617680570268287068uL, 983504137758028059uL, 1880512238245786339uL, 11730851291495443074uL, 7602827311880509485uL }); SkeinEngine.InitialState(512, 160, new ulong[] { 2934123928682216849uL, 14047033351726823311uL, 1684584802963255058uL, 5744138295201861711uL, 2444857010922934358uL, 15638910433986703544uL, 13325156239043941114uL, 118355523173251694uL }); SkeinEngine.InitialState(512, 224, new ulong[] { 14758403053642543652uL, 14674518637417806319uL, 10145881904771976036uL, 4146387520469897396uL, 1106145742801415120uL, 7455425944880474941uL, 11095680972475339753uL, 11397762726744039159uL }); SkeinEngine.InitialState(512, 384, new ulong[] { 11814849197074935647uL, 12753905853581818532uL, 11346781217370868990uL, 15535391162178797018uL, 2000907093792408677uL, 9140007292425499655uL, 6093301768906360022uL, 2769176472213098488uL }); SkeinEngine.InitialState(512, 512, new ulong[] { 5261240102383538638uL, 978932832955457283uL, 10363226125605772238uL, 11107378794354519217uL, 6752626034097301424uL, 16915020251879818228uL, 11029617608758768931uL, 12544957130904423475uL }); }