24 lines
766 B
Python
Executable File
24 lines
766 B
Python
Executable File
from cryptography.hazmat.primitives import serialization
|
|
import base64
|
|
|
|
def base64url_encode(data: bytes) -> str:
|
|
return base64.urlsafe_b64encode(data).decode('utf-8').rstrip('=')
|
|
|
|
# Load PEM public key
|
|
with open("vapid_public.pem", "rb") as f:
|
|
pem_data = f.read()
|
|
|
|
public_key = serialization.load_pem_public_key(pem_data)
|
|
|
|
# Extract the raw uncompressed public key bytes (0x04 + X + Y)
|
|
public_numbers = public_key.public_numbers()
|
|
x_bytes = public_numbers.x.to_bytes(32, 'big')
|
|
y_bytes = public_numbers.y.to_bytes(32, 'big')
|
|
uncompressed_key = b'\x04' + x_bytes + y_bytes
|
|
|
|
# Base64url encode the uncompressed key bytes
|
|
public_key_b64url = base64url_encode(uncompressed_key)
|
|
|
|
print("Base64url-encoded public key (use in frontend):")
|
|
print(public_key_b64url)
|