// Path: encoder/src/main/java/ru/bullyboo/encoder/Encoder.java
// public class Encoder {
// 
//     private Encoder() {
// 
//     }
// 
//     public static BuilderAES BuilderAES() {
//         return new BuilderAES();
//     }
// 
//     public static BuilderARCFOUR BuilderARCFOUR() {
//         return new BuilderARCFOUR();
//     }
// 
//     public static BuilderDES BuilderDES() {
//         return new BuilderDES();
//     }
// 
//     public static BuilderDESede BuilderDESede() {
//         return new BuilderDESede();
//     }
// 
//     public static BuilderRSA BuilderRSA() {
//         return new BuilderRSA();
//     }
// 
//     public static BuilderHMAC BuilderHMAC() {
//         return new BuilderHMAC();
//     }
// 
//     public static BuilderPBE BuilderPBE() {
//         return new BuilderPBE();
//     }
// 
//     public static BuilderBlowfish BuilderBlowfish() {
//         return new BuilderBlowfish();
//     }
// 
//     public static ru.bullyboo.encoder.hashes.Hash Hashes() {
//         return new ru.bullyboo.encoder.hashes.Hash();
//     }
// 
// }
// 
// Path: encoder/src/main/java/ru/bullyboo/encoder/callbacks/EncodeCallback.java
// public interface EncodeCallback {
// 
//     void onSuccess(String result);
// 
//     void onFailure(Throwable e);
// }
// 
// Path: encoder/src/main/java/ru/bullyboo/encoder/methods/HMAC.java
// public class HMAC {
// 
//     /**
//      * All supported methods
//      */
//     public enum Method{
// 
//         HMAC_MD5("HMAC-MD5"),
//         HMAC_SHA_1("HMAC-SHA1"),
//         HMAC_SHA_224("HMAC-SHA224"),
//         HMAC_SHA_256("HMAC-SHA256"),
//         HMAC_SHA_384("HMAC-SHA384"),
//         HMAC_SHA_512("HMAC-SHA512");
// 
// 
//         private final String method;
// 
//         Method(String method) {
//             this.method = method;
//         }
// 
//         public String getMethod() {
//             return method;
//         }
// 
//     }
// 
//     /**
//      * Implementation of HMAC encryption
//      */
//     public static String encrypt(HMAC.Method method, byte[] key, byte[] message) throws Exception{
// 
//         SecretKeySpec keySpec = new SecretKeySpec(key, method.getMethod());
// 
//         Mac cipher = Mac.getInstance(method.getMethod());
//         cipher.init(keySpec);
//         byte[] cipherText = cipher.doFinal(message);
// 
//         StringBuffer hash = new StringBuffer();
//         for (int i = 0; i < cipherText.length; i++) {
//             String hex = Integer.toHexString(0xFF & cipherText[i]);
//             if (hex.length() == 1) {
//                 hash.append('0');
//             }
//             hash.append(hex);
//         }
// 
//         return hash.toString();
//     }
// 
// }


import ru.bullyboo.encoder.Encoder;
import ru.bullyboo.encoder.callbacks.EncodeCallback;
import ru.bullyboo.encoder.methods.HMAC;
package ru.bullyboo.encryption.tests;


/**
 * Created by BullyBoo on 28.03.2017.
 */

public class TestHMAC {

    private static final String message = "test text 123\0\0\0"; //Not null padding
    private static final String message1 = "test message"; //with padding
    private static final String key = "test key";
    private static final String vector = "test vector";

    public static void testHMAC(){

        HMAC.Method[] methods = HMAC.Method.values();

        for(HMAC.Method method : methods){

            String encrypt = Encoder.BuilderHMAC()
                    .message("test message")
                    .method(HMAC.Method.HMAC_SHA_1)
                    .key("test key")
                    .encrypt();

            System.out.println("encrypt with " + method.getMethod() + " = " + encrypt);
        }
    }

