Skip to content
Snippets Groups Projects
keys.py 1.28 KiB
Newer Older
  • Learn to ignore specific revisions
  • from cryptography.hazmat.primitives import serialization as crypto_serialization
    from cryptography.hazmat.primitives.asymmetric import rsa
    from cryptography.hazmat.backends import default_backend as crypto_default_backend
    
    import requests
    
    from . import exceptions
    
    
    def get_key_pair(size=2048):
        key = rsa.generate_private_key(
            backend=crypto_default_backend(),
            public_exponent=65537,
            key_size=size
        )
        private_key = key.private_bytes(
            crypto_serialization.Encoding.PEM,
            crypto_serialization.PrivateFormat.PKCS8,
            crypto_serialization.NoEncryption())
        public_key = key.public_key().public_bytes(
            crypto_serialization.Encoding.PEM,
            crypto_serialization.PublicFormat.PKCS1
        )
    
        return private_key, public_key
    
    
    def get_public_key(actor_url):
        """
        Given an actor_url, request it and extract publicKey data from
        the response payload.
        """
        response = requests.get(actor_url)
        response.raise_for_status()
        payload = response.json()
        try:
            return {
                'public_key_pem': payload['publicKey']['publicKeyPem'],
                'id': payload['publicKey']['id'],
                'owner': payload['publicKey']['owner'],
            }
        except KeyError:
            raise exceptions.MalformedPayload(str(payload))