code: func IsValidEndorsement(e *Entry) bool {
  	// Check ExtIDs for valid formatting, then process them
  	if len(e.ExtIDs) < 4 || string(e.ExtIDs[0]) != "IdentityAttributeEndorsement" {
  		return false
  	}
  
  	signerChainID := string(e.ExtIDs[3])
  	if len(signerChainID) != 64 {
  		return false
  	}
  	var signature [ed.SignatureSize]byte
  	copy(signature[:], e.ExtIDs[1])
  	var signerKey [ed.PublicKeySize]byte
  	signerPubString := string(e.ExtIDs[2])
  	if IdentityKeyStringType(signerPubString) != IDPub {
  		return false
  	}
  	b := base58.Decode(signerPubString)
  	copy(signerKey[:], b[IDKeyPrefixLength:IDKeyBodyLength])
  
  	// Message that was signed = DestinationChainID + AttributeEntryHash
  	msg := e.ChainID + string(e.Content)
  	return ed.Verify(&signerKey, []byte(msg), &signature)
  }
docs: // IsValidEndorsement returns true if the Entry is a properly formatted attribute endorsement with a verifiable signature.
  // Note: does not check that the signer key was valid for the signer identity at the time of publishing.