
    ei@                         d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ eZ G d	 d
          Z G d d          Z G d d          ZdS )z!Module for WIF encoding/decoding.    )TupleUnion   )P2PKHPubKeyModes)Base58DecoderBase58Encoder)	CoinsConf)IPrivateKeySecp256k1PrivateKey)
BytesUtilsc                   "    e Zd ZU dZdZeed<   dS )WifConstz"Class container for WIF constants.   COMPR_PUB_KEY_SUFFIXN)__name__
__module____qualname____doc__r   bytes__annotations__     b/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/static_dependencies/bip/wif/wif.pyr   r   %   s+         ,, #*%)))))r   r   c            
           e Zd ZdZeej                            d          ej	        fde
eef         dededefd            ZdS )	
WifEncoderP
    WIF encoder class.
    It provides methods for encoding to WIF format.
    wif_net_verpriv_keynet_verpub_key_modereturnc                    t          |t                    st          d          t          | t                    rt	          j        |           } n$t          | t                    st          d          |                                                                 } |t          j        k    r| t          j
        z  } || z   } t          j        |           S )as  
        Encode key bytes into a WIF string.

        Args:
            priv_key (bytes or IPrivateKey)        : Private key bytes or object
            net_ver (bytes, optional)              : Net version (Bitcoin main net by default)
            pub_key_mode (WifPubKeyModes, optional): Specify if the private key corresponds to a compressed public key

        Returns:
            str: WIF encoded string

        Raises:
            TypeError: If pub_key_mode is not a WifPubKeyModes enum or
                       the private key is not a valid Secp256k1PrivateKey
            ValueError: If the key is not valid
        z7Public key mode is not an enumerative of WifPubKeyModesz#A secp256k1 private key is required)
isinstanceWifPubKeyModes	TypeErrorr   r   	FromBytesRawToBytes
COMPRESSEDr   r   r   CheckEncode)r   r   r    s      r   EncodezWifEncoder.Encode2   s    ( ,77 	WUVVV h&& 	C*4X>>HHH&9:: 	CABBB<<>>))++ >44455H X% (222r   N)r   r   r   r   staticmethodr	   BitcoinMainNet
ParamByKeyr$   r)   r   r   r
   strr+   r   r   r   r   r   ,   s         
  ) 8 C CM R R.<.G&3 &3uk12 &3&3+&3LO&3 &3 &3 \&3 &3 &3r   r   c            
       z    e Zd ZdZeej                            d          fdede	de
e	ef         fd            ZdS )
WifDecoderr   r   wif_strr   r!   c                 n   t          j        |           }|d         t          |          k    r+t          dt          |          dd|d         dd          |dd         }t	          j        |dd                   ro|d         t          t          j                  k    r5t          d	t          t          j                  dd|d         dd          |dd         }t          j	        }nEt	          j        |          s%t          d
t          j        |           d          t          j        }||fS )a  
        Decode key bytes from a WIF string.

        Args:
            wif_str (str)            : WIF string
            net_ver (bytes, optional): Net version (Bitcoin main net by default)

        Returns:
            tuple[bytes, WifPubKeyModes]: Key bytes (index 0), public key mode (index 1)

        Raises:
            Base58ChecksumError: If the base58 checksum is not valid
            ValueError: If the resulting key is not valid
        r   z Invalid net version (expected 0x02Xz, got 0x)   Nz1Invalid compressed public key suffix (expected 0xzInvalid decoded key ()r   CheckDecodeord
ValueErrorr   IsValidBytesr   r   r$   r)   r   ToHexStringUNCOMPRESSED)r2   r   priv_key_bytesr    s       r   DecodezWifDecoder.Decodeb   sa   & '27;; !G,,e3w<<eee^\]M^eeee  
 (+ +N3B3,?@@ 	7b!S)F%G%GGG 7HLiHjHjr 7 7+B/67 7 7  
 ,CRC0N)4LL&3NCC d !b9OP^9_9_!b!b!bccc)6L|++r   N)r   r   r   r   r,   r	   r-   r.   r/   r   r   r$   r?   r   r   r   r1   r1   \   sz         
  ) 8 C CM R R-, -, -,-,W\]bdr]rWs-, -, -, \-, -, -,r   r1   N)r   typingr   r   addrr   base58r   r   	coin_confr	   eccr
   r   
utils.miscr   r$   r   r   r1   r   r   r   <module>rF      s  * ( '          # # # # # # 1 1 1 1 1 1 1 1 ! ! ! ! ! ! 2 2 2 2 2 2 2 2 # # # # # # "* * * * * * * *-3 -3 -3 -3 -3 -3 -3 -3`4, 4, 4, 4, 4, 4, 4, 4, 4, 4,r   