code: func (v *Verifier) Run(inputChan <-chan []byte, outputChan chan<- []byte) {
  	for signedMessage := range inputChan {
  		if len(signedMessage) < SIGNATURE_LENGTH {
  			log.Print("signatureVerifier: missing signature")
  			continue
  		}
  
  		signature, message := signedMessage[:SIGNATURE_LENGTH], signedMessage[SIGNATURE_LENGTH:]
  		if v.verifyMessage(message, signature) {
  			outputChan <- message
  			metrics.BatchIncrementCounter("signatureVerifier.validSignatures")
  		} else {
  			log.Print("signatureVerifier: invalid signature")
  		}
  	}
  }
docs: // Run validates signatures. It consumes signed messages from inputChan,
  // verifies the signature, and sends the message (sans signature) to outputChan.
  // Invalid messages are dropped and nothing is sent to outputChan. Thus a reader
  // of outputChan is guaranteed to receive only messages with a valid signature.
  //
  // Run blocks on sending to outputChan, so the channel must be drained for the
  // function to continue consuming from inputChan.