The freezer.engine.rsync.pyrsync Module

The freezer.engine.rsync.pyrsync Module

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

This is a pure Python implementation of the [rsync algorithm] [TM96]. Updated to use SHA256 hashing (instead of the standard implementation which uses outdated MD5 hashes), and packages for disutils distribution by Isis Lovecruft, <>. The majority of the code is blatantly stolen from Eric Pruitt’s code as posted on [ActiveState] [1]. [1]: [TM96]: Andrew Tridgell and Paul Mackerras. The rsync algorithm. Technical Report TR-CS-96-05, Canberra 0200 ACT, Australia, 1996.

freezer.engine.rsync.pyrsync.rollingchecksum(removed, new, a, b, blocksize=4096)

Generates a new weak checksum when supplied with the internal state of the checksum calculation for the previous window, the removed byte, and the added byte.


Generates a weak checksum from an iterable set of bytes.

freezer.engine.rsync.pyrsync.rsyncdelta(datastream, remotesignatures, blocksize=4096)

Generates a binary patch when supplied with the weak and strong hashes from an unpatched target and a readable stream for the up-to-date data. The blocksize must be the same as the value used to generate remotesignatures.

freezer.engine.rsync.pyrsync.blockchecksums(instream, blocksize=4096)

Returns a list of weak and strong hashes for each block of the defined size for the given data stream.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.