SQLite3 Multiple Ciphers combined with Another Python SQLite Wrapper
Project description
About
This project packages 3 things together
Another Python SQLite wrapper, providing complete access to SQLite3 from Python.
Small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is configured with secure delete turned on, and to use memory for temporary storage.
Extends SQLite 3 to allow reading and writing encrypted databases.
The distribution is entirely self contained, and does not use or alter any existing SQLite you may already have on your system.
Installation
Available from PyPi. Binaries are included for most platforms, and pip will build from source for the rest.:
pip install apsw-sqlite3mc
Usage
Use as you would regular APSW. You can check the version of SQLite3 Multiple Ciphers with apsw.mc_version.
For encrypted databases you need to use the relevant pragmas to set a passphrase based key, or a binary bytes based key:
connection.pragma("key", "my secret passphrase") connection.pragma("hexkey", b"\xfe\x23\x9e\x77".hex())
Setting the key on a new database is the only change needed to your code.
>>> import apsw
>>> print(apsw.mc_version)
SQLite3 Multiple Ciphers 1.8.7
>>> con = apsw.Connection("database.sqlite3")
>>> con.pragma("key", "my secret passphrase")
ok
Note: The ok means the pragma was understood. It does not mean the key is correct or has been applied to an empty database. See the next section on best practice to check and apply the key.
Note: key only sets the key for following reads and writes. If the database already has content, and you want to encrypt it then use rekey which will modify the database to apply the supplied key.
Alternately you can use URI parameters. You need to correctly encode the filename and parameters, and tell SQLite that you are using a URI name:
import urllib.parse
import apsw
uri_filename = urllib.parse.quote("my db filename.sqlite3")
uri_parameters = urllib.parse.urlencode(
{
"cipher": "aes256cbc",
"kdf_iter": 8192,
"key": "it's a secret",
}
)
con = apsw.Connection(
f"file:{uri_filename}?{uri_parameters}",
flags=apsw.SQLITE_OPEN_URI
| apsw.SQLITE_OPEN_CREATE
| apsw.SQLITE_OPEN_READWRITE,
)
Best practice
SQLite has various quirks in how it operates. For example database files are not populated until the first write. SQLite3MultipleCiphers can’t check keys are correct until the first access, and the database is populated. You shouldn’t set or change keys while in a transaction. In order to ensure files are populated, and the keys and cipher configuration provided are correct, use the following method with example usage shown at the end.
import apsw
def apply_encryption(db, **kwargs):
"""You must include an argument for keying, and optional cipher configurations"""
if db.in_transaction:
raise Exception("Won't update encryption while in a transaction")
# the order of pragmas matters
def pragma_order(item):
# pragmas are case insensitive
pragma = item[0].lower()
# cipher must be first
if pragma == "cipher":
return 1
# old default settings reset configuration next
if pragma == "legacy":
return 2
# then anything with legacy in the name
if "legacy" in pragma:
return 3
# all except keys
if pragma not in {"key", "hexkey", "rekey", "hexrekey"}:
return 3
# keys are last
return 100
# check only ome key present
if 1 != sum(1 if pragma_order(item) == 100 else 0 for item in kwargs.items()):
raise ValueError("Exactly one key must be provided")
for pragma, value in sorted(kwargs.items(), key=pragma_order):
# if the pragma was understood and in range we get the value
# back, while key related ones return 'ok'
expected = "ok" if pragma_order((pragma, value)) == 100 else str(value)
if db.pragma(pragma, value) != expected:
raise ValueError(f"Failed to configure {pragma=}")
# Try to read from the database. If the database is encrypted and
# the cipher/key information is wrong you will get NotADBError
# because the file looks like random noise
db.pragma("user_version")
try:
# try to set the user_version to the value it already has
# which has a side effect of populating an empty database
with db:
# done inside a transaction to avoid race conditions
db.pragma("user_version", db.pragma("user_version"))
except apsw.ReadOnlyError:
# can't make changes - that is ok
pass
con = apsw.Connection("database.sqlite3")
apply_encryption(con, key="my secret key")
# you can also do more sophisticated operations. Here we change the cipher,
# kdf rounds, and the key
apply_encryption(con, rekey="new key", cipher="ascon128", kdf_iter=1000)
Verification
You can verify your database is encrypted with a hex viewer. Regular database files start with SQLite format 3 while encrypted database files are random.
$ hexdump -C database.sqlite3 | head
00000000 e1 3e f0 7c 5e 66 4c 20 19 85 9d de 04 d9 e8 e7 |.>.|^fL ........|
00000010 10 00 01 01 20 40 20 20 29 2e cb 95 ef 4e 4e 67 |.... @ )....NNg|
00000020 22 a1 5a 8f 18 1a fa a1 cf b3 a8 ba b1 80 07 b5 |".Z.............|
00000030 2f 68 4d 8a 13 26 fd 6a 0c 99 5a a4 2c a7 f3 a7 |/hM..&.j..Z.,...|
00000040 d9 ae ef 24 dd 1c d1 9c cc 91 4b e8 58 00 96 62 |...$......K.X..b|
00000050 b2 aa 51 bf 57 8e 9a a9 d7 6d b2 75 58 84 f6 7d |..Q.W....m.uX..}|
00000060 c9 fd a9 57 88 05 ca 60 7f db d1 73 40 ad 98 59 |...W...`...s@..Y|
00000070 c2 a0 4c 76 f5 88 31 d3 d7 6f 9e ef f6 c1 c4 88 |..Lv..1..o......|
00000080 92 ed 8a 3e 00 ce 35 ef 4b 0d 38 33 9a 61 88 8a |...>..5.K.83.a..|
00000090 34 37 72 70 4b 33 f3 1d a2 4b 86 5f c5 59 02 c6 |47rpK3...K._.Y..|
$ hexdump -C regular.db | head
00000000 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 |SQLite format 3.|
00000010 10 00 02 02 00 40 20 20 00 00 00 95 00 09 22 e6 |.....@ ......".|
00000020 00 08 eb 8f 00 00 ff 8c 00 00 03 d5 00 00 00 04 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 95 |................|
00000060 00 2e 7a 70 0d 09 30 00 09 08 c9 00 0f a9 0e d5 |..zp..0.........|
00000070 0e 70 0d f7 0d 8c 08 c9 0c 67 0b 2f 09 71 08 db |.p.......g./.q..|
00000080 08 db 08 db 03 ae 03 55 03 55 03 55 03 55 03 55 |.......U.U.U.U.U|
00000090 03 55 03 55 03 55 03 55 03 55 03 55 03 55 03 55 |.U.U.U.U.U.U.U.U|
Support/Discussions
For SQLite questions, support, and issues, use the SQLite Forum.`
For APSW questions, support, and issues, see your choices.
For SQLite3MultipleCiphers questions, support, and issues see the project page.
For APSW together with SQLite3MultipleCiphers questions, support, and issues see the project page.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a621c64ac57c81f9fd97a49028493638f8dc206bd1dd69e0cf0bec7b34cef8e |
|
MD5 | 7895eafa3d4d087c39999c5fa0aaeae6 |
|
BLAKE2b-256 | 3b5f4d97cd8008a3cbf898b57bf604ef8616189be9dc1da97c376924f208d96b |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 30067b5cebadde2454886016d4cc94c10d0532397c9c5b5073fa12c1466f0829 |
|
MD5 | eaca6e2fa0b6a6ae637843d0fb38a4cc |
|
BLAKE2b-256 | 128477efe2ddaede69b25aaf44bc25e2e500d4b024f04870c9d6ecbdbbe04e60 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 07a6d85e701b3fc298bd5321d7a817278713de49a29ddef1721a17ef2cd1f689 |
|
MD5 | 92376f18563e264daf38f8ee7c4d7ec7 |
|
BLAKE2b-256 | 451d4d5caa92bd3f251ea3b18c6cd5aa75a8e59372609dc16aa804c6e2b8e831 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44342a4fac2da8d096dcae86e746713e86f7f329541014b220966d94f55372be |
|
MD5 | 34db822b5fe9fa086d08c9d1cf4b070f |
|
BLAKE2b-256 | c61cb4ddd8fee93c9d78e777f2994cb0e45a8a6d380da2d6ecab2fe72523311e |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27bc7b12d72209f528d1ce8852f6b5c561d15f06b481faf5b75b323c86d796f0 |
|
MD5 | 4a914356224c5b9e13dda906a645fe17 |
|
BLAKE2b-256 | b981210ab361457a0f44c0a98fafb4e6c57e3c8d87cfa5da2d442ff383c2983b |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13ffe496a29089a0f37f78e6b8fe64c1f53cf52c971eac56ea66dfbce9106b5f |
|
MD5 | 8ea81cc495bcb046f95755fdc6963ff6 |
|
BLAKE2b-256 | e4f99e58e61942b42994b1a8dc200180251d40623bb6637cfd055ef811df56e5 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7a6764df353df17225e8e3d6850720829bb169d6d0bc137242ab1a09cd6797c |
|
MD5 | 88fcb27fcd2e1a061c66de764d1486a0 |
|
BLAKE2b-256 | 8cbb5d7ef9d3a12b7f763cf0ea7012a666d8983811d826762303032986d82eef |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9ff43dad6a9bc441213c651e886816a70ff9c6af44d99bd9d3d5926406be977 |
|
MD5 | b24415a62ae190e280888b6a0e2028ab |
|
BLAKE2b-256 | 97cf4d4a22a68bf89d66abec8d1b1229c04ac3c212bf332fb0a17814a6732946 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ed79f2aa3016de077535b83c842b5ba52529300c6cb68b671896cb1e64d194d5 |
|
MD5 | d45a88dd50ee482fca274e5cb708b0fb |
|
BLAKE2b-256 | 71ff5e5d20bb36106cba31dfad9d23f870124f737b5b785dab049064fb9531d6 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 933d5395d49faee3a17fd37adf81f4a83fd11f0d4c2273864f5de08142aed28c |
|
MD5 | 2021bc2c6862d1107257c71f8f700a15 |
|
BLAKE2b-256 | 3cfbff2f3fe9f2f78b7e86028e165f180d075ca3efff643dc5e9e42610c65b30 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aec61a5dd1b395b28e7658d1cd3e698ce870dc6a1d12b2f9ae267c826db5662b |
|
MD5 | 5c6a9feb8e28f3979dd99f01f17e9ff0 |
|
BLAKE2b-256 | 4e863b2498c96044a0a49a957667ec8f7ac01cd7bf4d18dbd97c5c68593f1efe |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4cc3a944cbba5664f6c14038a3b772e3c8b45d04c31926e4466b0095e1a58d0 |
|
MD5 | a530c298179acbe268cd8b542bfdb5fd |
|
BLAKE2b-256 | dce8dc4d29fb429a3e507f6b5385bfd9f4b59ad5b2425990e57cc6fc91455bc2 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d158c1238647b18445ed97f97c8036f75dd45d630d83fb261d6b555e7532acff |
|
MD5 | a44d3d31ea7be744079526c263f09aad |
|
BLAKE2b-256 | 5aa7b22c3e3e6e45a8dda8e8f01433d40649fa6f57bd0645cc237386d2fe96df |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a7123b6c896bd4befa6edfd0accf9024aaa77e93ebb88e20713ca30cfd7dcde |
|
MD5 | 8b06a7a0b70c0135205a021b0bc9f41f |
|
BLAKE2b-256 | a702e8154f5385821f28db02fc19d6147f6a981705e2dc57a44a0e3ac5074a83 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32cd9893fccbe8a482a13b755c5e996909a245a32ea6b953a0da468b360af6bf |
|
MD5 | 8ff3f151435d419d94f63d9160ff458e |
|
BLAKE2b-256 | 4bcfd218ce3fe165f659f95f963490017c39d8556126ac066d2d98617728d06a |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb1a76b1c6428d83b6ed9ab27da9af9bfddc5d23ccc520b45c385dc89189ed62 |
|
MD5 | 485c821baa4496fb21f04074af0598ed |
|
BLAKE2b-256 | 5f4b79784e43a7c35a513f386e89cd895b1a4f57b37a9e42ed95668a5354cae4 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 797885d7036473cf082152e9d0fb7bc599a4c9d8f9c8534256dda80e4f61a4bd |
|
MD5 | 7a261eab9c92664a91c3ab4d11dbfd1a |
|
BLAKE2b-256 | 1db481ba0d652a6ecbd09ca3f6e1b4d1014290650448684b1a29467302037b08 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4f41f3b5a58f9e5437a0f7cfe0c4bfb906f25cb75858ddf44a1ccc32522a562 |
|
MD5 | d3b272d80e32f8ba36fdd2263064ca5a |
|
BLAKE2b-256 | ea18dedb0d887d536eebe55d92b2f814cb6cf57daec76b5863b0f2f378a26d94 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 093dc36ed52ffdd9f7f47749b0c5df332ee36e2be1097554d9cf9d4ec1acdcca |
|
MD5 | aab306c252e5989e4be1cc637a802489 |
|
BLAKE2b-256 | 39242443c106e9f19f13e21040af9875ce9eddcb5b12a1c1681f16eaceca938a |
Hashes for apsw_sqlite3mc-3.46.1.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d959578feccb087f10f9521187771d0a2649f2d20c4e98739f31418c1f79c60 |
|
MD5 | 09914174608d6375c1adb7bb3186c3da |
|
BLAKE2b-256 | e6b658bd7055eb710dc5e8c6e3e4858f3c53bf9a023d2e482a56cfaedfc2f394 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f483ee1a5f9864a208258308be45c8eaf8f2f1026b0fe04e3e7e249bcd8c286 |
|
MD5 | b5f3b7ae7ff846c28d424993a92675f3 |
|
BLAKE2b-256 | f2ade5090fa5446669db2ebb82d9cf5129c25ce112ed0159e169625adcdfa45e |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 707236ebb49efce184ef1e4031d460c4b944a0cd2a490f08d549fd5fb817c452 |
|
MD5 | 2c3e24e8a5cedd3c5e0bf1f61aba7653 |
|
BLAKE2b-256 | 1786ee70af45994b56a513a6e41d150e727e50f72d2711bf05e4a2686d859fc2 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b034fabc133a888fda3bc79989e078105043adf703f668a1d573d34110915801 |
|
MD5 | 04ef494537cecf4bda4885971ab5918f |
|
BLAKE2b-256 | d4598d157472aadbea75de104ede60351bb994dc027f50706d5600f564cab957 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c222cf7ec1a72954c716703342db2a0cb0dd71e67b707a3dae2906e068c24542 |
|
MD5 | c21c8695872893ce8a4af8583d8ec04a |
|
BLAKE2b-256 | aadbc863e63e33d2292e0a31bbdcca2e8d17ac6b22dd1997165ef95bf6319562 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6f4c20dc7db55718dc2595fda51ac582971d5cddad8d865a09520a36df9467c |
|
MD5 | 8080b66f72c3abbd46e715687a8b677d |
|
BLAKE2b-256 | 4c01ae3bdbc2ff4163ef987cf0c2257424dba130f761500a7340ff0a79cc4550 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d58c2fd815c5986f793e8026d5f5ce7b8c6d6c6445ec3356f0ad94b96ab4cf4 |
|
MD5 | 250c46840134b84593da23f1aed13649 |
|
BLAKE2b-256 | e93652bfbc3949f110f5f96e6ae61f5630ca1ec43312d91d1a075c68899f8cf4 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 93517eb50407afd3499d8ea763930256aadad4c015cb23acbb2362c68ff0e61f |
|
MD5 | b7159e4fb2a44680115b8e132fb7d85e |
|
BLAKE2b-256 | fdafeea68f9ce3160f450d7e72f139842248f3d0a7387874d33820198c8e4152 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f45818913715ad0be7938a5bc00a125ea450ace1b67463e727d9f8e99ea332f7 |
|
MD5 | 910c0bbc308db05c4adad0e7995646c6 |
|
BLAKE2b-256 | 45c5a8df33442c892057a11ca35e10aecff3fcf380c01b03bcff1c99f2709bb5 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca295bfbaf0bcd58d5f7498b8848b75805947bf56f21ca1f3c5e8c15135a3ab5 |
|
MD5 | 13453ec78f3ecab82f259e9b336c7d70 |
|
BLAKE2b-256 | 881714d0e35e84b11b22be64b8a9f59b7778510d2829efa1030b4f4c4929c6b5 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a710ec19b8b8743610e1eb52755f32ec32833e0b453ccc44914d49bf64e986a0 |
|
MD5 | 94fe6c0d20521f507642ec2ce4aa0f5f |
|
BLAKE2b-256 | 781a6033d5fbd5cdd1c3cb4b2c8fe8a9ed8289d9df447f109dd3e7cfa8a633f9 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87629c83a4a51f38ed2bc595dc54eeecf68fbdb86a3131c475f9749ac61a7583 |
|
MD5 | 6327927c869aa10283ccff650c3459bc |
|
BLAKE2b-256 | 10b119f1e31885a7cfe49b09e4cd61e487b42a7e6d9bc04ffcae6ce7dadc8688 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6063d725cac9ea1f1f6927296b05f9db7f4d6119a6b474fd068facbefc17be13 |
|
MD5 | 8b7f33b568c1669c417cebe6b697f0ab |
|
BLAKE2b-256 | 7c2480674b30e45814d23dcab50ca6f7ad2755e626eb18e050e34862aa32fcc9 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c16adfa2e61e01f86ef05d08ea3802d4aa09f2267333a127a9fb32354d19905 |
|
MD5 | f9ec5734f4bdb726521105c02e89b2c3 |
|
BLAKE2b-256 | 70acdde67cb0800244621addb9ae77fdfd11378fcb59a254de16c60e41c7f93b |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c76e9bfc569180ad6f4f991b922730b1e519e1a7ee04763ddf2a28b87844dac |
|
MD5 | e01e4eddd54def5813fd5ef0e1b1fce7 |
|
BLAKE2b-256 | 273920fcf763c876eda6c2dead7695ebc9e1384f758662302f6ef540e5b0da67 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2953eff73c0116bf3e2f1b899d1b9a32dfdd08b8b7717901b7905a58bbe9b82d |
|
MD5 | 1d424216c702a433c1fde102c0d1fb33 |
|
BLAKE2b-256 | c0624e5ec15c259051e5465a2301899e1947db91c30167fadbbf401fdc76c151 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1177e381b9511bc6c1312f68fa9d638785d81d10a680a0f909443f823e0bda4d |
|
MD5 | 317b72f5d12246d3bb0c2bf04ddaec44 |
|
BLAKE2b-256 | c1a5fc255fc5c500b12531c01069345868dfa64b274520092c7081fb80689478 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffadece1d7e9aae44e63d8320ee51b11915b0752c3857e03df4082f59f21c5ed |
|
MD5 | f9344bfa1eff24b514d7161c892ce651 |
|
BLAKE2b-256 | 8230aa910eb759daad1c9d81a324fd9bfbf611736f6431a451b4b50cb81c3ee2 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccc365eaca833bbeb35a09ba4ca230fc3456f7f5dbcf9516e113b39bd02bed01 |
|
MD5 | d4b449bbeb23838e683d5ad7ca0acb61 |
|
BLAKE2b-256 | d0a93bc21ea29c8e9927544f0f3cacdf9c8176bcddf0230b58d71703156cd0f5 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 291261f34412d8e2a4437b8e8606907b3133b723f7d80b72de1dbf0fdbc8a802 |
|
MD5 | 224872b3ec4a2f981d9e12be9f11b0c5 |
|
BLAKE2b-256 | 1f5e245df6cde77d1e554898e99ba381a0893970127b1d88d38b7bec8918e31d |
Hashes for apsw_sqlite3mc-3.46.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcdf543b52db5bcdc4b874deb632c5f5cf8505fa3c068206dbbe022dfa0bc389 |
|
MD5 | d1484760ace172d3dc71ba0740e5f02d |
|
BLAKE2b-256 | 4e3c9884e3c14f48ed0a52a854abde40aea6569ccff9107ef977a5e9c2e196bb |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1ebf079e400faef596e87bd5e457d8fc44d763187b5aca0de3579c93338ec27 |
|
MD5 | b71e46a16612daa5666a4687627a6dda |
|
BLAKE2b-256 | c612409b0d45e109c7c4232891cc2a98dac55d8af42e547bb382fd0505923d07 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00bd2b6a385933b22f39e34f4ae46f3fc9d9069c12663978134d428400e993b0 |
|
MD5 | 848e79a1bc7eacb350cf6b95745bdc89 |
|
BLAKE2b-256 | 602895b844330f3886dcde469d49e2be7a23e8e7f82f81309693678a15440cae |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 281fdf533b90515a21277496ad802ff0f151c496796cf7fdac52696c70fdaa3f |
|
MD5 | d30bbade2b929548ef705252502b4652 |
|
BLAKE2b-256 | a057344dcbce73ba43c5e0b1660fd7b95799d81be900296db25de74806cd7733 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e54f676c3f336128997a8f2e608ebd2a0b643c71fbce40da386678d274cff8d3 |
|
MD5 | b9c8c39bf1b3761d32490787e640aa13 |
|
BLAKE2b-256 | f85179bec80cc88835b5c9740f87d9bad1f7fdb10ad488bc9c81b5dc03f98d3b |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21cf1c25d5f505385f64eac9e5b17bd63da4e1f00c30cbc72fa307b1ca26a641 |
|
MD5 | 1585e9335c1f16de7ec862f8e030eae6 |
|
BLAKE2b-256 | d0ca2209f0a462fc23588814eb90524b89bf22b11c0447581bd7d0e55ef07198 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b72ced503b2f817210612276db52781cddece9d9cba58a57b3679520b2f7ed2 |
|
MD5 | 175189167075556fc7f7087715d10f1c |
|
BLAKE2b-256 | b758b1217a6c171eaa8df2aef1553a4ba6458cf7faeca5fc847ba8826e614d10 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c153b367485a729a78c3badf69ad81550130cb69f02f4eec6fc5a69c1eb3192 |
|
MD5 | 87a3ef87e2c69a17937fa028c2b64894 |
|
BLAKE2b-256 | 5248416c58ee41fd04135a1b34474b557a8f142311d6990b580c895a4a39f648 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13a8bbc82834dd5473392a3f4f3c8bf83220b4f7534d243159c3700353d07197 |
|
MD5 | a738931beb8bbaa895967e97d2fbb375 |
|
BLAKE2b-256 | 40be962797e4d7b099a7626f27a691711a15d26719287f811db7dc7a42926fa3 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b736b0f5bcff66d1d9eaae383bc65f07f214439c7d81417ec2fbd462ec56099 |
|
MD5 | a82ad3cb75bef125974dafea9e0d2092 |
|
BLAKE2b-256 | d8e003a4168421e9053f5f714fd0355327915dd53d137e1a1e2f4c9cec4ea381 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 440851a1a1f146ae84e85d9e37c83113b96d6794531805d10da605464347fb1a |
|
MD5 | 83ed4e251fa3a9b1a55739dd08b42e90 |
|
BLAKE2b-256 | fec3ed5e7727818b6db4779af2c9f53df73080658d0829a0f240962724ad8e3d |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97030b976a32c7d7f657c1959b7ff7fa3c22ae1b0db97b620c57c514c98a7e1d |
|
MD5 | 3a89c2b1b4af6806b30d4b5c520c28fe |
|
BLAKE2b-256 | 35ca5f9c772ebefbdbebabd1ed79e48aeedd92cdaf7a73f9846938aafaedf431 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d34872143b9312124a0fafad66b9dbfcc245c3596637482115cb43023bd6f5c5 |
|
MD5 | ef146bb0573f2767b0358cd4278c53b3 |
|
BLAKE2b-256 | 5eee44619822097dd3960789cfffc4af06f0f8e8c4038abab09e69bc8006044b |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0dbccacc3f9a93579a232602868228677f6a8b22c78d2632ffa7b42036cb5fb6 |
|
MD5 | 6d39b193f9cf079dc329cc4310230af1 |
|
BLAKE2b-256 | 9aee8a62826ef6f2dd0f5da69aa454c17504b84e35e613862b75103863dc0bd2 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 944716f6f8f739294d982f8c09064c22e44c8bf753df1903dd669fcf33cae500 |
|
MD5 | 8157ddaca96f6666becdd54c46e246d8 |
|
BLAKE2b-256 | 132682db132eb3edc27621a22787097c07c8ec03b1f3c3ae8c2b486262770408 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85fdc97970f4896f534543a6f9e6f397cc663d0b1c4e1ae2ccaf17c532abd7e8 |
|
MD5 | 096deb55798c061b6b913fe04cb24da8 |
|
BLAKE2b-256 | 61d2613547e6b8b12fff366dd18a68ef7a4f8f839661ed8c8ba7ec1517e28e4d |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01ca0237723cbacb5c544d282bb9a0bab197b05038aa546889deff19718461e7 |
|
MD5 | 652c31d94dd31f3692c39ec262108d1e |
|
BLAKE2b-256 | 45ede92fa372755c2635b2840f07c0a2ba439cd42f18deb7327e1c4293a08543 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5ee3fa7048a53783e933475cbc273973863187b4474dfc8f4c6009ee6513d636 |
|
MD5 | d27d7a3f39f8fa4e3710ee2263285a97 |
|
BLAKE2b-256 | cac29961bf4ea6affe17613ca17795ab6f278fb64cdb5851360e8ed218b39b02 |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33e24778ce111508a68edb7266e2644ca42394c42684268221b2ad92a5857406 |
|
MD5 | 14b960f0919e07ac4a7ce74ddfb57bee |
|
BLAKE2b-256 | be6875f15fafcdecc0838bf714263645ae722327fd2ac68f309c1b25a298902f |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca484a8e0510b062cb080e5d0c01d4cfda015304548b656cbfcb5af20f1ddc14 |
|
MD5 | edac5103fb23e93b72f6f65128a5eead |
|
BLAKE2b-256 | fc31b48a7c77626e08c4fca82f3ccfcadcd7a609702eab7729e84f70a70eafca |
Hashes for apsw_sqlite3mc-3.46.1.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 595a029160815264559e987415e433a54d71cc23ccc01c08c64ceb835ed8aed5 |
|
MD5 | 97ff4db6ebe674192392a61e5c31762c |
|
BLAKE2b-256 | ad0890c04395bc9e89b7c8e69948c8c9089880072f3d102b2b3b208d45856334 |