body = signed / unsigned signed = sign-header unsigned sign-footer sign-header = < headers and line from section 7 of [RFC4880] > sign-footer = < OpenPGP signature from section 7 of [RFC4880] > unsigned = *line (contact-field eol) ; one or more required *line (expires-field eol) ; exactly one required *line [lang-field eol] *line ; exactly one optional ; order of fields within the file is not important ; except that if contact-field appears more ; than once the order of those indicates ; priority (see Section 3.5.3) line = [ (field / comment) ] eol eol = *WSP [CR] LF field = ; optional fields ack-field / can-field / contact-field / ; optional repeated instances encryption-field / hiring-field / policy-field / ext-field fs = ":" comment = "#" *(WSP / VCHAR / %x80-FFFFF) ack-field = "Acknowledgments" fs SP uri can-field = "Canonical" fs SP uri contact-field = "Contact" fs SP uri expires-field = "Expires" fs SP date-time encryption-field = "Encryption" fs SP uri hiring-field = "Hiring" fs SP uri lang-field = "Preferred-Languages" fs SP lang-values policy-field = "Policy" fs SP uri ; Per the original, imported from section 5.6 of [RFC3339] date-time = full-date "T" full-time ; Per the original, Language-Tag from section 2.1 of [RFC5646] lang-tag = langtag ; normal language tags / privateuse ; private use tag / grandfathered ; grandfathered tags lang-values = lang-tag *(*WSP "," *WSP lang-tag) ; Per the original, URI as per section 3 of [RFC3986] uri = scheme ":" hier-part [ "?" query ] [ "#" fragment ] ext-field = field-name fs SP unstructured ; Per the original, imported from section 3.6.8 of [RFC5322] field-name = 1*ftext ; Per the original, imported from section 3.2.5 of [RFC5322] unstructured = (*([FWS] VCHAR) *WSP) / obs-unstruct