Example #1
0
            public String decipher(List <BigInteger> cipher, MHPrivateKey key)
            {
                String     decrypted = "";
                BigInteger temp      = BigInteger.ValueOf(0);
                int        tmp       = 0;

                BigInteger bits = BigInteger.ValueOf(0);

                for (int i = 0; i < cipher.Count; i++)
                {
                    temp = cipher.ElementAt(i);
                    int bitlen = temp.BitLength;
                    int ff     = 0;
                    while (bitlen < (int)Math.Pow(2, ff))
                    {
                        ff++;
                    }
                    if (ff > bitlen)
                    {
                        bitlen = ff;
                    }

                    for (int j = 0; j < bitlen; j++)
                    {
                        if (temp.Mod(BigInteger.ValueOf(2)).CompareTo(BigInteger.ValueOf(1)) == 0)
                        {
                            bits = bits.Add(key.w1.Multiply(BigInteger.ValueOf((long)Math.Pow(2, j))));
                        }
                        temp = temp.ShiftRight(1);
                    }
                    bits = bits.Mod(key.n);
                    List <BigInteger> list = (List <BigInteger>)key.a;
                    BigInteger        temper;

                    int k = key.a.Count - 1;
                    while (k >= 0)
                    {
                        temper = list.ElementAt(k);
                        if (bits.CompareTo(temper) > -1)
                        {
                            tmp += (int)Math.Pow(2, k);
                            bits = bits.Subtract(temper);
                        }
                        k--;
                    }
                    decrypted += (binaryToChar(Convert.ToString(tmp, 2))).ToString();

                    bits = BigInteger.ValueOf(0);
                    tmp  = 0;
                }
                return(decrypted);
            }
Example #2
0
            public MHKey()
            {
                generator  gen = new generator(8);
                BigInteger w   = gen.w;

                e = new List <BigInteger>();
                for (int i = 0; i < gen.a.Count; i++)
                {
                    e.Add(w.Multiply(gen.a.ElementAt(i)).Mod(gen.n)); // w*a Mod n ..
                }

                BigInteger w1  = BigInteger.ValueOf(1);
                BigInteger one = BigInteger.ValueOf(2);

                while (one.IntValue != 1)
                {
                    w1  = w1.Add(BigInteger.ValueOf(1)).Mod(gen.n);
                    one = w.Multiply(w1).Mod(gen.n);
                }
                privateKey = new MHPrivateKey(gen.a, w.ModInverse(gen.n), gen.n);
            }