code: func (c *Conversation) End() (toSend []ValidMessage, err error) {
  	previousMsgState := c.msgState
  	if c.msgState == encrypted {
  		c.smp.wipe()
  		// Error can only happen when Rand reader is broken
  		toSend, _, err = c.createSerializedDataMessage(nil, messageFlagIgnoreUnreadable, []tlv{tlv{tlvType: tlvTypeDisconnected}})
  	}
  	c.lastMessageStateChange = time.Time{}
  	c.ake = nil
  	c.msgState = plainText
  	defer c.signalSecurityEventIf(previousMsgState == encrypted, GoneInsecure)
  
  	c.keys.ourCurrentDHKeys.wipe()
  	c.keys.ourPreviousDHKeys.wipe()
  	wipeBigInt(c.keys.theirCurrentDHPubKey)
  	return
  }
docs: // End ends a secure conversation by generating a termination message for
  // the peer and switches to unencrypted communication.