예제 #1
0
            private void ChunkTranslate(DedupBasicChunkInfo chunk)
            {
                Contract.Assert(_currentBuffer != null);
                Contract.Assert(chunk.m_nChunkLength != 0);
                Contract.Assert(_currentBuffer.Value.Array != null);

                byte[] hash = _parent._shaHasher.ComputeHash(
                    _currentBuffer.Value.Array,
                    _currentBuffer.Value.Offset + (int)chunk.m_nStartChunk,
                    (int)chunk.m_nChunkLength);

                _chunkCallback(new ChunkInfo(chunk.m_nStartChunk, (uint)chunk.m_nChunkLength, hash.Take(32).ToArray()));
            }
예제 #2
0
            private void ChunkTranslate(DedupBasicChunkInfo chunk)
            {
                if (chunk.m_nStartChunk == 0 && chunk.m_nChunkLength == 0)
                {
                    return;
                }

                byte[] hash;
                if (chunk.m_nStartChunk < _bufferFileOffset)
                {
                    ulong chunkEnd = chunk.m_nStartChunk + chunk.m_nChunkLength;

                    if (chunkEnd < _bufferFileOffset)
                    {
                        hash = _parent._shaHasher.ComputeHash(
                            _lastPushBuffer.Value.Value,
                            (int)(chunk.m_nStartChunk - _lastBufferFileOffset),
                            (int)chunk.m_nChunkLength);
                    }
                    else
                    {
                        _parent._shaHasher.TransformBlock(
                            _lastPushBuffer.Value.Value,
                            (int)(chunk.m_nStartChunk - _lastBufferFileOffset),
                            (int)(_bufferFileOffset - chunk.m_nStartChunk),
                            null,
                            0);

                        int remainingChunkBytes = (int)(chunkEnd - _bufferFileOffset);
                        _parent._shaHasher.TransformFinalBlock(
                            _pushBuffer.Value,
                            0,
                            remainingChunkBytes);
                        hash = _parent._shaHasher.Hash;
                        _parent._shaHasher.Initialize();
                    }
                }
                else
                {
                    int startOffset = (int)(chunk.m_nStartChunk - _bufferFileOffset);
                    hash = _parent._shaHasher.ComputeHash(_pushBuffer.Value, startOffset, (int)chunk.m_nChunkLength);
                }

                if (anyChunksFound && chunk.m_nChunkLength == 0)
                {
                    return;
                }

                anyChunksFound = true;
                _chunkCallback(new ChunkInfo(chunk.m_nStartChunk, (uint)chunk.m_nChunkLength, hash.Take(32).ToArray()));
            }
예제 #3
0
            private void ChunkTranslate(DedupBasicChunkInfo chunk)
            {
                if (chunk.m_nStartChunk == 0 && chunk.m_nChunkLength == 0)
                {
                    return;
                }

                byte[] hash = _parent._shaHasher.ComputeHash(
                    _currentBuffer.Value.Array,
                    _currentBuffer.Value.Offset + (int)chunk.m_nStartChunk,
                    (int)chunk.m_nChunkLength);

                _chunkCallback(new ChunkInfo(chunk.m_nStartChunk, (uint)chunk.m_nChunkLength, hash.Take(32).ToArray()));
            }