Skip to content

Instantly share code, notes, and snippets.

@AshtonIzmev
Last active March 22, 2025 23:45
Show Gist options
  • Select an option

  • Save AshtonIzmev/a4d4fdedf7167e2e19dae6577fed30b5 to your computer and use it in GitHub Desktop.

Select an option

Save AshtonIzmev/a4d4fdedf7167e2e19dae6577fed30b5 to your computer and use it in GitHub Desktop.
Utils code for generating RSA license key system with pem using signatures
import os
import sys
from datetime import datetime
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.exceptions import InvalidSignature
from cryptography.hazmat.primitives import serialization
def get_private_key():
with open("keys/private_key.pem", "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=None,
)
return private_key
def get_public_key():
with open("keys/public_key.pem", "rb") as key_file:
public_key = serialization.load_pem_public_key(
key_file.read(),
)
return public_key
def generate_key_pair():
key_size = 2048
private_key = rsa.generate_private_key(
public_exponent=65537, # Do not change
key_size=key_size,
)
public_key = private_key.public_key()
pem_public_key = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo,
)
pem_private_key = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption(),
)
print(pem_public_key.decode())
print(pem_private_key.decode())
def sign(message, private_key):
return private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256(),
)
def verify(signature, message):
public_key = get_public_key()
try:
signature_bytes = bytes.fromhex(signature)
public_key.verify(
signature_bytes,
message.encode(),
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256(),
)
return True
except:
return False
def generate_da_keys(n):
keys = []
for i in range(n):
key_number = str(i).encode()
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").encode()
seed = str(hash(datetime.now())).encode()
random_bytes = os.urandom(16).hex().encode()
message = (
b"MuseAI Key number "
+ key_number
+ b" generated at "
+ timestamp
+ b" with seed "
+ seed
+ b" random "
+ random_bytes
)
signature = sign(message, get_private_key())
keys.append((message, signature.hex()))
for k in keys:
print(k[0].decode())
print(k[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment