35 lines
950 B
Python
35 lines
950 B
Python
import sys
|
|
import hashlib
|
|
import base64
|
|
from pathlib import Path
|
|
import requests
|
|
|
|
def file_hash(file_path: Path) -> str:
|
|
sha256_hash = hashlib.sha256()
|
|
with open(file_path, "rb") as file:
|
|
while True:
|
|
data = file.read(65536)
|
|
if not data:
|
|
break
|
|
sha256_hash.update(data)
|
|
return "sha256-" + base64.b64encode(sha256_hash.digest()).decode()
|
|
|
|
def url_hash(url: str) -> str:
|
|
sha256_hash = hashlib.sha256()
|
|
with requests.get(url, stream=True) as resp:
|
|
resp.raise_for_status()
|
|
while True:
|
|
data = resp.raw.read(65536)
|
|
if not data:
|
|
break
|
|
sha256_hash.update(data)
|
|
return "sha256-" + base64.b64encode(sha256_hash.digest()).decode()
|
|
|
|
if __name__ == "__main__" and len(sys.argv) > 1:
|
|
path = Path(sys.argv[1])
|
|
if path.exists():
|
|
print(file_hash(path))
|
|
else:
|
|
print(url_hash(sys.argv[1]))
|
|
|