--- /dev/null
+# Stubs for hmac\r
+\r
+from typing import Any, Callable, Optional, Union, overload, AnyStr\r
+from types import ModuleType\r
+import sys\r
+\r
+_B = Union[bytes, bytearray]\r
+\r
+# TODO more precise type for object of hashlib\r
+_Hash = Any\r
+\r
+digest_size: None\r
+\r
+if sys.version_info >= (3, 4):\r
+ def new(key: _B, msg: Optional[_B] = ...,\r
+ digestmod: Optional[Union[str, Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ...\r
+else:\r
+ def new(key: _B, msg: Optional[_B] = ...,\r
+ digestmod: Optional[Union[Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ...\r
+\r
+class HMAC:\r
+ if sys.version_info >= (3,):\r
+ digest_size = ... # type: int\r
+ if sys.version_info >= (3, 4):\r
+ block_size = ... # type: int\r
+ name = ... # type: str\r
+ def update(self, msg: _B) -> None: ...\r
+ def digest(self) -> bytes: ...\r
+ def hexdigest(self) -> str: ...\r
+ def copy(self) -> HMAC: ...\r
+\r
+@overload\r
+def compare_digest(a: bytearray, b: bytearray) -> bool: ...\r
+@overload\r
+def compare_digest(a: AnyStr, b: AnyStr) -> bool: ...\r
+\r
+if sys.version_info >= (3, 7):\r
+ def digest(key: _B, msg: _B, digest: str) -> bytes: ...\r