2022-02-13 13:00:10 +09:00
|
|
|
import base64
|
|
|
|
import hashlib
|
|
|
|
import secrets
|
|
|
|
|
2022-02-15 19:11:53 +09:00
|
|
|
class NonceReuse(Exception):
|
|
|
|
pass
|
|
|
|
|
2022-02-13 13:00:10 +09:00
|
|
|
def generate_nonce():
|
|
|
|
return secrets.token_urlsafe(16)
|
|
|
|
|
|
|
|
def generate_message_id(secret, nonce):
|
|
|
|
parts = secret + b'message-id\0' + nonce.encode()
|
|
|
|
digest = hashlib.sha256(parts).digest()
|
|
|
|
return base64.urlsafe_b64encode(digest)[:22].decode()
|
2022-02-15 19:11:53 +09:00
|
|
|
|
|
|
|
def create_message(message_ids, secret, nonce, comment):
|
|
|
|
message_id = generate_message_id(secret, nonce)
|
|
|
|
if message_id in message_ids:
|
|
|
|
raise NonceReuse
|
|
|
|
return message_id, nonce, comment
|