Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.bouncycastle.crypto.test;
  
CMAC tester - Official Test Vectors.
 
 public class CMacTest
     extends SimpleTest
 {
     private static final byte[] keyBytes128 = Hex.decode("2b7e151628aed2a6abf7158809cf4f3c");
     private static final byte[] keyBytes192 = Hex.decode(
               "8e73b0f7da0e6452c810f32b809079e5"
             + "62f8ead2522c6b7b");
     private static final byte[] keyBytes256 = Hex.decode(
               "603deb1015ca71be2b73aef0857d7781"
             + "1f352c073b6108d72d9810a30914dff4");
 
     private static final byte[] input0 = Hex.decode("");
     private static final byte[] input16 = Hex.decode("6bc1bee22e409f96e93d7e117393172a");
     private static final byte[] input40 = Hex.decode(
               "6bc1bee22e409f96e93d7e117393172a"
             + "ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411");
     private static final byte[] input64 = Hex.decode(
               "6bc1bee22e409f96e93d7e117393172a"
             + "ae2d8a571e03ac9c9eb76fac45af8e51"
             + "30c81c46a35ce411e5fbc1191a0a52ef"
             + "f69f2445df4f9b17ad2b417be66c3710");
 
     private static final byte[] output_k128_m0 = Hex.decode("bb1d6929e95937287fa37d129b756746");
     private static final byte[] output_k128_m16 = Hex.decode("070a16b46b4d4144f79bdd9dd04a287c");
     private static final byte[] output_k128_m40 = Hex.decode("dfa66747de9ae63030ca32611497c827");
     private static final byte[] output_k128_m64 = Hex.decode("51f0bebf7e3b9d92fc49741779363cfe");
 
     private static final byte[] output_k192_m0 = Hex.decode("d17ddf46adaacde531cac483de7a9367");
     private static final byte[] output_k192_m16 = Hex.decode("9e99a7bf31e710900662f65e617c5184");
     private static final byte[] output_k192_m40 = Hex.decode("8a1de5be2eb31aad089a82e6ee908b0e");
     private static final byte[] output_k192_m64 = Hex.decode("a1d5df0eed790f794d77589659f39a11");
 
     private static final byte[] output_k256_m0 = Hex.decode("028962f61b7bf89efc6b551f4667d983");
     private static final byte[] output_k256_m16 = Hex.decode("28a7023f452e8f82bd4bf28d8c37c35c");
     private static final byte[] output_k256_m40 = Hex.decode("aaf3d8f1de5640c232f5b169b9c911e6");
     private static final byte[] output_k256_m64 = Hex.decode("e1992190549f6ed5696a2c056c315410");
 
     public CMacTest()
     {
     }
 
     public void performTest()
     {
         BlockCipher cipher = new AESFastEngine();
         Mac mac = new CMac(cipher, 128);
 
         //128 bytes key
 
         KeyParameter key = new KeyParameter();
 
         // 0 bytes message - 128 bytes key
         mac.init(key);
 
         mac.update(, 0, .);
 
         byte[] out = new byte[16];
 
         mac.doFinal(out, 0);
 
         if (!areEqual(out))
         {
             fail("Failed - expected " + new String(Hex.encode())
                 + " got " + new String(Hex.encode(out)));
         }
 
         // 16 bytes message - 128 bytes key
         mac.init(key);
 
         mac.update(, 0, .);
 
         out = new byte[16];
 
         mac.doFinal(out, 0);
 
         if (!areEqual(out))
         {
             fail("Failed - expected " + new String(Hex.encode())
                 + " got " + new String(Hex.encode(out)));
         }
 
         // 40 bytes message - 128 bytes key
         mac.init(key);
 
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 64 bytes message - 128 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        //192 bytes key
        key = new KeyParameter();
        // 0 bytes message - 192 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 16 bytes message - 192 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 40 bytes message - 192 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 64 bytes message - 192 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        //256 bytes key
        key = new KeyParameter();
        // 0 bytes message - 256 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 16 bytes message - 256 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 40 bytes message - 256 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // 64 bytes message - 256 bytes key
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
        // CMAC with IV
        // 16 bytes message - 256 bytes key
        mac = new CMacWithIV(new AESFastEngine());
        mac.init(key);
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (!areEqual(out))
        {
            fail("Failed - expected " + new String(Hex.encode())
                + " got " + new String(Hex.encode(out)));
        }
                // CMAC with IV
        // 16 bytes message - 256 bytes key
        mac = new CMacWithIV(new AESFastEngine());
        mac.init(new ParametersWithIV(key, Hex.decode("000102030405060708090a0b0c0d0e0f")));
        mac.update(, 0, .);
        out = new byte[16];
        mac.doFinal(out, 0);
        if (areEqual(out))
        {
            fail("Failed - got " + new String(Hex.encode()));
        }
        if (!areEqual(out, Hex.decode("9347a60c64061b9ff2a92522ca8e08fc")))
        {
            fail("Failed - expected " + "9347a60c64061b9ff2a92522ca8e08fc"
                + " got " + new String(Hex.encode(out)));
        }
        testExceptions();
    }
    private void testExceptions()
    {
        try 
        {
            CMac mac = new CMac(new AESEngine());
            mac.init(new ParametersWithIV(new KeyParameter(new byte[16]), new byte[16]));
            fail("CMac does not accept IV");
        } catch(IllegalArgumentException e)
        {
            // Expected
        }
    }
    public String getName()
    {
        return "CMac";
    }
    public static void main(String[] args)
    {
        runTest(new CMacTest());
    }
New to GrepCode? Check out our FAQ X