Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.

Themis provides strong, usable cryptography for busy people

Themis provides strong, usable cryptography for busy people


GitHub release Platforms Coverage Status
Themis Core Integration testing Code style Circle CI Bitrise

General purpose cryptographic library for storage and messaging for iOS (Swift, Obj-C), Android (Java, Kotlin), desktop Java, С/С++, Node.js, Python, Ruby, PHP, Go, Rust, WASM.

Perfect fit for multi-platform apps. Hides cryptographic details. Made by cryptographers for developers 🧡

What Themis is

Themis is an open-source high-level cryptographic services library for securing data during authentication, storage, messaging, network exchange, etc. Themis solves 90% of typical data protection use cases that are common for most apps.

Themis helps to build both simple and complex cryptographic features easily, quickly, and securely. Themis allows developers to focus on the main thing: developing their applications.

Use cases that Themis solves

  • Encrypt stored secrets in your apps and backend: API keys, session tokens, files.

  • Encrypt sensitive data fields before storing in database ("application-side field-level encryption").

  • Support searchable encryption, data tokenisation and data masking using Themis and Acra.

  • Exchange secrets securely: share sensitive data between parties, build simple chat app between patients and doctors.

  • Build end-to-end encryption schemes with centralised or decentralised architecture: encrypt data locally on one app, use it encrypted everywhere, decrypt only for authenticated user.

  • Maintain real-time secure sessions: send encrypted messages to control connected devices from your app, receive real-time sensitive data from your apps to your backend.

  • Compare secrets between parties without revealing them (zero-knowledge proof-based authentication).

  • One cryptographic library that fits them all: Themis is the best fit for multi-platform apps (e.g., iOS+Android+Electron app with Node.js backend) because it provides 100% compatible API and works in the same way across all supported platforms.

Cryptosystems

Themis provides ready-made building blocks (“cryptosystems”) which simplify usage of core cryptographic security operations.

Themis provides 4 important cryptographic services:

  • Secure Cell: a multi-mode cryptographic container suitable for storing anything from encrypted files to database records and format-preserved strings. Secure Cell is built around AES-256-GCM, AES-256-CTR.
  • Secure Message: a simple encrypted messaging solution for the widest scope of applications. Exchange the keys between the parties and you're good to go. Two pairs of underlying cryptosystems: ECC + ECDSA / RSA + PSS + PKCS#7.
  • Secure Session: session-oriented encrypted data exchange with forward secrecy for better security guarantees and more demanding infrastructures. Secure Session can perfectly function as socket encryption, session security, or a high-level messaging primitive (with some additional infrastructure like PKI). ECDH key agreement, ECC & AES encryption.
  • Secure Comparator: Zero knowledge proofs-based cryptographic protocol for authentication and comparing secrets.

We created Themis to build other products on top of it - i.e. Acra and Hermes.

Installation

Refer to the Installation page to install Themis for your mobile, web, desktop, or server-side application. We highly recommend installation packages instead of building from source.

Languages

Themis is available for the following languages/platforms, refer to language howtos for each:

Platform Documentation Examples Version
🔶 Swift (iOS, macOS) Swift Howto docs/examples/swift CocoaPods
📱 Objective-C (iOS, macOS) Objective-C Howto docs/examples/objc CocoaPods
☕️ Java (Desktop) Java (Desktop) Howto Java projects
☎️ Java (Android) Java (Android) Howto Android projects maven
📞 Kotlin (Android) Java (Android) Howto Android projects maven
🔻 Ruby Ruby Howto docs/examples/ruby Gem
🐍 Python Python Howto docs/examples/python PyPI
🐘 PHP PHP Howto docs/examples/php
C++ CPP Howto docs/examples/c++
🍭 Node.js Javascript (Node.js) Howto docs/examples/js npm
🖥 WebAssembly Javascript (WebAssembly) Howto docs/examples/js npm
🐹 Go Go Howto docs/examples/go go.dev
🦀 Rust Rust Howto docs/examples/rust crates
🕸 С++ PNaCl for Google Chrome WebThemis project

Availability

Themis supports following CPU architectures: x86_64/i386, ARM, Apple Silicon (ARM64), various Android architectures.

We build and verify Themis on the latest stable OS versions:

  • Debian (9, 10), CentOS (7, 8), Ubuntu (16.04, 18.04, 20.04)
  • macOS (10.12–10.15, 11)
  • Android (4–11)
  • iOS (10–14)
  • Windows (experimental MSYS2 support)

We plan to expand this list with a broader set of platforms. If you'd like to help improve or bring Themis to your favourite platform or language — get in touch.

Documentation

Documentation for Themis contains the ever-evolving official docs, which covers everything from deployment guidelines to use cases, with brief explanations of cryptosystems and architecture behind the main Themis library.

Refer to the documentation to learn more about:

Cryptography

Themis relies on proven cryptographic algorithms implemented by well-known cryptography libraries such as OpenSSL, LibreSSL, BoringSSL. Refer to Cryptograhy in Themis docs to learn more.

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations, and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution make it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

