Index: third_party/google-endpoints/Crypto/Hash/hashalgo.py |
diff --git a/third_party/google-endpoints/Crypto/Hash/hashalgo.py b/third_party/google-endpoints/Crypto/Hash/hashalgo.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b38b3a6c1d247a03a0591691af62a4299d337a44 |
--- /dev/null |
+++ b/third_party/google-endpoints/Crypto/Hash/hashalgo.py |
@@ -0,0 +1,116 @@ |
+# -*- coding: utf-8 -*- |
+# |
+# =================================================================== |
+# The contents of this file are dedicated to the public domain. To |
+# the extent that dedication to the public domain is not available, |
+# everyone is granted a worldwide, perpetual, royalty-free, |
+# non-exclusive license to exercise all rights associated with the |
+# contents of this file for any purpose whatsoever. |
+# No rights are reserved. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
+# SOFTWARE. |
+# =================================================================== |
+ |
+from binascii import hexlify |
+ |
+class HashAlgo: |
+ """A generic class for an abstract cryptographic hash algorithm. |
+ |
+ :undocumented: block_size |
+ """ |
+ |
+ #: The size of the resulting hash in bytes. |
+ digest_size = None |
+ #: The internal block size of the hash algorithm in bytes. |
+ block_size = None |
+ |
+ def __init__(self, hashFactory, data=None): |
+ """Initialize the hash object. |
+ |
+ :Parameters: |
+ hashFactory : callable |
+ An object that will generate the actual hash implementation. |
+ *hashFactory* must have a *new()* method, or must be directly |
+ callable. |
+ data : byte string |
+ The very first chunk of the message to hash. |
+ It is equivalent to an early call to `update()`. |
+ """ |
+ if hasattr(hashFactory, 'new'): |
+ self._hash = hashFactory.new() |
+ else: |
+ self._hash = hashFactory() |
+ if data: |
+ self.update(data) |
+ |
+ def update(self, data): |
+ """Continue hashing of a message by consuming the next chunk of data. |
+ |
+ Repeated calls are equivalent to a single call with the concatenation |
+ of all the arguments. In other words: |
+ |
+ >>> m.update(a); m.update(b) |
+ |
+ is equivalent to: |
+ |
+ >>> m.update(a+b) |
+ |
+ :Parameters: |
+ data : byte string |
+ The next chunk of the message being hashed. |
+ """ |
+ return self._hash.update(data) |
+ |
+ def digest(self): |
+ """Return the **binary** (non-printable) digest of the message that has been hashed so far. |
+ |
+ This method does not change the state of the hash object. |
+ You can continue updating the object after calling this function. |
+ |
+ :Return: A byte string of `digest_size` bytes. It may contain non-ASCII |
+ characters, including null bytes. |
+ """ |
+ return self._hash.digest() |
+ |
+ def hexdigest(self): |
+ """Return the **printable** digest of the message that has been hashed so far. |
+ |
+ This method does not change the state of the hash object. |
+ |
+ :Return: A string of 2* `digest_size` characters. It contains only |
+ hexadecimal ASCII digits. |
+ """ |
+ return self._hash.hexdigest() |
+ |
+ def copy(self): |
+ """Return a copy ("clone") of the hash object. |
+ |
+ The copy will have the same internal state as the original hash |
+ object. |
+ This can be used to efficiently compute the digests of strings that |
+ share a common initial substring. |
+ |
+ :Return: A hash object of the same type |
+ """ |
+ return self._hash.copy() |
+ |
+ def new(self, data=None): |
+ """Return a fresh instance of the hash object. |
+ |
+ Unlike the `copy` method, the internal state of the object is empty. |
+ |
+ :Parameters: |
+ data : byte string |
+ The next chunk of the message being hashed. |
+ |
+ :Return: A hash object of the same type |
+ """ |
+ pass |
+ |