示例#1
0
文件: Sign.cs 项目: AutoCSer/AutoCSer
 /// <summary>
 /// 签名验证
 /// </summary>
 /// <param name="value"></param>
 /// <param name="key"></param>
 /// <param name="sign"></param>
 /// <returns></returns>
 internal unsafe static bool Check(valueType value, string key, string sign)
 {
     if (valueGetter == null)
     {
         throw new ArgumentNullException();
     }
     if (value == null)
     {
         throw new ArgumentNullException("value is null");
     }
     if (sign.length() == 32)
     {
         string[] values = new string[memberCount];
         int      length = 4 + key.Length + getLength(value, values);
         AutoCSer.SubBuffer.PoolBufferFull buffer = default(AutoCSer.SubBuffer.PoolBufferFull);
         AutoCSer.SubBuffer.Pool.GetBuffer(ref buffer, length);
         try
         {
             concat(values, ref buffer, length, key);
             using (MD5 md5 = new MD5CryptoServiceProvider())
             {
                 if (md5.ComputeHash(buffer.Buffer, buffer.StartIndex, length).checkUpperHexNotNull(sign))
                 {
                     return(true);
                 }
             }
         }
         finally { buffer.Free(); }
     }
     return(false);
 }
示例#2
0
        /// <summary>
        /// 获取解压数据
        /// </summary>
        /// <returns>解压数据</returns>
        internal byte[] Get()
        {
            AutoCSer.SubBuffer.PoolBufferFull buffer = default(AutoCSer.SubBuffer.PoolBufferFull);
            byte *data = AutoCSer.UnmanagedPool.Default.Get();

            try
            {
                AutoCSer.SubBuffer.Pool.GetBuffer(ref buffer, bufferSize);
                using (dataStream = new UnmanagedStream(data, AutoCSer.UnmanagedPool.DefaultSize))
                {
                    fixed(byte *bufferFixed = buffer.Buffer)
                    {
                        byte *start = bufferFixed + buffer.StartIndex;

                        do
                        {
                            int length = CompressStream.Read(buffer.Buffer, buffer.StartIndex, bufferSize);
                            if (length == 0)
                            {
                                break;
                            }
                            dataStream.WriteNotEmpty(start, length);
                        }while (true);
                    }
                    return(dataStream.GetArray());
                }
            }
            finally
            {
                AutoCSer.UnmanagedPool.Default.Push(data);
                buffer.Free();
            }
        }
示例#3
0
文件: Sign.cs 项目: AutoCSer/AutoCSer
        /// <summary>
        /// 获取签名计算数据
        /// </summary>
        /// <param name="value"></param>
        /// <param name="key"></param>
        /// <param name="buffer"></param>
        /// <returns>数据长度</returns>
        internal unsafe static int GetData(valueType value, string key, ref AutoCSer.SubBuffer.PoolBufferFull buffer)
        {
            if (valueGetter == null)
            {
                throw new ArgumentNullException();
            }
            if (value == null)
            {
                throw new ArgumentNullException("value is null");
            }
            string[] values = new string[memberCount];
            int      length = 4 + key.Length + getLength(value, values);

            AutoCSer.SubBuffer.Pool.GetBuffer(ref buffer, length);
            concat(values, ref buffer, length, key);
            using (MD5 md5 = new MD5CryptoServiceProvider()) setSign(value, md5.ComputeHash(buffer.Buffer, buffer.StartIndex, length).toUpperHex());
            return(length - key.Length - 5);
        }