Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.bouncycastle.crypto.macs;
  
  
  public class VMPCMac implements Mac
 {
     private byte g;
 
     private byte n = 0;
     private byte[] P = null;
     private byte s = 0;
 
     private byte[] T;
     private byte[] workingIV;
 
     private byte[] workingKey;
 
     private byte x1x2x3x4;
 
     public int doFinal(byte[] outint outOff)
         throws DataLengthExceptionIllegalStateException
     {
         // Execute the Post-Processing Phase
         for (int r = 1; r < 25; r++)
         {
              = [( + [ & 0xff]) & 0xff];
 
              = [( +  + r) & 0xff];
              = [( +  + r) & 0xff];
              = [( +  + r) & 0xff];
              = [( +  + r) & 0xff];
             [ & 0x1f] = (byte) ([ & 0x1f] ^ );
             [( + 1) & 0x1f] = (byte) ([( + 1) & 0x1f] ^ );
             [( + 2) & 0x1f] = (byte) ([( + 2) & 0x1f] ^ );
             [( + 3) & 0x1f] = (byte) ([( + 3) & 0x1f] ^ );
              = (byte) (( + 4) & 0x1f);
 
             byte temp = [ & 0xff];
             [ & 0xff] = [ & 0xff];
             [ & 0xff] = temp;
              = (byte) (( + 1) & 0xff);
         }
 
         // Input T to the IV-phase of the VMPC KSA
         for (int m = 0; m < 768; m++)
         {
              = [( + [m & 0xff] + [m & 0x1f]) & 0xff];
             byte temp = [m & 0xff];
             [m & 0xff] = [ & 0xff];
             [ & 0xff] = temp;
         }
 
         // Store 20 new outputs of the VMPC Stream Cipher in table M
         byte[] M = new byte[20];
         for (int i = 0; i < 20; i++)
         {
              = [( + [i & 0xff]) & 0xff];
             M[i] = [([([ & 0xff]) & 0xff] + 1) & 0xff];
 
             byte temp = [i & 0xff];
             [i & 0xff] = [ & 0xff];
             [ & 0xff] = temp;
         }
 
         System.arraycopy(M, 0, outoutOffM.length);
         reset();
 
         return M.length;
     }
 
     public String getAlgorithmName()
     {
         return "VMPC-MAC";
     }
 
     public int getMacSize()
     {
         return 20;
     }
 
     public void init(CipherParameters paramsthrows IllegalArgumentException
     {
         if (!(params instanceof ParametersWithIV))
         {
             throw new IllegalArgumentException(
                 "VMPC-MAC Init parameters must include an IV");
         }
 
         ParametersWithIV ivParams = (ParametersWithIVparams;
         KeyParameter key = (KeyParameterivParams.getParameters();
 
         if (!(ivParams.getParameters() instanceof KeyParameter))
         {
             throw new IllegalArgumentException(
                 "VMPC-MAC Init parameters must include a key");
        }
        this. = ivParams.getIV();
        if ( == null || . < 1 || . > 768)
        {
            throw new IllegalArgumentException(
                "VMPC-MAC requires 1 to 768 bytes of IV");
        }
        this. = key.getKey();
        reset();
    }
    private void initKey(byte[] keyBytesbyte[] ivBytes)
    {
         = 0;
         = new byte[256];
        for (int i = 0; i < 256; i++)
        {
            [i] = (bytei;
        }
        for (int m = 0; m < 768; m++)
        {
             = [( + [m & 0xff] + keyBytes[m % keyBytes.length]) & 0xff];
            byte temp = [m & 0xff];
            [m & 0xff] = [ & 0xff];
            [ & 0xff] = temp;
        }
        for (int m = 0; m < 768; m++)
        {
             = [( + [m & 0xff] + ivBytes[m % ivBytes.length]) & 0xff];
            byte temp = [m & 0xff];
            [m & 0xff] = [ & 0xff];
            [ & 0xff] = temp;
        }
         = 0;
    }
    public void reset()
    {
        initKey(this.this.);
         =  =  =  =  =  = 0;
         = new byte[32];
        for (int i = 0; i < 32; i++)
        {
            [i] = 0;
        }
    }
    public void update(byte inthrows IllegalStateException
    {
         = [( + [ & 0xff]) & 0xff];
        byte c = (byte) (in ^ [([([ & 0xff]) & 0xff] + 1) & 0xff]);
         = [( + ) & 0xff];
         = [( + ) & 0xff];
         = [( + ) & 0xff];
         = [( +  + c) & 0xff];
        [ & 0x1f] = (byte) ([ & 0x1f] ^ );
        [( + 1) & 0x1f] = (byte) ([( + 1) & 0x1f] ^ );
        [( + 2) & 0x1f] = (byte) ([( + 2) & 0x1f] ^ );
        [( + 3) & 0x1f] = (byte) ([( + 3) & 0x1f] ^ );
         = (byte) (( + 4) & 0x1f);
        byte temp = [ & 0xff];
        [ & 0xff] = [ & 0xff];
        [ & 0xff] = temp;
         = (byte) (( + 1) & 0xff);
    }
    public void update(byte[] inint inOffint len)
    {
        if ((inOff + len) > in.length)
        {
            throw new DataLengthException("input buffer too short");
        }
        for (int i = 0; i < leni++)
        {
            update(in[i]);
        }
    }
New to GrepCode? Check out our FAQ X