// alterPublication will maliciously alter a publications information. // It returns true if the publication was altered. // It takes as input the publication. func (b *Broker) alterPublication(pub *pb.Publication) pb.Publication { tempPub := pb.Publication{ PubType: pub.PubType, PublisherID: pub.PublisherID, PublicationID: pub.PublicationID, TopicID: pub.TopicID, BrokerID: pub.BrokerID, } for i := range pub.Contents { tempPub.Contents = append(tempPub.Contents, pub.Contents[i]) } for i := range pub.ChainMACs { tempPub.ChainMACs = append(tempPub.ChainMACs, pub.ChainMACs[i]) } r := b.random.Intn(101) if r <= b.maliciousPercent { var alterType int if len(tempPub.ChainMACs) > 0 { alterType = r % 6 } else { alterType = r % 5 } switch alterType { case 0: tempPub.PublicationID = tempPub.PublicationID + 1 case 1: tempPub.PublisherID = tempPub.PublisherID + 1 case 2: tempPub.BrokerID = tempPub.BrokerID + 1 case 3: tempPub.TopicID = tempPub.TopicID + 1 case 4: if len(tempPub.Contents) > 0 { tempPub.Contents[0] = badMessage } case 5: tempPub.ChainMACs = nil } } return tempPub }