ShadowB 0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ShadowB/core.py ADDED
@@ -0,0 +1,106 @@
1
+ import time
2
+ from ShadowB.Core.randwords import randw
3
+ from ShadowB.Core.fileorg import florg
4
+ try:
5
+ from colorama import init, Fore
6
+ except ImportError:
7
+ import os
8
+ os.system("pip install colorama")
9
+ from colorama import init, Fore
10
+
11
+
12
+ def start():
13
+ init()
14
+ while True:
15
+ try:
16
+ print(Fore.GREEN + "="*50)
17
+ time.sleep(1)
18
+ print("** welcome to ShadowBoys **")
19
+ time.sleep(1)
20
+ print("[1]. Generating random words")
21
+ time.sleep(1)
22
+ print("[2]. Organizing files")
23
+ time.sleep(1)
24
+ print("[3]. Exit")
25
+ time.sleep(1)
26
+ print("** Write here what you need, like 3 , 2 or 1 **")
27
+ inp = input(">> ")
28
+ if inp == "3":
29
+ print(f"** Closed ** \n {'='*50}")
30
+ break
31
+
32
+ elif inp == "1":
33
+ others_chars = ""
34
+ rep = int(input("** How many slots do you want to create? : "))
35
+ if rep > 5:
36
+ print("-- The maximum number of slots you can reach is 5 --")
37
+ if rep < 2:
38
+ print("-- The smallest number of digits possible is 2 --")
39
+ numbers = input("** Do you want to use numbers? (y/n) : ")
40
+ if numbers in ["n","no"]:
41
+ numbers = False
42
+ else:
43
+ numbers = True
44
+ symbols = input("** Do you want to use symbols? (y/n) : ")
45
+ if symbols in ["n","no"]:
46
+ symbols = False
47
+ else:
48
+ symbols = True
49
+ letters = input("** Do you want to use letters? (y/n) : ")
50
+ if letters in ["n","no"]:
51
+ letters = False
52
+ else:
53
+ letters = True
54
+ form = input("** Do you want to use only uppercase letters (maj), only lowercase letters (min), or both uppercase and lowercase letters (all)? (min/maj/all) : ")
55
+ filename = input("** Please write the name of the file where you will save the attempts (like pass or passwords)(only the name) : ")
56
+ other_char = input("** Do you have any special words, numbers, or dates you want to add? (y/n) : ")
57
+ while not other_char in ["y","n"]:
58
+ other_char = input("** Do you have any special words, numbers, or dates you want to add? (y/n) : ")
59
+ if other_char == "y":
60
+ n = int(input("** How many special words do you want to enter? : (1 or 10 or 88...)"))
61
+ for i in range(n):
62
+ char = input(f"** Enter the word number {i+1} : ")
63
+ others_chars += char
64
+ randw(filename,rep,others_chars,numbers,symbols,letters,form)
65
+ time.sleep(1)
66
+ print("="*50)
67
+ break
68
+
69
+ elif inp == "2":
70
+ path = input("** The folder path whose files we are going to organize: ")
71
+ florg(path)
72
+ print("="*50)
73
+ break
74
+ else:
75
+ print("-- They was an error, pls try again! --")
76
+ except:
77
+ print("-- They was an error, pls try again! --")
78
+ break
79
+
80
+ def owner():
81
+ print("Adem mzoughi")
82
+ print("Github : https://github.com/erec2smith")
83
+
84
+ def vr():
85
+ print("0.1")
86
+
87
+ def team():
88
+ print("Adem")
89
+ print("Shadow")
90
+ print("Berlin")
91
+
92
+ def hp():
93
+ print("""
94
+ 1. At the beginning, you should call core like this: from ShadowB import core \n
95
+ 2. After that, it calls the main function core , like that : core.owner() \n
96
+ 3. Call any function you want, like (owner to get info about the library owner, or team to get \n info about the Shadow Boys team) example: core.owner() \n
97
+ 4. All the functions currently available:\n
98
+ owner() : To find out information about making the library \n
99
+ team() : To find out information about the wamithe team \n
100
+ start() : To start generating random words or organizing files \n
101
+ hp() : To find out information about the library \n
102
+ Example : from ShadowB import core \n
103
+ core.start() \n
104
+ 2026/06/17 python https://github.com/erec2smith
105
+ """)
106
+
ShadowB/getD.py ADDED
@@ -0,0 +1,28 @@
1
+ from ShadowB.GetD.my_data import make_file
2
+ from ShadowB.GetD.make_cookies import cookies
3
+ from ShadowB.GetD.my_ip import ip
4
+ from ShadowB.GetD.scan import scan
5
+ from pathlib import Path
6
+
7
+ def my_data():
8
+ make_file()
9
+ return ""
10
+
11
+
12
+
13
+ def my_ip():
14
+ ip()
15
+ return ""
16
+
17
+
18
+ def get_cookies(filename="cookies"):
19
+ return cookies(filename)
20
+
21
+
22
+ def scan_open_ports(ip):
23
+ return scan(ip)
24
+
25
+ def whm():
26
+ current_path = Path.cwd()
27
+ print(current_path)
28
+ return current_path
ShadowB/image.py ADDED
@@ -0,0 +1,31 @@
1
+ from ShadowB.Image.check_image import check
2
+ from ShadowB.Image.export_metadata import exp
3
+ from ShadowB.Image.remove_metadata import remove
4
+ from ShadowB.Image.makeText import hide_text_in_img
5
+ from ShadowB.Image.makeFile import hide_file_in_img
6
+ from ShadowB.Image.extr_hidden_files import extract_file_from_img
7
+ from ShadowB.Image.extr_hidden_text import extract_text_from_img
8
+
9
+ def check_img(image):
10
+ return check(image)
11
+
12
+
13
+ def expMetadata(image):
14
+ return exp(image)
15
+
16
+
17
+ def removeMetadata(image):
18
+ return remove(image)
19
+
20
+
21
+ def hide_text(image,text):
22
+ return hide_text_in_img(image,text)
23
+
24
+ def hide_file(image,file):
25
+ return hide_file_in_img(image,file)
26
+
27
+ def extr_file(image):
28
+ return extract_file_from_img(image)
29
+
30
+ def extr_text(image):
31
+ return extract_text_from_img(image)
ShadowB/mail.py ADDED
@@ -0,0 +1,21 @@
1
+ from ShadowB.Mail.make_mail import create_temp_email
2
+ from ShadowB.Mail.res_msj import get_messages
3
+ from ShadowB.Mail.send_msj import send_email
4
+
5
+ def create_email():
6
+ return create_temp_email()
7
+
8
+
9
+ def get_msj(token):
10
+ if token:
11
+ return get_messages(token)
12
+ else:
13
+ return "Entering the token is mandatory!"
14
+
15
+
16
+
17
+ def send_msj(sender, app_password, to, subject, body):
18
+ if sender and app_password and to and subject and body:
19
+ return send_email(sender, app_password, to, subject, body)
20
+ else:
21
+ return "(sender, app_password, to, subject, body) must be entered compulsorily!"
ShadowB/passwords.py ADDED
@@ -0,0 +1,47 @@
1
+ import string
2
+ import secrets
3
+ import re
4
+
5
+
6
+ def create_password():
7
+ length = 20
8
+ all_characters = string.ascii_letters + string.punctuation + string.digits
9
+
10
+
11
+ password = "".join(secrets.choice(all_characters) for _ in range(length))
12
+
13
+ return password
14
+
15
+
16
+
17
+ def check_strength(password):
18
+ pass_list = ["azerty","azerty22","1234","google","insta","yamal","123456789","password","mot passe","abcdefghijklmnopqrstuvwxyz","pass123","password123","pass","password","ronaldo","cr7ronaldo","ronaldo2008","messi","fcmessi","itsme","hacker","azertyuiopmlkjhgfdsqwxcvbn","azertyuiopqsdfghjklmwxcvbn"]
19
+
20
+ length_error = len(password) < 8
21
+
22
+
23
+ lowercase_error = re.search(r"[a-z]", password) is None
24
+
25
+
26
+ uppercase_error = re.search(r"[A-Z]", password) is None
27
+
28
+
29
+ digit_error = re.search(r"\d", password) is None
30
+
31
+
32
+ symbol_error = re.search(r"[ !@#$%^&*(),.?\":{}|<>_\-+=\[\]\\/`~;']", password) is None
33
+
34
+
35
+ errors = [length_error, lowercase_error, uppercase_error, digit_error, symbol_error]
36
+ passed_conditions = errors.count(False)
37
+
38
+
39
+ if len(password) >= 12 and passed_conditions == 5 and password not in pass_list:
40
+ print("Strong")
41
+ return ""
42
+ elif len(password) >= 8 and passed_conditions >= 3 and password not in pass_list:
43
+ print("Medium")
44
+ return ""
45
+ else:
46
+ print("Weak")
47
+ return ""
ShadowB/qrcode.py ADDED
@@ -0,0 +1,10 @@
1
+ from ShadowB.Qrcode.generate import qrcode
2
+ from ShadowB.Qrcode.scan import scan
3
+
4
+ def generate_qrcode(text,filename):
5
+ return qrcode(text,filename)
6
+
7
+
8
+
9
+ def scan_qrcode(qrcode):
10
+ return scan(qrcode)
ShadowB/safe.py ADDED
@@ -0,0 +1,80 @@
1
+ from ShadowB.Safe.filename import real_filename
2
+ from ShadowB.Safe.ext import real_ext
3
+ from ShadowB.Safe.cleanText import is_clean
4
+ from ShadowB.Safe.clean import cleann
5
+ from ShadowB.Safe.safeFile import is_safe
6
+ import os
7
+
8
+
9
+ def name(file):
10
+ name = real_filename(file)
11
+ return name
12
+
13
+
14
+ def ext(file):
15
+ e = real_ext(file)
16
+ return e
17
+
18
+
19
+ def extR(file):
20
+ e = real_ext(file)
21
+ return e.replace(".","")
22
+
23
+
24
+ def cleanText(text,check_list=None):
25
+ if check_list and check_list is not None:
26
+ clean = is_clean(text,check_list)
27
+ else:
28
+ clean = is_clean(text)
29
+ if clean:
30
+ print("true")
31
+ return "true"
32
+ else:
33
+ print("false")
34
+ return "false"
35
+
36
+
37
+
38
+ def clean(file,check_list=None):
39
+ e = real_ext(file)
40
+ if e not in ["pdf",".pdf",".txt","txt"]:
41
+ print("Currently, the accepted files are .pdf and .txt")
42
+ return "Currently, the accepted files are .pdf and .txt"
43
+
44
+
45
+ if check_list and check_list is not None:
46
+ c = cleann(file,check_list)
47
+ else:
48
+ c = cleann(file)
49
+
50
+
51
+ if c:
52
+ print("true")
53
+ return "true"
54
+ else:
55
+ print("false")
56
+ return "false"
57
+
58
+
59
+
60
+ def size(file):
61
+ try:
62
+ size_bytes = os.path.getsize(file)
63
+ size_mb = size_bytes / (1024 * 1024)
64
+ print(size_mb)
65
+ return size_mb
66
+
67
+ except Exception as e:
68
+ print(e)
69
+ print("error!")
70
+ return "error!"
71
+
72
+
73
+ def safeFile(file):
74
+ safe = is_safe(file)
75
+ if safe:
76
+ print("true")
77
+ return "true"
78
+ else:
79
+ print("false")
80
+ return "false"
ShadowB/search.py ADDED
@@ -0,0 +1,50 @@
1
+ import sys
2
+ import os
3
+
4
+ try:
5
+ import requests
6
+ except ImportError:
7
+ os.system(f"{sys.executable} -m pip install requests")
8
+ import requests
9
+
10
+
11
+ def search_by_username(app, username):
12
+ platforms = {
13
+ ".insta": {
14
+ "url": f"https://www.instagram.com/{username}/",
15
+ "error_indicators": ["this page isn't available", "page not found", "cannot find"]
16
+ },
17
+ ".fc": {
18
+ "url": f"https://www.facebook.com/{username}",
19
+ "error_indicators": ["this page isn't available", "page not found", "content not found"]
20
+ },
21
+ ".yt": {
22
+ "url": f"https://www.youtube.com/@{username}",
23
+ "error_indicators": ["this page isn't available", "404 not found", "does not exist"]
24
+ }
25
+ }
26
+
27
+ if app not in platforms:
28
+ return "false"
29
+
30
+ target = platforms[app]
31
+ headers = {
32
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
33
+ "Accept-Language": "en-US,en;q=0.9"
34
+ }
35
+
36
+ try:
37
+ response = requests.get(target["url"], headers=headers, timeout=10, allow_redirects=True)
38
+
39
+ if response.status_code == 404:
40
+ return "false"
41
+
42
+ page_content = response.text.lower()
43
+ for indicator in target["error_indicators"]:
44
+ if indicator in page_content:
45
+ return "false"
46
+ print(f"url : {target['url']}")
47
+ return "true"
48
+
49
+ except Exception:
50
+ return "false"
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Adem mzoughi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.1
2
+ Name: ShadowB
3
+ Version: 0.1
4
+ Summary: ShadowB is an all-in-one Python toolkit that bundles a wide range of everyday utilities — system info, image steganography, temporary email, QR codes, CAPTCHA generation, password tools, file safety checks, and more — into a single, easy-to-import package.
5
+ Author-email: Adem mzoughi <ademzoughi1312@gmail.com>
6
+ Requires-Python: >=3.8
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+
10
+ # ShadowB
11
+
12
+ **ShadowB** is an all-in-one Python toolkit that bundles a wide range of everyday utilities — system info, image steganography, temporary email, QR codes, CAPTCHA generation, password tools, file safety checks, and more — into a single, easy-to-import package.
13
+
14
+ Instead of installing and learning a dozen different libraries for a dozen small tasks, `ShadowB` collects the most commonly needed helper functions in one place.
15
+
16
+ > 100% open source. No telemetry, no analytics, no external server. Every function runs **locally** on the user's own machine — nothing is collected or transmitted by the library's maintainers.
17
+
18
+ ---
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ pip install ShadowB
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Table of Contents
29
+
30
+ - [core](#core)
31
+ - [getD](#getd)
32
+ - [search](#search)
33
+ - [captcha](#captcha)
34
+ - [qrcode](#qrcode)
35
+ - [mail](#mail)
36
+ - [safe](#safe)
37
+ - [image](#image)
38
+ - [passwords](#passwords)
39
+ - [Responsible Use](#-responsible-use)
40
+ - [License](#-license)
41
+
42
+ ---
43
+
44
+ ## `core`
45
+
46
+ Basic package metadata and bootstrapping.
47
+
48
+ ```python
49
+ from ShadowB import core
50
+
51
+ core.start() # run core app fro : create passwords or usernames / organize the working files
52
+ core.owner() # -> "Adem mzoughi"
53
+ core.team() # -> "Adem mzoughi, Berlin, Shadow"
54
+ core.hp() # print help / usage info
55
+ core.vr() # print current version
56
+ ```
57
+
58
+ ---
59
+
60
+ ## `getD`
61
+
62
+ Local system & network diagnostics — useful for things like monitoring your own machine's load, debugging your own network setup, or quick scripting.
63
+
64
+ ```python
65
+ from ShadowB import getD
66
+
67
+ getD.my_ip() # your public IP address
68
+ getD.my_data() # IP, country, and basic PC specs (CPU/RAM, etc.)
69
+ getD.get_cookies(filename) # export your own browser's cookies to a local .txt file
70
+ getD.scan_open_ports() # check which ports are open on a given website
71
+ getD.whm() # print the current working directory (e.g. C:/Users/Pc/Desktop)
72
+ ```
73
+
74
+ > ⚠️ `get_cookies()` reads cookies from **your own** browser profile and `scan_open_ports()` should only be run against hosts you own or are authorized to test. See [Responsible Use](#-responsible-use).
75
+
76
+ ---
77
+
78
+ ## `search`
79
+
80
+ Look up whether a username exists on a given platform.
81
+
82
+ ```python
83
+ from ShadowB import search
84
+
85
+ search.forgot.search_by_username(app, username)
86
+ # returns True (and prints the profile link) or False
87
+ # app: ".insta" | ".fc" | ".yt"
88
+ ```
89
+
90
+ ---
91
+
92
+ ## `captcha`
93
+
94
+ Generate CAPTCHA images.
95
+
96
+ ```python
97
+ from ShadowB import captcha
98
+
99
+ captcha.generate_captcha("captcha") # image name
100
+ ```
101
+
102
+ ---
103
+
104
+ ## `qrcode`
105
+
106
+ Generate and read QR codes.
107
+
108
+ ```python
109
+ from ShadowB import qrcode
110
+
111
+ qrcode.generate_qrcode(text, "qr") # create a QR code image
112
+ qrcode.scan_qrcode("qr.png") # -> decoded text (str)
113
+ ```
114
+
115
+ ---
116
+
117
+ ## `mail`
118
+
119
+ Disposable email creation and sending (Gmail SMTP).
120
+
121
+ ```python
122
+ from ShadowB import mail
123
+
124
+ mail.create_email() # -> email, password, token
125
+ mail.get_msj(token) # -> list of received messages (id, subject, body, ...)
126
+ mail.send_msj(sender, app_password, to, subject, body) # send via Gmail SMTP
127
+ ```
128
+
129
+ ---
130
+
131
+ ## `safe`
132
+
133
+ File inspection and sanitation helpers.
134
+
135
+ ```python
136
+ from ShadowB import safe
137
+
138
+ safe.safeFile(file) # -> True / False
139
+ safe.size(file) # -> file size
140
+ safe.name(file) # -> file name
141
+ safe.ext(file) # -> file extension
142
+ safe.clean(file, check_list) # -> True / False
143
+ safe.cleanText(text, check_list) # -> True / False
144
+ ```
145
+
146
+ ---
147
+
148
+ ## `image`
149
+
150
+ Metadata and steganography utilities.
151
+
152
+ ```python
153
+ from ShadowB import image
154
+
155
+ image.expMetadata(img) # read EXIF / metadata
156
+ image.check_img(img) # -> True / False (contains hidden text/file)
157
+ image.extr_file(img) # extract a hidden file from the image
158
+ image.extr_text(img) # extract hidden text from the image
159
+ image.removeMetadata(img) # strip metadata (useful before sharing photos)
160
+ image.hide_text(img, text) # embed hidden text into the image
161
+ image.hide_file(img, file) # embed a hidden file into the image
162
+ ```
163
+
164
+ ---
165
+
166
+ ## `passwords`
167
+
168
+ ```python
169
+ from ShadowB import passwords
170
+
171
+ passwords.check_strenght(password) # rate password strength
172
+ passwords.create_password() # generate a strong password
173
+ ```
174
+
175
+ ---
176
+
177
+ ## ⚖️ Responsible Use
178
+
179
+ `ShadowB` is a general-purpose utility library, similar in spirit to combining tools like `requests`, `browser_cookie3`, `psutil`, `python-nmap`, and `Pillow`-based steganography helpers into one package. It performs no network exfiltration on its own and contacts no third-party server.
180
+
181
+ That said, several functions are powerful and should be used responsibly:
182
+
183
+ - Only run `get_cookies()` against your **own** browser profile.
184
+ - Only use `scan_open_ports()` on systems/websites you **own** or are explicitly authorized to test.
185
+ - Respect each platform's Terms of Service and applicable privacy laws when using `search.forgot.search_by_username`.
186
+ - Don't use the steganography functions (`hide_text`, `hide_file`) to conceal malicious payloads or to deceive other people.
187
+
188
+ You are responsible for complying with local laws and the terms of any service you interact with through this library.
189
+
190
+ ---
191
+
192
+ ## 📄 License
193
+
194
+ This project is licensed under the [MIT License](./LICENSE).
195
+
196
+ ---
197
+
198
+ ## 👤 Author
199
+
200
+ **Adem mzoughi** — 2026/23/06
@@ -0,0 +1,38 @@
1
+ ShadowB/__init__.py,sha256=64nyKYQ2Nb7ryAO13777RNzqEzFM2kTk14Zz6kIUZcU,977
2
+ ShadowB/captcha.py,sha256=A5GX8uumLsgvCb5POhicMTLSXpdZCj6QX0DL5Ta8d_U,2336
3
+ ShadowB/core.py,sha256=JZ2Xq_TC_pX3sjYCSjIowwJYDQPdi5oAkMGiFIP9ga8,4456
4
+ ShadowB/getD.py,sha256=X1gLgaiE1nmEZnl78PpoihHK-gra7AK6XrdQgKsyQLo,499
5
+ ShadowB/image.py,sha256=E3YcNAtlHx45aQAD3bw25valerXZx_YKp5xuYPXgfJI,816
6
+ ShadowB/mail.py,sha256=iivGLz7uw7v7_pigwS3bffNTIufC4iv_pAPJb0VqucM,646
7
+ ShadowB/passwords.py,sha256=6GkqLCnn3ppCRHtLbwkmXCTLbFeTKfRjgNcd0LzQ06Y,1439
8
+ ShadowB/qrcode.py,sha256=vGu4lBIhVyrs9evNq-KKI4FVRI1nOKJshdRiwX98F5Q,210
9
+ ShadowB/safe.py,sha256=vI7JL9gC4q-gykl8sFQUKt9j9JzX0CMsBHOHogKEYGk,1680
10
+ ShadowB/search.py,sha256=1zpflijUJffPKyKXSxaPvmWfIcxIC5H_yw8VUdIEcpo,1586
11
+ ShadowB/Core/fileorg.py,sha256=LuHPNwKp7CqFDm0OKcoFzF2l3Lxg3yBHiX_is9Vpam0,1280
12
+ ShadowB/Core/randwords.py,sha256=cOJ5x4KtUJuw06BvJ4xJLggOMF0P320yRVYqCZdmQTE,2965
13
+ ShadowB/GetD/make_cookies.py,sha256=teQF0BT_AAENLRVGFfhyll-QYtP1v1KHsb4O3BvWT64,842
14
+ ShadowB/GetD/my_data.py,sha256=RcK066rc-lv9tHUAA7V1_AXudZ5pmF7S7TkYBG947v0,2489
15
+ ShadowB/GetD/my_ip.py,sha256=c41XVHky--U0NfI4GmIFQ86z3rk0Pn872ldwhAW1MZY,285
16
+ ShadowB/GetD/scan.py,sha256=IQBnMIQkeRlRdo-O4o9m37JIEtDsMf0ruyb4R5R-5qg,2043
17
+ ShadowB/Image/check_image.py,sha256=UXNJohgg50vYybt8Si4qlHhTEsCpp8F0AjjSaJ0LVLo,900
18
+ ShadowB/Image/export_metadata.py,sha256=shI16Npbeb0r8shw2TlXIrs_BXdXz_2WnLqOmOOjK_Y,3198
19
+ ShadowB/Image/extr_hidden_files.py,sha256=K4TWowX9wZ4SJk-f-GVEtmPxvKpspNx3rN4TT0iLi-k,1358
20
+ ShadowB/Image/extr_hidden_text.py,sha256=jEZk7e0xk15BYc1ed07KqOEHMBOP3EysPsNpeKVejbM,1067
21
+ ShadowB/Image/makeFile.py,sha256=cp5kuos4icHeHKCTyVW49GUdmKqDN9EZXFcM037rhdc,1557
22
+ ShadowB/Image/makeText.py,sha256=nimXdRJeU1n-7dpBsUN9RT61SVzeA6nHcuLxbTcpRzQ,1147
23
+ ShadowB/Image/remove_metadata.py,sha256=2xJtGqDBY9JfoJnrzBeTa1p4Z-iEX8YXBhsUoE75TwA,1383
24
+ ShadowB/Mail/make_mail.py,sha256=qHWl1yKLX3NvxaN1r6glOPirnL1s9tz1S9o-7k62dd8,1007
25
+ ShadowB/Mail/res_msj.py,sha256=10fQuGs4L1jV1yG4v5m6JhToskgfY--DOj-VMepgSic,1135
26
+ ShadowB/Mail/send_msj.py,sha256=wxrRkrPylT48xBMtTN0NlatL7BKj617aNtfV43C_IQY,360
27
+ ShadowB/Qrcode/generate.py,sha256=j4RvEXasEJBFcQK5whRGNwenbpNwxnDjBXKNgbcs2g0,811
28
+ ShadowB/Qrcode/scan.py,sha256=8cSCsF7i9rh9K7r_eB3WEeSQDIVddwHR58FfqaX8nyE,556
29
+ ShadowB/Safe/clean.py,sha256=-DJOhA5HTk-AFyIekWFtGWtjo9-pCy7dLJ59-bUKRiw,3176
30
+ ShadowB/Safe/cleanText.py,sha256=FY-MdaJ8TwhldAmokuByyY9LCGqibRw2S79c6mu6syo,1178
31
+ ShadowB/Safe/ext.py,sha256=ZRwNv2UmqKai0yXm4jVgHe-fMkoCv1vH0CaUpGd17E0,93
32
+ ShadowB/Safe/filename.py,sha256=JqbZAPecfJx-pYNOMnvWEaosCjjJGiXpwNe6lFyf1rE,119
33
+ ShadowB/Safe/safeFile.py,sha256=M_IVDdjmppqS33Sf878n2b0oIRpp3nrcRONbRKiJlVQ,4649
34
+ shadowb-0.1.dist-info/LICENSE,sha256=S_b4SfEqucyYPdy-YlOD9_oYeV0R0UVboe91jg_3k30,1069
35
+ shadowb-0.1.dist-info/METADATA,sha256=7wpnlrD2OR8x5NXWTTqgbN3ZVi72TjoiGIdhLKieB5c,5998
36
+ shadowb-0.1.dist-info/WHEEL,sha256=BNRMDyzLkkcmlv0J8ppDQkk2VED33SesJDynr9ED1gc,91
37
+ shadowb-0.1.dist-info/top_level.txt,sha256=JWFMWpuhlb6-_wmOs4KrLgXGKhTP1OQgbF5XabVT8a8,8
38
+ shadowb-0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.3.4)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ ShadowB