private void Output(ulong outputSequence, byte[] outBytes, int outOff, int outputBytes) { byte[] currentBytes = new byte[8]; ThreefishEngine.WordToBytes(outputSequence, currentBytes, 0); // Output is a sequence of UBI invocations all of which use and preserve the pre-output // state ulong[] outputWords = new ulong[chain.Length]; UbiInit(PARAM_TYPE_OUTPUT); this.ubi.Update(currentBytes, 0, currentBytes.Length, outputWords); ubi.DoFinal(outputWords); int wordsRequired = ((outputBytes + 8 - 1) / 8); for (int i = 0; i < wordsRequired; i++) { int toWrite = System.Math.Min(8, outputBytes - (i * 8)); if (toWrite == 8) { ThreefishEngine.WordToBytes(outputWords[i], outBytes, outOff + (i * 8)); } else { ThreefishEngine.WordToBytes(outputWords[i], currentBytes, 0); Array.Copy(currentBytes, 0, outBytes, outOff + (i * 8), toWrite); } } }
public Configuration(long outputSizeBits) { bytes[0] = 83; bytes[1] = 72; bytes[2] = 65; bytes[3] = 51; bytes[4] = 1; bytes[5] = 0; ThreefishEngine.WordToBytes((ulong)outputSizeBits, bytes, 8); }
public Configuration(long outputSizeBits) { // 0..3 = ASCII SHA3 bytes[0] = (byte)'S'; bytes[1] = (byte)'H'; bytes[2] = (byte)'A'; bytes[3] = (byte)'3'; // 4..5 = version number in LSB order bytes[4] = 1; bytes[5] = 0; // 8..15 = output length ThreefishEngine.WordToBytes((ulong)outputSizeBits, bytes, 8); }
private void Output(ulong outputSequence, byte[] outBytes, int outOff, int outputBytes) { byte[] array = new byte[8]; ThreefishEngine.WordToBytes(outputSequence, array, 0); ulong[] array2 = new ulong[chain.Length]; UbiInit(63); ubi.Update(array, 0, array.Length, array2); ubi.DoFinal(array2); int num = (outputBytes + 8 - 1) / 8; for (int i = 0; i < num; i++) { int num2 = Math.Min(8, outputBytes - i * 8); if (num2 == 8) { ThreefishEngine.WordToBytes(array2[i], outBytes, outOff + i * 8); continue; } ThreefishEngine.WordToBytes(array2[i], array, 0); global::System.Array.Copy((global::System.Array)array, 0, (global::System.Array)outBytes, outOff + i * 8, num2); } }
private void Output(ulong outputSequence, byte[] outBytes, int outOff, int outputBytes) { byte[] array = new byte[8]; ThreefishEngine.WordToBytes(outputSequence, array, 0); ulong[] array2 = new ulong[this.chain.Length]; this.UbiInit(63); this.ubi.Update(array, 0, array.Length, array2); this.ubi.DoFinal(array2); int num = (outputBytes + 8 - 1) / 8; for (int i = 0; i < num; i++) { int num2 = Math.Min(8, outputBytes - i * 8); if (num2 == 8) { ThreefishEngine.WordToBytes(array2[i], outBytes, outOff + i * 8); } else { ThreefishEngine.WordToBytes(array2[i], array, 0); Array.Copy(array, 0, outBytes, outOff + i * 8, num2); } } }