
    E#i"9                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJrJrJr  SS	KJr  SS
KJrJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr   " S S\5      r  " S S\ 5      r! " S S\ 5      r"g)zModule for BIP32 keys handling.    )annotations)ABCabstractmethod)	lru_cache)Union   )Bip32KeyError)Bip32ChainCodeBip32FingerPrintBip32KeyData)Bip32KeyNetVersions)Bip32PrivateKeySerializerBip32PublicKeySerializer   )EllipticCurveEllipticCurveGetterEllipticCurveTypesIPointIPrivateKey
IPublicKey)Hash160)	DataBytesc                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'           SS jrSS jrSS jrSS jr	SS jr
SS jr\SS j5       rSrg)_Bip32KeyBase'   z#Base class for a generic BIP32 key.r   m_curver   m_curve_typer   
m_key_datar   m_key_net_verc                ^    [         R                  " U5      U l        X0l        Xl        X l        g)z
Construct class.

Args:
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
    curve_type (EllipticCurveTypes)         : Elliptic curve type
N)r   FromTyper   r   r   r   )selfkey_datakey_net_ver
curve_types       g/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/bip32/bip32_keys.py__init___Bip32KeyBase.__init__/   s'     +33J?&"(    c                    U R                   $ )zU
Return key elliptic curve.

Returns:
    EllipticCurve object: EllipticCurve object
)r   r"   s    r&   Curve_Bip32KeyBase.Curve@   s     ||r)   c                    U R                   $ )zW
Return key elliptic curve type.

Returns:
    EllipticCurveTypes: Elliptic curve type
)r   r+   s    r&   	CurveType_Bip32KeyBase.CurveTypeI   s        r)   c                    U R                   $ )zE
Return key data.

Returns:
    BipKeyData object: BipKeyData object
)r   r+   s    r&   Data_Bip32KeyBase.DataR        r)   c                >    U R                  5       R                  5       $ )zS
Return the chain code.

Returns:
    Bip32ChainCode object: Bip32ChainCode object
)r2   	ChainCoder+   s    r&   r6   _Bip32KeyBase.ChainCode[   s     yy{$$&&r)   c                    U R                   $ )z\
Get key net versions.