Submitting apps to the App Store

If your application uses Themis and you want to submit it to the Apple App Store, there are certain requirements towards declaring use of any cryptography.

Read about Apple export regulations on cryptography for Themis to find out what to do.

Security

Each change in Themis core library is being reviewed and approved by our internal team of cryptographers and security engineers. For every release, we perform internal audits by cryptographers who don't work on Themis.

We use a lot of automated security testing, i.e. static code analysers, fuzzing tools, memory analysers, unit tests (per each platform), integration tests (to find compatibility issues between different Themis-supported languages, OS and x86/x64 architectures). Read more about our security testing practices in Themis security docs.

If you believe that you've found a security-related issue, please drop us an email to [email protected]. Bug bounty program may apply.

GDPR, HIPAA, CCPA

As a cryptographic services library for mobile and server platforms, Themis is a "state of the art" encryption tool, which provides secure data exchange and storage.

Using Themis, you can reach better compliance with the current data privacy regulations, such as:

Read more about Regulations in docs.

Community

Themis is recommended by OWASP as data encryption library for mobile platforms.

Themis is widely-used for both non-commercial and commercial projects, some public applications and libraries can be found here.

Want to be featured on our blog and on the list of contributors, too? Write us about the project you’ve created using Themis!

Contributing

If you're looking for something to contribute to and gain eternal respect, just pick the things in the list of issues. Head over to our Contribution guidelines as your starting point.

Supporting Themis for all these numerous platforms is hard work, but we try to do our best to make using Themis convenient for everyone. Most issues that our users encounter are connected with the installation process and dependency management. If you face any challenges, please let us know.

Commercial support

At Cossack Labs, we offer professional support services for Themis and applications using Themis.

This support includes, but is not limited to the library integration, with a focus on web and mobile applications; designing and building end-to-end encryption schemes for mobile applications; security audits, for in-house library integrations or high-level protocol; custom application development that requires cryptography; consulting and training services.

Drop us an email to [email protected] or check out the Cossack Labs cybersecurity services.

Contacts

If you want to ask a technical question, feel free to raise an issue or write to [email protected].

To talk to the business wing of Cossack Labs Limited, drop us an email to [email protected].

Blog Twitter CossackLabs Dev.to CossackLabs Medium CossackLabs

Closed pull requests with Bitcode-related changes

