A simple, fault-tolerant, and easy-to-audit web-based password manager. https://pwm.sequentialread.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
5.1 KiB

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"/>
// global namespace where we will be putting everything
window.sequentialReadPasswordManager = {
BackblazeAccessKeyId: "{{.BackblazeAccessKeyId}}",
BackblazeSecretAccessKey: "{{.BackblazeSecretAccessKey}}",
BackblazeBucketName: "{{.BackblazeBucketName}}",
BackblazeBucketRegion: "{{.BackblazeBucketRegion}}"
// a fake implementation of AMD just so I can use use sjcl.js (Stanford JavaScript Crypto Library) without any modifications
window.define = function(dependencies, factory) {
window.sequentialReadPasswordManager.sjcl = factory();
<script src="static/vendor/sjcl.js"></script>
<script src="static/vendor/cryptoWordList.js"></script>
<script src="static/s3Client.js"></script>
<link rel="stylesheet" type="text/css" href="static/application.css">
<div class="header">
<h3>Sequential Read Password Manager <span style="font-size: 0.65em; font-weight: normal;">v2.0.8</span></h3>
<div style="float:right; padding-right:20px;">
<button class="hamburger-button"></button>
<a class="nav-link-responsive" href="https://git.sequentialread.com/forest/sequentialread-password-manager">source code and documentation</a>
<span class="nav-link-responsive">
<span class="logout-link-container">
| <a href="#" class="logout-link">log out</a>
<div class="header-shadow">
<div class="hamburger-menu">
<li><a href="https://git.sequentialread.com/forest/sequentialread-password-manager">➤ source code and documentation</a></li>
<li class="logout-link-container"><a href="#" class="logout-link">➤ log out</a></li>
<div class="splash content" id="splash-content">
<h3>Enter/Generate your Secret Encryption Key</h3>
<div class="progress-bar-holder" id="progress-bar-holder" style="display: none;">
<span>Move your mouse around to generate entropy (touch and drag on mobile)</span>
<div class="progress-bar" id="entropy-progress-bar" style="width:0;"></div>
<input id="encryption-secret" type="password" autofocus style="width:calc(100% - 20px);"></input>
<button id="generate-encryption-secret-button">
Generate new Encryption Secret
<button id="splash-continue-button" style="float:right;">
<p class="instructions">
This is an encryption key seed, not a password. Save it somewhere <u>secure</u> so you don't lose it. <u>No one can recover it for you</u>.<br/>
This is the only thing protecting the data you enter here from being publicly avaliable.<br/>
It needs to be long enough that even a supercomputer can't guess it. <br/>
The generate button will give you ~52 <a href="https://xkcd.com/936/">bits of entropy</a>.
4 random words from a list of 8192 words, so, 1 in 4500000000000000. It would probably take <a href="https://git.sequentialread.com/forest/sequentialread-password-manager#encryption-key-seed-user-interface-disclaimer">at least a few hundred thousand dollars worth of computing effort to crack that</a>.
If you want to make it physically impossible to crack, you can go for something like 8 words. <br/>
For more information see the <a href="https://github.com/sequentialread/password-manager/blob/master/LICENSE">LICENSE file</a> on GitHub.<br/>
If you want to rely on this application in the long term I advise you to <a href="https://hub.docker.com/r/sequentialread/sequentialread-password-manager/"> host it yourself</a> with your own Backblaze account.
<div class="main content" id="file-list-content" style="display:none;">
<div style="height:40px; width:100%;">
<div class="synced-status-indicator saved" id="synced-status-indicator">Synced</div>
<button id="new-file-button" style="float:right;">
New File...
<div id="file-list">
<div class="main content" id="file-detail-content" style="display:none;">
<a href="#" id="file-detail-back-link">Files</a> &gt;
<span id="file-detail-file-name"></span>
<div style="height:40px;">
<div class="saved-status-indicator saved" id="saved-status-indicator">Saved</div>
<textarea id="file-content"></textarea>
<div class="modal-container" id="modal-container" style="display:none;">
<div class="modal content" >
<h3 id="modal-title"></h3>
<div id="modal-body"></div>
<div id="modal-footer" style="height:50px;"></div>
<div class="modal-container" id="progress-container" style="display:none;">
<div class="loader">loading</div>
<script src="static/application.js"></script>