21 lines
845 B
Plaintext
21 lines
845 B
Plaintext
def make_signed_system_token(system_user_token: str, private_key_pem: str) -> str:
|
|
# 1) stamp in UTC like yyyyMMddHHmm
|
|
ts = datetime.now(timezone.utc).strftime("%Y%m%d%H%M")
|
|
to_sign = f"{system_user_token}.{ts}".encode("utf-8")
|
|
|
|
# 2) load your RSA private key (PEM, PKCS#1 or PKCS#8)
|
|
key = serialization.load_pem_private_key(
|
|
private_key_pem.encode("utf-8"), password=None
|
|
)
|
|
|
|
# 3) RSA-SHA256, PKCS#1 v1.5 padding, then Base64 (standard, not URL-safe)
|
|
signature = key.sign(to_sign, padding.PKCS1v15(), hashes.SHA256())
|
|
sig_b64 = base64.b64encode(signature).decode("ascii")
|
|
|
|
# 4) final SignedSystemToken
|
|
return f"{system_user_token}.{ts}.{sig_b64}"
|
|
|
|
|
|
# print(load_rsa_private_key_pem(PEM_STR)) # test loading key
|
|
print(make_signed_system_token(SYSTEM_USER_TOKEN, PEM_STR))
|
|
|