code: func armorOpen(msg string, params armorParams, headerChecker HeaderChecker, frameChecker FrameChecker) (body []byte, brand string, header string, footer string, err error) {
  	var dec io.Reader
  	var frame Frame
  	buf := bytes.NewBufferString(msg)
  	dec, frame, err = newArmorDecoderStream(buf, params, headerChecker, frameChecker)
  	if err != nil {
  		return
  	}
  	body, err = ioutil.ReadAll(dec)
  	if err != nil {
  		return
  	}
  	if header, err = frame.GetHeader(); err != nil {
  		return
  	}
  	if footer, err = frame.GetFooter(); err != nil {
  		return
  	}
  	if brand, err = frame.GetBrand(); err != nil {
  		return
  	}
  	return body, brand, header, footer, nil
  }
docs: // armorOpen runs armor stream decoding, but on a string, and it outputs a string.