private void Initialize()
        {
            // Entity Header fields
            ___entityserializationsignature = EntitySerialization02.ENTITYSERIALIZATION_SIGNATURE;
            ___entityserializationversion   = EntitySerialization02.ENTITYSERIALIZATION_VERSION;
            ___fieldserializationversion    = FieldSerialization02.FIELDSERIALIZATION_VERSION;
            ___entitystate = EntitySerialization02.EntityState.INITIALIZED;
            ___nfields     = EntitySerialization02.NSYSTEMFIELDS + __NENTITYFIELDS + __NBLOCKCHAINFIELDS;

            // Entity System fields
            __entitytypehash = ENTITY_TYPE;
            __created        = DateTime.UtcNow.Ticks;
            __modified       = 0;
            __changeindex    = 0;

            // Entity Data fields
            _imageVersion = 0;
            _imageName    = String.Empty;
            _imageContent = Array.Empty <byte>();

            // Blockchain data fields
            __previousentityBlockindex   = 0;
            __previousentityTxhash       = EntitySerialization02.TX_ZEROS_HASH_HEX;
            __previousentityContentHash  = EntitySerialization02.SHA256_DUMMY_HASH;
            __thisentityRecentBlockIndex = 0;
            __thisentityContentHash      = EntitySerialization02.SHA256_DUMMY_HASH; // Set in Serialize()
        }
        public FileInfoLedgerEntry02(int imageversion, string imagename, byte[] imagecontent)
        {
            // Entity Header fields
            ___entityserializationsignature = EntitySerialization02.ENTITYSERIALIZATION_SIGNATURE;
            ___entityserializationversion   = EntitySerialization02.ENTITYSERIALIZATION_VERSION;
            ___fieldserializationversion    = FieldSerialization02.FIELDSERIALIZATION_VERSION;
            ___entitystate = EntitySerialization02.EntityState.INITIALIZED;
            ___nfields     = EntitySerialization02.NSYSTEMFIELDS + __NENTITYFIELDS + __NBLOCKCHAINFIELDS;

            // Entity System fields
            __entitytypehash = ENTITY_TYPE;
            __created        = DateTime.UtcNow.Ticks;
            __modified       = 0;
            __changeindex    = 0;

            // Entity Data fields
            _imageVersion = imageversion;
            _imageName    = imagename;
            _imageContent = imagecontent;

            // Blockchain data fields
            __previousentityBlockindex   = 0;
            __previousentityTxhash       = EntitySerialization02.TX_ZEROS_HASH_HEX;
            __previousentityContentHash  = EntitySerialization02.SHA256_DUMMY_HASH;
            __thisentityRecentBlockIndex = 0;
            __thisentityContentHash      = EntitySerialization02.SHA256_DUMMY_HASH; // Set in Serialize()
        }
 private EntitySerialization02.EntityState OnChangeAllFieldValues(EntitySerialization02.EntityState newState = EntitySerialization02.EntityState.SET)
 {
     EntitySerialization02.EntityState prevState = ___entitystate;
     for (int fi = (int)EntitySerialization02.FieldIndices.HEADERFIELDS; fi < ___nfields; fi++)
     {
         OnChangeFieldValue((EntitySerialization02.FieldIndices)fi, newState);
     }
     return(prevState);
 }
        public byte[] Serialize()
        {
            if (___entitystate == EntitySerialization02.EntityState.UNINITIALIZED)
            {
                Initialize();
            }

            EntitySerialization02.EntityState oldState = OnChangeState(EntitySerialization02.EntityState.SERIALIZED);

            byte[][] fieldBuffer = new byte[this.___nfields][];

            // Entity System fields
            fieldBuffer[0] = FieldSerialization02.GetFieldBuffer(this.__entitytypehash);
            fieldBuffer[1] = FieldSerialization02.GetFieldBuffer(this.__created);
            fieldBuffer[2] = FieldSerialization02.GetFieldBuffer(this.__modified);
            fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this.__changeindex);

            // Entity Data fields
            fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this._id);
            fieldBuffer[4] = FieldSerialization02.GetFieldBuffer(this._username);
            fieldBuffer[5] = FieldSerialization02.GetFieldBuffer(this._passphrase);

            int lBuffer = EntitySerialization02.NHEADERFIELDS * sizeof(byte);

            for (int fi = 0; fi < ___nfields; fi++)
            {
                lBuffer += fieldBuffer[fi].Length;                                     // Entity System fields plus Entity data fields
            }
            byte[] buffer     = new byte[lBuffer];
            int    bufferBase = 0;

            // Entity Header fields
            buffer[bufferBase++] = ___entityserializationsignature;
            buffer[bufferBase++] = ___entityserializationversion;
            buffer[bufferBase++] = ___fieldserializationversion;
            buffer[bufferBase++] = (byte)___entitystate;
            buffer[bufferBase++] = ___nfields;

            // Entity System fields plus Entity data fields
            for (int fi = 0; fi < ___nfields; fi++)
            {
                if (bufferBase + fieldBuffer[fi].Length > lBuffer)
                {
                    OnChangeState(EntitySerialization02.EntityState.EXCEPTION_SERIALIZATION);
                    return(Array.Empty <byte>());
                }
                fieldBuffer[fi].CopyTo(buffer, bufferBase);
                bufferBase += fieldBuffer[fi].Length;
            }

            ___entitystate = oldState;

            return(buffer);
        }
 private EntitySerialization02.EntityState OnChangeFieldValue(EntitySerialization02.FieldIndices eField, EntitySerialization02.EntityState newState = EntitySerialization02.EntityState.SET)
 {
     EntitySerialization02.EntityState prevState = ___entitystate;
     if (newState != EntitySerialization02.EntityState.DONTCHANGESTATE)
     {
         ___entitystate = newState;
     }
     __modified = DateTime.UtcNow.Ticks;
     __changeindex++;
     return(prevState);
 }
        private void Initialize()
        {
            // Entity Header fields
            ___entityserializationsignature = EntitySerialization02.ENTITYSERIALIZATION_SIGNATURE;
            ___entityserializationversion   = EntitySerialization02.ENTITYSERIALIZATION_VERSION;
            ___fieldserializationversion    = FieldSerialization02.FIELDSERIALIZATION_VERSION;
            ___entitystate = EntitySerialization02.EntityState.INITIALIZED;
            ___nfields     = EntitySerialization02.NSYSTEMFIELDS + __NENTITYFIELDS;

            // Entity System fields
            __entitytypehash = ENTITY_TYPE;
            __created        = DateTime.UtcNow.Ticks;
            __modified       = 0;
            __changeindex    = 0;

            // Entity Data fields
            _id         = 0;
            _username   = String.Empty;
            _passphrase = String.Empty;
        }
        public UserLedgerEntry02(int id, string username, string passphrase)
        {
            // Entity Header fields
            ___entityserializationsignature = EntitySerialization02.ENTITYSERIALIZATION_SIGNATURE;
            ___entityserializationversion   = EntitySerialization02.ENTITYSERIALIZATION_VERSION;
            ___fieldserializationversion    = FieldSerialization02.FIELDSERIALIZATION_VERSION;
            ___entitystate = EntitySerialization02.EntityState.INITIALIZED;
            ___nfields     = EntitySerialization02.NSYSTEMFIELDS + __NENTITYFIELDS;

            // Entity System fields
            __entitytypehash = ENTITY_TYPE;
            __created        = DateTime.UtcNow.Ticks;
            __modified       = 0;
            __changeindex    = 0;

            // Entity Data fields
            _id         = id;
            _username   = username;
            _passphrase = passphrase;
        }