    public static void testHMAC_Async(){

        Encoder.BuilderHMAC()
                .method(HMAC.Method.HMAC_SHA_1)
                .message("test message")
                .key("test key")
// Path: encoder/src/main/java/ru/bullyboo/encoder/Encoder.java
// public class Encoder {
// 
//     private Encoder() {
// 
//     }
// 
//     public static BuilderAES BuilderAES() {
//         return new BuilderAES();
//     }
// 
//     public static BuilderARCFOUR BuilderARCFOUR() {
//         return new BuilderARCFOUR();
//     }
// 
//     public static BuilderDES BuilderDES() {
//         return new BuilderDES();
//     }
// 
//     public static BuilderDESede BuilderDESede() {
//         return new BuilderDESede();
//     }
// 
//     public static BuilderRSA BuilderRSA() {
//         return new BuilderRSA();
//     }
// 
//     public static BuilderHMAC BuilderHMAC() {
//         return new BuilderHMAC();
//     }
// 
//     public static BuilderPBE BuilderPBE() {
//         return new BuilderPBE();
//     }
// 
//     public static BuilderBlowfish BuilderBlowfish() {
//         return new BuilderBlowfish();
//     }
// 
//     public static ru.bullyboo.encoder.hashes.Hash Hashes() {
//         return new ru.bullyboo.encoder.hashes.Hash();
//     }
// 
// }
// 
// Path: encoder/src/main/java/ru/bullyboo/encoder/callbacks/EncodeCallback.java
// public interface EncodeCallback {
// 
//     void onSuccess(String result);
// 
//     void onFailure(Throwable e);
// }
// 
// Path: encoder/src/main/java/ru/bullyboo/encoder/methods/HMAC.java
// public class HMAC {
// 
//     /**
//      * All supported methods
//      */
//     public enum Method{
// 
//         HMAC_MD5("HMAC-MD5"),
//         HMAC_SHA_1("HMAC-SHA1"),
//         HMAC_SHA_224("HMAC-SHA224"),
//         HMAC_SHA_256("HMAC-SHA256"),
//         HMAC_SHA_384("HMAC-SHA384"),
//         HMAC_SHA_512("HMAC-SHA512");
// 
// 
//         private final String method;
// 
//         Method(String method) {
//             this.method = method;
//         }
// 
//         public String getMethod() {
//             return method;
//         }
// 
//     }
// 
//     /**
//      * Implementation of HMAC encryption
//      */
//     public static String encrypt(HMAC.Method method, byte[] key, byte[] message) throws Exception{
// 
//         SecretKeySpec keySpec = new SecretKeySpec(key, method.getMethod());
// 
//         Mac cipher = Mac.getInstance(method.getMethod());
//         cipher.init(keySpec);
//         byte[] cipherText = cipher.doFinal(message);
// 
//         StringBuffer hash = new StringBuffer();
//         for (int i = 0; i < cipherText.length; i++) {
//             String hex = Integer.toHexString(0xFF & cipherText[i]);
//             if (hex.length() == 1) {
//                 hash.append('0');
//             }
//             hash.append(hex);
//         }
// 
//         return hash.toString();
//     }
// 
// }


// Path: app/src/main/java/ru/bullyboo/encryption/tests/TestHMAC.java
import ru.bullyboo.encoder.Encoder;
import ru.bullyboo.encoder.callbacks.EncodeCallback;
import ru.bullyboo.encoder.methods.HMAC;

package ru.bullyboo.encryption.tests;


/**
 * Created by BullyBoo on 28.03.2017.
 */

public class TestHMAC {

    private static final String message = "test text 123\0\0\0"; //Not null padding
    private static final String message1 = "test message"; //with padding
    private static final String key = "test key";
    private static final String vector = "test vector";

    public static void testHMAC(){

        HMAC.Method[] methods = HMAC.Method.values();

        for(HMAC.Method method : methods){

            String encrypt = Encoder.BuilderHMAC()
                    .message("test message")
                    .method(HMAC.Method.HMAC_SHA_1)
                    .key("test key")
                    .encrypt();

            System.out.println("encrypt with " + method.getMethod() + " = " + encrypt);
        }
    }

    public static void testHMAC_Async(){

        Encoder.BuilderHMAC()
                .method(HMAC.Method.HMAC_SHA_1)
                .message("test message")
                .key("test key")
                .encryptCallBack(new EncodeCallback() {