
35 changed files with 1702 additions and 89 deletions
@ -0,0 +1,426 @@
|
||||
<!DOCTYPE html> |
||||
<html > |
||||
<head> |
||||
|
||||
<meta charset="UTF-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"> |
||||
<link rel="shortcut icon" href="assets/images/new-project-1-128x128.png" type="image/x-icon"> |
||||
<meta name="description" content="Swivro is an organization focused on online privacy, cybersecurity, and free speech."> |
||||
|
||||
|
||||
<title>KeyVault - Swivro</title> |
||||
<link rel="stylesheet" href="assets/font-awesome-solid/../css/fontawesome.min.css"> |
||||
<link rel="stylesheet" href="assets/font-awesome-solid/css/solid.min.css"> |
||||
<link rel="stylesheet" href="assets/web/assets/mobirise-icons-bold/mobirise-icons-bold.css"> |
||||
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css"> |
||||
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap-grid.min.css"> |
||||
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap-reboot.min.css"> |
||||
<link rel="stylesheet" href="assets/dropdown/css/style.css"> |
||||
<link rel="stylesheet" href="assets/socicon/css/styles.css"> |
||||
<link rel="stylesheet" href="assets/theme/css/style.css"> |
||||
<link href="assets/fonts/style.css" rel="stylesheet"> |
||||
<link rel="preload" as="style" href="assets/mobirise/css/mbr-additional.css"><link rel="stylesheet" href="assets/mobirise/css/mbr-additional.css" type="text/css"> |
||||
|
||||
|
||||
|
||||
|
||||
</head> |
||||
<body> |
||||
|
||||
<section data-bs-version="5.1" class="menu menu2 cid-sUlxqhYUTA" once="menu" id="menu2-nu"> |
||||
<!-- extra custom styling that applies to all pages --> |
||||
<style> |
||||
.badge { |
||||
font-family: 'Inter-Regular'; |
||||
font-size: 12px; |
||||
} |
||||
.desc1 { |
||||
padding-top: 5px; |
||||
} |
||||
|
||||
.fontdefault, .modal-content, ul { |
||||
font-family: Inter-Regular; |
||||
} |
||||
</style> |
||||
<!-- end custom styling - PS, hi! from Swivro! --> |
||||
|
||||
<nav class="navbar navbar-dropdown navbar-fixed-top navbar-expand-lg"> |
||||
<div class="container"> |
||||
<div class="navbar-brand"> |
||||
<span class="navbar-logo"> |
||||
<a href="../"> |
||||
<img src="assets/images/profile-5-343x96.png" alt="" style="height: 3rem;"> |
||||
</a> |
||||
</span> |
||||
|
||||
</div> |
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-bs-toggle="collapse" data-target="#navbarSupportedContent" data-bs-target="#navbarSupportedContent" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> |
||||
<div class="hamburger"> |
||||
<span></span> |
||||
<span></span> |
||||
<span></span> |
||||
<span></span> |
||||
</div> |
||||
</button> |
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent"> |
||||
<ul class="navbar-nav nav-dropdown nav-right" data-app-modern-menu="true"><li class="nav-item"><a class="nav-link link text-black text-primary show display-4" href="decentrasearch.html" aria-expanded="false">Decentrasearch</a></li><li class="nav-item"><a class="nav-link link text-black text-primary show display-4" href="keyvault.html">KeyVault</a></li> |
||||
<li class="nav-item"><a class="nav-link link text-black text-primary show display-4" href="opencash.html" aria-expanded="false">OpenCash</a></li><li class="nav-item"><a class="nav-link link text-black text-primary display-4" href="privacy-checklist.html">Digital Privacy</a> |
||||
</li><li class="nav-item"><a class="nav-link link text-black text-primary display-4" href="donate.html">Donate</a></li></ul> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</nav> |
||||
</section> |
||||
|
||||
<section data-bs-version="5.1" class="header12 cid-sUlxqg0QXL" id="header12-np"> |
||||
|
||||
|
||||
|
||||
|
||||
<div class="container"> |
||||
<div class="row justify-content-center"> |
||||
<div class="card col-12 col-md-12 col-lg-9"> |
||||
<div class="card-wrapper"> |
||||
<div class="card-box align-center"> |
||||
<h1 class="card-title mbr-fonts-style mb-3 display-1"> |
||||
<strong>KeyVault</strong></h1> |
||||
<p class="mbr-text mbr-fonts-style display-7">Store your crypto seed phrase securely and privately. Simply enter a custom passphrase (REMEMBER this passphrase, do not store it electronically or physically), paste your crypto seed phrase, and press Encrypt. To decrypt an encrypted seed phrase, type your custom passphrase, paste your encrypted seed phrase, and Decrypt.</p> |
||||
|
||||
<!-- start encrypter --> |
||||
|
||||
<style> |
||||
.maincontent { |
||||
padding-top: 30px; |
||||
} |
||||
.key { |
||||
width: 100%; |
||||
} |
||||
.text { |
||||
margin-top: 1rem; |
||||
width: 100%; |
||||
} |
||||
.buttons { |
||||
display: flex; |
||||
justify-content: space-around; |
||||
flex-wrap: wrap-reverse; |
||||
padding-top: 30px; |
||||
} |
||||
/** .encrypt-button { |
||||
color: white; |
||||
background: green; |
||||
} |
||||
.decrypt-button { |
||||
color: white; |
||||
background: brown; |
||||
} |
||||
.encrypt-button, .decrypt-button { |
||||
ouline: none; |
||||
border: 0; |
||||
cursor: pointer; |
||||
padding: 5px 10px; |
||||
margin-top: 1rem; |
||||
} |
||||
.encrypt-button:hover, .decrypt-button:hover { |
||||
color: black; |
||||
background: yellow; |
||||
outline: solid 1px #ddd; |
||||
} **/ |
||||
.result-title { |
||||
margin-top: 3rem; |
||||
} |
||||
.result-text { |
||||
margin-top: 0; |
||||
} |
||||
</style> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/pbkdf2.js"></script> |
||||
<script> |
||||
var keySize = 256; |
||||
var ivSize = 128; |
||||
var iterations = 100; |
||||
|
||||
function getData() { |
||||
var isValid = true; |
||||
var key = (document.getElementById('key').value || '').trim(); |
||||
var text = (document.getElementById('text').value || '').trim(); |
||||
if (!key || !text) { |
||||
isValid = false; |
||||
alert('please enter key and text'); |
||||
} |
||||
|
||||
return { isValid: isValid, key: key, text: text }; |
||||
} |
||||
|
||||
function encrypt() { |
||||
var data = getData(); |
||||
if (data.isValid) { |
||||
// var decrypt = asmCrypto.AES_CBC.encrypt(text, key); |
||||
var salt = CryptoJS.lib.WordArray.random(128/8); |
||||
|
||||
var key = CryptoJS.PBKDF2(data.key, salt, { |
||||
keySize: keySize/32, |
||||
iterations: iterations |
||||
}); |
||||
|
||||
var iv = CryptoJS.lib.WordArray.random(128/8); |
||||
|
||||
var encrypted = CryptoJS.AES.encrypt(data.text, key, { |
||||
iv: iv, |
||||
padding: CryptoJS.pad.Pkcs7, |
||||
mode: CryptoJS.mode.CBC |
||||
}); |
||||
|
||||
// salt, iv will be hex 32 in length |
||||
// append them to the ciphertext for use in decryption |
||||
var transitmessage = salt.toString()+ iv.toString() + encrypted.toString(); |
||||
document.getElementById('result').value = transitmessage; |
||||
} |
||||
} |
||||
|
||||
function decrypt() { |
||||
var data = getData(); |
||||
if (data.isValid) { |
||||
var salt = CryptoJS.enc.Hex.parse(data.text.substr(0, 32)); |
||||
var iv = CryptoJS.enc.Hex.parse(data.text.substr(32, 32)) |
||||
var encrypted = data.text.substring(64); |
||||
|
||||
var key = CryptoJS.PBKDF2(data.key, salt, { |
||||
keySize: keySize/32, |
||||
iterations: iterations |
||||
}); |
||||
|
||||
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { |
||||
iv: iv, |
||||
padding: CryptoJS.pad.Pkcs7, |
||||
mode: CryptoJS.mode.CBC |
||||
|
||||
}) |
||||
document.getElementById('result').value = decrypted.toString(CryptoJS.enc.Utf8); |
||||
} |
||||
} |
||||
</script> |
||||
<div class="maincontent"> |
||||
<form class="form"> |
||||
<div class="alert alert-danger" role="alert"> |
||||
<strong>NEVER</strong> share your passphrase with anyone, no matter how much you trust them. If they are compelled by law enforcement to give up your passphrase, your crypto can be stolen. |
||||
</div> |
||||
<div><input id="key" class="key form-control" placeholder="Enter Custom Passphrase" type="password" value=""></div> |
||||
<input id="text" class="text form-control" placeholder="Enter Seed Phrase (either encrypted or decrypted)" type="password"> |
||||
|
||||
<div class="buttons"> |
||||
<span class="decrypt-button btn btn-danger" onclick="decrypt()">Decrypt Seed Phrase</span> |
||||
<span class="encrypt-button btn btn-success" onclick="encrypt();">Encrypt Seed Phrase</span> |
||||
</div> |
||||
|
||||
<h3 class="result-title">Output:</h3> |
||||
<textarea id="result" class="text result-text form-control"></textarea> |
||||
</form> |
||||
</div> |
||||
|
||||
<!-- end encrypter --> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<section data-bs-version="5.1" class="features1 cid-sUlxqgnyz5" id="features2-nq"> |
||||
|
||||
|
||||
|
||||
|
||||
<div class="container"> |
||||
<div class="row justify-content-center"> |
||||
<div class="col-12 col-md-6 col-lg-3"> |
||||
<div class="card-wrapper"> |
||||
<div class="card-box align-center"> |
||||
<span class="mbr-iconfont mbrib-protect"></span> |
||||
<h4 class="card-title align-center mbr-black mbr-fonts-style display-7"><strong>Encryption and decryption is processed in your browser.</strong></h4> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-12 col-md-6 col-lg-3"> |
||||
<div class="card-wrapper"> |
||||
<div class="card-box align-center"> |
||||
<span class="mbr-iconfont mbrib-left-right"></span> |
||||
<h4 class="card-title align-center mbr-black mbr-fonts-style display-7"><strong>No server-side dynamic code or processes.</strong></h4> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-12 col-md-6 col-lg-3"> |
||||
<div class="card-wrapper"> |
||||
<div class="card-box align-center"> |
||||
<span class="mbr-iconfont mbrib-code"></span> |
||||
<h4 class="card-title align-center mbr-black mbr-fonts-style display-7"><strong>Open Source (GNU General Public License v3.0)</strong></h4> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-12 col-md-6 col-lg-3"> |
||||
<div class="card-wrapper"> |
||||
<div class="card-box align-center"> |
||||
<span class="mbr-iconfont mbrib-opened-folder"></span> |
||||
<h4 class="card-title align-center mbr-black mbr-fonts-style display-7"><strong>Nothing you type is stored on our servers.</strong></h4> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<section data-bs-version="5.1" class="content14 cid-sUlxqgMRxr" id="content14-nr"> |
||||
|
||||
|
||||
|
||||
<div class="container"> |
||||
<div class="row justify-content-center"> |
||||
<div class="col-md-12 col-lg-12"> |
||||
<h3 class="mbr-section-title mbr-fonts-style mb-4 display-5"> |
||||
<strong>Frequently asked questions</strong> |
||||
</h3> |
||||
<ul class="list mbr-fonts-style display-7"> |
||||
<li><strong>How can I trust this? Is this another scam?</strong><br>You can see all of the code of this tool in your browser, by typing view-source: before the URL. The git repository is also available here -> <a href="https://github.com/Swivro/keyvault" class="text-primary" target="_blank">https://github.com/Swivro/keyvault</a></li> |
||||
<li><strong>How do I know you don't log my seed phrase and/or passphrase?</strong><br>We don't log anything you type here, but we can't prove it unless we give you access to our server. So, if you don't trust this, you can self-host it, here's the code -> <a href="https://github.com/Swivro/keyvault" class="text-primary" target="_blank">https://github.com/Swivro/keyvault</a></li> |
||||
<li><strong>Is all information sent across the internet encrypted?</strong><br>No information entered on this page is sent anywhere across the internet. Encryption and decryption takes place locally on your device/machine. No info ever leaves your machine.</li> |
||||
<li><strong>Who made this application?</strong><br>Licensed under <a href="https://github.com/Swivro/keyvault/blob/master/LICENSE" class="text-primary" target="_blank">GNU General Public License v3.0</a>, this application is a modified fork of <a href="https://github.com/zohar1000/in-browser-encryption/blob/master/LICENSE" class="text-primary" target="_blank">zohar1000/in-browser-encryption</a>. The source code for our fork is available at <a href="https://github.com/Swivro/keyvault/" class="text-primary" target="_blank">https://github.com/Swivro/keyvault/</a>. Changes can be seen on our <a href="https://github.com/Swivro/keyvault/blob/master/README.md" class="text-primary" target="_blank">README</a> file.</li> |
||||
<li><strong>Where is my encrypted seed phrase stored?<br></strong>You'll have to store it yourself, we do not store it. After you've encrypted your seed phrase with your own passphrase, save the encrypted text to a safe place (either electronically or physically). You can decrypt it by coming back here, entering the same passphrase you used, then entering the encrypted seed phrase text, and clicking Decrypt.</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
|
||||
<section class="mbr-section" id="witsec-modal-window-block-ns" data-rv-view="44"> |
||||
|
||||
<style> |
||||
/* Let's not animate the contents of modal windows */ |
||||
.no-anim { |
||||
-webkit-animation: none !important; |
||||
-moz-animation: none !important; |
||||
-o-animation: none !important; |
||||
-ms-animation: none !important; |
||||
animation: none !important; |
||||
} |
||||
</style> |
||||
|
||||
|
||||
|
||||
<div><div class="modal fade" id="prying-eyes" tabindex="-1" role="dialog" aria-labelledby="prying-eyesLabel" aria-hidden="true"> <div class="modal-dialog " style="height:auto" role="document"> <div class="modal-content"><div class="modal-header"> <h5 class="no-anim modal-title" id="prying-eyesLabel">Avoid prying eyes ๐</h5> <a href="#" class="no-anim close" data-bs-dismiss="modal" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">ร</span></a></div><div class="modal-body" id="prying-eyes_body">Is anyone looking at your screen? Are you recording? Do you have an antivirus software? Check all of these things before using this, as sensitive information is involved here.<br><br>No one should be able to see your screen, you should not be recording, you should not have a camera near you, and it's a good idea to have an antivirus software.</div><div class="modal-footer"><div class="mbr-section-btn"><a href="#" class="no-anim btn btn-secondary display-4" data-bs-dismiss="modal" data-dismiss="modal">Close</a></div></div> </div> </div></div><script> |
||||
document.addEventListener("DOMContentLoaded", function() { |
||||
if(typeof jQuery === "function") { |
||||
$("#prying-eyes").on("hidden.bs.modal", function () { |
||||
var html = $( "#prying-eyes_body" ).html(); |
||||
$( "#prying-eyes_body" ).empty(); |
||||
$( "#prying-eyes_body" ).append(html); |
||||
}) |
||||
} else { |
||||
var mdw = document.getElementById("#prying-eyes") |
||||
mdw.addEventListener("hidden.bs.modal", function(event) { |
||||
mdw.innerHTML = mdw.innerHTML; |
||||
}); |
||||
} |
||||
}); |
||||
</script></div> |
||||
|
||||
<script> |
||||
if (typeof OpenModal === 'undefined') { |
||||
OpenModal = function(modalName) { |
||||
if(typeof jQuery === "function") { |
||||
if ($('#' + modalName).length) |
||||
$('#' + modalName).modal('show'); |
||||
else |
||||
alert("Sorry, but there is no modal for " + modalName); |
||||
} else { |
||||
let mdw = new bootstrap.Modal(document.getElementById(modalName), {}); |
||||
mdw.show(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function modalSetCookie(cname, cvalue, exdays) { |
||||
var d = new Date(); |
||||
d.setTime(d.getTime() + (exdays*24*60*60*1000)); |
||||