├── package.json ├── .github ├── CODEOWNERS └── workflows │ ├── update.yml │ ├── archive.yml │ ├── ghpages.yml │ └── publish.yml ├── .gitignore ├── .travis.yml ├── Makefile ├── SUBMITTING.md ├── mk-appendix.py ├── CONTRIBUTING.md └── README.md /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "aasvg": "^0.3.6" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Automatically generated CODEOWNERS 2 | # Regenerate with `make update-codeowners` 3 | draft-ietf-tls-rfc8446bis.md ekr@rtfm.com 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | *.pdf 3 | *.redxml 4 | *.swp 5 | *.txt 6 | *.upload 7 | *~ 8 | .tags 9 | /*-[0-9][0-9].xml 10 | /.*.mk 11 | /.gems/ 12 | /.refcache 13 | /.venv/ 14 | /.vscode/ 15 | /lib 16 | /node_modules/ 17 | /versioned/ 18 | Gemfile.lock 19 | archive.json 20 | draft-ietf-tls-rfc8446bis.xml 21 | package-lock.json 22 | report.xml 23 | !requirements.txt 24 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | sudo: false 3 | addons: 4 | apt: 5 | packages: 6 | - python-pip 7 | dist: trusty 8 | 9 | install: 10 | - gem install kramdown-rfc2629 11 | - pip install xml2rfc 12 | 13 | script: make ghpages 14 | 15 | env: 16 | global: 17 | - secure: "Im9OMgqGzhrWGvSyaJ3W0/xRjhl39Ylt4ANKP80HznQ9qCsbAUb31BaCv9K9lsmT4gPLMU5e1Gwtsmy1MK6TpBHQVIDluWIdo6wWiNqfY335TOw7ASTVPQGSXDgw1tx3fhNDxTC7wLqIi6muvfHaxWwWG/weXUtkpEyezfyQ2dI=" 18 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | MD_PREPROCESSOR := python3 mk-appendix.py 2 | XML_RESOURCE_ORG_PREFIX = https://xml2rfc.tools.ietf.org/public/rfc 3 | 4 | LIBDIR := lib 5 | include $(LIBDIR)/main.mk 6 | 7 | $(LIBDIR)/main.mk: 8 | ifneq (,$(shell grep "path *= *$(LIBDIR)" .gitmodules 2>/dev/null)) 9 | git submodule sync 10 | git submodule update --init 11 | else 12 | ifneq (,$(wildcard $(ID_TEMPLATE_HOME))) 13 | ln -s "$(ID_TEMPLATE_HOME)" $(LIBDIR) 14 | else 15 | git clone -q --depth 10 -b main \ 16 | https://github.com/martinthomson/i-d-template $(LIBDIR) 17 | endif 18 | endif 19 | -------------------------------------------------------------------------------- /SUBMITTING.md: -------------------------------------------------------------------------------- 1 | Submitting 2 | ========== 3 | 4 | When you're ready to submit a new version of a draft: 5 | 6 | 0. `git status` <-- all changes should be committed and pushed. 7 | 8 | 1. Double-check the year on the date element to make sure it's current. 9 | 10 | 2. Check the "Changes" section for this draft to make sure it's appropriate 11 | (e.g., replace "None yet" with "None"). 12 | 13 | 3. `make submit` 14 | 15 | 4. Submit draft-ietf-httpbis--NN to https://datatracker.ietf.org/submit/ 16 | 17 | 5. `make clean` 18 | 19 | 6. `git tag draft-ietf-httpbis--NN; 20 | git push --tags` 21 | 22 | 7. Add "Since draft-ietf-httpbis--...-NN" subsection to "Changes". 23 | 24 | 8. Add/remove any "implementation draft" notices from the abstract. 25 | -------------------------------------------------------------------------------- /.github/workflows/update.yml: -------------------------------------------------------------------------------- 1 | name: "Update Generated Files" 2 | # This rule is not run automatically. 3 | # It can be run manually to update all of the files that are part 4 | # of the template, specifically: 5 | # - README.md 6 | # - CONTRIBUTING.md 7 | # - .note.xml 8 | # - .github/CODEOWNERS 9 | # - Makefile 10 | # 11 | # 12 | # This might be useful if you have: 13 | # - added, removed, or renamed drafts (including after adoption) 14 | # - added, removed, or changed draft editors 15 | # - changed the title of drafts 16 | # 17 | # Note that this removes any customizations you have made to 18 | # the affected files. 19 | on: workflow_dispatch 20 | 21 | jobs: 22 | build: 23 | name: "Update Files" 24 | runs-on: ubuntu-latest 25 | steps: 26 | - name: "Checkout" 27 | uses: actions/checkout@v4 28 | 29 | - name: "Update Generated Files" 30 | uses: martinthomson/i-d-template@v1 31 | with: 32 | make: update-files 33 | token: ${{ github.token }} 34 | 35 | - name: "Push Update" 36 | run: git push 37 | -------------------------------------------------------------------------------- /.github/workflows/archive.yml: -------------------------------------------------------------------------------- 1 | name: "Archive Issues and Pull Requests" 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * 0,2,4' 6 | repository_dispatch: 7 | types: [archive] 8 | workflow_dispatch: 9 | inputs: 10 | archive_full: 11 | description: 'Recreate the archive from scratch' 12 | default: false 13 | type: boolean 14 | 15 | jobs: 16 | build: 17 | name: "Archive Issues and Pull Requests" 18 | runs-on: ubuntu-latest 19 | permissions: 20 | contents: write 21 | steps: 22 | - name: "Checkout" 23 | uses: actions/checkout@v4 24 | 25 | # Note: No caching for this build! 26 | 27 | - name: "Update Archive" 28 | uses: martinthomson/i-d-template@v1 29 | env: 30 | ARCHIVE_FULL: ${{ inputs.archive_full }} 31 | with: 32 | make: archive 33 | token: ${{ github.token }} 34 | 35 | - name: "Update GitHub Pages" 36 | uses: martinthomson/i-d-template@v1 37 | with: 38 | make: gh-archive 39 | token: ${{ github.token }} 40 | 41 | - name: "Save Archive" 42 | uses: actions/upload-artifact@v4 43 | with: 44 | path: archive.json 45 | -------------------------------------------------------------------------------- /.github/workflows/ghpages.yml: -------------------------------------------------------------------------------- 1 | name: "Update Editor's Copy" 2 | 3 | on: 4 | push: 5 | paths-ignore: 6 | - README.md 7 | - CONTRIBUTING.md 8 | - LICENSE.md 9 | - .gitignore 10 | pull_request: 11 | paths-ignore: 12 | - README.md 13 | - CONTRIBUTING.md 14 | - LICENSE.md 15 | - .gitignore 16 | 17 | jobs: 18 | build: 19 | name: "Update Editor's Copy" 20 | runs-on: ubuntu-latest 21 | permissions: 22 | contents: write 23 | steps: 24 | - name: "Checkout" 25 | uses: actions/checkout@v4 26 | 27 | - name: "Setup" 28 | id: setup 29 | run: date -u "+date=%FT%T" >>"$GITHUB_OUTPUT" 30 | 31 | - name: "Caching" 32 | uses: actions/cache@v4 33 | with: 34 | path: | 35 | .refcache 36 | .venv 37 | .gems 38 | node_modules 39 | .targets.mk 40 | key: i-d-${{ steps.setup.outputs.date }} 41 | restore-keys: i-d- 42 | 43 | - name: "Build Drafts" 44 | uses: martinthomson/i-d-template@v1 45 | with: 46 | token: ${{ github.token }} 47 | 48 | - name: "Update GitHub Pages" 49 | uses: martinthomson/i-d-template@v1 50 | if: ${{ github.event_name == 'push' }} 51 | with: 52 | make: gh-pages 53 | token: ${{ github.token }} 54 | 55 | - name: "Archive Built Drafts" 56 | uses: actions/upload-artifact@v4 57 | with: 58 | path: | 59 | draft-*.html 60 | draft-*.txt 61 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: "Publish New Draft Version" 2 | 3 | on: 4 | push: 5 | tags: 6 | - "draft-*" 7 | workflow_dispatch: 8 | inputs: 9 | email: 10 | description: "Submitter email" 11 | default: "" 12 | type: string 13 | 14 | jobs: 15 | build: 16 | name: "Publish New Draft Version" 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: "Checkout" 20 | uses: actions/checkout@v4 21 | 22 | # See https://github.com/actions/checkout/issues/290 23 | - name: "Get Tag Annotations" 24 | run: git fetch -f origin ${{ github.ref }}:${{ github.ref }} 25 | 26 | - name: "Setup" 27 | id: setup 28 | run: date -u "+date=%FT%T" >>"$GITHUB_OUTPUT" 29 | 30 | - name: "Caching" 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | .refcache 35 | .venv 36 | .gems 37 | node_modules 38 | .targets.mk 39 | key: i-d-${{ steps.setup.outputs.date }} 40 | restore-keys: i-d- 41 | 42 | - name: "Build Drafts" 43 | uses: martinthomson/i-d-template@v1 44 | with: 45 | token: ${{ github.token }} 46 | 47 | - name: "Upload to Datatracker" 48 | uses: martinthomson/i-d-template@v1 49 | with: 50 | make: upload 51 | env: 52 | UPLOAD_EMAIL: ${{ inputs.email }} 53 | 54 | - name: "Archive Submitted Drafts" 55 | uses: actions/upload-artifact@v4 56 | with: 57 | path: "versioned/draft-*-[0-9][0-9].*" 58 | -------------------------------------------------------------------------------- /mk-appendix.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from __future__ import print_function 3 | import re 4 | import sys 5 | 6 | APPENDICES = {} 7 | IN_APPENDIX = None 8 | CURRENT = "" 9 | 10 | def print_syntax(val): 11 | vl = val.split("\n") 12 | last_empty = False 13 | 14 | for v in vl: 15 | if v == "": 16 | if not last_empty: 17 | print() 18 | last_empty = True 19 | else: 20 | last_empty = False 21 | print(v) 22 | print() 23 | 24 | 25 | for l in sys.stdin: 26 | if not IN_APPENDIX: 27 | m = re.match('%%% (.*)$', l) 28 | if m is not None: 29 | IN_APPENDIX = m.group(1) 30 | else: 31 | m = re.match('%%(#+|!) ([^{]*)({.*)? *$', l) 32 | if m is not None: 33 | if m.group(1) != '!': 34 | if m.group(3) is None: 35 | print("%s %s" % (m.group(1), m.group(2))) 36 | else: 37 | print("%s %s %s" % (m.group(1), m.group(2), m.group(3))) 38 | print_syntax(APPENDICES[m.group(2).strip()]) 39 | del APPENDICES[m.group(2).strip()] 40 | print() 41 | else: 42 | print(l, end='') 43 | else: 44 | # Strip out everything marked as RESERVED 45 | if l.find("RESERVED") == -1: 46 | print(l, end='') 47 | m = re.match("\S", l) 48 | if m is None: 49 | CURRENT += l 50 | else: 51 | CURRENT += "\n" 52 | if not IN_APPENDIX in APPENDICES: 53 | APPENDICES[IN_APPENDIX] = "" 54 | APPENDICES[IN_APPENDIX] += CURRENT 55 | CURRENT = "" 56 | IN_APPENDIX = None 57 | 58 | if len(APPENDICES) > 0: 59 | sys.stderr.write("Unused figures: " + str(list(APPENDICES.keys())) + "\n") 60 | sys.exit(1) 61 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to TLS 1.3 2 | 3 | Before submitting feedback, please familiarize yourself with our current issues 4 | list and review the [working 5 | group home page](https://datatracker.ietf.org/wg/tls/documents/). If you're 6 | new to this, you may also want to read the [Tao of the 7 | IETF](https://www.ietf.org/tao.html). 8 | 9 | Be aware that all contributions to the specification fall under the "NOTE WELL" 10 | terms outlined below. 11 | 12 | 1. The best way to provide feedback (editorial or design) and ask questions is 13 | sending an e-mail to [our mailing 14 | list](https://www.ietf.org/mailman/listinfo/tls). This will assure that 15 | the entire Working Group sees your input in a timely fashion. 16 | 17 | 2. If you have **editorial** suggestions (i.e., those that do not change the 18 | meaning of the specification), you can either: 19 | 20 | a) Fork this repository and submit a pull request; this is the lowest 21 | friction way to get editorial changes in. 22 | 23 | b) Submit a new issue to Github, and mention that you believe it is editorial 24 | in the issue body. It is not necessary to notify the mailing list for 25 | editorial issues. 26 | 27 | c) Make comments on individual commits in Github. Note that this feedback is 28 | processed only with best effort by the editors, so it should only be used for 29 | quick editorial suggestions or questions. 30 | 31 | 3. For non-editorial (i.e., **design**) issues, you can also create an issue on 32 | Github. However, you **must notify the mailing list** when creating such issues, 33 | providing a link to the issue in the message body. 34 | 35 | Note that **github issues are not for substantial discussions**; the only 36 | appropriate place to discuss design issues is on the mailing list itself. 37 | 38 | 39 | # NOTE WELL 40 | 41 | Any submission to the [IETF](https://www.ietf.org/) intended by the Contributor 42 | for publication as all or part of an IETF Internet-Draft or RFC and any 43 | statement made within the context of an IETF activity is considered an "IETF 44 | Contribution". Such statements include oral statements in IETF sessions, as 45 | well as written and electronic communications made at any time or place, which 46 | are addressed to: 47 | 48 | * The IETF plenary session 49 | * The IESG, or any member thereof on behalf of the IESG 50 | * Any IETF mailing list, including the IETF list itself, any working group 51 | or design team list, or any other list functioning under IETF auspices 52 | * Any IETF working group or portion thereof 53 | * Any Birds of a Feather (BOF) session 54 | * The IAB or any member thereof on behalf of the IAB 55 | * The RFC Editor or the Internet-Drafts function 56 | * All IETF Contributions are subject to the rules of 57 | [RFC 5378](https://tools.ietf.org/html/rfc5378) and 58 | [RFC 3979](https://tools.ietf.org/html/rfc3979) 59 | (updated by [RFC 4879](https://tools.ietf.org/html/rfc4879)). 60 | 61 | Statements made outside of an IETF session, mailing list or other function, 62 | that are clearly not intended to be input to an IETF activity, group or 63 | function, are not IETF Contributions in the context of this notice. 64 | 65 | Please consult [RFC 5378](https://tools.ietf.org/html/rfc5378) and [RFC 66 | 3979](https://tools.ietf.org/html/rfc3979) for details. 67 | 68 | A participant in any IETF activity is deemed to accept all IETF rules of 69 | process, as documented in Best Current Practices RFCs and IESG Statements. 70 | 71 | A participant in any IETF activity acknowledges that written, audio and video 72 | records of meetings may be made and may be available to the public. 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | TLS 1.3 Draft Specifications 3 | ============================= 4 | 5 | This is the working area for the [IETF TLS Working 6 | Group](https://datatracker.ietf.org/wg/tls/documents/) draft of [TLS 1.3] 7 | 8 | TLS 1.3 specification: 9 | * [Editor's copy](https://tlswg.github.io/tls13-spec/) 10 | * [Working Group Draft](https://tools.ietf.org/html/draft-ietf-tls-tls13) 11 | 12 | 13 | Contributing 14 | ------------ 15 | 16 | Before submitting feedback, please familiarize yourself with our current issues 17 | list and review the [working 18 | group home page](https://datatracker.ietf.org/wg/tls/documents/). If you're 19 | new to this, you may also want to read the [Tao of the 20 | IETF](https://www.ietf.org/tao.html). 21 | 22 | Be aware that all contributions to the specification fall under the "NOTE WELL" 23 | terms outlined below. 24 | 25 | 1. The best way to provide feedback (editorial or design) and ask questions is 26 | sending an e-mail to [our mailing 27 | list](https://www.ietf.org/mailman/listinfo/tls). This will assure that 28 | the entire Working Group sees your input in a timely fashion. 29 | 30 | 2. If you have **editorial** suggestions (i.e., those that do not change the 31 | meaning of the specification), you can either: 32 | 33 | a) Fork this repository and submit a pull request; this is the lowest 34 | friction way to get editorial changes in. 35 | 36 | b) Submit a new issue to Github, and mention that you believe it is editorial 37 | in the issue body. It is not necessary to notify the mailing list for 38 | editorial issues. 39 | 40 | c) Make comments on individual commits in Github. Note that this feedback is 41 | processed only with best effort by the editors, so it should only be used for 42 | quick editorial suggestions or questions. 43 | 44 | 3. For non-editorial (i.e., **design**) issues, you can also create an issue on 45 | Github. However, you **must notify the mailing list** when creating such issues, 46 | providing a link to the issue in the message body. 47 | 48 | Note that **github issues are not for substantial discussions**; the only 49 | appropriate place to discuss design issues is on the mailing list itself. 50 | 51 | 52 | Building The Draft 53 | ------------------ 54 | 55 | You will need kramdown-rfc2629 (https://github.com/cabo/kramdown-rfc2629) 56 | and xml2rfc (https://xml2rfc.tools.ietf.org/). 57 | 58 | 59 | NOTE WELL 60 | --------- 61 | 62 | Any submission to the [IETF](https://www.ietf.org/) intended by the Contributor 63 | for publication as all or part of an IETF Internet-Draft or RFC and any 64 | statement made within the context of an IETF activity is considered an "IETF 65 | Contribution". Such statements include oral statements in IETF sessions, as 66 | well as written and electronic communications made at any time or place, which 67 | are addressed to: 68 | 69 | * The IETF plenary session 70 | * The IESG, or any member thereof on behalf of the IESG 71 | * Any IETF mailing list, including the IETF list itself, any working group 72 | or design team list, or any other list functioning under IETF auspices 73 | * Any IETF working group or portion thereof 74 | * Any Birds of a Feather (BOF) session 75 | * The IAB or any member thereof on behalf of the IAB 76 | * The RFC Editor or the Internet-Drafts function 77 | * All IETF Contributions are subject to the rules of 78 | [RFC 5378](https://tools.ietf.org/html/rfc5378) and 79 | [RFC 3979](https://tools.ietf.org/html/rfc3979) 80 | (updated by [RFC 4879](https://tools.ietf.org/html/rfc4879)). 81 | 82 | Statements made outside of an IETF session, mailing list or other function, 83 | that are clearly not intended to be input to an IETF activity, group or 84 | function, are not IETF Contributions in the context of this notice. 85 | 86 | Please consult [RFC 5378](https://tools.ietf.org/html/rfc5378) and [RFC 87 | 3979](https://tools.ietf.org/html/rfc3979) for details. 88 | 89 | A participant in any IETF activity is deemed to accept all IETF rules of 90 | process, as documented in Best Current Practices RFCs and IESG Statements. 91 | 92 | A participant in any IETF activity acknowledges that written, audio and video 93 | records of meetings may be made and may be available to the public. 94 | --------------------------------------------------------------------------------