Owner
Cossack Labs
convenient cryptographic tools where you need them
Cossack Labs
Comments
  • Not Able to Compile and Install the themis in windows for Java.

    Not Able to Compile and Install the themis in windows for Java.

    I have: Read the documentation and follow the same step but not able to install the themis in windows system for Java Version.

    Kindly provide me the solution ASAP

    Thanks Sourabh Lodha

  • [question] [v.0.13.1] [android] getting IncompatibleClassChangeError when trying to bind .aar in C# project [SOLVED by adding ProGuard rules]

    [question] [v.0.13.1] [android] getting IncompatibleClassChangeError when trying to bind .aar in C# project [SOLVED by adding ProGuard rules]

    Describe the bug

    Getting Java.Lang.IncompatibleClassChangeError: no non-static method "Lcom/cossacklabs/themis/SecureCellSeal;.decrypt([B[B)[B" in Release configuration in C# android project. When decrypting "obfuscated" string constant on app start.

    Any ideas? Have you seen anything like this in some java or kotlin android project?

    To Reproduce

    On app start I try to decrypt an "obfuscated" string constant

    _secureCell = SecureCell.SealWithKey(masterKeyData);
    _secureCell.Decrypt(cipherTextBytes, context);
    

    Getting an error in Release configuration:

    Java.Lang.IncompatibleClassChangeError: no non-static method "Lcom/cossacklabs/themis/SecureCellSeal;.decrypt([B[B)[B"
    [orion.mobile]   at Java.Interop.JniEnvironment+InstanceMethods.GetMethodID (Java.Interop.JniObjectReference type, System.String name, System.String signature) [0x0005b] in <42d2b7086f0a46efb99253c5db1ecca9>:0 
    [orion.mobile]   at Android.Runtime.JNIEnv.GetMethodID (System.IntPtr kls, System.String name, System.String signature) [0x00007] in <3080427739614e60a939a88bf3f838d5>:0 
    [orion.mobile]   at Com.Cossacklabs.Themis.SecureCell+ISealInvoker.Decrypt (System.Byte[] p0, System.Byte[] p1) [0x00017] in <cd618986d1ce4194b63cdd3366dad291>:0 
    [orion.mobile]   at Themis.Droid.CellSealDroid.UnwrapData (Themis.ISecureCellData cipherTextData, System.Byte[] context) [0x0007e] in <a492e7118e094c3296442a386fe5d80e>:0 
    [orion.mobile]    --- End of inner exception stack trace ---
    

    Expected behavior

    N/A - this issue is a question

    Environment (please complete the following information):

    • OS: Android 10, build 00WW_2_250
    • Hardware: Nokia 7.2
    • Themis version: 0.13.1
    • Installation way:
      • [x] via package manager
      • [ ] built from source

    Additional context

    Sorry for asking in a wrong place if I'm violating any of your policies with this ticket.

    I've spent a while debugging it and am a bit desperate at the moment. I know you do not support that C# and Xamarin.Forms but filing this question just in case you've seen a similar issue in some java or kotlin android project.

    Unable to share a sample project

    since that does not reproduce on https://github.com/dodikk/themis-xamarin-prototype/tree/bugfix/v0.13.2/droid-strip-symbols Only in a project under NDA, unfortunately.

    • I've checked the data I'm getting the failure on. It has been encrypted with wasm-themis CLI tools. Also I can decrypt the data collected from my app's exception (again, with wasm-themis CLI tools)
    • The same app code and bindings work in debug configuration
    • apk seems to have SecureCellandSecureCellSeal class symbols (checked via "profile apk" UI in android studio) Screenshot 2020-10-06 at 22 46 50
  • Themis iOS and BoringSSL: Objective-C Implementation

    Themis iOS and BoringSSL: Objective-C Implementation

    I have: implemented in viewDidLoad the keyGenerator:

    @property (nonatomic, strong) NSData *privateKey;
    @property (nonatomic, strong) NSData *publicKey;
    
     TSKeyGen * keygenRSA = [[TSKeyGen alloc] initWithAlgorithm:TSKeyGenAsymmetricAlgorithmRSA];
        
        if (!keygenRSA) {
            NSLog(@"%s Error occured while initialising object keygenRSA", sel_getName(_cmd));
            return;
        }
        _privateKey = keygenRSA.privateKey;
        _publicKey = keygenRSA.publicKey;
    
        NSLog(@"%@", keygenRSA.privateKey);
    

    I see the NSLog with this error ... where I wrong?

    /Pods/themis/src/soter/openssl/soter_rsa_key_pair_gen.c:65 - error: 1 <= EVP_PKEY_CTX_ctrl(ctx->pkey_ctx, -1, -1, EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pub_exp)
    /Users/fabiofloris/Desktop/Ium/Pods/themis/src/soter/openssl/soter_rsa_key_pair_gen.c:46 - error: soter_rsa_key_pair_gen_init(ctx, key_length)==SOTER_SUCCESS
    /Users/fabiofloris/Desktop/Ium/Pods/themis/src/soter/openssl/soter_rsa_key_pair_gen.c:94 - error: ctx
    /Users/fabiofloris/Desktop/Ium/Pods/themis/src/soter/openssl/soter_rsa_key_pair_gen.c:94 - error: ctx
    /Users/fabiofloris/Desktop/Ium/Pods/themis/src/soter/openssl/soter_rsa_key_pair_gen.c:86 - error: ctx
    2018-11-11 21:37:24.305916+0100 Ium[1663:420689] viewDidLoad Error occured while initialising object keygenRSA
    

    Then I wanted to ask another question ... Are these two specific strings

    NSString * serverPublicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
    NSString * clientPrivateKeyString = @"UkVDMgAAAC13PCVZAKOczZXUpvkhsC+xvwWnv3CLmlG0Wzy8ZBMnT+2yx/dg";
    

    referring to something in particular? or are the values of keygenRSA.privateKey / keygenRSA.publicKey ???

    Environment info

    OS: iOS 12

    Installation way: install with pod 'Themis'

  • Can't build via CocoaPods on macOS High Sierra

    Can't build via CocoaPods on macOS High Sierra

    hey there,

    i found your pod and it looks really great, i'd love to use it but cocoapods reports:

    [...]
    Installing themis (0.9.4)
    [!] The 'Pods-Phone-Bloom' target has transitive dependencies that include static binaries: (/Volumes/PROPHET/Vault/Code/bloom-ios-prototype/Pods/OpenSSL-Universal/lib-ios/libcrypto.a and /Volumes/PROPHET/Vault/Code/bloom-ios-prototype/Pods/OpenSSL-Universal/lib-ios/libssl.a)
    

    i would be happy to help submit a PR or help test if someone can point me in the right direction i've tried with themis 0.9.4, and with master

  • Secure comparator is broken

    Secure comparator is broken

    The attack is send g2a or g2b as the zero point "(0, 2^255-19+1)"

    unsigned char zero[32] = {0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                              0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                              0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                              0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f};
    

    These won't match this zero point: https://github.com/cossacklabs/themis/blob/50fd35d987c5fcde55954e2ccc645bca721be50c/src/themis/secure_comparator.c#L168 and https://github.com/cossacklabs/themis/blob/50fd35d987c5fcde55954e2ccc645bca721be50c/src/themis/secure_comparator.c#L241

  • macOS NodeJS installation problem

    macOS NodeJS installation problem

    If I run the command make install in the just cloned Themis repo, i get this error

     make install
    -n link 
    soter_static                   [WARNINGS]
    ar rcs build/libsoter.a build/obj/soter/soter_container.o build/obj/soter/soter_crc32.o build/obj/soter/soter_hmac.o build/obj/soter/soter_kdf.o build/obj/soter/soter_sign.o build/obj/soter/ed25519/fe_0.o build/obj/soter/ed25519/fe_1.o build/obj/soter/ed25519/fe_add.o build/obj/soter/ed25519/fe_cmov.o build/obj/soter/ed25519/fe_copy.o build/obj/soter/ed25519/fe_frombytes.o build/obj/soter/ed25519/fe_invert.o build/obj/soter/ed25519/fe_isnegative.o build/obj/soter/ed25519/fe_isnonzero.o build/obj/soter/ed25519/fe_mul.o build/obj/soter/ed25519/fe_neg.o build/obj/soter/ed25519/fe_pow22523.o build/obj/soter/ed25519/fe_sq.o build/obj/soter/ed25519/fe_sq2.o build/obj/soter/ed25519/fe_sub.o build/obj/soter/ed25519/fe_tobytes.o build/obj/soter/ed25519/ge_add.o build/obj/soter/ed25519/ge_cmp.o build/obj/soter/ed25519/ge_double_scalarmult.o build/obj/soter/ed25519/ge_frombytes.o build/obj/soter/ed25519/ge_frombytes_no_negate.o build/obj/soter/ed25519/ge_madd.o build/obj/soter/ed25519/ge_msub.o build/obj/soter/ed25519/ge_p1p1_to_p2.o build/obj/soter/ed25519/ge_p1p1_to_p3.o build/obj/soter/ed25519/ge_p2_0.o build/obj/soter/ed25519/ge_p2_dbl.o build/obj/soter/ed25519/ge_p2_to_p3.o build/obj/soter/ed25519/ge_p3_0.o build/obj/soter/ed25519/ge_p3_dbl.o build/obj/soter/ed25519/ge_p3_sub.o build/obj/soter/ed25519/ge_p3_to_cached.o build/obj/soter/ed25519/ge_p3_to_p2.o build/obj/soter/ed25519/ge_p3_tobytes.o build/obj/soter/ed25519/ge_precomp_0.o build/obj/soter/ed25519/ge_scalarmult.o build/obj/soter/ed25519/ge_scalarmult_base.o build/obj/soter/ed25519/ge_sub.o build/obj/soter/ed25519/ge_tobytes.o build/obj/soter/ed25519/gen_rand_32.o build/obj/soter/ed25519/keypair.o build/obj/soter/ed25519/open.o build/obj/soter/ed25519/sc_muladd.o build/obj/soter/ed25519/sc_reduce.o build/obj/soter/ed25519/sign.o build/obj/soter/openssl/soter.o build/obj/soter/openssl/soter_asym_cipher.o build/obj/soter/openssl/soter_asym_ka.o build/obj/soter/openssl/soter_ec_key.o build/obj/soter/openssl/soter_ecdsa_common.o build/obj/soter/openssl/soter_hash.o build/obj/soter/openssl/soter_rand.o build/obj/soter/openssl/soter_rsa_common.o build/obj/soter/openssl/soter_rsa_key.o build/obj/soter/openssl/soter_rsa_key_pair_gen.o build/obj/soter/openssl/soter_sign_ecdsa.o build/obj/soter/openssl/soter_sign_rsa.o build/obj/soter/openssl/soter_sym.o build/obj/soter/openssl/soter_verify_ecdsa.o build/obj/soter/openssl/soter_verify_rsa.o
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: build/libsoter.a(keypair.o) has no symbols
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: build/libsoter.a(open.o) has no symbols
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: build/libsoter.a(sign.o) has no symbols
    -n link 
    themis_static                  [OK]
    -n link 
    soter_shared                   [ERRORS]
    cc -shared -o build/libsoter.dylib build/obj/soter/soter_container.o build/obj/soter/soter_crc32.o build/obj/soter/soter_hmac.o build/obj/soter/soter_kdf.o build/obj/soter/soter_sign.o build/obj/soter/ed25519/fe_0.o build/obj/soter/ed25519/fe_1.o build/obj/soter/ed25519/fe_add.o build/obj/soter/ed25519/fe_cmov.o build/obj/soter/ed25519/fe_copy.o build/obj/soter/ed25519/fe_frombytes.o build/obj/soter/ed25519/fe_invert.o build/obj/soter/ed25519/fe_isnegative.o build/obj/soter/ed25519/fe_isnonzero.o build/obj/soter/ed25519/fe_mul.o build/obj/soter/ed25519/fe_neg.o build/obj/soter/ed25519/fe_pow22523.o build/obj/soter/ed25519/fe_sq.o build/obj/soter/ed25519/fe_sq2.o build/obj/soter/ed25519/fe_sub.o build/obj/soter/ed25519/fe_tobytes.o build/obj/soter/ed25519/ge_add.o build/obj/soter/ed25519/ge_cmp.o build/obj/soter/ed25519/ge_double_scalarmult.o build/obj/soter/ed25519/ge_frombytes.o build/obj/soter/ed25519/ge_frombytes_no_negate.o build/obj/soter/ed25519/ge_madd.o build/obj/soter/ed25519/ge_msub.o build/obj/soter/ed25519/ge_p1p1_to_p2.o build/obj/soter/ed25519/ge_p1p1_to_p3.o build/obj/soter/ed25519/ge_p2_0.o build/obj/soter/ed25519/ge_p2_dbl.o build/obj/soter/ed25519/ge_p2_to_p3.o build/obj/soter/ed25519/ge_p3_0.o build/obj/soter/ed25519/ge_p3_dbl.o build/obj/soter/ed25519/ge_p3_sub.o build/obj/soter/ed25519/ge_p3_to_cached.o build/obj/soter/ed25519/ge_p3_to_p2.o build/obj/soter/ed25519/ge_p3_tobytes.o build/obj/soter/ed25519/ge_precomp_0.o build/obj/soter/ed25519/ge_scalarmult.o build/obj/soter/ed25519/ge_scalarmult_base.o build/obj/soter/ed25519/ge_sub.o build/obj/soter/ed25519/ge_tobytes.o build/obj/soter/ed25519/gen_rand_32.o build/obj/soter/ed25519/keypair.o build/obj/soter/ed25519/open.o build/obj/soter/ed25519/sc_muladd.o build/obj/soter/ed25519/sc_reduce.o build/obj/soter/ed25519/sign.o build/obj/soter/openssl/soter.o build/obj/soter/openssl/soter_asym_cipher.o build/obj/soter/openssl/soter_asym_ka.o build/obj/soter/openssl/soter_ec_key.o build/obj/soter/openssl/soter_ecdsa_common.o build/obj/soter/openssl/soter_hash.o build/obj/soter/openssl/soter_rand.o build/obj/soter/openssl/soter_rsa_common.o build/obj/soter/openssl/soter_rsa_key.o build/obj/soter/openssl/soter_rsa_key_pair_gen.o build/obj/soter/openssl/soter_sign_ecdsa.o build/obj/soter/openssl/soter_sign_rsa.o build/obj/soter/openssl/soter_sym.o build/obj/soter/openssl/soter_verify_ecdsa.o build/obj/soter/openssl/soter_verify_rsa.o -L/usr/local/lib -L/usr/lib -lcrypto 
    ld: library not found for -lcrypto
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [soter_shared] Error 1
    

    If then I try to install jsthemis this is the error given

    > [email protected] preinstall /path/to/node_modules/jsthemis
    > node-gyp configure && node-gyp build
    
      CXX(target) Release/obj.target/jsthemis/addon.o
    In file included from ../addon.cpp:20:
    ../secure_session.hpp:22:10: fatal error: 'themis/themis.h' file not found
    #include <themis/themis.h>
             ^~~~~~~~~~~~~~~~~
    1 error generated.
    make: *** [Release/obj.target/jsthemis/addon.o] Error 1
    gyp ERR! build error 
    gyp ERR! stack Error: `make` failed with exit code: 2
    gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
    gyp ERR! stack     at emitTwo (events.js:125:13)
    gyp ERR! stack     at ChildProcess.emit (events.js:213:7)
    gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
    gyp ERR! System Darwin 16.7.0
    gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build"
    gyp ERR! cwd /path/to/node_modules/jsthemis
    gyp ERR! node -v v8.6.0
    gyp ERR! node-gyp -v v3.6.2
    gyp ERR! not ok 
    npm WARN [email protected] requires a peer of react@>=15.3.1 but none is installed. You must install peer dependencies yourself.
    npm WARN [email protected] requires a peer of react@>=15.4.0 but none is installed. You must install peer dependencies yourself.
    npm WARN [email protected] requires a peer of react@> 15.0.0 but none is installed. You must install peer dependencies yourself.
    
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! [email protected] preinstall: `node-gyp configure && node-gyp build`
    npm ERR! Exit status 1
    npm ERR! 
    npm ERR! Failed at the [email protected] preinstall script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     ~/.npm/_logs/2017-10-03T14_13_55_058Z-debug.log
    

    I've OpenSSL and LibreSSL installed via Homebrew. I've tried to solve all brew doctor notices.

    I'm on macOS Sierra 10.12.6

    I also do believe that some needed libraries are under /usr/lib whilst perhaps they should be under /usr/local/lib ? There's a missing /usr/include folder as well.

  • [Question] Compatibility with react-native — DONE ✅

    [Question] Compatibility with react-native — DONE ✅

    I have googled around, read through on issues and could not find any related info nor guides for using themis on React-Native.

    Does themis supported in react-native?

    Thanks

  • Can Themis be used from a Swift project on Linux?

    Can Themis be used from a Swift project on Linux?

    Hello,

    Can anyone tried integrating Themis library in a Swift project on Linux? Theoretically it should work by creating a module map around the C++ library but has anyone succeeded?

    I want to exchange data securely between iOS and a Vapor backend deployed on Ubuntu.

    Thank you!

  • Fix typos

    Fix typos

    Fixed typos in comments Fixed typo in declaration in wrappers/themis/java...SecureSession.java: Renamed jniGenerateConntect to jniGenerateConnect

    Checklist

    • [x] Change is covered by automated tests
    • [x] The coding guidelines are followed
    • [x] Public API has proper documentation
    • [x] Example projects and code samples are up-to-date (in case of API changes)
    • [x] ~~Changelog is updated~~ (not needed, despite JNI changes)
  • Simplify Android build and bring up to date

    Simplify Android build and bring up to date

    This PR improves Themis Android build:

    • updates used Android build tools to latest versions
    • adds x86_64 build architecture (now the default for Android native code builds)
    • checks-in BoringSSL as a submodule to Themis as recommended by BoringSSL project: https://boringssl.googlesource.com/boringssl/+/HEAD/INCORPORATING.md
    • integrates BoringSSL build to main Themis build, so no separate "build BoringSSL" step needed
    • bumps API level to 21 for better support of 64 bit platforms

    The PR also includes days of messing with Circle CI to ensure it does not OOM with the new build system.

    Relates to #235

  • Migrate wasm-themis to TypeScript

    Migrate wasm-themis to TypeScript

    So my PR for TS is finally here. This PR only changes syntax and should not change semantics. This is not possible in every case, but in all cases that matter.

    The module works in node, older browsers and also works using ES6 and TypeScript. Here is an example for node:

    mkdir test && cd test
    npm init -y
    npm install file://./wasm-themis-0.14.0.tgz
    echo "const themis = require('wasm-themis'); \
    themis.initialize().then(() => { \
        const cell = themis.SecureCellSeal.withPassphrase('pass'); \
        console.log(cell.encrypt(new Uint8Array([1]))); \
    })" > example.js
    node example.js
    

    Example for web like a react app:

    // @ts-ignore
    import themisWasm from "wasm-themis/dist/libthemis.wasm";
    import { initialize, SecureCellSeal } from "wasm-themis"; // webpack takes care of making the wasm file available
    
    await initialize(themisWasm);
    const cell = SecureCellSeal.withPassphrase(pw);
    

    Here are links to the diffs for easier reviewing:

    You can simple review the commit referenced above and then only review the changes to the package.json and build files.

    Checklist

    • [x] Change is covered by automated tests
    • [x] Benchmark results are attached (if applicable)
    • [x] The [coding guidelines] are followed
    • [ ] Public API has proper documentation
    • [ ] Example projects and code samples are up-to-date (in case of API changes)
    • [ ] Changelog is updated (in case of notable or breaking changes)
  • Docker: Unable to locate package libthemis-dev

    Docker: Unable to locate package libthemis-dev

    Describe the bug When trying to dockerize themis using debian (buster or bullseye) - the dockerization stops at the installation of themis with error: Unable to locate package libthemis-dev

    To Reproduce Steps to reproduce the behavior:

    1. Create Dockerfile
    FROM node:18-buster
    RUN apt update && \
        apt -y install apt-transport-https
    
    # Install themis
    RUN wget -qO - https://pkgs-ce.cossacklabs.com/gpg | apt-key add -
    RUN echo "deb https://pkgs-ce.cossacklabs.com/stable/debian buster main" | tee /etc/apt/sources.list.d/cossacklabs.list
    RUN apt update && apt install -y libthemis-dev
    
    1. Run docker build .
    error
     > [ 5/11] RUN apt update && apt install -y libthemis-dev:
    #9 0.223 
    #9 0.223 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    #9 0.223 
    #9 0.326 Hit:1 http://deb.debian.org/debian buster InRelease
    #9 0.330 Hit:2 http://deb.debian.org/debian-security buster/updates InRelease
    #9 0.342 Hit:3 http://deb.debian.org/debian buster-updates InRelease
    #9 0.350 Get:4 https://pkgs-ce.cossacklabs.com/stable/debian buster InRelease [1709 B]
    #9 0.816 Fetched 1709 B in 1s (3049 B/s)
    #9 0.816 Reading package lists...
    #9 1.159 Building dependency tree...
    #9 1.223 Reading state information...
    #9 1.235 21 packages can be upgraded. Run 'apt list --upgradable' to see them.
    #9 1.241 
    #9 1.241 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    #9 1.241 
    #9 1.246 Reading package lists...
    #9 1.595 Building dependency tree...
    #9 1.666 Reading state information...
    #9 1.715 E: Unable to locate package libthemis-dev
    ------
    executor failed running [/bin/sh -c apt update && apt install -y libthemis-dev]: exit code: 100
    

    Expected behavior Should find libthemis-dev

    Environment (please complete the following information):

    • OS: MacOS ventura
    • Hardware: 64-bit, Macbook pro M1
    • Themis version: latest?
    • Installation way:
      • [x] via package manager
      • [ ] built from source

    Additional context .

  • get ld error when compile on msys2 MinGw

    get ld error when compile on msys2 MinGw

    ./configure make

    warning: image

    for first error, adding -lws2_32 to the ld command is a fix. but there are other similar issue. seem make file need a fix

    undefined reference to `htonll'

    image

  • themis: `THEMIS_GEN_EC_KEY_PAIR_UNCOMPRESSED=1`

    themis: `THEMIS_GEN_EC_KEY_PAIR_UNCOMPRESSED=1`

    Now Themis – through the core library – is able to generate EC key pair in uncompressed format. Previously, #954 taught Themis to understand uncompressed public keys. Now it's able to produce them as well.

    Set the special environment variable:

    export THEMIS_GEN_EC_KEY_PAIR_UNCOMPRESSED=1
    

    and key generation routines will output public keys in uncompressed format (77 bytes instead of the usual 45).

    This is supported by all wrappers, technically. It's just some systems do not offer an easy way to set environment variables: e.g., on iOS & Android you'll have to set them from within the app during startup. And you're most definitely out of luck with WasmThemis.

    Details

    THEMIS_GEN_EC_KEY_PAIR_UNCOMPRESSED has to be set to exactly 1 to produce uncompressed keys. Not setting the variable, or setting it to any other value will result in the usual compressed public keys produced by themis_gen_ec_key_pair().

    Only EC public keys can be ”uncompressed”. RSA keys are unaffected by this environment variable.

    Soter changes

    Low-level changes to Soter which enable this:

    • New functions: soter_sign_export_private_key() and soter_sign_export_public_key().

      These functions replace soter_sign_export_key() with its awkward bool isprivate parameter.

      soter_sign_export_public_key() accepts bool compressed parameter, which currently affects only EC keys.

    • soter_sign_export_key() is now deprecated.

      There are no users remaining in Themis, but there are no plans for removing the function either.

    References

    • https://github.com/cossacklabs/themis/pull/954#issuecomment-1276398101

    Checklist

    • [x] Change is covered by automated tests
    • [x] ~~Benchmark results are attached~~
      • Would be cool, but key generation code path is unlikely to be significantly affected by this change.
    • [x] The coding guidelines are followed
    • [x] Public API has proper documentation
    • [x] ~~Example projects and code samples are up-to-date~~
      • It's a “stealth” feature, so not going to bother propagating it.
    • [x] Changelog is updated
  • Can not install libthemis-dev on Ubuntu 22.04.1 LTS

    Can not install libthemis-dev on Ubuntu 22.04.1 LTS

    Used instructions from docs.cossacklabs.com to install the core library into fresh installed Ubuntu 22.04.01 LTS.

    To Reproduce Steps to reproduce the behavior:

    1. Install Ubuntu 22.04 LTS
    2. Run 'wget -qO - https://pkgs-ce.cossacklabs.com/gpg | sudo apt-key add -'
    3. See the following error:
    Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
    
    1. Add 'deb https://pkgs-ce.cossacklabs.com/stable/ubuntu jammy main' to /etc/apt/sources.list.d/cossacklabs.list
    2. Run 'apt-get update'
    3. See the following error:
    [email protected]:/etc/apt/sources.list.d# apt-get update
    Hit:1 http://mirrors.digitalocean.com/ubuntu jammy InRelease
    Hit:2 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
    Hit:3 http://mirrors.digitalocean.com/ubuntu jammy-updates InRelease
    Hit:4 http://mirrors.digitalocean.com/ubuntu jammy-backports InRelease
    Ign:5 https://pkgs-ce.cossacklabs.com/stable/ubuntu jammy InRelease
    Err:6 https://pkgs-ce.cossacklabs.com/stable/ubuntu jammy Release
      404  Not Found [IP: 178.63.6.189 443]
    Get:7 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
    Reading package lists... Done
    E: The repository 'https://pkgs-ce.cossacklabs.com/stable/ubuntu jammy Release' does not have a Release file.
    N: Updating from such a repository can't be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.
    

    Expected behavior Adding the key without warning and installing the package by a package manager.

    Environment (please complete the following information):

    • OS: Ubuntu 22.04.01 LTS
    • Hardware: [x86-64, Digital Ocean Droplet]
    • Themis version: [e.g. 0.14.0]
    • Installation way:
      • [x] via package manager
      • [ ] built from source
  • No `pythemis_uninstall` target in Makefile

    No `pythemis_uninstall` target in Makefile

    Describe the bug An uninstall makefile target is missing for python bindings.

    To Reproduce Steps to reproduce the behavior:

    1. Use 'make pythemis_install'
    2. Run 'make pythemis_uninstall'
    3. See the following error:
    make: *** No rule to make target 'pythemis_uninstall'.  Stop.
    

    Expected behavior Should be able to uninstall pythemis as it is the case with other language bindings (make phpthemis_uninstall and rbthemis_uninstall).

    Environment (please complete the following information):

    • OS: Debian 11.4
    • Hardware: 64-bit
    • Themis version: 0.14.0-23-g3a36aa4a
    • Installation way:
      • [ ] via package manager
      • [x] built from source
evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-factor authentication protection.
evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-factor authentication protection.

evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-fac

Nov 4, 2021
Sensitive information protection toolkit

godlp 一、简介 为了保障企业的数据安全和隐私安全,godlp 提供了一系列针对敏感数据的识别和处置方案, 其中包括敏感数据识别算法,数据脱敏处理方式,业务自定义的配置选项和海量数据处理能力。 godlp 能够应用多种隐私合规标准,对原始数据进行分级打标、判断敏感级别和实施相应的脱敏处理。 In

Jan 1, 2023
Optimus is an easy-to-use, reliable, and performant workflow orchestrator for data transformation, data modeling, pipelines, and data quality management.

Optimus Optimus is an easy-to-use, reliable, and performant workflow orchestrator for data transformation, data modeling, pipelines, and data quality

Jan 6, 2023
Secure software enclave for storage of sensitive information in memory.

MemGuard Software enclave for storage of sensitive information in memory. This package attempts to reduce the likelihood of sensitive data being expos

Dec 30, 2022
Scans and catches callbacks of systems that are impacted by Log4J Log4Shell vulnerability across specific headers.
Scans and catches callbacks of systems that are impacted by Log4J Log4Shell vulnerability across specific headers.

Log4ShellScanner Scans and catches callbacks of systems that are impacted by Log4J Log4Shell vulnerability across specific headers. Very Beta Warning!

Jun 17, 2022
AI-Powered Code Reviews for Best Practices & Security Issues Across Languages
AI-Powered Code Reviews for Best Practices & Security Issues Across Languages

AI-CodeWise ?? AI-Powered Code Reviews for Best Practices & Security Issues Across Languages AI-CodeWise GitHub Action: Your AI-powered Code Reviewer!

May 11, 2023
An easy-to-use XChaCha20-encryption wrapper for io.ReadWriteCloser (even lossy UDP) using ECDH key exchange algorithm, ED25519 signatures and Blake3+Poly1305 checksums/message-authentication for Go (golang). Also a multiplexer.

Quick start Prepare keys (on both sides): [ -f ~/.ssh/id_ed25519 ] && [ -f ~/.ssh/id_ed25519.pub ] || ssh-keygen -t ed25519 scp ~/.ssh/id_ed25519.pub

Dec 30, 2022
A fast and easy to use URL health checker ⛑️ Keep your links healthy during tough times
A fast and easy to use URL health checker ⛑️ Keep your links healthy during tough times

AreYouOK? A minimal, fast & easy to use URL health checker Who is AreYouOk made for ? OSS Package Maintainers ??️

Oct 7, 2022
Secure Boot certificates from the Framework Laptop

Framework Laptop UEFI Secure Boot Certificates Source: Extracted from a live machine (FRANBMCP08) Date: 2021-10-21 KEK (Key Exchange Key) This certifi

Dec 8, 2022
An easy-to-use SHA-1 hash-cracker written in Golang.
An easy-to-use SHA-1 hash-cracker written in Golang.

wrench - An easy-to-use SHA-1 hash-cracker. Wrench is an SHA-1 hash-cracker that relies on wordlists for comparing hashes, and cracking them. Before W

Aug 30, 2021
Easy-to-use Fortnite Launcher for DLL Injection & SSL-Bypass
Easy-to-use Fortnite Launcher for DLL Injection & SSL-Bypass

Easy-to-use Fortnite Launcher for DLL Injection & SSL-Bypass

Dec 26, 2022
QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security and store it on physical paper.
QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security and store it on physical paper.

QR Secrets QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security. Incorporating; AES256-GCM-HKDF

Jan 12, 2022
Gorsair hacks its way into remote docker containers that expose their APIs
Gorsair hacks its way into remote docker containers that expose their APIs

Gorsair Gorsair is a penetration testing tool for discovering and remotely accessing Docker APIs from vulnerable Docker containers. Once it has access

Dec 26, 2022
Safely wiping your secure data in Golang
Safely wiping your secure data in Golang

Go Wiper You can use this tool like a library or a ready program. If you thought in some times about safely data erasing, you have a great open-source

Aug 22, 2022
DockerSlim (docker-slim): Don't change anything in your Docker container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
DockerSlim (docker-slim): Don't change anything in your Docker container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)

Minify and Secure Docker containers (free and open source!) Don't change anything in your Docker container image and minify it by up to 30x making it

Dec 27, 2022
A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.

age age is a simple, modern and secure file encryption tool, format, and library. It features small explicit keys, no config options, and UNIX-style c

Dec 28, 2022
coyim - a safe and secure chat client
coyim - a safe and secure chat client

CoyIM - a safe and secure chat client CoyIM is a new client for the XMPP protocol. It is built upon https://github.com/agl/xmpp-client and https://git

Dec 7, 2022
SingularityCE is the Community Edition of Singularity, an open source container platform designed to be simple, fast, and secure.

SingularityCE Guidelines for Contributing Pull Request Template Project License Documentation Support Citation SingularityCE is the Community Edition

Jan 5, 2023