{"id":20790381,"url":"https://github.com/paragonie/ciphersweet-js","last_synced_at":"2025-04-05T07:01:18.884Z","repository":{"id":49277680,"uuid":"182881353","full_name":"paragonie/ciphersweet-js","owner":"paragonie","description":"Searchable Encryption for Node.js projects","archived":false,"fork":false,"pushed_at":"2025-02-18T00:37:13.000Z","size":301,"stargazers_count":66,"open_issues_count":3,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T06:01:33.158Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://ciphersweet.paragonie.com","language":"JavaScript","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/paragonie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-22T23:08:06.000Z","updated_at":"2024-11-16T16:56:46.000Z","dependencies_parsed_at":"2025-03-22T05:00:28.837Z","dependency_job_id":null,"html_url":"https://github.com/paragonie/ciphersweet-js","commit_stats":{"total_commits":75,"total_committers":4,"mean_commits":18.75,"dds":0.09333333333333338,"last_synced_commit":"84051150674c343e31850af174fcc2f55266fc7c"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fciphersweet-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fciphersweet-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fciphersweet-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paragonie%2Fciphersweet-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paragonie","download_url":"https://codeload.github.com/paragonie/ciphersweet-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299828,"owners_count":20916190,"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-11-17T15:34:29.674Z","updated_at":"2025-04-05T07:01:18.813Z","avatar_url":"https://github.com/paragonie.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CipherSweet.js\n\n[![Build Status](https://github.com/paragonie/ciphersweet-js/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/ciphersweet-js/actions)\n[![npm version](https://img.shields.io/npm/v/ciphersweet-js.svg)](https://npm.im/ciphersweet-js)\n\nA JavaScript port of [CipherSweet](https://github.com/paragonie/ciphersweet), which is a PHP library that implements\n[searchable field-level encryption](https://paragonie.com/blog/2017/05/building-searchable-encrypted-databases-with-php-and-sql).\n\n----\n\nBefore adding searchable encryption support to your project, make sure you understand\nthe [appropriate threat model](https://adamcaudill.com/2016/07/20/threat-modeling-for-applications/)\nfor your use case. At a minimum, you will want your application and database\nserver to be running on separate cloud instances / virtual machines.\n(Even better: Separate bare-metal hardware.)\n\nCipherSweet is available under the very permissive [ISC License](https://github.com/paragonie/ciphersweet/blob/master/LICENSE)\nwhich allows you to use CipherSweet in any of your JavaScript projects, commercial\nor noncommercial, open source or proprietary, at no cost to you.\n\n## CipherSweet Features at a Glance\n\n* Encryption that targets the 256-bit security level\n  (using [AEAD](https://tonyarcieri.com/all-the-crypto-code-youve-ever-written-is-probably-broken) modes\n  with extended nonces to minimize users' rekeying burden).\n* **Compliance-Specific Protocol Support.** Multiple backends to satisfy a\n  diverse range of compliance requirements. More can be added as needed:\n  * `ModernCrypto` uses [libsodium](https://download.libsodium.org/doc/), the de\n    facto standard encryption library for software developers.\n    [Algorithm details](https://ciphersweet.paragonie.com/security#moderncrypto).\n  * `FIPSCrypto` only uses the cryptographic algorithms covered by the\n    FIPS 140-2 recommendations to avoid auditing complexity.\n    [Algorithm details](https://ciphersweet.paragonie.com/security#fipscrypto).\n* **Key separation.** Each column is encrypted with a different key, all of which are derived from\n  your master encryption key using secure key-splitting algorithms.\n* **Key management integration.** CipherSweet supports integration with Key\n  Management solutions for storing and retrieving the master encryption key.\n* **Searchable Encryption.** CipherSweet uses\n  [blind indexing](https://paragonie.com/blog/2017/05/building-searchable-encrypted-databases-with-php-and-sql#solution-literal-search)\n  with the fuzzier and Bloom filter strategies to allow fast ciphertext search\n  with [minimal data leakage](https://ciphersweet.paragonie.com/node.js/blind-index-planning). \n  * Each blind index on each column uses a distinct key from your encryption key\n    and each other blind index key.\n  * This doesn't allow for `LIKE` operators or regular expression searching, but\n    it does allow you to index transformations (e.g. substrings) of the plaintext,\n    hashed under a distinct key.\n* **Adaptability.** CipherSweet has a database- and product-agnostic design, so\n  it should be easy to write an adapter to use CipherSweet in any PHP-based\n  software.\n* **File/stream encryption.** CipherSweet has an API for encrypting files (or\n  other PHP streams) that provides authenticated encryption that defeats TOCTOU\n  attacks with minimal overhead. [Learn more](https://ciphersweet.paragonie.com/internals/file-encryption).\n\n## Install Instructions\n\n```\nnpm install ciphersweet-js \n```\n\n**Optional:**\n\nCipherSweet uses [Sodium-Plus](https://github.com/paragonie/sodium-plus) internally.\nThe default Sodium-Plus backend is cross-platform, but you can obtain greater\nperformance by installing `sodium-native` too.\n\n```terminal\nnpm install --save sodium-native\n```\n\nThis isn't strictly necessary, and sodium-native doesn't work in browsers, but\nif you're not targeting browsers, you can get a significant performance boost.\n\n## Documentation\n\nThe [**CipherSweet.js documentation**](https://ciphersweet.paragonie.com/node.js) is\navailable online at `https://ciphersweet.paragonie.com`.\n\n## Support Contracts\n\nIf your company uses this library in their products or services, you may be\ninterested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparagonie%2Fciphersweet-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparagonie%2Fciphersweet-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparagonie%2Fciphersweet-js/lists"}