Ejemplo n.º 1
0
 /// <summary>
 /// MAC.
 /// <para/>Legal mac size is between 8 and block size (8 bits increments).
 /// <para/>Legal mac size must be at least 24 bits (FIPS Publication 81) or 16 bits if being used as a data authenticator (FIPS Publication 113).
 /// <para/>Used (block size / 2) as mac size by default.
 /// </summary>
 /// <param name="blockAlgorithm">Symmetric block algorithm.</param>
 /// <param name="macSize">MAC size bits.</param>
 public MAC(IBlockAlgorithm blockAlgorithm, int macSize)
 {
     if (macSize < 8 || macSize > blockAlgorithm.BlockSize || macSize % 8 != 0)
     {
         throw new CryptographicException("Legal mac size is between 8 and block size (8 bits increments).");
     }
     this.Mechanism      = string.Format(CultureInfo.InvariantCulture, "{0}/MAC", blockAlgorithm.Mechanism);
     this.BlockAlgorithm = (BlockAlgorithm)blockAlgorithm;
     this.HashSize       = macSize;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// CMAC.
 /// <para/>Legal mac size is between 8 and block size (8 bits increments).
 /// <para/>Used block size as mac size by default.
 /// </summary>
 /// <param name="blockAlgorithm">Symmetric block algorithm.</param>
 public CMAC(IBlockAlgorithm blockAlgorithm) : this(blockAlgorithm, blockAlgorithm.BlockSize)
 {
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Try get algorithm from mechanism.
        /// </summary>
        /// <param name="mechanism">Algorithm mechanism.</param>
        /// <param name="algorithm">Algorithm.</param>
        /// <returns></returns>
        public static bool TryGetAlgorithm(string mechanism, out IBlockAlgorithm algorithm)
        {
            mechanism = mechanism.Replace('_', '-').Replace('/', '-').ToUpperInvariant();
            switch (mechanism)
            {
            case "AES": algorithm = AES; return(true);

            case "BLOWFISH": algorithm = Blowfish; return(true);

            case "CAMELLIA": algorithm = Camellia; return(true);

            case "CAST5": algorithm = CAST5; return(true);

            case "CAST6": algorithm = CAST6; return(true);

            case "DES": algorithm = DES; return(true);

            case "DESEDE":
            case "DESEDE3":
            case "TDEA":
            case "TRIPLEDES":
            case "3DES": algorithm = DESede; return(true);

            case "DSTU7624-128": algorithm = DSTU7624_128; return(true);

            case "DSTU7624-256": algorithm = DSTU7624_256; return(true);

            case "DSTU7624-512": algorithm = DSTU7624_512; return(true);

            case "GOST28147": algorithm = GOST28147; return(true);

            case "IDEA": algorithm = IDEA; return(true);

            case "NOEKEON": algorithm = Noekeon; return(true);

            case "RC2": algorithm = RC2; return(true);

            case "RC5":
            case "RC5-32": algorithm = RC5; return(true);

            case "RC5-64": algorithm = RC5_64; return(true);

            case "RC6": algorithm = RC6; return(true);

            case "RIJNDAEL-128":
            case "RIJNDAEL128": algorithm = Rijndael_128; return(true);

            case "RIJNDAEL-160":
            case "RIJNDAEL160": algorithm = Rijndael_160; return(true);

            case "RIJNDAEL-192":
            case "RIJNDAEL192": algorithm = Rijndael_192; return(true);

            case "RIJNDAEL-224":
            case "RIJNDAEL224": algorithm = Rijndael_224; return(true);

            case "RIJNDAEL-256":
            case "RIJNDAEL256": algorithm = Rijndael_256; return(true);

            case "SEED": algorithm = SEED; return(true);

            case "SERPENT": algorithm = Serpent; return(true);

            case "SKIPJACK": algorithm = SKIPJACK; return(true);

            case "SM4": algorithm = SM4; return(true);

            case "TEA": algorithm = TEA; return(true);

            case "THREEFISH-256":
            case "THREEFISH256": algorithm = Threefish_256; return(true);

            case "THREEFISH-512":
            case "THREEFISH512": algorithm = Threefish_512; return(true);

            case "THREEFISH-1024":
            case "THREEFISH1024": algorithm = Threefish_1024; return(true);

            case "TNEPRES": algorithm = Tnepres; return(true);

            case "TWOFISH": algorithm = Twofish; return(true);

            case "XTEA": algorithm = XTEA; return(true);

            default: algorithm = null; return(false);
            }
        }