Exemplo n.º 1
0
        private void RemoveInsert(int aLeftRemainingCount,
                                  int aRigthRemainingCount,
                                  string aStringToInsert)
        {
            Debug.Assert(aLeftRemainingCount >= 0);

            if (mSecureString != null)
            {
                while (mSecureString.Length > (aLeftRemainingCount +
                                               aRigthRemainingCount))
                {
                    mSecureString.RemoveAt(aLeftRemainingCount);
                }
                for (int i = 0; i < aStringToInsert.Length; ++i)
                {
                    mSecureString.InsertAt(aLeftRemainingCount + i, aStringToInsert[i]);
                }
            }
            else
            {
                using (var newString =
                           new PinnedArray <char>(aLeftRemainingCount + aRigthRemainingCount +
                                                  aStringToInsert.Length)) {
                    Array.Copy(mAltSecureString.Data, newString.Data, aLeftRemainingCount);
                    using (var insertString =
                               new PinnedArray <char>(Encoding.Unicode.GetChars(
                                                          Encoding.Unicode.GetBytes(aStringToInsert)))) {
                        Array.Copy(insertString.Data, 0, newString.Data, aLeftRemainingCount,
                                   insertString.Data.Length);
                        Array.Copy(mAltSecureString.Data,
                                   mAltSecureString.Data.Length - aRigthRemainingCount,
                                   newString.Data, aLeftRemainingCount +
                                   insertString.Data.Length,
                                   aRigthRemainingCount);
                    }
                    mAltSecureString.Clear();
                    mAltSecureString = newString.Clone() as PinnedArray <char>;
                }
            }
        }
Exemplo n.º 2
0
        private void RemoveInsert(int aLeftRemainingCount,
                              int aRigthRemainingCount,
                              string aStringToInsert)
        {
            Debug.Assert(aLeftRemainingCount >= 0);

              if (mSecureString != null) {
            while (mSecureString.Length > (aLeftRemainingCount +
                                       aRigthRemainingCount))
            {
              mSecureString.RemoveAt(aLeftRemainingCount);
            }
            for (int i = 0; i < aStringToInsert.Length; ++i) {
              mSecureString.InsertAt(aLeftRemainingCount + i, aStringToInsert[i]);
            }
              } else {
            using (var newString =
              new PinnedArray<char>(aLeftRemainingCount + aRigthRemainingCount +
                                aStringToInsert.Length)) {
              Array.Copy(mAltSecureString.Data, newString.Data, aLeftRemainingCount);
              using (var insertString =
                 new PinnedArray<char>(Encoding.Unicode.GetChars(
                   Encoding.Unicode.GetBytes(aStringToInsert)))) {
            Array.Copy(insertString.Data, 0, newString.Data, aLeftRemainingCount,
                       insertString.Data.Length);
            Array.Copy(mAltSecureString.Data,
                       mAltSecureString.Data.Length - aRigthRemainingCount,
                       newString.Data, aLeftRemainingCount +
                       insertString.Data.Length,
                       aRigthRemainingCount);
              }
              mAltSecureString.Clear();
              mAltSecureString = newString.Clone() as PinnedArray<char>;
            }
              }
        }
Exemplo n.º 3
0
 /// <summary>
 /// removes leading element from array if the value of that element is 0
 /// </summary>
 /// <param name="array"></param>
 public static void TrimLeadingZero(PinnedArray<byte> array)
 {
     if (array != null && array.Data != null && array.Data.Length > 0) {
     if (array.Data[0] == 0) {
       PinnedArray<byte> arrayCopy = (PinnedArray<byte>)array.Clone();
       array.Data = new byte[array.Data.Length - 1];
       Array.Copy(arrayCopy.Data, 1, array.Data, 0, array.Data.Length);
       arrayCopy.Dispose();
     }
       }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Computes a % (b -1) of 2 large numbers
        /// </summary>
        /// <param name="a">variable a</param>
        /// <param name="b">variable b</param>
        /// <returns></returns>
        public static PinnedArray<byte> ModMinusOne(PinnedArray<byte> a,
                                              PinnedArray<byte> b)
        {
            using (PinnedArray<byte> bMinusOne = (PinnedArray<byte>)b.Clone()) {

            PinnedArray<byte> result = (PinnedArray<byte>)a.Clone();
            // shouldn't have to worry about borrowing because b should be prime and
            // therefore not end in zero
            bMinusOne.Data[bMinusOne.Data.Length - 1]--;
            int bShift = a.Data.Length - b.Data.Length;

            while (bShift >= 0) {
              while (CompareBigInt(result.Data, bMinusOne.Data, bShift) >= 0) {
            result.Data = SubtractBigInt(result.Data, bMinusOne.Data, bShift);
            TrimLeadingZero(result);
              }
              bShift--;
            }

            return result;
              }
        }