All Projects → rfjakob → eme

rfjakob / eme

Licence: MIT License
EME (Encrypt-Mix-Encrypt) wide-block encryption for Go.

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to eme

virgil-sdk-net
Virgil Core SDK allows developers to get up and running with Virgil Cards Service API quickly and add end-to-end security to their new or existing digital solutions to become HIPAA and GDPR compliant and more.
Stars: ✭ 16 (-46.67%)
Mutual labels:  encryption
zarch
The Ultimate Script For Arch Linux
Stars: ✭ 49 (+63.33%)
Mutual labels:  encryption
kodex
A privacy and security engineering toolkit: Discover, understand, pseudonymize, anonymize, encrypt and securely share sensitive and personal data: Privacy and security as code.
Stars: ✭ 70 (+133.33%)
Mutual labels:  encryption
warshield
Warshield is a file encryption and decryption CLI using AES 256 algorithm
Stars: ✭ 29 (-3.33%)
Mutual labels:  encryption
encrypt0r
App to encrypt and decrypt your files with a passphrase, powered by
Stars: ✭ 26 (-13.33%)
Mutual labels:  encryption
Effer
Encrypted CLI Notepad written in Rust
Stars: ✭ 12 (-60%)
Mutual labels:  encryption
symmetric-encryption
Symmetric Encryption for Ruby Projects using OpenSSL
Stars: ✭ 454 (+1413.33%)
Mutual labels:  encryption
AES
AES for microcontrollers (Arduino & Raspberry pi)
Stars: ✭ 116 (+286.67%)
Mutual labels:  encryption
mongoose-field-encryption
A simple symmetric encryption plugin for individual fields. Dependency free, only mongoose peer dependency.
Stars: ✭ 47 (+56.67%)
Mutual labels:  encryption
sio-go
Authenticated encryption for streams in Go
Stars: ✭ 21 (-30%)
Mutual labels:  encryption
cyphr
Humane encryption
Stars: ✭ 91 (+203.33%)
Mutual labels:  encryption
JavaUltimateTools
A Large Repository Of Awesome Code For Java.
Stars: ✭ 24 (-20%)
Mutual labels:  encryption
Secure-File-Manager
Secure File Manager is open source file manager for keeping your files in safe.
Stars: ✭ 89 (+196.67%)
Mutual labels:  encryption
simple-crypto-js
Simplified AES cryptography for safer and easier encryption and decryption processes of any JavaScript objects.
Stars: ✭ 78 (+160%)
Mutual labels:  encryption
Crypto
封装多种CTF和平时常见加密及编码C#类库
Stars: ✭ 20 (-33.33%)
Mutual labels:  encryption
pakkero
Pakkero is a binary packer written in Go made for fun and educational purpose. Its main goal is to take in input a program file (elf binary, script, even appimage) and compress it, protect it from tampering and intrusion.
Stars: ✭ 143 (+376.67%)
Mutual labels:  encryption
fluffychat
🐑 Decentralized chat with private messages and rooms. Messages and files are encrypted using RSA
Stars: ✭ 25 (-16.67%)
Mutual labels:  encryption
js-libp2p-noise
Noise libp2p handshake for js-libp2p
Stars: ✭ 21 (-30%)
Mutual labels:  encryption
photochat
Works cool: I use a secure app to chat. Next level: I encrypt my chats with a private key. Intergalactic level: I encrypt my chats with a one-time token and then make them deceptively public ;)
Stars: ✭ 38 (+26.67%)
Mutual labels:  encryption
xipher
🔒 Simple perfect xor encryption cipher 🔒
Stars: ✭ 61 (+103.33%)
Mutual labels:  encryption

EME for Go CI GoDoc MIT License

EME (ECB-Mix-ECB or, clearer, Encrypt-Mix-Encrypt) is a wide-block encryption mode developed by Halevi and Rogaway in 2003 [eme].

EME uses multiple invocations of a block cipher to construct a new cipher of bigger block size (in multiples of 16 bytes, up to 2048 bytes).

Quoting from the original [eme] paper:

