annotate signature_gen.py @ 49:1bd17c2e5517 default tip

video.py must sign video urls for serve-files.js to serve them
author drewp@bigasterisk.com
date Fri, 06 Dec 2024 17:13:51 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
1 import base64
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
2 import json
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
3 import logging
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
4 from pathlib import Path
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
5 import time
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
6
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
7 from Crypto.Cipher import AES
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
8 from Crypto.Random import get_random_bytes
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
9 from Crypto.Util.Padding import pad
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
10
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
11 log = logging.getLogger()
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
12
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
13
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
14 SIGNATURE_KEY = Path('/secret/signature_key').read_bytes()
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
15
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
16 def _encrypt_data(data: bytes, key: bytes) -> str:
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
17 iv = get_random_bytes(12)
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
18 cipher = AES.new(key, AES.MODE_GCM, iv)
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
19 ciphertext, tag = cipher.encrypt_and_digest(pad(data, AES.block_size))
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
20 return base64.b64encode(iv + ciphertext + tag).decode('utf-8')
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
21
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
22
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
23 def makePlaybackSig(user: str, webDataPath: str, lifeSeconds=3600) -> str:
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
24 msg = [user, webDataPath, int(time.time() + lifeSeconds)]
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
25 return _encrypt_data(
1bd17c2e5517 video.py must sign video urls for serve-files.js to serve them
drewp@bigasterisk.com
parents:
diff changeset
26 json.dumps(msg).encode('utf-8'), SIGNATURE_KEY)