func (m *DirectoryBlockSignature) UnmarshalBinaryData(data []byte) (newData []byte, err error) { newData = data if newData[0] != m.Type() { return nil, fmt.Errorf("Invalid Message type") } newData = newData[1:] // TimeStamp m.Timestamp = new(primitives.Timestamp) newData, err = m.Timestamp.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.SysHeight, newData = binary.BigEndian.Uint32(newData[0:4]), newData[4:] hash := new(primitives.Hash) newData, err = hash.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.SysHash = hash m.DBHeight, newData = binary.BigEndian.Uint32(newData[0:4]), newData[4:] m.VMIndex, newData = int(newData[0]), newData[1:] header := directoryBlock.NewDBlockHeader() newData, err = header.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.DirectoryBlockHeader = header hash = new(primitives.Hash) newData, err = hash.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.ServerIdentityChainID = hash //if len(newData) > 0 { sig := new(primitives.Signature) newData, err = sig.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.DBSignature = sig //} if len(newData) > 0 { sig := new(primitives.Signature) newData, err = sig.UnmarshalBinaryData(newData) if err != nil { return nil, err } m.Signature = sig } return nil, nil }
func (m *DirectoryBlockSignature) MarshalForSignature() ([]byte, error) { if m.DirectoryBlockHeader == nil { m.DirectoryBlockHeader = directoryBlock.NewDBlockHeader() } var buf primitives.Buffer buf.Write([]byte{m.Type()}) t := m.GetTimestamp() data, err := t.MarshalBinary() if err != nil { return nil, err } buf.Write(data) binary.Write(&buf, binary.BigEndian, m.SysHeight) if m.SysHash == nil { m.SysHash = primitives.NewZeroHash() } hash, err := m.SysHash.MarshalBinary() if err != nil { return nil, err } buf.Write(hash) binary.Write(&buf, binary.BigEndian, m.DBHeight) binary.Write(&buf, binary.BigEndian, byte(m.VMIndex)) header, err := m.DirectoryBlockHeader.MarshalBinary() if err != nil { return nil, err } buf.Write(header) hash, err = m.ServerIdentityChainID.MarshalBinary() if err != nil { return nil, err } buf.Write(hash) if m.DBSignature != nil { dbSig, err := m.DBSignature.MarshalBinary() if err != nil { return nil, err } buf.Write(dbSig) } else { blankSig := make([]byte, constants.SIGNATURE_LENGTH) buf.Write(blankSig) buf.Write(blankSig[:32]) } return buf.DeepCopyBytes(), nil }
func newDirectoryBlockSignature() *DirectoryBlockSignature { dbs := new(DirectoryBlockSignature) dbs.DBHeight = 123456 //hash, _ := primitives.NewShaHashFromStr("cbd3d09db6defdc25dfc7d57f3479b339a077183cd67022e6d1ef6c041522b40") //dbs.DirectoryBlockKeyMR = hash hash, _ := primitives.NewShaHashFromStr("a077183cd67022e6d1ef6c041522b40cbd3d09db6defdc25dfc7d57f3479b339") dbs.ServerIdentityChainID = hash tmp := directoryBlock.NewDBlockHeader() dbs.DirectoryBlockHeader = tmp return dbs }