We describe a block-cipher mode of operation, EME, that turns an n-bit block cipher into a tweakable enciphering scheme that acts on strings of mn bits, where m ∈ [1..n]. The mode is parallelizable, but as serial-efficient as the non-parallelizable mode CMC [6]. EME can be used to solve the disk-sector encryption problem. The algorithm entails two layers of ECB encryption and a “lightweight mixing” in between. We prove EME secure, in the reduction-based sense of modern cryptography.

Figure 2 from the [eme] paper shows an overview of the transformation:

Figure 2 from [eme]

This is an implementation of EME in Go, complete with test vectors from IEEE [p1619-2] and Halevi [eme-32-testvec].

It has no dependencies outside the standard library.

Is it patentend?

In 2007, the UC Davis has decided to abandon [patabandon] the patent application [patappl] for EME.

Related algorithms

EME-32 is EME with the cipher set to AES and the length set to 512. That is, EME-32 [eme-32-pdf] is a subset of EME.

EME2, also known as EME* [emestar], is an extended version of EME that has built-in handling for data that is not a multiple of 16 bytes long.
EME2 has been selected for standardization in IEEE P1619.2 [p1619.2].

References

[eme]

A Parallelizable Enciphering Mode
Shai Halevi, Phillip Rogaway, 28 Jul 2003
https://eprint.iacr.org/2003/147.pdf (archive.org snapshot)

Note: This is the original EME paper. EME is specified for an arbitrary number of block-cipher blocks. EME-32 is a concrete implementation of EME with a fixed length of 32 AES blocks.

[eme-32-email]

Re: EME-32-AES with editorial comments (announcement email with [eme-32-pdf] attachments)
Shai Halevi, 07 Jun 2005
http://grouper.ieee.org/groups/1619/email/msg00310.html (broken link as of July 2021, archive.org snapshot) (attachment: EME-32-AES-Jun-05.pdf=pdf00020.pdf),
http://grouper.ieee.org/groups/1619/email/msg00309.html (broken link as of July 2021, archive.org snapshot) (attachment: EME-32-AES-Jun-05.doc=doc00011.doc)

[eme-32-pdf]

Draft Standard for Tweakable Wide-block Encryption, EME-32-AES-Jun-05.{doc,pdf} Shai Halevi, 02 June 2005
EME-32-AES-Jun-05.pdf ... http://grouper.ieee.org/groups/1619/email/pdf00020.pdf (broken link as of July 2021, no archive.org snapshot available)
EME-32-AES-Jun-05.doc ... http://grouper.ieee.org/groups/1619/email/doc00011.doc (broken link as of July 2021, archive.org snapshot of external mirror)

Note: This is the latest version of the EME-32 draft that I could find as of Dec 2015. It includes test vectors and C source code.

[eme-32-testvec]

Re: Test vectors for LRW and EME
Shai Halevi, 16 Nov 2004
http://grouper.ieee.org/groups/1619/email/msg00218.html (broken link as of July 2021, archive.org snapshot)

[emestar]

EME*: extending EME to handle arbitrary-length messages with associated data
Shai Halevi, 27 May 2004
https://eprint.iacr.org/2004/125.pdf (archive.org snapshot)

[patabandon]

Re: [P1619-2] Non-awareness patent statement made by UC Davis
Mat Ball, 26 Nov 2007
http://grouper.ieee.org/groups/1619/email-2/msg00005.html (broken link as of July 2021, archive.org snapshot)

[patappl]

Block cipher mode of operation for constructing a wide-blocksize block cipher from a conventional block cipher
US patent application US20040131182
http://www.google.com/patents/US20040131182

[p1619-2]

IEEE P1619.2™/D9 Draft Standard for Wide-Block Encryption for Shared Storage Media
IEEE, Dec 2008
http://siswg.net/index2.php?option=com_docman&task=doc_view&gid=156&Itemid=41 (broken link as of July 2021, archive.org snapshot)

Note: This is a draft version. The final version is not freely available and must be bought from IEEE.

Package Changelog

v1.1.2, 2021-06-27

  • Add go.mod file
  • Switch from Travis CI to Github Actions
  • No code changes

v1.1.1, 2020-04-13

  • Update go vet call in test.bash to work on recent Go versions
  • No code changes

v1.1, 2017-03-05

  • Add eme.New() / *EMECipher convenience wrapper
  • Improve panic message and parameter wording

v1.0, 2015-12-08

  • Stable release
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].