U
    ˹h`
                     @   s   d Z ddlmZmZ ddlmZmZ dZG dd dejZ	G dd dejZ
G d	d
 d
ejZdd Zdd Zdd Zdd ZdS )zuASN1 encoding helpers for converting between PKCS1 and PKCS8.

Required by rsa_backend but not cryptography_backend.
    )decoderencoder)	namedtypeunivz1.2.840.113549.1.1.1c                   @   s4   e Zd ZdZeede ede	 Z
dS )RsaAlgorithmIdentifierzAASN1 structure for recording RSA PrivateKeyAlgorithm identifiers.rsaEncryptionZ
parametersN)__name__
__module____qualname____doc__r   
NamedTypes	NamedTyper   ZObjectIdentifierZNullcomponentType r   r   9./venv/lib/python3.8/site-packages/jose/backends/_asn1.pyr      s
    r   c                	   @   s@   e Zd ZdZeede ede	 ede
 ZdS )PKCS8PrivateKeyz0ASN1 structure for recording PKCS8 private keys.versionprivateKeyAlgorithm
privateKeyN)r   r	   r
   r   r   r   r   r   ZIntegerr   ZOctetStringr   r   r   r   r   r      s   r   c                   @   s2   e Zd ZdZeede ede	 Z
dS )PublicKeyInfoz/ASN1 structure for recording PKCS8 public keys.	algorithm	publicKeyN)r   r	   r
   r   r   r   r   r   r   	BitStringr   r   r   r   r   r      s
    r   c                 C   sB   t j| t d}z|d }W n tk
r8   tdY nX |d S )1Convert a PKCS8-encoded RSA private key to PKCS1.Zasn1Specr   zInvalid private key encodingr   )r   decoder   
IndexError
ValueError	pkcs8_keyZdecoded_valuesZdecoded_keyr   r   r   rsa_private_key_pkcs8_to_pkcs1&   s    r    c                 C   s6   t  }t|d< t }d|d< ||d< | |d< t|S )1Convert a PKCS1-encoded RSA private key to PKCS8.r   r   r   r   r   )r   RSA_ENCRYPTION_ASN1_OIDr   r   encodeZ	pkcs1_keyr   r   r   r   r   rsa_private_key_pkcs1_to_pkcs82   s    r%   c                 C   s6   t  }t|d< t }||d< tj| |d< t|S )r!   r   r   r   )r   r"   r   r   r   ZfromOctetStringr   r#   r$   r   r   r   rsa_public_key_pkcs1_to_pkcs8?   s    r&   c                 C   sF   t j| t d}z|d }W n tk
r8   tdY nX |d  S )r   r   r   zInvalid public key encoding.r   )r   r   r   r   r   ZasOctetsr   r   r   r   rsa_public_key_pkcs8_to_pkcs1K   s    r'   N)r   Zpyasn1.codec.derr   r   Zpyasn1.typer   r   r"   Sequencer   r   r   r    r%   r&   r'   r   r   r   r   <module>   s   