Beispiel #8
0
        public ImageLedgerEntry02(int imageversion, string imagename, byte[] imagecontent)
        {
            // Entity Header fields
            ___entityserializationsignature = EntitySerialization02.ENTITYSERIALIZATION_SIGNATURE;
            ___entityserializationversion   = EntitySerialization02.ENTITYSERIALIZATION_VERSION;
            ___fieldserializationversion    = FieldSerialization02.FIELDSERIALIZATION_VERSION;
            ___entitystate = EntitySerialization02.EntityState.INITIALIZED;
            ___nfields     = EntitySerialization02.NSYSTEMFIELDS + __NENTITYFIELDS;

            // Entity System fields
            __entitytypehash = ENTITY_TYPE;
            __created        = DateTime.UtcNow.Ticks;
            __modified       = 0;
            __changeindex    = 0;

            // Entity Data fields
            _imageVersion = imageversion;
            _imageName    = imagename;
            _imageContent = imagecontent;
        }
 private EntitySerialization02.EntityState OnChangeState(EntitySerialization02.EntityState newState)
 {
     EntitySerialization02.EntityState prevState = ___entitystate;
     OnChangeFieldValue(EntitySerialization02.FieldIndices.HEADERFIELDS, newState);
     return(prevState);
 }
        public byte[] Serialize()
        {
            if (___entitystate == EntitySerialization02.EntityState.UNINITIALIZED)
            {
                Initialize();
            }

            EntitySerialization02.EntityState oldState = OnChangeState(EntitySerialization02.EntityState.SERIALIZED);

            byte[][] fieldBuffer = new byte[this.___nfields][];

            // Entity System fields
            fieldBuffer[0] = FieldSerialization02.GetFieldBuffer(this.__entitytypehash);
            fieldBuffer[1] = FieldSerialization02.GetFieldBuffer(this.__created);
            fieldBuffer[2] = FieldSerialization02.GetFieldBuffer(this.__modified);
            fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this.__changeindex);

            // Entity Data fields
            fieldBuffer[4] = FieldSerialization02.GetFieldBuffer(this._imageVersion);
            fieldBuffer[5] = FieldSerialization02.GetFieldBuffer(this._imageName);
            fieldBuffer[6] = FieldSerialization02.GetFieldBuffer(this._imageContent);

            // Blockchain data fields
            fieldBuffer[7]  = FieldSerialization02.GetFieldBuffer(this.__previousentityBlockindex);
            fieldBuffer[8]  = FieldSerialization02.GetFieldBuffer(this.__previousentityTxhash, false); // FieldEncoding.ASCIIString
            fieldBuffer[9]  = FieldSerialization02.GetFieldBuffer(this.__previousentityContentHash);
            fieldBuffer[10] = FieldSerialization02.GetFieldBuffer(this.__thisentityRecentBlockIndex);
            fieldBuffer[11] = FieldSerialization02.GetFieldBuffer(this.__thisentityContentHash);

            int lBuffer = EntitySerialization02.NHEADERFIELDS * sizeof(byte);

            for (int fi = 0; fi < ___nfields; fi++)
            {
                lBuffer += fieldBuffer[fi].Length;                                     // System + Entity + Blockchain data fields
            }
            byte[] buffer          = new byte[lBuffer];
            int    fieldBufferBase = 0;

            // Entity Header fields
            buffer[fieldBufferBase++] = ___entityserializationsignature;
            buffer[fieldBufferBase++] = ___entityserializationversion;
            buffer[fieldBufferBase++] = ___fieldserializationversion;
            buffer[fieldBufferBase++] = (byte)___entitystate;
            buffer[fieldBufferBase++] = ___nfields;

            // System + Entity + Blockchain data fields - copy all fields except __thisentityContentHash
            for (int fi = 0; fi < ___nfields - 1; fi++)
            {
                if (fieldBufferBase + fieldBuffer[fi].Length > lBuffer)
                {
                    OnChangeState(EntitySerialization02.EntityState.EXCEPTION_SERIALIZATION);
                    return(Array.Empty <byte>());
                }

                fieldBuffer[fi].CopyTo(buffer, fieldBufferBase);
                fieldBufferBase += fieldBuffer[fi].Length;
            }

            // Set __thisentityContentHash and encode it into the buffer
            using (SHA256 SHA256Factory = SHA256.Create())
            {
                __thisentityContentHash = SHA256Factory.ComputeHash(buffer, 0, fieldBufferBase);
                fieldBuffer[___nfields - 1].CopyTo(buffer, fieldBufferBase);
                fieldBufferBase += fieldBuffer[___nfields - 1].Length;
            }

            ___entitystate = oldState;

            return(buffer);
        }