Returns:
    Bip32KeyNetVersions object: Bip32KeyNetVersions object
)r   r+   s    r&   KeyNetVersions_Bip32KeyBase.KeyNetVersionsd   s     !!!r)   c                    g)`
Return key in serialized extended format.

Returns:
    str: Key in serialized extended format
N r+   s    r&   
ToExtended_Bip32KeyBase.ToExtendedm   s    r)   )r   r   r   r   N)r#   r   r$   r   r%   r   returnNone)r@   r   )r@   r   )r@   r   )r@   r
   )r@   r   r@   str)__name__
__module____qualname____firstlineno____doc____annotations__r'   r,   r/   r2   r6   r9   r   r>   __static_attributes__r=   r)   r&   r   r   '   ss    -$$&&)')1) 0) 59)"!'"  r)   r   c                    ^  \ rS rSr% SrS\S'   \          SS j5       r\          SS j5       r\        SS j5       r	        SU 4S jjr
SS	 jr\" 5       SS
 j5       r\" 5       SS j5       rSS jr\" 5       SS j5       r\" 5       SS j5       r\" 5       SS j5       r\    SS j5       r\SS j5       rSrU =r$ )Bip32PublicKeyw   z~
BIP32 public key class.
It represents a public key used by BIP32 with all the related data (e.g. depth, chain code, etc...).
r   	m_pub_keyc                    [        U[        5      (       a  U R                  XX45      $ [        U[        5      (       a  U R	                  XU5      $ U " XU5      $ )a  
Get the public key from key bytes or object.

Args:
    pub_key (bytes, IPoint or IPublicKey)   : Public key
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
    curve_type (EllipticCurveTypes)         : Elliptic curve type

Returns:
    Bip32PublicKey object: Bip32PublicKey object

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
)
isinstancebytes	FromBytesr   	FromPoint)clspub_keyr#   r$   r%   s        r&   FromBytesOrKeyObject#Bip32PublicKey.FromBytesOrKeyObject   sM    * gu%%==KLLgv&&==K@@7k22r)   c                4    U " U R                  X5      UU5      $ aZ  
Create from bytes.

Args:
    key_bytes (bytes)                       : Key bytes
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
    curve_type (EllipticCurveTypes)         : Elliptic curve type

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
)_Bip32PublicKey__KeyFromBytesrT   	key_bytesr#   r$   r%   s        r&   rR   Bip32PublicKey.FromBytes   $    $ 3%%i<  	 r)   c                4    U " U R                  U5      UU5      $ )a  
Create from point.

Args:
    key_point (IPoint object)               : Key point
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
)_Bip32PublicKey__KeyFromPoint)rT   	key_pointr#   r$   s       r&   rS   Bip32PublicKey.FromPoint   s$      3%%i0  	 r)   c                N   > [         TU ]  X#UR                  5       5        Xl        g)z
Construct class.

Args:
    pub_key (IPublicKey object)             : Key object
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
N)superr'   r/   rN   )r"   rU   r#   r$   	__class__s       r&   r'   Bip32PublicKey.__init__   s"     	0A0A0CD r)   c                    U R                   $ )zD
Return the key object.

Returns:
    IPublicKey object: Key object
rN   r+   s    r&   	KeyObjectBip32PublicKey.KeyObject   s     ~~r)   c                6    U R                   R                  5       $ )zT
Return raw compressed public key.

Returns:
    DataBytes object: DataBytes object
)rN   RawCompressedr+   s    r&   rl   Bip32PublicKey.RawCompressed   s     ~~++--r)   c                6    U R                   R                  5       $ )zV
Return raw uncompressed public key.

Returns:
    DataBytes object: DataBytes object
)rN   RawUncompressedr+   s    r&   ro   Bip32PublicKey.RawUncompressed   s     ~~--//r)   c                6    U R                   R                  5       $ )zB
Get public key point.

Returns:
    IPoint object: IPoint object
)rN   Pointr+   s    r&   rr   Bip32PublicKey.Point   s     ~~##%%r)   c                4    [        U R                  5       5      $ )zA
Get key fingerprint.

Returns:
    bytes: Key fingerprint bytes
)r   KeyIdentifierr+   s    r&   FingerPrintBip32PublicKey.FingerPrint   s       2 2 455r)   c                z    [         R                  " U R                  R                  5       R	                  5       5      $ )z?
Get key identifier.

Returns:
    bytes: Key identifier bytes
)r   QuickDigestrN   rl   ToBytesr+   s    r&   ru   Bip32PublicKey.KeyIdentifier  s+     ""4>>#?#?#A#I#I#KLLr)   c                n    [         R                  " U R                  U R                  U R                  5      $ r<   )r   	SerializerN   r   r   r+   s    r&   r>   Bip32PublicKey.ToExtended  s/     (11$..26//262D2DF 	Fr)   c                     [         R                  " U5      nUR                  5       R                  U 5      $ ! [         a  n[        S5      UeSnAff = f)a  
Construct key from bytes.

Args:
    key_bytes (bytes)              : Key bytes
    curve_type (EllipticCurveTypes): Elliptic curve type

Returns:
    IPublicKey object: IPublicKey object

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
zInvalid public key bytesN)r   r!   PublicKeyClassrR   
ValueErrorr	   r\   r%   curveexs       r&   __KeyFromBytesBip32PublicKey.__KeyFromBytes  sR     	D'00<E'')33I>> 	D :;C	D   47 
AAAc                     [         R                  " U R                  5       5      nUR                  5       R	                  U 5      $ ! [
         a  n[        S5      UeSnAff = f)z
Construct key from point.

Args:
    key_point (IPoint object): Key point

Returns:
    IPublicKey object: IPublicKey object

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
zInvalid public key pointN)r   r!   r/   r   rS   r   r	   )ra   r   r   s      r&   __KeyFromPointBip32PublicKey.__KeyFromPoint/  s[    	D'001D1D1FGE'')33I>> 	D :;C	Ds   AA 
A AA rh   )
rU   z Union[bytes, IPoint, IPublicKey]r#   r   r$   r   r%   r   r@   rL   )
r\   rQ   r#   r   r$   r   r%   r   r@   rL   )ra   r   r#   r   r$   r   r@   rL   )rU   r   r#   r   r$   r   r@   rA   )r@   r   r@   r   )r@   r   )r@   r   )r@   rQ   rB   )r\   rQ   r%   r   r@   r   )ra   r   r@   r   )rD   rE   rF   rG   rH   rI   classmethodrV   rR   rS   r'   ri   r   rl   ro   rr   rv   ru   r>   staticmethodrZ   r`   rJ   __classcell__re   s   @r&   rL   rL   w   s   
 3&F3'33 +>3 *<	3 AO	3 34  " (   3  1	  6D	   *  # (   3  8F   &!$!'! 2! 7;! [. . [0 0& [6 6 [M M [	F 	F D#5D:DD D* D Dr)   rL   c                    ^  \ rS rSr% SrS\S'   \          SS j5       r\          SS j5       r        SU 4S jjr	SS jr
\" 5       SS	 j5       r\" 5       SS
 j5       r\" 5       SS j5       r\    SS j5       rSrU =r$ )Bip32PrivateKeyiD  z
BIP32 private key class.
It represents a private key used by BIP32 with all the related data (e.g. depth, chain code, etc...).
r   
m_priv_keyc                b    [        U[        5      (       a  U R                  XX45      $ U " XU5      $ )a  
Get the public key from key bytes or object.

Args:
    priv_key (bytes or IPrivateKey)         : Private key
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
    curve_type (EllipticCurveTypes)         : Elliptic curve type

Returns:
    Bip32PrivateKey object: Bip32PrivateKey object

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
)rP   rQ   rR   )rT   priv_keyr#   r$   r%   s        r&   rV   $Bip32PrivateKey.FromBytesOrKeyObjectL  s5    , h.. h+J 	;[9	;r)   c                4    U " U R                  X5      UU5      $ rY   )_Bip32PrivateKey__KeyFromBytesr[   s        r&   rR   Bip32PrivateKey.FromBytese  r^   r)   c                N   > [         TU ]  X#UR                  5       5        Xl        g)z
Construct class.

Args:
    priv_key (IPrivateKey object)           : Key object
    key_data (Bip32KeyData object)          : Key data
    key_net_ver (Bip32KeyNetVersions object): Key net versions
N)rd   r'   r/   r   )r"   r   r#   r$   re   s       r&   r'   Bip32PrivateKey.__init__{  s"     	0B0B0DE"r)   c                    U R                   $ )zE
Return the key object.

Returns:
    IPrivateKey object: Key object
r   r+   s    r&   ri   Bip32PrivateKey.KeyObject  r4   r)   c                6    U R                   R                  5       $ )zJ
Return raw private key.

Returns:
    DataBytes object: DataBytes object
)r   Rawr+   s    r&   r   Bip32PrivateKey.Raw  s     ""$$r)   c                t    [        U R                  R                  5       U R                  U R                  5      $ )zq
Get the public key correspondent to the private one.

