Skip to content

Instantly share code, notes, and snippets.

@oz123
Created February 12, 2019 20:32
Show Gist options
  • Save oz123/5e8949e714619960c8fa37be23af9454 to your computer and use it in GitHub Desktop.
Save oz123/5e8949e714619960c8fa37be23af9454 to your computer and use it in GitHub Desktop.
using openpgp to encrypt uploaded file.
import "babel-polyfill";
var openpgp = require('openpgp'); // use as CommonJS, AMD, ES6 module or via window.openpgp
const query = query => document.querySelector(query);
const queryAll = query => Array.prototype.slice.apply(document.querySelectorAll(query));
const pub_key =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2.0.22 (GNU/Linux)',
'',
'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',
'T2o9P7OT67k=',
'=/Kyq',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
function getKeyList() {
const pubKeyData = [pub_key];
return Promise.all(pubKeyData.map(key => openpgp.key.readArmored(key))).then(xs => xs.map(a => a.keys[0]));
}
query("#uploader").addEventListener('change', function(evt) {
var files = evt.target.files; // FileList object
var reader = new FileReader();
reader.onload = (async function(evt) {
var link;
link = document.createElement('a');
const keys = await getKeyList();
var arrayBuffer = this.result;
var fileData = new Uint8Array(arrayBuffer);
const options = {
message: openpgp.message.fromBinary(fileData),
publicKeys: keys,
privateKey: "",
armor: true,
};
return openpgp.encrypt(options).then(results => {
link.setAttribute('href', window.URL.createObjectURL(
new Blob([results.data]), {type: "application/pgp-encrypted"})
);
link.setAttribute('download', "encrypted.file.gpg");
link.innerHTML = files[0].name + ".pgp";
query('#output').appendChild(link);
});
})();
reader.readAsArrayBuffer(this.files[0]);
var add = (function () {
var counter = 0;
return function () {counter += 1; return counter;}
})();
var file = document.getElementById("uploader");
file.onchange = function(){
if (file.files.length > 0){
document.getElementById('filename-1').innerHTML = file.files[0].name;
}
if (file.files.length > 1){
document.getElementById('filename-1').innerHTML = file.files.length + " files selected";
}
}
if (file.files.length > 4){
alert("You can select up to 4 files\nPlease select again")
file.files.val = ""
document.getElementById('filename-1').innerHTML = "Choose a file ..."
};
}, false);
// vi: tabstop=2 sts=2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment