{"id":15395430,"url":"https://github.com/stef/pysodium","last_synced_at":"2025-05-15T13:07:17.773Z","repository":{"id":10249610,"uuid":"12356475","full_name":"stef/pysodium","owner":"stef","description":"wrapper for libsodium providing high level crypto primitives","archived":false,"fork":false,"pushed_at":"2024-11-14T15:06:53.000Z","size":293,"stargazers_count":131,"open_issues_count":5,"forks_count":51,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-15T02:11:23.543Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-08-25T08:53:58.000Z","updated_at":"2025-03-27T14:52:06.000Z","dependencies_parsed_at":"2023-12-13T02:26:07.821Z","dependency_job_id":"323a93d1-038a-4a19-bbc2-7699f4b3809e","html_url":"https://github.com/stef/pysodium","commit_stats":{"total_commits":239,"total_committers":45,"mean_commits":5.311111111111111,"dds":0.7489539748953975,"last_synced_commit":"baf11790a6bd454441393b5377bad7cc591089ae"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Fpysodium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Fpysodium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Fpysodium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Fpysodium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stef","download_url":"https://codeload.github.com/stef/pysodium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254346624,"owners_count":22055808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T15:28:17.887Z","updated_at":"2025-05-15T13:07:17.716Z","avatar_url":"https://github.com/stef.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a very simple wrapper around libsodium masquerading as nacl.\n\n[![Build Status](https://travis-ci.org/stef/pysodium.svg?branch=master)](https://travis-ci.org/stef/pysodium)\n\nThis wrapper requires a pre-installed libsodium from:\n\n   https://github.com/jedisct1/libsodium\n\nthen it provides access to the following functions:\n\n```\ncrypto_aead_aegis128l_decrypt(ciphertext, ad, nonce, key)\ncrypto_aead_aegis128l_encrypt(message, ad, nonce, key)\ncrypto_aead_aegis128l_decrypt_detached(ciphertext, mac, ad, nonce, key)\ncrypto_aead_aegis128l_encrypt_detached(message, ad, nonce, key)\ncrypto_aead_aegis256_decrypt(ciphertext, ad, nonce, key)\ncrypto_aead_aegis256_encrypt(message, ad, nonce, key)\ncrypto_aead_aegis256_decrypt_detached(ciphertext, mac, ad, nonce, key)\ncrypto_aead_aegis256_encrypt_detached(message, ad, nonce, key)\ncrypto_aead_chacha20poly1305_decrypt(ciphertext, ad, nonce, key)\ncrypto_aead_chacha20poly1305_encrypt(message, ad, nonce, key)\ncrypto_aead_chacha20poly1305_decrypt_detached(ciphertext, mac, ad, nonce, key)\ncrypto_aead_chacha20poly1305_encrypt_detached(message, ad, nonce, key)\ncrypto_aead_chacha20poly1305_ietf_decrypt(ciphertext, ad, nonce, key)\ncrypto_aead_chacha20poly1305_ietf_encrypt(message, ad, nonce, key)\ncrypto_aead_chacha20poly1305_ietf_decrypt_detached(ciphertext, mac, ad, nonce, key)\ncrypto_aead_chacha20poly1305_ietf_encrypt_detached(message, ad, nonce, key)\ncrypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, ad, nonce, key)\ncrypto_aead_xchacha20poly1305_ietf_encrypt(message, ad, nonce, key)\ncrypto_auth(message, key)\ncrypto_auth_verify(tag, message, key)\ncrypto_box_afternm(msg, nonce, k)\ncrypto_box_beforenm(pk, sk)\ncrypto_box_detached(msg, nonce, pk, sk)\ncrypto_box_keypair()\ncrypto_box(msg, nonce, pk, sk)\ncrypto_box_open_afternm(c, nonce, k)\ncrypto_box_open(c, nonce, pk, sk)\ncrypto_box_open_detached(c, mac, nonce, pk, sk)\ncrypto_box_seal(msg, pk)\ncrypto_box_seal_open(c, pk, sk)\ncrypto_box_seed_keypair(seed)\ncrypto_generichash_blake2b_salt_personal(message, outlen = crypto_generichash_blake2b_BYTES, key = b'', salt = b'', personal = b'')\ncrypto_generichash_final(state, outlen=crypto_generichash_BYTES)\ncrypto_generichash_init(outlen=crypto_generichash_BYTES, k=b'')\ncrypto_generichash(m, k=b'', outlen=crypto_generichash_BYTES)\ncrypto_generichash_update(state, m)\ncrypto_hash_sha256(message)\ncrypto_hash_sha512(message)\ncrypto_hash_sha512_init()\ncrypto_hash_sha512_update(state, data)\ncrypto_hash_sha512_final(state)\ncrypto_kx_client_session_keys(client_pk, client_sk, server_pk)\ncrypto_kx_keypair()\ncrypto_kx_server_session_keys(server_pk, server_sk, client_pk)\ncrypto_pwhash(outlen, passwd, salt, opslimit, memlimit, alg)\ncrypto_pwhash_scryptsalsa208sha256(outlen, passwd, salt, opslimit, memlimit)\ncrypto_pwhash_scryptsalsa208sha256_str(passwd, opslimit, memlimit)\ncrypto_pwhash_scryptsalsa208sha256_str_verify(stored, passwd)\ncrypto_pwhash_str(passwd, opslimit, memlimit)\ncrypto_pwhash_str_verify(pstr, passwd)\ncrypto_scalarmult_base(n)\ncrypto_scalarmult_curve25519_base(n)\ncrypto_scalarmult_curve25519(n, p)\ncrypto_secretbox(msg, nonce, k)\ncrypto_secretbox_detached(msg, nonce, k)\ncrypto_secretbox_open(c, nonce, k)\ncrypto_secretbox_open_detached(c, mac, nonce, k)\ncrypto_secretstream_xchacha20poly1305_keygen():\ncrypto_secretstream_xchacha20poly1305_init_push(key):\ncrypto_secretstream_xchacha20poly1305_init_pull(header, key):\ncrypto_secretstream_xchacha20poly1305_rekey(state):\ncrypto_secretstream_xchacha20poly1305_push(state, message, ad, tag):\ncrypto_secretstream_xchacha20poly1305_pull(state, ciphertext, ad):\ncrypto_sign_init()\ncrypto_sign_update(state, m)\ncrypto_sign_final_create(state, sk)\ncrypto_sign_final_verify(state, sig, pk)\ncrypto_sign_detached(m, sk)\ncrypto_sign_keypair()\ncrypto_sign(m, sk)\ncrypto_sign_open(sm, pk)\ncrypto_sign_pk_to_box_pk(pk)\ncrypto_sign_seed_keypair(seed)\ncrypto_sign_sk_to_box_sk(sk)\ncrypto_sign_sk_to_pk(sk)\ncrypto_sign_sk_to_seed(sk)\ncrypto_sign_verify_detached(sig, msg, pk)\ncrypto_stream_chacha20_xor(message, nonce, key)\ncrypto_stream_chacha20_xor_ic(message, nonce, initial_counter, key)\ncrypto_stream_chacha20_ietf_xor(message, nonce, key)\ncrypto_stream_chacha20_ietf_xor_ic(message, nonce, initial_counter, key)\ncrypto_stream_xchacha20_xor(message, nonce, key)\ncrypto_stream_xchacha20_xor_ic(message, nonce, initial_counter, key)\ncrypto_stream(cnt, nonce=None, key=None)\ncrypto_stream_xor(msg, cnt, nonce=None, key=None)\nrandombytes(size)\nsodium_increment(bytes)\ncrypto_core_ristretto255_is_valid_point(p)\ncrypto_core_ristretto255_from_hash(r)\ncrypto_scalarmult_ristretto255(n, p)\ncrypto_scalarmult_ristretto255_base(n)\ncrypto_core_ristretto255_scalar_random()\ncrypto_core_ristretto255_scalar_invert(s)\ncrypto_core_ristretto255_scalar_reduce(s)\ncrypto_core_ristretto255_add(p, q)\ncrypto_core_ristretto255_sub(p,q)\ncrypto_core_ristretto255_random()\ncrypto_core_ristretto255_scalar_negate(s)\ncrypto_core_ristretto255_scalar_complement(s)\ncrypto_core_ristretto255_scalar_add(x,y)\ncrypto_core_ristretto255_scalar_sub(x,y)\ncrypto_core_ristretto255_scalar_mul(x,y)\ncrypto_auth_hmacsha256_keygen\ncrypto_auth_hmacsha256\ncrypto_auth_hmacsha256_verify\ncrypto_auth_hmacsha512_keygen\ncrypto_auth_hmacsha512\ncrypto_auth_hmacsha512_verify\ncrypto_auth_hmacsha512256_keygen\ncrypto_auth_hmacsha512256\ncrypto_auth_hmacsha512256_verify\ncrypto_kdf_derive_from_key(subkey_len, subkey_id, ctx, key)\ncrypto_kdf_keygen()\ncrypto_kdf_hkdf_sha256_extract_init(salt=b'')\ncrypto_kdf_hkdf_sha256_extract_update(state, ikm=b'')\ncrypto_kdf_hkdf_sha256_extract_final(state)\ncrypto_kdf_hkdf_sha256_extract(salt=b'', ikm=b'')\ncrypto_kdf_hkdf_sha256_keygen()\ncrypto_kdf_hkdf_sha256_expand(outlen, prk, ctx=b'')\ncrypto_kdf_hkdf_sha512_extract_init(salt=b'')\ncrypto_kdf_hkdf_sha512_extract_update(state, ikm=b'')\ncrypto_kdf_hkdf_sha512_extract_final(state)\ncrypto_kdf_hkdf_sha512_extract(salt=b'', ikm=b'')\ncrypto_kdf_hkdf_sha512_keygen()\ncrypto_kdf_hkdf_sha512_expand(outlen, prk, ctx=b'')\n```\n\nConstants:\n\n```\ncrypto_aead_chacha20poly1305_ABYTES\ncrypto_aead_chacha20poly1305_KEYBYTES\ncrypto_aead_chacha20poly1305_NPUBBYTES\ncrypto_aead_chacha20poly1305_ietf_KEYBYTES\ncrypto_aead_chacha20poly1305_ietf_NPUBBYTES\ncrypto_aead_chacha20poly1305_ietf_ABYTES\ncrypto_aead_xchacha20poly1305_ietf_KEYBYTES\ncrypto_aead_xchacha20poly1305_ietf_NPUBBYTES\ncrypto_aead_xchacha20poly1305_ietf_ABYTES\ncrypto_auth_BYTES\ncrypto_auth_KEYBYTES\ncrypto_box_BEFORENMBYTES\ncrypto_box_BOXZEROBYTES\ncrypto_box_MACBYTES\ncrypto_box_NONCEBYTES\ncrypto_box_PUBLICKEYBYTES\ncrypto_box_SEALBYTES\ncrypto_box_SECRETKEYBYTES\ncrypto_box_SEEDBYTES\ncrypto_box_ZEROBYTES\ncrypto_generichash_KEYBYTES_MAX\ncrypto_generichash_BYTES\ncrypto_generichash_BYTES_MAX\ncrypto_generichash_BYTES_MIN\ncrypto_generichash_STATEBYTES\ncrypto_generichash_blake2b_BYTES\ncrypto_generichash_blake2b_BYTES_MAX\ncrypto_generichash_blake2b_BYTES_MIN\ncrypto_generichash_blake2b_KEYBYTES_MAX\ncrypto_generichash_blake2b_PERSONALBYTES\ncrypto_generichash_blake2b_SALTBYTES\ncrypto_hash_sha256_BYTES\ncrypto_hash_sha512_BYTES\ncrypto_hash_sha512_STATEBYTES\ncrypto_kx_PUBLICKEYBYTES\ncrypto_kx_SECRETKEYBYTES\ncrypto_kx_SESSIONKEYBYTES\ncrypto_pwhash_ALG_DEFAULT\ncrypto_pwhash_ALG_ARGON2I13\ncrypto_pwhash_ALG_ARGON2ID13\ncrypto_pwhash_BYTES_MAX\ncrypto_pwhash_BYTES_MIN\ncrypto_pwhash_MEMLIMIT_MAX\ncrypto_pwhash_MEMLIMIT_MIN\ncrypto_pwhash_MEMLIMIT_INTERACTIVE\ncrypto_pwhash_MEMLIMIT_MODERATE\ncrypto_pwhash_MEMLIMIT_SENSITIVE\ncrypto_pwhash_OPSLIMIT_MAX\ncrypto_pwhash_OPSLIMIT_MIN\ncrypto_pwhash_OPSLIMIT_INTERACTIVE\ncrypto_pwhash_OPSLIMIT_MODERATE\ncrypto_pwhash_OPSLIMIT_SENSITIVE\ncrypto_pwhash_PASSWD_MAX\ncrypto_pwhash_PASSWD_MIN\ncrypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE\ncrypto_pwhash_argon2i_MEMLIMIT_MODERATE\ncrypto_pwhash_argon2i_MEMLIMIT_SENSITIVE\ncrypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE\ncrypto_pwhash_argon2i_OPSLIMIT_MODERATE\ncrypto_pwhash_argon2i_OPSLIMIT_SENSITIVE\ncrypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE\ncrypto_pwhash_argon2id_MEMLIMIT_MODERATE\ncrypto_pwhash_argon2id_MEMLIMIT_SENSITIVE\ncrypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE\ncrypto_pwhash_argon2id_OPSLIMIT_MODERATE\ncrypto_pwhash_argon2id_OPSLIMIT_SENSITIVE\ncrypto_pwhash_SALTBYTES\ncrypto_pwhash_STRBYTES\ncrypto_pwhash_scryptsalsa208sha256_BYTES_MAX\ncrypto_pwhash_scryptsalsa208sha256_BYTES_MIN\ncrypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX\ncrypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN\ncrypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE\ncrypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE\ncrypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX\ncrypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN\ncrypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE\ncrypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE\ncrypto_pwhash_scryptsalsa208sha256_PASSWD_MAX\ncrypto_pwhash_scryptsalsa208sha256_PASSWD_MIN\ncrypto_pwhash_scryptsalsa208sha256_SALTBYTES\ncrypto_pwhash_scryptsalsa208sha256_STRBYTES\ncrypto_pwhash_scryptsalsa208sha256_STRPREFIX\ncrypto_scalarmult_BYTES\ncrypto_scalarmult_SCALARBYTES\ncrypto_scalarmult_curve25519_BYTES\ncrypto_secretbox_BOXZEROBYTES\ncrypto_secretbox_KEYBYTES\ncrypto_secretbox_KEYBYTES\ncrypto_secretbox_MACBYTES\ncrypto_secretbox_NONCEBYTES\ncrypto_secretbox_ZEROBYTES\ncrypto_secretstream_xchacha20poly1305_STATEBYTES\ncrypto_secretstream_xchacha20poly1305_ABYTES\ncrypto_secretstream_xchacha20poly1305_HEADERBYTES\ncrypto_secretstream_xchacha20poly1305_KEYBYTES\ncrypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX\ncrypto_secretstream_xchacha20poly1305_TAG_MESSAGE\ncrypto_secretstream_xchacha20poly1305_TAG_PUSH\ncrypto_secretstream_xchacha20poly1305_TAG_REKEY\ncrypto_secretstream_xchacha20poly1305_TAG_FINAL\ncrypto_sign_BYTES\ncrypto_sign_PUBLICKEYBYTES\ncrypto_sign_SECRETKEYBYTES\ncrypto_sign_SEEDBYTES\ncrypto_sign_ed25519_PUBLICKEYBYTES\ncrypto_sign_ed25519_SECRETKEYBYTES\ncrypto_stream_KEYBYTES\ncrypto_stream_NONCEBYTES\ncrypto_stream_chacha20_NONCEBYTES\ncrypto_stream_chacha20_KEYBYTES\ncrypto_stream_chacha20_ietf_NONCEBYTES\ncrypto_stream_chacha20_ietf_KEYBYTES\ncrypto_stream_xchacha20_NONCEBYTES\ncrypto_stream_xchacha20_KEYBYTES\ncrypto_core_ristretto255_BYTES\ncrypto_core_ristretto255_HASHBYTES\ncrypto_core_ristretto255_SCALARBYTES\ncrypto_core_ristretto255_NONREDUCEDSCALARBYTES\ncrypto_auth_hmacsha256_BYTES\ncrypto_auth_hmacsha256_KEYBYTES\ncrypto_auth_hmacsha512_BYTES\ncrypto_auth_hmacsha512_KEYBYTES\ncrypto_auth_hmacsha512256_BYTES\ncrypto_auth_hmacsha512256_KEYBYTES\ncrypto_kdf_BYTES_MIN\ncrypto_kdf_BYTES_MAX\ncrypto_kdf_CONTEXTBYTES\ncrypto_kdf_KEYBYTES\ncrypto_kdf_hkdf_sha256_KEYBYTES\ncrypto_kdf_hkdf_sha256_BYTES_MIN\ncrypto_kdf_hkdf_sha256_BYTES_MAX\ncrypto_kdf_hkdf_sha256_STATEBYTES\n```\n\n\n\nNote\n\nmost of the the `*_easy` functions are not implemented as the \"non-easy\"\nfunctions provide already the \"easy\" interface, which hides the placement of\nbuffers in memory, which makes little sense in python, so this wrapper handles\nthis.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Fpysodium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstef%2Fpysodium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Fpysodium/lists"}