Beispiel #1
0
        public MD(MDType type)
        {
            EVP_MD *    md     = null; // Statically allocated (MT), don't free
            EVP_MD_CTX *handle = null;

            if ((md = MD.GetMD(type)) == null)
            {
                throw new EVPException();
            }

            if ((handle = _MD.EVP_MD_CTX_create()) == null)
            {
                goto Bailout;
            }

            if (_MD.EVP_DigestInit_ex(handle, md, IntPtr.Zero) == 0)
            {
                goto Bailout;
            }

            this._handle = handle;
            this._type   = type;

            return;

Bailout:
            if (handle != null)
            {
                _MD.EVP_MD_CTX_destroy(handle);
            }
            throw new EVPException();
        }
Beispiel #2
0
        public HMAC(MDType type)
        {
            this._type = type;
            this._md   = MD.GetMD(this._type);

            if (this._md == null)
            {
                throw new EVPException();
            }
        }
Beispiel #3
0
        public static MDType GetMDRR()
        {
            var server = ServerTest.GetServer();
            var zone   = ZoneTest.GetZone();

            var record = zone.GetRecords().FirstOrDefault(i => i.OwnerName == "md." + zone.Name);

            if (record == null)
            {
                record = MDType.CreateInstanceFromPropertyData(server, server.Name, zone.Name, "md." + zone.Name, DNSManagement.RR.ResourceRecord.RecordClassEnum.IN, null, "mdhost");
            }
            return((MDType)record.UnderlyingRecord);
        }
Beispiel #4
0
        internal static EVP_MD *GetMD(MDType type)
        {
            switch (type)
            {
            case MDType.MD5: return(_MD.EVP_md5());

            case MDType.SHA1: return(_MD.EVP_sha1());

            case MDType.SHA256: return(_MD.EVP_sha256());

            case MDType.SHA384: return(_MD.EVP_sha384());

            case MDType.SHA512: return(_MD.EVP_sha512());
            }

            return(null);
        }
Beispiel #5
0
        internal static EVP_MD* GetMD(MDType type)
        {
            switch (type)
            {
                case MDType.MD5   : return _MD.EVP_md5   ();
                case MDType.SHA1  : return _MD.EVP_sha1  ();
                case MDType.SHA256: return _MD.EVP_sha256();
                case MDType.SHA384: return _MD.EVP_sha384();
                case MDType.SHA512: return _MD.EVP_sha512();
            }

            return null;
        }
Beispiel #6
0
        public HMAC(MDType type)
        {
            this._type = type;
            this._md   = MD.GetMD(this._type);

            if (this._md == null)
                throw new EVPException();
        }
Beispiel #7
0
        public MD(MDType type)
        {
            EVP_MD* md = null; // Statically allocated (MT), don't free
            EVP_MD_CTX* handle = null;

            if ((md = MD.GetMD(type)) == null)
                throw new EVPException();

            if ((handle = _MD.EVP_MD_CTX_create()) == null)
                goto Bailout;

            if (_MD.EVP_DigestInit_ex(handle, md, IntPtr.Zero) == 0)
                goto Bailout;

            this._handle = handle;
            this._type = type;
        
            return ;

        Bailout:
            if (handle != null)
                _MD.EVP_MD_CTX_destroy(handle);
            throw new EVPException();
        }