Returns:
    Bip32PublicKey object: Bip32PublicKey object
)rL   r   	PublicKeyr   r   r+   s    r&   r   Bip32PrivateKey.PublicKey  s0     doo779"oo"002 	2r)   c                n    [         R                  " U R                  U R                  U R                  5      $ r}   )r   r~   r   r   r   r+   s    r&   r>   Bip32PrivateKey.ToExtended  s/     )224??37??373E3EG 	Gr)   c                     [         R                  " U5      nUR                  5       R                  U 5      $ ! [         a  n[        S5      UeSnAff = f)a  
Construct key from bytes.

Args:
    key_bytes (bytes)              : Key bytes
    curve_type (EllipticCurveTypes): Elliptic curve type

Returns:
    IPrivateKey object: IPrivateKey object

Raises:
    Bip32KeyError: If the key constructed from the bytes is not valid
zInvalid private key bytesN)r   r!   PrivateKeyClassrR   r   r	   r   s       r&   r   Bip32PrivateKey.__KeyFromBytes  sR     	E'00<E((*44Y?? 	E ;<"D	Er   r   )
r   zUnion[bytes, IPrivateKey]r#   r   r$   r   r%   r   r@   r   )
r\   rQ   r#   r   r$   r   r%   r   r@   r   )r   r   r#   r   r$   r   r@   rA   )r@   r   r   )r@   rL   rB   )r\   rQ   r%   r   r@   r   )rD   rE   rF   rG   rH   rI   r   rV   rR   r'   ri   r   r   r   r>   r   r   rJ   r   r   s   @r&   r   r   D  s/   
 ;'@;'3; +>; *<	; AP	; ;0  " (   3  1	  6E	   *#&#'# 2# 7;# [% % [	2 	2 [	G 	G E#5E:EE Er)   r   N)#rH   
__future__r   abcr   r   	functoolsr   typingr   bip32_exr	   bip32_key_datar
   r   r   bip32_key_net_verr   bip32_key_serr   r   eccr   r   r   r   r   r   utils.cryptor   
utils.miscr   r   rL   r   r=   r)   r&   <module>r      sc   * & # #   # J J 2 N i i " "MC M`JD] JDZEEm EEr)   