private void CopyIn(MD2Digest t)
 {
     Array.Copy(t.X, 0, X, 0, t.X.Length);
     xOff = t.xOff;
     Array.Copy(t.M, 0, M, 0, t.M.Length);
     mOff = t.mOff;
     Array.Copy(t.C, 0, C, 0, t.C.Length);
     COff = t.COff;
 }
        public static ExtraHashAlgorithm CreateMD2()
        {
            var ha = new MD2Digest();

            return(new ExtraHashAlgorithm(
                       ha.AlgorithmName, ha.GetDigestSize(),
                       ha.Reset, ha.BlockUpdate, ha.DoFinal
                       ));
        }
        /// <summary>
        /// SHA1 computation
        /// </summary>
        /// <param name="data">the data to hash</param>
        /// <param name="key">not usable</param>
        /// <returns>the hash value</returns>
        private static byte[] ComputeMd2(byte[] data, byte[] key)
        {
            byte[] outData = new byte[16];

            if (key != null)
            {
                var md2Hmac = new HMac(new MD2Digest());
                md2Hmac.Init(new KeyParameter(key));
                md2Hmac.BlockUpdate(data, 0, data.Length);
                md2Hmac.DoFinal(outData, 0);
            }
            else
            {
                var md2 = new MD2Digest();
                md2.BlockUpdate(data, 0, data.Length);
                md2.DoFinal(outData, 0);
            }

            return(outData);
        }
Exemple #4
0
        public ITestResult Perform()
        {
            IDigest digest = new MD2Digest();

            byte[] resBuf = new byte[digest.GetDigestSize()];
            string resStr;

            //
            // test 1
            //
            byte[] bytes = Hex.Decode(testVec1);
            digest.BlockUpdate(bytes, 0, bytes.Length);
            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec1.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 1"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec1
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }

            //
            // test 2
            //
            bytes = Hex.Decode(testVec2);

            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec2.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 2"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec2
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }

            //
            // test 3
            //
            bytes = Hex.Decode(testVec3);
            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec3.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 3"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec3
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }

            //
            // test 4
            //

            bytes = Hex.Decode(testVec4);

            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec4.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 4"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec4
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }
            //
            // test 5
            //
            bytes = Hex.Decode(testVec5);

            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec5.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            //System.err.println(
                                            "MD2 failing standard vector test 5"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec5
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }
            //
            // test 6
            //
            bytes = Hex.Decode(testVec6);

            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec6.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 6"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec6
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }
            //
            // test 7
            //
            bytes = Hex.Decode(testVec7);

            digest.BlockUpdate(bytes, 0, bytes.Length);

            digest.DoFinal(resBuf, 0);

            resStr = Hex.ToHexString(resBuf);
            if (!resVec7.Equals(resStr))
            {
                return(new SimpleTestResult(false,
                                            "MD2 failing standard vector test 7"
                                            + SimpleTest.NewLine
                                            + "    expected: " + resVec7
                                            + SimpleTest.NewLine
                                            + "    got     : " + resStr));
            }

            return(new SimpleTestResult(true, Name + ": Okay"));
        }
    public void Reset(IMemoable other)
    {
        MD2Digest t = (MD2Digest)other;

        CopyIn(t);
    }
 public MD2Digest(MD2Digest t)
 {
     CopyIn(t);
 }
        public static IDigest GetDigest(string algorithm)
        {
            string text  = Platform.ToUpperInvariant(algorithm);
            string text2 = (string)DigestUtilities.algorithms[text];

            if (text2 == null)
            {
                text2 = text;
            }
            try
            {
                switch ((DigestUtilities.DigestAlgorithm)Enums.GetEnumValue(typeof(DigestUtilities.DigestAlgorithm), text2))
                {
                case DigestUtilities.DigestAlgorithm.GOST3411:
                {
                    IDigest result = new Gost3411Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.MD2:
                {
                    IDigest result = new MD2Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.MD4:
                {
                    IDigest result = new MD4Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.MD5:
                {
                    IDigest result = new MD5Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.RIPEMD128:
                {
                    IDigest result = new RipeMD128Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.RIPEMD160:
                {
                    IDigest result = new RipeMD160Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.RIPEMD256:
                {
                    IDigest result = new RipeMD256Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.RIPEMD320:
                {
                    IDigest result = new RipeMD320Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_1:
                {
                    IDigest result = new Sha1Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_224:
                {
                    IDigest result = new Sha224Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_256:
                {
                    IDigest result = new Sha256Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_384:
                {
                    IDigest result = new Sha384Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_512:
                {
                    IDigest result = new Sha512Digest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_512_224:
                {
                    IDigest result = new Sha512tDigest(224);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA_512_256:
                {
                    IDigest result = new Sha512tDigest(256);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA3_224:
                {
                    IDigest result = new Sha3Digest(224);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA3_256:
                {
                    IDigest result = new Sha3Digest(256);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA3_384:
                {
                    IDigest result = new Sha3Digest(384);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.SHA3_512:
                {
                    IDigest result = new Sha3Digest(512);
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.TIGER:
                {
                    IDigest result = new TigerDigest();
                    return(result);
                }

                case DigestUtilities.DigestAlgorithm.WHIRLPOOL:
                {
                    IDigest result = new WhirlpoolDigest();
                    return(result);
                }
                }
            }
            catch (ArgumentException)
            {
            }
            throw new SecurityUtilityException("Digest " + text2 + " not recognised.");
        }
Exemple #8
0
        public static byte[] Digest(byte[] data, String algo)
        {
            if (algo == null)
            {
                throw new ArgumentNullException("El algoritmo de huella digital no puede ser nulo");
            }
            if (data == null)
            {
                throw new ArgumentNullException("Los datos no pueden ser nulos");
            }

            switch (algo)
            {
            /**
             * ALGORITMOS DE HASING
             */
            case AOSignConstants.SIGN_ALGORITHM_SHA1:
            {
                Sha1Digest dig = new Sha1Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_SHA256:
            {
                Sha256Digest dig = new Sha256Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_SHA384:
            {
                Sha384Digest dig = new Sha384Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_SHA512:
            {
                Sha512Digest dig = new Sha512Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_RIPEMD160:
            {
                RipeMD160Digest dig = new RipeMD160Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_MD5:
            {
                MD5Digest dig = new MD5Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            case AOSignConstants.SIGN_ALGORITHM_MD2:
            {
                MD2Digest dig = new MD2Digest();
                dig.BlockUpdate(data, 0, data.Length);
                byte[] result = new byte[dig.GetDigestSize()];
                dig.DoFinal(result, 0);
                return(result);
            }

            default:
                // You can use the default case.
                throw new ArgumentNullException("El algoritmo no es reconocido");
            }


            throw new ArgumentNullException("Algoritmo de hash no soportado: " + algo);
        }