Giter Club home page Giter Club logo

caesar's Issues

Improve test coverage

Test coverage should be 100% given the currently (version 0.1.0) still relatively small codebase size.

Alter release flow

A release version should not be committed. The flow should be as follows:

  1. checkout to a new release branch; bump version to a new release tag and push it
  2. checkout to a master branch; bump version to a new snapshot version and push the change

There should be a "dry run" option that doesn't push anything to the remote repository.

Add AbstractBytes

We want to specify the contract of some of the Object's methods at the Bytes interface level. As these can't be implemented as default methods, we can use a pattern similar to the one used in java.util (List and AbstractList).

Add an abstract class AbstractBytes that extends implements the Bytes interface.

Remove the @FunctionalInterface annotation in Bytes interface definition since the use of Bytes in a lambda expression is discouraged. Doing so breaks its equals() contract, for example.

AbstractBytes should implement equals(), hashCode() and toString() (YAGNI, at the moment).

Classes that used to implement Bytes should now extend AbstractBytes.

Add Base16 (Hex) and Base64 encoding and decoding capabilities

At the moment, we're wired to an external dependency jakarta.xml.bind:jakarta.xml.bind-api just so that we can use DatatypeConverter. This dependency could be removed.

Java 8 introduced Base64 class and the hex encoding/decoding looks easy enough to implement.

The library currently only parses Base64 and Base16 strings. We should add default methods to Bytes that would encode byte sequences to Base64 and Base16 strings.

Add RC4 Cipher

Let's add an RC4 Cipher implementation!

Qucik draft:

interface ImmutableCipher {
  ImmutableCipher init(Bytes key);
  ImmutableCipher update(Bytes message);
  Bytes doFinal();
}


class RC4 implements ImmutableCipher {
  public RC4() {}
  private RC4(/* Internal state: S, i, j */) {}
}

Make API changes

After implementing #25, the following API changes should be made:

  • remove constructor DigestArgument(String, int)
  • remove constructor DigestArgument(byte[])
  • DigestArgument should be renamed to PlainText and moved to package com.github.glusk.caesar
  • remove class BinaryString
  • update examples in README.md

[Codacy Warning] Checkstyle errors in src/test/java

Enable Checkstyle checks for tests but skip Javadoc checks.

Reasons against enforcing Javadoc comments in tests:

  • documentation is hard to do
  • test Javadocs don't get published to Maven Central
  • in my experience, most of the test Javadocs are useless anyway (for example: /** The test for class Foo. */)
  • if you change the test you have to change the doc
  • this SO answer also suggests not to enforce test documentation

Add Immutable Message Digest

Lets add this feature to the library!

  1. We want to have a thread-safe MessageDigest object
  2. We want to have an simple api for computing embedded hashes. For example: H(H(b1), b2, b3)

Coverage doesn't get sent to coveralls

The Java 9 modules source path is not properly detected by the coveralls maven plugin.

Coveralls plugin further complains:

Execution default-cli of goal org.eluder.coveralls:coveralls-maven-plugin:4.3.0:report failed: A required class was missing while executing org.eluder.coveralls:coveralls-maven-plugin:4.3.0:report: javax/xml/bind/DatatypeConverter

A workaround was proposed here.

Fix Travis build

Apparently, Travis now only supports free builds for OSS on specific architectures. Add this to .travis.yml:

os: linux
arch:
  - arm64
  - ppc64le
  - s390x

Also, fix Travis build status badge.

Update README

Add an introduction paragraph with maven dependency library usage example.

Document the release process - how to bump the version and triger a release/deployment.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.