git.schokokeks.org
Repositories
Help
Report an Issue
derivepassphrase.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
77afddf
Branches
Tags
documentation-tree
master
unstable/cli-parser-state-machine
wishlist
0.1.0
0.1.1
0.1.2
0.1.3
0.2.0
0.3.0
0.3.1
0.3.2
0.3.3
0.4.0
0.5
0.5.1
0.5.2
0.6
0.6.1
ssh-agent-socket-provider-1.0
derivepassphrase.git
0.x
changelog
index.html
Deployed 1888df51e637 to 0.x with MkDocs 1.6.1 and mike 2.1.3
Marco Ricci
commited
77afddf
at 2025-06-14 22:26:21
index.html
Blame
History
Raw
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="An almost faithful Python reimplementation of James Coglan's vault."> <meta name="author" content="Marco Ricci"> <link rel="canonical" href="https://the13thletter.info/derivepassphrase/0.x/changelog/"> <link rel="prev" href="../explanation/faq-vault-interchangable-passphrases/"> <link rel="next" href="../upgrade-notes/"> <link rel="icon" href="../assets/images/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14"> <title>Changelog - derivepassphrase</title> <link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css"> <style>:root{--md-text-font:"Noto Sans";--md-code-font:"Noto Mono"}</style> <link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../mkdocstrings_recommended_styles.css"> <link rel="stylesheet" href="../wishlist_styling.css"> </head> <body dir="ltr"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#changelog-for-derivepassphrase" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> </div> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href=".." class="md-tabs__link"> Overview </a> </li> <li class="md-tabs__item"> <a href="../tutorials/" class="md-tabs__link"> Tutorials & Examples </a> </li> <li class="md-tabs__item"> <a href="../how-tos/" class="md-tabs__link"> How-Tos </a> </li> <li class="md-tabs__item"> <a href="../reference/" class="md-tabs__link"> Reference </a> </li> <li class="md-tabs__item"> <a href="../explanation/" class="md-tabs__link"> Design & Background </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="./" class="md-tabs__link"> Changelog </a> </li> <li class="md-tabs__item"> <a href="../wishlist/" class="md-tabs__link"> Wishlist </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href=".." title="derivepassphrase" class="md-nav__button md-logo" aria-label="derivepassphrase" data-md-component="logo"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> derivepassphrase </label> <div class="md-nav__source"> <a href="https://github.com/the-13th-letter/derivepassphrase" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class="md-source__repository"> the-13th-letter/derivepassphrase </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href=".." class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <div class="md-nav__link md-nav__container"> <a href="../tutorials/" class="md-nav__link "> <span class="md-ellipsis"> Tutorials & Examples </span> </a> <label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Tutorials & Examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../tutorials/basic-setup-passphrase/" class="md-nav__link"> <span class="md-ellipsis"> Setting up derivepassphrase vault for three accounts, with a master passphrase </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <div class="md-nav__link md-nav__container"> <a href="../how-tos/" class="md-nav__link "> <span class="md-ellipsis"> How-Tos </span> </a> <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> How-Tos </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../how-tos/ssh-key/" class="md-nav__link"> <span class="md-ellipsis"> How to set up derivepassphrase vault with an SSH key </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <div class="md-nav__link md-nav__container"> <a href="../reference/" class="md-nav__link "> <span class="md-ellipsis"> Reference </span> </a> <label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> <span class="md-ellipsis"> Man pages </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_2"> <span class="md-nav__icon md-icon"></span> Man pages </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/derivepassphrase.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-vault(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-export.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-export(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-export-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-export-vault(1) </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> <span class="md-ellipsis"> API docs: Module derivepassphrase </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_3"> <span class="md-nav__icon md-icon"></span> API docs: Module derivepassphrase </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/derivepassphrase.cli/" class="md-nav__link"> <span class="md-ellipsis"> Submodule cli </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.exporter/" class="md-nav__link"> <span class="md-ellipsis"> Subpackage exporter </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.sequin/" class="md-nav__link"> <span class="md-ellipsis"> Submodule sequin </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.ssh_agent/" class="md-nav__link"> <span class="md-ellipsis"> Submodule ssh_agent </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase._types/" class="md-nav__link"> <span class="md-ellipsis"> Submodule _types </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.vault/" class="md-nav__link"> <span class="md-ellipsis"> Submodule vault </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> <span class="md-ellipsis"> Technical prerequisites </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_4"> <span class="md-nav__icon md-icon"></span> Technical prerequisites </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/prerequisites-ssh-key/" class="md-nav__link"> <span class="md-ellipsis"> Using derivepassphrase vault with an SSH key </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <div class="md-nav__link md-nav__container"> <a href="../explanation/" class="md-nav__link "> <span class="md-ellipsis"> Design & Background </span> </a> <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Design & Background </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../explanation/faq-altered-versions/" class="md-nav__link"> <span class="md-ellipsis"> "altered versions" license requirement </span> </a> </li> <li class="md-nav__item"> <a href="../explanation/faq-vault-interchangable-passphrases/" class="md-nav__link"> <span class="md-ellipsis"> "interchangable passphrases" in vault </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked> <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex=""> <span class="md-ellipsis"> Changelog </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> Changelog </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Changelog </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Changelog </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> 0.4.0 (2025-01-07) </span> </a> <nav class="md-nav" aria-label="0.4.0 (2025-01-07)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> 0.3.3 (2024-11-28) </span> </a> <nav class="md-nav" aria-label="0.3.3 (2024-11-28)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.2" class="md-nav__link"> <span class="md-ellipsis"> 0.3.2 (2024-10-21) </span> </a> <nav class="md-nav" aria-label="0.3.2 (2024-10-21)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.3.2" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.1" class="md-nav__link"> <span class="md-ellipsis"> 0.3.1 (2024-10-21) </span> </a> <nav class="md-nav" aria-label="0.3.1 (2024-10-21)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.3.1" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> 0.3.0 (2024-10-15) </span> </a> <nav class="md-nav" aria-label="0.3.0 (2024-10-15)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> 0.2.0 (2024-09-12) </span> </a> <nav class="md-nav" aria-label="0.2.0 (2024-09-12)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> <li class="md-nav__item"> <a href="#deprecated-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Deprecated </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.3" class="md-nav__link"> <span class="md-ellipsis"> 0.1.3 (2024-07-28) </span> </a> <nav class="md-nav" aria-label="0.1.3 (2024-07-28)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.3" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.2" class="md-nav__link"> <span class="md-ellipsis"> 0.1.2 (2024-07-22) </span> </a> <nav class="md-nav" aria-label="0.1.2 (2024-07-22)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.2" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.1" class="md-nav__link"> <span class="md-ellipsis"> 0.1.1 (2024-07-14) </span> </a> <nav class="md-nav" aria-label="0.1.1 (2024-07-14)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.1" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.0" class="md-nav__link"> <span class="md-ellipsis"> 0.1.0 (2024-07-14) </span> </a> <nav class="md-nav" aria-label="0.1.0 (2024-07-14)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.1.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../upgrade-notes/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade notes </span> </a> </li> <li class="md-nav__item"> <a href="../pycompatibility/" class="md-nav__link"> <span class="md-ellipsis"> Python compatibility </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <div class="md-nav__link md-nav__container"> <a href="../wishlist/" class="md-nav__link "> <span class="md-ellipsis"> Wishlist </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Wishlist </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> 0.4.0 (2025-01-07) </span> </a> <nav class="md-nav" aria-label="0.4.0 (2025-01-07)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.4.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> 0.3.3 (2024-11-28) </span> </a> <nav class="md-nav" aria-label="0.3.3 (2024-11-28)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.3.3" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.2" class="md-nav__link"> <span class="md-ellipsis"> 0.3.2 (2024-10-21) </span> </a> <nav class="md-nav" aria-label="0.3.2 (2024-10-21)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.3.2" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.1" class="md-nav__link"> <span class="md-ellipsis"> 0.3.1 (2024-10-21) </span> </a> <nav class="md-nav" aria-label="0.3.1 (2024-10-21)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.3.1" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> 0.3.0 (2024-10-15) </span> </a> <nav class="md-nav" aria-label="0.3.0 (2024-10-15)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.3.0" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> 0.2.0 (2024-09-12) </span> </a> <nav class="md-nav" aria-label="0.2.0 (2024-09-12)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> <li class="md-nav__item"> <a href="#fixed-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> <li class="md-nav__item"> <a href="#changed-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Changed </span> </a> </li> <li class="md-nav__item"> <a href="#deprecated-in-v0.2.0" class="md-nav__link"> <span class="md-ellipsis"> Deprecated </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.3" class="md-nav__link"> <span class="md-ellipsis"> 0.1.3 (2024-07-28) </span> </a> <nav class="md-nav" aria-label="0.1.3 (2024-07-28)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.3" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.2" class="md-nav__link"> <span class="md-ellipsis"> 0.1.2 (2024-07-22) </span> </a> <nav class="md-nav" aria-label="0.1.2 (2024-07-22)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.2" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.1" class="md-nav__link"> <span class="md-ellipsis"> 0.1.1 (2024-07-14) </span> </a> <nav class="md-nav" aria-label="0.1.1 (2024-07-14)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#fixed-in-v0.1.1" class="md-nav__link"> <span class="md-ellipsis"> Fixed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#v0.1.0" class="md-nav__link"> <span class="md-ellipsis"> 0.1.0 (2024-07-14) </span> </a> <nav class="md-nav" aria-label="0.1.0 (2024-07-14)"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#added-in-v0.1.0" class="md-nav__link"> <span class="md-ellipsis"> Added </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <a href="https://github.com/the-13th-letter/derivepassphrase/raw/master/docs/changelog.md" title="View source of this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id="changelog-for-derivepassphrase">Changelog for <code>derivepassphrase</code><a class="headerlink" href="#changelog-for-derivepassphrase" title="Permanent link">¶</a></h1> <p><a href="https://keepachangelog.com/en/1.1.0/" title="Keeping a changelog"><img alt="Keeping a changelog" src="../Keep_a_changelog-E05735.svg" /></a> <a href="https://semver.org/" title="Using Semantic Versioning"><img alt="Using Semantic Versioning" src="../SemVer-3F4551.svg" /></a></p> <details class="info"> <summary>Definition: the <q>public API</q> of <code>derivepassphrase</code></summary> <p>The <dfn>public API</dfn>, as defined by Semantic Versioning, is outlined in the <a href="../reference/">Reference section</a>: the set of documented modules, classes, attributes, methods, functions and function parameters, and the documented behavior, options and arguments of the command-line tools.</p> <p>Certain <strong>exceptions to this rule</strong> are explicitly and prominently marked as implementation details/not part of the public API.</p> </details> <details class="info"> <summary>Interpretation of the version number</summary> <p>The terminology <b>major</b>, <b>minor</b> and <b>patch</b> follows the Semantic Versioning and Keep a Changelog definitions.</p> <ul> <li>For version numbers with major version zero, <em>any</em> new release may effectively constitute a new <b>major</b> release.</li> <li>For version numbers with major version one or higher,<ul> <li><b>Fixed</b> entries justify a <b>patch</b> release;</li> <li><b>Added</b> and <b>Deprecated</b> entries justify a <b>minor</b> release;</li> <li><b>Changed</b> and <b>Removed</b> entries justify a <b>major</b> release.</li> <li><b>Security</b> can justify any type of release; if <b>major</b> or <b>minor</b>, these are accompanied by corresponding entries of the respective types above.</li> </ul> </li> </ul> </details> <aside> <p><small> (All entries are from the perspective of a user, not a developer.) </small></p> </aside> <!-- scriv changelog start --> <h2 id="v0.4.0">0.4.0 (2025-01-07)<a class="headerlink" href="#v0.4.0" title="Permanent link">¶</a></h2> <h3 id="added-in-v0.4.0">Added<a class="headerlink" href="#added-in-v0.4.0" title="Permanent link">¶</a></h3> <ul> <li> <p>Both <code>derivepassphrase vault</code> and <code>derivepassphrase export vault</code> now support changing the amount of diagnostic output they emit via new command-line options <code>--debug</code>, <code>-v</code>/<code>--verbose</code> and <code>-q</code>/<code>--quiet</code>. Internally, this uses Python’s standard <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/logging.html#module-logging">logging</a> and <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/warnings.html#module-warnings">warnings</a> systems.</p> </li> <li> <p><code>derivepassphrase</code> now uses a central configuration file, and additional data files, some of which are service-specific. (The <code>vault.json</code> configuration file is now rebranded as a data file.) The configuration files are user-editable, the data files are <code>derivepassphrase</code>-editable.</p> <p>The configuration files are in TOML format, so installing <code>derivepassphrase</code> on Python 3.10 and older requires the <a href="https://pypi.org/project/tomli/"><code>tomli</code></a> package.</p> </li> <li> <p><code>derivepassphrase vault --config</code> now supports an <code>--unset</code> option which unsets any given named setting prior to applying any other configuration changes.</p> </li> <li> <p><code>derivepassphrase vault --export</code> can now also export the current configuration as a POSIX <code>sh</code> script, using the <code>--export-as=sh</code> option. The default (and previous behavior) is <code>--export-as=json</code>.</p> </li> <li> <p><code>derivepassphrase</code> now includes basic support for localization: if the necessary translations are installed, then the diagnostics and help texts can be emitted in different languages. Internally, this uses Python’s standard <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/gettext.html#module-gettext"><code>gettext</code></a> system.</p> <p>(As of this version, no translations have actually been prepared yet.)</p> </li> <li> <p><code>derivepassphrase</code> now explicitly supports shell completion, in particular filename and service name completion in the <code>export vault</code> and <code>vault</code> subcommands.</p> <p>However, because of restrictions regarding the exchange of data between <code>derivepassphrase</code> and the shell, <code>derivepassphrase</code> will not offer any service names containing ASCII control characters for completion, and a warning will be issued when importing or configuring such a service. They may still otherwise be used normally.</p> </li> <li> <p>Support the semi-standard <code>NO_COLOR</code> and the <code>FORCE_COLOR</code> environment variables to suppress or force color output from <code>derivepassphrase</code>. (<code>FORCE_COLOR</code> overrides <code>NO_COLOR</code> if both are set.)</p> </li> </ul> <h3 id="changed-in-v0.4.0">Changed<a class="headerlink" href="#changed-in-v0.4.0" title="Permanent link">¶</a></h3> <ul> <li> <p>Calling <a class="autorefs autorefs-internal" title=" derivepassphrase_export" href="../reference/derivepassphrase.cli/#derivepassphrase.cli.derivepassphrase_export"><code>derivepassphrase_export</code></a>, <a class="autorefs autorefs-internal" title=" derivepassphrase_export_vault" href="../reference/derivepassphrase.cli/#derivepassphrase.cli.derivepassphrase_export_vault"><code>derivepassphrase_export_vault</code></a> or <a class="autorefs autorefs-internal" title=" derivepassphrase_vault" href="../reference/derivepassphrase.cli/#derivepassphrase.cli.derivepassphrase_vault"><code>derivepassphrase_vault</code></a>, or calling <a class="autorefs autorefs-internal" title=" derivepassphrase" href="../reference/derivepassphrase.cli/#derivepassphrase.cli.derivepassphrase"><code>derivepassphrase</code></a> via its <a class="autorefs autorefs-external" href="https://click.palletsprojects.com/en/stable/api/#click.Command.main"><code>.main</code></a> method, causes those functions to use the standard Python <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/logging.html#module-logging">logging</a> and <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/warnings.html#module-warnings">warnings</a> facilities to issue diagnostic messages, without output to standard error. (This includes using <a class="autorefs autorefs-external" href="https://click.palletsprojects.com/en/stable/api/#click.testing.CliRunner"><code>click.testing.CliRunner</code></a>, which uses <code>.main</code> calls under the hood.) Calling <a class="autorefs autorefs-internal" title=" derivepassphrase" href="../reference/derivepassphrase.cli/#derivepassphrase.cli.derivepassphrase"><code>derivepassphrase</code></a> directly as a function diverts diagnostic messages to standard error.</p> </li> <li> <p>Unicode normalization settings for <code>vault</code> service names and stored passphrases are now stored in the central configuration file, instead of the <code>vault</code> data file.</p> </li> <li> <p><code>derivepassphrase</code> changed its license from <a href="https://spdx.org/licenses/MIT.html">MIT</a> to <a href="https://spdx.org/licenses/Zlib.html">zlib/libpng</a>. This should only make a difference to people redistributing altered versions of <code>derivepassphrase</code>; the basic freedoms, and the combinability of <code>derivepassphrase</code> with other software should be unaffected.</p> </li> </ul> <h2 id="v0.3.3">0.3.3 (2024-11-28)<a class="headerlink" href="#v0.3.3" title="Permanent link">¶</a></h2> <h3 id="added-in-v0.3.3">Added<a class="headerlink" href="#added-in-v0.3.3" title="Permanent link">¶</a></h3> <ul> <li>Checking whether an SSH key is suitable now also depends on the SSH agent in use. API functions now optionally take an additional <a class="autorefs autorefs-internal" title=" SSHAgentClient" href="../reference/derivepassphrase.ssh_agent/#derivepassphrase.ssh_agent.SSHAgentClient"><code>SSHAgentClient</code></a> object to test agent-specific key suitability. If not given, then the old behavior is retained: SSH keys are suitable if they are suitable under any (conforming) SSH agent.</li> </ul> <h3 id="fixed-in-v0.3.3">Fixed<a class="headerlink" href="#fixed-in-v0.3.3" title="Permanent link">¶</a></h3> <ul> <li>If the SSH agent supports deterministic DSA/ECDSA signatures (e.g. <a href="https://www.rfc-editor.org/rfc/rfc6979">RFC 6979</a>), then mark DSA and ECDSA SSH keys as suitable.</li> </ul> <h2 id="v0.3.2">0.3.2 (2024-10-21)<a class="headerlink" href="#v0.3.2" title="Permanent link">¶</a></h2> <h3 id="fixed-in-v0.3.2">Fixed<a class="headerlink" href="#fixed-in-v0.3.2" title="Permanent link">¶</a></h3> <ul> <li><em><em>Actually</em> actually</em> remove the <code>derivepassphrase_export</code> program, which was turned into a subcommand in v0.2.0 and supposed to have been removed in v0.3.1 already. Removed on disk is not the same as removed in version control.</li> </ul> <h2 id="v0.3.1">0.3.1 (2024-10-21)<a class="headerlink" href="#v0.3.1" title="Permanent link">¶</a></h2> <h3 id="fixed-in-v0.3.1">Fixed<a class="headerlink" href="#fixed-in-v0.3.1" title="Permanent link">¶</a></h3> <ul> <li>Fix PyPI classification: Python 3.9 is supported.</li> <li><em>Actually</em> remove the <code>derivepassphrase_export</code> program, which was turned into a subcommand in v0.2.0.</li> </ul> <h2 id="v0.3.0">0.3.0 (2024-10-15)<a class="headerlink" href="#v0.3.0" title="Permanent link">¶</a></h2> <h3 id="added-in-v0.3.0">Added<a class="headerlink" href="#added-in-v0.3.0" title="Permanent link">¶</a></h3> <ul> <li>Convert changelog management from towncrier to <a href="https://pypi.org/project/scriv">scriv</a>.</li> <li>Add SSH agent spawning support to the test suite. Use this support to test the agent functionality on all known major SSH agent implementations automatically. (<a href="https://github.com/the-13th-letter/derivepassphrase/issues/12">#12</a>)</li> <li>Add <a href="https://pypi.org/project/hypothesis/">hypothesis</a>-based tests to the test suite.</li> <li>Update README to add explanations for virtual environments and package extras.</li> <li>Update README to demonstrate configuration storing and SSH agent use. Include comments on Windows support for SSH agents.</li> <li>Use cross-references in the documentation of function signatures.</li> <li>Add proper support for Buffer types in the SSH agent client. Any Python object supporting the buffer protocol can be used as input to a function of the client, and any output from the client is returned as bytes objects. Because of the zero-copy semantics of the underlying data/memory block, this should stay relatively time- and space-efficient.</li> <li>Add <a href="https://pypi.org/project/hypothesis/">hypothesis</a>-based tests for serialization to and deserialization from the SSH agent wire format.</li> <li>Support Python 3.9 and 3.13.</li> </ul> <h3 id="changed-in-v0.3.0">Changed<a class="headerlink" href="#changed-in-v0.3.0" title="Permanent link">¶</a></h3> <ul> <li> <p>Change links to point to public project repositories, if possible. For legal reasons.</p> </li> <li> <p>Use the same filename/URL convention for API reference as the Python standard library does.</p> </li> <li> <p>Rewrite functionality for checking for valid vault(1) configurations: include an actual validation function which throws errors upon encountering format violations, and which allows specifying which types of extensions (unknown settings, <code>derivepassphrase</code>-only settings) to tolerate during validation.</p> <p>This is a <strong>breaking API change</strong> because the function return annotation changed, from <a class="autorefs autorefs-external" href="https://docs.python.org/3/library/typing.html#typing.TypeGuard"><code>typing.TypeGuard</code></a> to <a class="autorefs autorefs-external" href="https://typing-extensions.readthedocs.io/en/latest/index.html#typing_extensions.TypeIs"><code>typing_extensions.TypeIs</code></a>. These were the originally intended semantics, but when <code>derivepassphrase</code> was first designed, the Python type system did not support this kind of partial type narrowing.</p> </li> <li> <p>Fail earlier, and more gracefully/specifically, when we cannot talk to the SSH agent because Python does not support UNIX domain sockets on this system. In particular, this is the current situation on Windows.</p> <p>This adds another failure case to the <code>SSHAgentClient</code> constructor, and therefore constitutes a <strong>breaking API change</strong>.</p> </li> <li> <p>In <code>derivepassphrase vault</code>, accept <code>key</code> and <code>phrase</code> entries just like vault(1) does: <code>key</code> always overrides <code>phrase</code> in the configuration, no matter the level.</p> <p>This is a command-line only change.</p> </li> <li> <p>In <code>derivepassphrase vault</code>, when importing settings, accept falsy values everywhere <code>vault</code> does, with a warning. Depending on the setting, they are equivalent to zero, the empty string, or “not set”. (<a href="https://github.com/the-13th-letter/derivepassphrase/issues/17">#17</a>)</p> <p>This is a command-line only change, and only affects importing. The API provides a new function to normalize falsy settings, but still otherwise requires settings to be of the correct type. Storing a malformed configuration with such falsy values will still generate errors when <code>derivepassphrase vault</code> loads the settings from disk.</p> </li> <li> <p>In <code>derivepassphrase vault</code>, when importing configurations, correctly merge them with the existing one, same as vault(1): keep all named services and their settings (and the global settings if applicable) that are not mentioned in the imported configuration. The import procedure is thus more akin to a section-wise import of the configurations, instead of a “full” import, and the resulting configuration generally is a merge of both inputs. (<a href="https://github.com/the-13th-letter/derivepassphrase/issues/16">#16</a>)</p> </li> <li> <p>The following operations or configuration settings now raise warnings:</p> <ul> <li>in imported configurations: using falsy values of the wrong type</li> <li>in imported configurations: using falsy values with no practical effect</li> <li>setting a passphrase in the configuration if a key is already set</li> <li>using an empty service name on the command-line or in an imported configuration</li> </ul> </li> </ul> <h3 id="fixed-in-v0.3.0">Fixed<a class="headerlink" href="#fixed-in-v0.3.0" title="Permanent link">¶</a></h3> <ul> <li>Fixed the textual description of the return value for <a class="autorefs autorefs-internal" title=" request" href="../reference/derivepassphrase.ssh_agent/#derivepassphrase.ssh_agent.SSHAgentClient.request"><code>SSHAgentClient.request</code></a>, which didn’t match the declared type annotation.</li> </ul> <h2 id="v0.2.0">0.2.0 (2024-09-12)<a class="headerlink" href="#v0.2.0" title="Permanent link">¶</a></h2> <h3 id="added-in-v0.2.0">Added<a class="headerlink" href="#added-in-v0.2.0" title="Permanent link">¶</a></h3> <ul> <li> <p>Support configuration data export from <code>vault</code> in v0.2, v0.3 and storeroom formats.</p> <p>This feature requires the <code>cryptography</code> Python module, but is available even if <code>vault</code> is not installed. (<a href="https://github.com/the-13th-letter/derivepassphrase/1">#1</a>)</p> </li> </ul> <h3 id="fixed-in-v0.2.0">Fixed<a class="headerlink" href="#fixed-in-v0.2.0" title="Permanent link">¶</a></h3> <ul> <li>Deploy versioned documentation with <a href="https://pypi.org/project/mike">mike</a>. Set up a “latest” tag and the “0.<var>x</var>” version of the documentation with the contents so far.</li> </ul> <h3 id="changed-in-v0.2.0">Changed<a class="headerlink" href="#changed-in-v0.2.0" title="Permanent link">¶</a></h3> <ul> <li>Changed <code>sequin</code> and <code>ssh_agent_client</code> to be submodules of <code>derivepassphrase</code>. Further moved <code>derivepassphrase.Vault</code> and <code>derivepassphrase.AmbiguousByteRepresentation</code> into a new submodule <code>vault</code>, and renamed submodule <code>ssh_agent_client</code> to <code>ssh_agent</code>. (<a href="https://github.com/the-13th-letter/derivepassphrase/3">#3</a>)</li> <li>Changed internal error handling and error messages, to better work in the context of a command-line tool. (<a href="https://github.com/the-13th-letter/derivepassphrase/4">#4</a>)</li> <li>Combine and consolidate <code>derivepassphrase.types</code> and <code>derivepassphrase.ssh_agent.types</code> into a new submodule <code>derivepassphrase._types</code>. Despite the name, the module is public. (<a href="https://github.com/the-13th-letter/derivepassphrase/7">#7</a>)</li> <li>Warn the user when entering (directly, or via configuration editing/importing) a passphrase that is not in the configured Unicode normalization form. (But don’t otherwise reject any textual master passphrases.) (<a href="https://github.com/the-13th-letter/derivepassphrase/9">#9</a>)</li> <li> <p>Move all existing functionality into a subcommand, in anticipation of other passphrase derivation schemes, with different settings. Automatically forward calls without a subcommand to the “vault” subcommand.</p> <p>Also store the settings in a file specific to the respective subsystem, instead of globally. Automatically fall back to, and migrate, the old global settings file if no subsystem-specific configuration was found. (<a href="https://github.com/the-13th-letter/derivepassphrase/10">#10</a>)</p> </li> <li> <p>Make <code>derivepassphrase_export</code> a subcommand: <code>derivepassphrase export</code>. (<a href="https://github.com/the-13th-letter/derivepassphrase/11">#11</a>)</p> </li> </ul> <h3 id="deprecated-in-v0.2.0">Deprecated<a class="headerlink" href="#deprecated-in-v0.2.0" title="Permanent link">¶</a></h3> <ul> <li>Using the implied subcommand or the implied global settings file is deprecated, and will be removed in v1.0.</li> </ul> <h2 id="v0.1.3">0.1.3 (2024-07-28)<a class="headerlink" href="#v0.1.3" title="Permanent link">¶</a></h2> <h3 id="fixed-in-v0.1.3">Fixed<a class="headerlink" href="#fixed-in-v0.1.3" title="Permanent link">¶</a></h3> <ul> <li>Do not crash upon selecting a key on the command-line if there already is a key stored in the configuration. (<a href="https://github.com/the-13th-letter/derivepassphrase/5">#5</a>)</li> <li>Create the configuration directory upon saving, if it does not yet exist. (<a href="https://github.com/the-13th-letter/derivepassphrase/6">#6</a>)</li> <li>Isolate the tests properly and consistently from the user’s configuration, so that user configuration problems do not cause unrelated test failures. (<a href="https://github.com/the-13th-letter/derivepassphrase/8">#8</a>)</li> <li>Add an alternate MkDocs configuration for building the documentation in offline mode.</li> <li>Fix typing issues according to <code>mypy</code>’s strict mode.</li> </ul> <h2 id="v0.1.2">0.1.2 (2024-07-22)<a class="headerlink" href="#v0.1.2" title="Permanent link">¶</a></h2> <h3 id="fixed-in-v0.1.2">Fixed<a class="headerlink" href="#fixed-in-v0.1.2" title="Permanent link">¶</a></h3> <ul> <li>Include and exclude the correct files in the <code>sdist</code> and <code>wheel</code> distributions. (Previously, <code>sdist</code> contained VCS artifacts, and <code>wheel</code> was missing some paths.)</li> <li>Lint and reformat all code using <a href="https://pypi.org/package/ruff/">ruff</a>.</li> <li>Mention <a href="https://pypi.org/package/mkdocstrings-python/"><code>mkdocstrings-python</code></a> in the documentation’s page footer.</li> <li>Remove JavaScript and external font loading from documentation website, so that the site works even in restricted browser settings.</li> <li>Set up a changelog, using <a href="https://pypi.org/package/towncrier">towncrier</a>.</li> </ul> <h2 id="v0.1.1">0.1.1 (2024-07-14)<a class="headerlink" href="#v0.1.1" title="Permanent link">¶</a></h2> <h3 id="fixed-in-v0.1.1">Fixed<a class="headerlink" href="#fixed-in-v0.1.1" title="Permanent link">¶</a></h3> <ul> <li>Restore the <code>__version__</code> attribute in all top-level packages.</li> <li>Declare compatibility with Python 3.10 in project metadata, and include necessary version-specific dependencies.</li> <li>Publish the documentation online, and link to it in the repository metadata and the Python package metadata.</li> </ul> <h2 id="v0.1.0">0.1.0 (2024-07-14)<a class="headerlink" href="#v0.1.0" title="Permanent link">¶</a></h2> <h3 id="added-in-v0.1.0">Added<a class="headerlink" href="#added-in-v0.1.0" title="Permanent link">¶</a></h3> <ul> <li>Initial release.</li> </ul> </article> </div> </div> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../explanation/faq-vault-interchangable-passphrases/" class="md-footer__link md-footer__link--prev" aria-label="Previous: "interchangable passphrases" in vault"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> "interchangable passphrases" in vault </div> </div> </a> <a href="../upgrade-notes/" class="md-footer__link md-footer__link--next" aria-label="Next: Upgrade notes"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Upgrade notes </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2025 Marco Ricci (the-13th-letter) </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> and <a href="https://mkdocstrings.github.io/python/" target="_blank" rel="noopener"> mkdocstrings-python </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> </body> </html>