U
    @†6^   ã                   @   sD   d dl Z d dlZd dlmZ d dlmZmZmZ G dd„ deƒZdS )é    N)Úsha256)Ú
SpiderFootÚSpiderFootPluginÚSpiderFootEventc                   @   sV   e Zd ZdZi ZdZeƒ fdd„Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ ZdS )Úsfp_bitcoinznBitcoin Finder:Footprint,Investigate,Passive:Content Analysis::Identify bitcoin addresses in scraped webpages.Nc                 C   s4   || _ |  ¡ | _t| ¡ ƒD ]}|| | j|< qd S )N)ÚsfÚtempStorageÚresultsÚlistÚkeysÚopts)ÚselfÚsfcÚuserOptsÚopt© r   ú6/var/www/spiderfoot.crq.systems/modules/sfp_bitcoin.pyÚsetup   s    
zsfp_bitcoin.setupc                 C   s   dgS )NÚTARGET_WEB_CONTENTr   ©r   r   r   r   ÚwatchedEvents#   s    zsfp_bitcoin.watchedEventsc                 C   s   dgS )NÚBITCOIN_ADDRESSr   r   r   r   r   ÚproducedEvents)   s    zsfp_bitcoin.producedEventsc                 C   s2   d| }t  dt|ƒd  |  |d ¡d¡}|S )Nz%xÚ0é   Úhex)ÚcodecsÚdecodeÚlenÚzfill)r   ÚnÚlengthÚhÚsr   r   r   Úto_bytes,   s    &zsfp_bitcoin.to_bytesc                 C   s0   d}d}|D ]}|d |  |¡ }q|  ||¡S )NZ:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzr   é:   )Úindexr$   )r   Úbcr!   Zdigits58r    Úcharr   r   r   Údecode_base581   s
    zsfp_bitcoin.decode_base58c                 C   s<   |   |d¡}|dd … tt|d d… ƒ ¡ ƒ ¡ d d… kS )Né   éüÿÿÿé   )r)   r   Údigest)r   r'   Zbcbytesr   r   r   Úcheck_bc8   s    zsfp_bitcoin.check_bcc           	      C   sœ   |j }|j}|j}| j |¡}|| jkr,d S d| j|< | j d| d | ¡ t d|¡}|D ]8}| j d| ¡ |  	|¡r^t
d|| j|ƒ}|  |¡ q^d S )NTzReceived event, z, from z)[\s:=\>]([13][a-km-zA-HJ-NP-Z1-9]{25,34})zBitcoin potential match: r   )Ú	eventTypeÚmoduleÚdatar   Ú
hashstringr	   ÚdebugÚreÚfindallr.   r   Ú__name__ÚnotifyListeners)	r   ÚeventÚ	eventNameÚsrcModuleNameÚ	eventDataZ
sourceDataÚmatchesÚmÚevtr   r   r   ÚhandleEvent=   s    


zsfp_bitcoin.handleEvent)r6   Ú
__module__Ú__qualname__Ú__doc__r   r	   Údictr   r   r   r$   r)   r.   r?   r   r   r   r   r      s   r   )	r4   r   Úhashlibr   Úsflibr   r   r   r   r   r   r   r   Ú<module>   s   