Last active
March 22, 2025 23:45
-
-
Save AshtonIzmev/a4d4fdedf7167e2e19dae6577fed30b5 to your computer and use it in GitHub Desktop.
Utils code for generating RSA license key system with pem using signatures
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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