3
@†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   s8   || _ | jƒ | _x"t|jƒ ƒD ]}|| | j|< qW 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 jdt|ƒd  | j|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   s4   d}d}x|D ]}|d |j |ƒ }qW | j||ƒS )NZ:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzr   é:   )Úindexr#   )r   Úbcr    Zdigits58r   Úcharr   r   r   Údecode_base581   s
    
zsfp_bitcoin.decode_base58c             C   s<   | j |dƒ}|dd … tt|d d… ƒjƒ ƒjƒ d d… kS )Né   é   éüÿÿÿr+   )r(   r   Údigest)r   r&   Zbcbytesr   r   r   Úcheck_bc8   s    zsfp_bitcoin.check_bcc       	      C   s    |j }|j}|j}| jj|ƒ}|| jkr,d S d| j|< | jjd| d | ƒ tjd|ƒ}x@|D ]8}| jjd| ƒ | j	|ƒr`t
d|| j|ƒ}| j|ƒ q`W 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)r5   Ú
__module__Ú__qualname__Ú__doc__r   r	   Údictr   r   r   r#   r(   r-   r>   r   r   r   r   r      s   r   )	r3   r   Úhashlibr   Úsflibr   r   r   r   r   r   r   r   Ú<module>   s   