public virtual void SetUp()
        {
            plainText = "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet";
            keyGen    = new SymmetricKeyGenerator();

            key128         = keyGen.doGenerateKey(" GENERICRANDOM", 128);
            IV128          = keyGen.doGenerateIV("GENERICRANDOM ", 128);
            symBlockCipher = new SymmetricBlockCipher();

            plainTextStream = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam venenatis ex sit amet risus pellentesque, a faucibus quam ultrices. Ut tincidunt quam eu aliquam maximus. Quisque posuere risus at erat blandit eleifend. Curabitur viverra rutrum volutpat. Donec quis quam tellus. Aenean fermentum elementum augue, a semper risus scelerisque sit amet. Nullam vitae sapien vitae dui ullamcorper dapibus quis quis leo. Sed neque felis, pellentesque in risus et, lobortis ultricies nulla. Quisque quis quam risus. Donec vestibulum, lectus vel vestibulum eleifend, velit ante volutpat lacus, ut mattis quam ligula eget est. Sed et pulvinar lectus. In mollis turpis non ipsum vehicula, sit amet rutrum nibh dictum. Duis consectetur convallis ex, eu ultricies enim bibendum vel. Vestibulum vel libero nibh. Morbi nec odio mattis, vestibulum quam blandit, pretium orci.Aenean pellentesque tincidunt nunc a malesuada. Etiam gravida fermentum mi, at dignissim dui aliquam quis. Nullam vel lobortis libero. Phasellus non gravida posuere";
            key1024         = keyGen.doGenerateKey("GENERICRANDOM ", 1024);
            symStreamCipher = new SymmetricStreamCipher();
        }
 private void testGCM_CTS(string algorithm, string key, string text)
 {
     for (int m = 0; m < arrayTagsGCM.Length; m++)
     {
         for (int n = 0; n < arrayNonces.Length; n++)
         {
             for (int p = 0; p < arrayPaddings.Length; p++)
             {
                 SymmetricBlockCipher symBlockCipher = new SymmetricBlockCipher();
                 string encrypted = symBlockCipher.DoAEADEncrypt(algorithm, "AEAD_GCM", key, arrayTagsGCM[m],
                                                                 arrayNonces[n], text);
                 string decrypted = symBlockCipher.DoAEADDecrypt(algorithm, "AEAD_GCM", key, arrayTagsGCM[m],
                                                                 arrayNonces[n], encrypted);
                 Assert.IsTrue(SecurityUtils.compareStrings(text, decrypted));
                 True(SecurityUtils.compareStrings(text, decrypted), symBlockCipher);
             }
         }
     }
 }
        private void testBulkAlgorithmCTS(string algorithm, string[] modes, string[] paddings, string key, string IV,
                                          string text)
        {
            for (int m = 0; m < arrayModes.Length; m++)
            {
                for (int p = 0; p < arrayPaddings.Length; p++)
                {
                    SymmetricBlockCipher symBlockCipher = new SymmetricBlockCipher();
                    string encrypted = symBlockCipher.DoEncrypt(algorithm, arrayModes[m], arrayPaddings[p], key, IV, text);
                    string decrypted = symBlockCipher.DoDecrypt(algorithm, arrayModes[m], arrayPaddings[p], key, IV,
                                                                encrypted);

                    /*eu.setEncoding("UTF_16");
                     * string encrypted = symBlockCipher.DoEncrypt(algorithm, arrayModes[2], arrayPaddings[0], key, IV, text);
                     * string decrypted = symBlockCipher.DoDecrypt(algorithm, arrayModes[2], arrayPaddings[0], key, IV,
                     *              encrypted);
                     * string encoding = eu.getEncoding();*/
                    string resText = eu.getString(eu.getBytes(text));
                    Assert.IsTrue(SecurityUtils.compareStrings(resText, decrypted));

                    True(true, symBlockCipher);
                }
            }
        }
Ejemplo n.º 4
0
        public string calculate(string plainText, string key, string algorithm, int macSize)
        {
            if (!isValidAlgorithm(algorithm))
            {
                this.error.setError("CM001", "Invalid Symmetric block algorithm for CMAC");
                return("");
            }
            SymmetricBlockAlgorithm symmetricBlockAlgorithm = SymmetricBlockAlgorithmUtils.getSymmetricBlockAlgorithm(algorithm,
                                                                                                                      this.error);
            SymmetricBlockCipher symCipher   = new SymmetricBlockCipher();
            IBlockCipher         blockCipher = symCipher.getCipherEngine(symmetricBlockAlgorithm);

            if (symCipher.HasError())
            {
                this.error = symCipher.GetError();
                return("");
            }
            if (macSize > blockCipher.GetBlockSize() * 8)
            {
                this.error.setError("CM002", "The mac length must be less or equal than the algorithm block size.");
                return("");
            }
            byte[] byteKey = SecurityUtils.GetHexa(key, "CM003", this.error);
            if (this.HasError())
            {
                return("");
            }

            EncodingUtil eu = new EncodingUtil();

            byte[] byteInput = eu.getBytes(plainText);

            ICipherParameters parms = new KeyParameter(byteKey);

            CMac mac = null;

            if (macSize != 0)
            {
                mac = new CMac(blockCipher, macSize);
            }
            else
            {
                mac = new CMac(blockCipher);
            }
            try
            {
                mac.Init(parms);
            }catch (Exception e)
            {
                this.error.setError("CM004", e.Message);
                return("");
            }
            byte[] resBytes = new byte[mac.GetMacSize()];
            mac.BlockUpdate(byteInput, 0, byteInput.Length);
            mac.DoFinal(resBytes, 0);
            string result = toHexastring(resBytes);

            if (!this.error.existsError())
            {
                return(result);
            }
            return("");
        }