Beispiel #8
0
        private void DumpFields(ulong Address, ClrType type = null)
        {
            StartRuntime();
            ClrType obj;

            if (type == null)
            {
                obj = m_heap.GetObjectType(Address);
            }
            else
            {
                obj = type;
            }

            if (cache == null)
            {
                cache = new HeapCache(m_runtime, ShowProgress);
            }
            MDType      tp = new MDType(obj);
            MD_TypeData data;

            tp.GetHeader(Address, out data);
            int count = 0;

            tp.GetAllFieldsDataRawCount(out count);
            int temp = 0;

            MD_FieldData[] fields = new MD_FieldData[count];

            tp.GetAllFieldsDataRaw(data.isValueType ? 1 : 0, count, fields, out temp);

            for (int i = 0; i < count; i++)
            {
                string typeName;
                string Name;
                tp.GetRawFieldTypeAndName(i, out typeName, out Name);
                MD_TypeData fd;
                ClrType     ftp     = AdHoc.GetTypeFromMT(m_runtime, fields[i].MethodTable);
                MDType      ft      = new MDType(ftp);
                ulong       pointer = 0;

                tp.GetRawFieldAddress(Address, data.isValueType ? 1 : 0, i, out pointer);
                if (fields[i].isValueType)
                {
                    ft.GetHeader(pointer, out fd);
                }
                else
                {
                    ft.GetHeader(ReadPointer(pointer), out fd);
                }
                Write("{0:x16} {1:x4} {5:x16} {6} +{2:x4} {3,30} {4,30} {7} ", fd.module,
                      fd.token, fields[i].offset, TrimRight(typeName, 30), Name,
                      data.MethodTable, fields[i].isThreadStatic ? " thread " : fields[i].isStatic ? " Static " : "        ",
                      fields[i].isEnum  ?
                      AdHoc.GetEnumName(ftp,
                                        ReadPointer(pointer) & (fd.size == 4 ?
                                                                0x0000FFFF : ulong.MaxValue))
                    : "" /*cache.GetFieldValue(Address, Name, obj)*/);
                ulong effAddress = pointer;
                if (fd.isValueType)
                {
                    if (fields[i].isEnum)
                    {
                        WriteLine("");
                        continue;
                    }

                    try
                    {
                        WriteLine("{0}", ftp.GetValue(pointer));
                    }
                    catch
                    {
                        WriteLine("{0}", ReadPointer(pointer) & (fd.size == 4 ? 0xFFFFFFFF :
                                                                 fd.size == 8 ? 0x00000000FFFFFFFF : ulong.MaxValue));
                    }
                    continue;
                }
                else
                {
                    if (pointer != 0)
                    {
                        effAddress = ReadPointer(pointer);
                    }

                    Write("({0:x16}) ", effAddress);
                    if (effAddress == 0)
                    {
                        WriteLine("");
                        continue;
                    }
                    if (fd.isString)
                    {
                        string str;

                        tp.GetString(effAddress, out str);
                        Write("{0}", str);
                    }
                    WriteLine("");
                }
            }

            /*
             * var fields =
             *  from f in obj.Fields
             *  orderby f.Offset
             *  select f;
             *
             * foreach (var field in fields)
             * {
             *  WriteLine("{0:x16} {1:x4} +{2:x4} {3,30} {4,30}", field.Type.Module.AssemblyId,
             *      field.Type.MetadataToken, field.Offset, TrimRight(field.Type.Name, 30), field.Name);
             *
             *
             * }
             * if (obj.StaticFields.Count > 0)
             * {
             *  var statFields =
             *      from s in obj.StaticFields
             *      orderby s.Offset
             *      select s;
             *  WriteLine("Static Fields:");
             *  foreach (var field in statFields)
             *  {
             *      WriteLine("{0:x16} {1:x4} +{2:x4} {3,30} {4,30}", field.Type.Module.AssemblyId,
             *          field.Type.MetadataToken, field.Offset, TrimRight(field.Type.Name, 30), field.Name);
             *  }
             * }
             * if (obj.ThreadStaticFields.Count > 0)
             * {
             *  var threadFields =
             *      from t in obj.ThreadStaticFields
             *      orderby t.Offset
             *      select t;
             *  WriteLine("Thread Static Fields:");
             *  foreach (var field in threadFields)
             *  {
             *      WriteLine("{0:x16} {1:x4} +{2:x4} {3,30} {4,30}", field.Type.Module.AssemblyId,
             *          field.Type.MetadataToken, field.Offset, TrimRight(field.Type.Name, 30), field.Name);
             *  }
             *
             * }
             */
        }