public override void Update(BytesSegment bs) { bs.CheckAsParameter(); var pos = (uint)bs.Offset; var end = pos + (uint)bs.Len; fixed(Context *ctx = &this.ctx) fixed(byte *bytes = bs.Bytes) { while (pos < end) { var remainningKeystream = KeystreamBufferSize - keystreamBufferPos; if (remainningKeystream == 0) { keystreamBufferPos = 0; remainningKeystream = KeystreamBufferSize; NextKeystreamBuffer(ctx); } var count = end - pos; count = count < remainningKeystream ? count : remainningKeystream; NaiveUtils.XorBytesUnsafe(ctx->keyStreamBuffer + keystreamBufferPos, bytes + pos, count); pos += count; keystreamBufferPos += count; } } }
public override void Update(BytesSegment bs) { bs.CheckAsParameter(); var pos = bs.Offset; var end = pos + bs.Len; while (pos < end) { var remainningFeed = toBeFeedBack.Length - feedingPos; if (remainningFeed == 0) { feedingPos = 0; remainningFeed = toBeFeedBack.Length; EcbTransform.TransformBlock(toBeFeedBack, 0, toBeFeedBack.Length, feedingBack, 0); } var feedEnd = pos + remainningFeed; var thisBlockEnd = (feedEnd < end) ? feedEnd : end; var count = thisBlockEnd - pos; if (IsEncrypting) { NaiveUtils.XorBytes(feedingBack, feedingPos, bs.Bytes, pos, (uint)count); NaiveUtils.CopyBytes(bs.Bytes, pos, toBeFeedBack, feedingPos, count); } else { NaiveUtils.CopyBytes(bs.Bytes, pos, toBeFeedBack, feedingPos, count); NaiveUtils.XorBytes(feedingBack, feedingPos, bs.Bytes, pos, (uint)count); } pos += count; feedingPos += count; } }
public override void Update(BytesSegment bs) { bs.CheckAsParameter(); var pos = bs.Offset; var end = pos + bs.Len; var keyStreamBuf = this.keyStreamBuf; fixed(byte *bytes = bs.Bytes) { while (pos < end) { var remainningKeystream = KeystreamBufferSize - keystreamBufferPos; if (remainningKeystream == 0) { keystreamBufferPos = 0; remainningKeystream = KeystreamBufferSize; var ksb = keyStreamBuf; for (int i = 0; i < KsBlockCount; i++) { ksb[i] = counter; if (++counter.v1 == 0) { ++counter.v0; } Cipher.encrypt_64_128(keys, &ksb[i]); } } var count = end - pos; count = count < remainningKeystream ? count : remainningKeystream; NaiveUtils.XorBytesUnsafe((byte *)keyStreamBuf + keystreamBufferPos, bytes + pos, (uint32)count); pos += count; keystreamBufferPos += count; } } }
public override void Update(BytesSegment bs) { bs.CheckAsParameter(); var pos = (uint)bs.Offset; var len = (uint)bs.Len; fixed(byte *bytes = &bs.Bytes[pos]) { if (EnableMultiThreading && bs.Len >= 32 * 1024 && ThreadCount > 1) { UpdateMT(bytes, len, ThreadCount); } else { Update(bytes, len, keyStreamBuf, ref keystreamBufferPos, ref counter, keys); } } }