Skip to content
/ caesar Public

An object-oriented approach to cryptography in Java.

License

Notifications You must be signed in to change notification settings

Glusk/caesar

Repository files navigation

Caesar

Logo

Build Status Build status Codacy Badge Coverage Status

Maven Central javadoc

LoC Hits-of-Code

An object-oriented approach to cryptography in Java.


Motivation

This project aims to replace/wrap the following JDK APIs: MessageDigest, Mac and Cipher.

cactoos-crypto is a direct alternative to this project.

Hashing

In order to start using Caesar's hashing utilities you first have to wrap a MessageDigest instance inside a new ImmutableMessageDigest object:

ImmutableMessageDigest imd =
    new ImmutableMessageDigest(
        MessageDigest.getInstance(/* ... */)
    );

Once you obtain an ImmutableMessageDigest instance, you can perform the hashing:

// ImmutableMessageDigest imd = ...
Bytes result = new Hash(imd, new PlainText("password123"));

You can also use ImmutableMessageDigest's fluid API:

// ImmutableMessageDigest imd = ...
byte[] result = imd.update(new PlainText("password123")).digest();

Embedded hashes

You can pass the result of one hashing operation as an argument to another.

Suppose we wanted to compute the following hash:

H(H(b1), b2, b3)

This is how it would be done with Caesar:

// byte[] b1 = ...
// byte[] b2 = ...
// byte[] b3 = ...
// ImmutableMessageDigest imd = ...

Bytes result = 
    new Hash(
        imd,
        new Hash(
            imd,
            () -> b1
        ),
        () -> b2,
        () -> b3
    );

HMAC

This is how you compute HMAC("Key", "Message") with Caesar, using the SHA-256 hash function:

Bytes hmac =
    new Hmac(
        new ImmutableMessageDigest(
            MessageDigest.getInstance("SHA-256")
        ),
        new PlainText("Key"),
        new PlainText("Message")
    );

Releases

Use the release script with the following arguments:

  1. release - the next release version

  2. snapshot - the next snapshot version

  3. dryRun (optional) - if set to true, the changes will not be pushed to the remote repository

Example:

./release.sh 0.1.1 0.1.2-SNAPSHOT

Logo icon made by Pixelmeetup from www.flaticon.com