|
@@ -37,6 +37,7 @@ export class WriteTweetPage {
|
|
publicKey;
|
|
publicKey;
|
|
pk: any[]=[];
|
|
pk: any[]=[];
|
|
passp = 'super long and hard to guess secret' ;
|
|
passp = 'super long and hard to guess secret' ;
|
|
|
|
+ hkp = new openpgp.HKP('https://sks-keyservers.net/');
|
|
|
|
|
|
|
|
|
|
constructor(
|
|
constructor(
|
|
@@ -60,105 +61,105 @@ export class WriteTweetPage {
|
|
});
|
|
});
|
|
|
|
|
|
this.addValidators();
|
|
this.addValidators();
|
|
- this.encryptDecryptFunction();
|
|
|
|
|
|
+ // this.encryptDecryptFunction();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- public async encryptDecryptFunction () {
|
|
|
|
- await openpgp.initWorker({path:'assets/scripts/openpgp.worker.js'});
|
|
|
|
- let a = await this.generateKeys();
|
|
|
|
- console.log('a is:',a.publicKeyArmored);
|
|
|
|
- let b = await this.generateKeys();
|
|
|
|
- console.log('b is:',b.publicKeyArmored);
|
|
|
|
- let c = await this.generateKeys();
|
|
|
|
- this.privateKey =c.privateKeyArmored;
|
|
|
|
- this.publicKey = c.publicKeyArmored;
|
|
|
|
-
|
|
|
|
- this.pk.push(a.publicKeyArmored);
|
|
|
|
- this.pk.push(b.publicKeyArmored);
|
|
|
|
-// this.pk = [`----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
-// Version: OpenPGP.js v4.7.1
|
|
|
|
-// Comment: https://openpgpjs.org
|
|
|
|
-
|
|
|
|
-// xjMEXfAn1xYJKwYBBAHaRw8BAQdAAMVNOABw8MBtrtYR8KC3tSro3wITyApT
|
|
|
|
-// TVjKVCppD+DNG0pvbiBTbWl0aCA8am9uQGV4YW1wbGUuY29tPsJ3BBAWCgAf
|
|
|
|
-// BQJd8CfXBgsJBwgDAgQVCAoCAxYCAQIZAQIbAwIeAQAKCRD+efBRXzuMsfA7
|
|
|
|
-// AQCEgoToFzv2hT9BREdiQp531/AHSyoZWmWvSZSvmga40gD8C+zwbCySnkhQ
|
|
|
|
-// pb4L0DCKtSDa7pLg2g0OcxJlbSZWHQ3OOARd8CfXEgorBgEEAZdVAQUBAQdA
|
|
|
|
-// p4mVY17dPWf6VCBqW10Ybk5JgUO6FK0OsETWw3gG2zcDAQgHwmEEGBYIAAkF
|
|
|
|
-// Al3wJ9cCGwwACgkQ/nnwUV87jLFHbAD9GyoL7dcTDGQoqtrhKozdgnzfugTb
|
|
|
|
-// er0bwU15WNMjefkA/jEqK9YUNcRrFKIuac9PVibGgutL8ak7ukysw6iTcCsM
|
|
|
|
-// =fmhE
|
|
|
|
-// -----END PGP PUBLIC KEY BLOCK-----`,
|
|
|
|
-// `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
-// Version: OpenPGP.js v4.7.1
|
|
|
|
-// Comment: https://openpgpjs.org
|
|
|
|
-
|
|
|
|
-// xjMEXfAn1hYJKwYBBAHaRw8BAQdAsF1ivpd0HU8ogj02LDv6BTOxNMWGZaEc
|
|
|
|
-// OyZBwqoYJPrNG0pvbiBTbWl0aCA8am9uQGV4YW1wbGUuY29tPsJ3BBAWCgAf
|
|
|
|
-// BQJd8CfWBgsJBwgDAgQVCAoCAxYCAQIZAQIbAwIeAQAKCRDEruv77flRJ32B
|
|
|
|
-// AP93GIBcUW2okROoZZhdPVeqjRD72Ft64imXpdZ0jx4ohgEA5Kv9vs2kV73q
|
|
|
|
-// k6fcdf7qD/i5gMExU0+vV05c9VxBYwfOOARd8CfWEgorBgEEAZdVAQUBAQdA
|
|
|
|
-// 1J7E03ZopUnsIeNzeiZvba6qxhhUbpmBZ1aN1HhWUlEDAQgHwmEEGBYIAAkF
|
|
|
|
-// Al3wJ9YCGwwACgkQxK7r++35USdTqQD/ZEg8X5tMx75nQe4mGlyiRjmmtWLw
|
|
|
|
-// n9bslTdjBIszs/EA/R1WIm6ji4Ru1dJWc3ISisz78xTM2H8U7fnP8yjFcWcD
|
|
|
|
-// =hgnW
|
|
|
|
-// -----END PGP PUBLIC KEY BLOCK-----`];
|
|
|
|
- console.log('array of pub keys is :',this.pk);
|
|
|
|
- this.pk = this.pk.map(async (key) => {
|
|
|
|
- return (await openpgp.key.readArmored(key)).keys[0]
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- console.log('priv key: ',this.privateKey,'this.pubkey',this.pk);
|
|
|
|
- let encrypted;
|
|
|
|
- const privKeyObj = (await openpgp.key.readArmored(this.privateKey)).keys[0];
|
|
|
|
- console.log('privKeyObj',privKeyObj);
|
|
|
|
- const bla = await privKeyObj.decrypt(this.passp);
|
|
|
|
-
|
|
|
|
- // const options = {
|
|
|
|
- // message: openpgp.message.fromText('Hello, World!'), // input as Message object
|
|
|
|
- // publicKeys: (await openpgp.key.readArmored(this.publicKey)).keys, // for encryption
|
|
|
|
- // privateKeys: [privKeyObj] // for signing (optional)
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
- const options = {
|
|
|
|
- message: openpgp.message.fromText('Hello, World!'), // input as Message object
|
|
|
|
- publicKeys: await Promise.all(this.pk), // for encryption
|
|
|
|
- privateKeys: [privKeyObj] // for signing (optional)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const ciphertext = await openpgp.encrypt(options);
|
|
|
|
- encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
|
|
|
|
- console.log('encrypted is:',encrypted);
|
|
|
|
|
|
+// public async encryptDecryptFunction () {
|
|
|
|
+// await openpgp.initWorker({path:'assets/scripts/openpgp.worker.js'});
|
|
|
|
+// let a = await this.generateKeys();
|
|
|
|
+// console.log('a is:',a.publicKeyArmored);
|
|
|
|
+// let b = await this.generateKeys();
|
|
|
|
+// console.log('b is:',b.publicKeyArmored);
|
|
|
|
+// let c = await this.generateKeys();
|
|
|
|
+// this.privateKey =c.privateKeyArmored;
|
|
|
|
+// this.publicKey = c.publicKeyArmored;
|
|
|
|
+
|
|
|
|
+// this.pk.push(a.publicKeyArmored);
|
|
|
|
+// this.pk.push(b.publicKeyArmored);
|
|
|
|
+// // this.pk = [`----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
+// // Version: OpenPGP.js v4.7.1
|
|
|
|
+// // Comment: https://openpgpjs.org
|
|
|
|
+
|
|
|
|
+// // xjMEXfAn1xYJKwYBBAHaRw8BAQdAAMVNOABw8MBtrtYR8KC3tSro3wITyApT
|
|
|
|
+// // TVjKVCppD+DNG0pvbiBTbWl0aCA8am9uQGV4YW1wbGUuY29tPsJ3BBAWCgAf
|
|
|
|
+// // BQJd8CfXBgsJBwgDAgQVCAoCAxYCAQIZAQIbAwIeAQAKCRD+efBRXzuMsfA7
|
|
|
|
+// // AQCEgoToFzv2hT9BREdiQp531/AHSyoZWmWvSZSvmga40gD8C+zwbCySnkhQ
|
|
|
|
+// // pb4L0DCKtSDa7pLg2g0OcxJlbSZWHQ3OOARd8CfXEgorBgEEAZdVAQUBAQdA
|
|
|
|
+// // p4mVY17dPWf6VCBqW10Ybk5JgUO6FK0OsETWw3gG2zcDAQgHwmEEGBYIAAkF
|
|
|
|
+// // Al3wJ9cCGwwACgkQ/nnwUV87jLFHbAD9GyoL7dcTDGQoqtrhKozdgnzfugTb
|
|
|
|
+// // er0bwU15WNMjefkA/jEqK9YUNcRrFKIuac9PVibGgutL8ak7ukysw6iTcCsM
|
|
|
|
+// // =fmhE
|
|
|
|
+// // -----END PGP PUBLIC KEY BLOCK-----`,
|
|
|
|
+// // `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
+// // Version: OpenPGP.js v4.7.1
|
|
|
|
+// // Comment: https://openpgpjs.org
|
|
|
|
+
|
|
|
|
+// // xjMEXfAn1hYJKwYBBAHaRw8BAQdAsF1ivpd0HU8ogj02LDv6BTOxNMWGZaEc
|
|
|
|
+// // OyZBwqoYJPrNG0pvbiBTbWl0aCA8am9uQGV4YW1wbGUuY29tPsJ3BBAWCgAf
|
|
|
|
+// // BQJd8CfWBgsJBwgDAgQVCAoCAxYCAQIZAQIbAwIeAQAKCRDEruv77flRJ32B
|
|
|
|
+// // AP93GIBcUW2okROoZZhdPVeqjRD72Ft64imXpdZ0jx4ohgEA5Kv9vs2kV73q
|
|
|
|
+// // k6fcdf7qD/i5gMExU0+vV05c9VxBYwfOOARd8CfWEgorBgEEAZdVAQUBAQdA
|
|
|
|
+// // 1J7E03ZopUnsIeNzeiZvba6qxhhUbpmBZ1aN1HhWUlEDAQgHwmEEGBYIAAkF
|
|
|
|
+// // Al3wJ9YCGwwACgkQxK7r++35USdTqQD/ZEg8X5tMx75nQe4mGlyiRjmmtWLw
|
|
|
|
+// // n9bslTdjBIszs/EA/R1WIm6ji4Ru1dJWc3ISisz78xTM2H8U7fnP8yjFcWcD
|
|
|
|
+// // =hgnW
|
|
|
|
+// // -----END PGP PUBLIC KEY BLOCK-----`];
|
|
|
|
+// console.log('array of pub keys is :',this.pk);
|
|
|
|
+// this.pk = this.pk.map(async (key) => {
|
|
|
|
+// return (await openpgp.key.readArmored(key)).keys[0]
|
|
|
|
+// });
|
|
|
|
+
|
|
|
|
+// console.log('priv key: ',this.privateKey,'this.pubkey',this.pk);
|
|
|
|
+// let encrypted;
|
|
|
|
+// const privKeyObj = (await openpgp.key.readArmored(this.privateKey)).keys[0];
|
|
|
|
+// console.log('privKeyObj',privKeyObj);
|
|
|
|
+// const bla = await privKeyObj.decrypt(this.passp);
|
|
|
|
+
|
|
|
|
+// // const options = {
|
|
|
|
+// // message: openpgp.message.fromText('Hello, World!'), // input as Message object
|
|
|
|
+// // publicKeys: (await openpgp.key.readArmored(this.publicKey)).keys, // for encryption
|
|
|
|
+// // privateKeys: [privKeyObj] // for signing (optional)
|
|
|
|
+// // }
|
|
|
|
+
|
|
|
|
+// const options = {
|
|
|
|
+// message: openpgp.message.fromText('Hello, World!'), // input as Message object
|
|
|
|
+// publicKeys: await Promise.all(this.pk), // for encryption
|
|
|
|
+// privateKeys: [privKeyObj] // for signing (optional)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// const ciphertext = await openpgp.encrypt(options);
|
|
|
|
+// encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
|
|
|
|
+// console.log('encrypted is:',encrypted);
|
|
|
|
|
|
- let aprivKeyObj = (await openpgp.key.readArmored(a.privateKeyArmored)).keys[0];
|
|
|
|
- await aprivKeyObj.decrypt(this.passp);
|
|
|
|
-
|
|
|
|
- const options2 = {
|
|
|
|
- message: await openpgp.message.readArmored(encrypted), // parse armored message
|
|
|
|
- privateKeys: [aprivKeyObj] // for decryption
|
|
|
|
- }
|
|
|
|
- console.log('options2 is: ',options2);
|
|
|
|
- let plaintext = await openpgp.decrypt(options2);
|
|
|
|
- console.log('decrypted text is:',plaintext,plaintext.data);
|
|
|
|
- return plaintext.data // 'Hello, World!'
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public async generateKeys(){
|
|
|
|
- let options = {
|
|
|
|
- userIds: [{ name:'Jon Smith', email:'jon@example.com' }], // multiple user IDs
|
|
|
|
- curve: "ed25519", // ECC curve name
|
|
|
|
- passphrase: this.passp // protects the private key
|
|
|
|
- };
|
|
|
|
|
|
+// let aprivKeyObj = (await openpgp.key.readArmored(a.privateKeyArmored)).keys[0];
|
|
|
|
+// await aprivKeyObj.decrypt(this.passp);
|
|
|
|
+
|
|
|
|
+// const options2 = {
|
|
|
|
+// message: await openpgp.message.readArmored(encrypted), // parse armored message
|
|
|
|
+// privateKeys: [aprivKeyObj] // for decryption
|
|
|
|
+// }
|
|
|
|
+// console.log('options2 is: ',options2);
|
|
|
|
+// let plaintext = await openpgp.decrypt(options2);
|
|
|
|
+// console.log('decrypted text is:',plaintext,plaintext.data);
|
|
|
|
+// return plaintext.data // 'Hello, World!'
|
|
|
|
+
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+ // public async generateKeys(){
|
|
|
|
+ // let options = {
|
|
|
|
+ // userIds: [{ name:'Jon Smith', email:'jon@example.com' }], // multiple user IDs
|
|
|
|
+ // curve: "ed25519", // ECC curve name
|
|
|
|
+ // passphrase: this.passp // protects the private key
|
|
|
|
+ // };
|
|
|
|
|
|
- let a = await openpgp.generateKey(options);
|
|
|
|
- return a;
|
|
|
|
- // console.log('resolved a = ',a);
|
|
|
|
- // this.privateKey =a.privateKeyArmored;
|
|
|
|
- // this.publicKey = a.publicKeyArmored;
|
|
|
|
- // this.encryptDecryptFunction();
|
|
|
|
- }
|
|
|
|
|
|
+ // let a = await openpgp.generateKey(options);
|
|
|
|
+ // return a;
|
|
|
|
+ // // console.log('resolved a = ',a);
|
|
|
|
+ // // this.privateKey =a.privateKeyArmored;
|
|
|
|
+ // // this.publicKey = a.publicKeyArmored;
|
|
|
|
+ // // this.encryptDecryptFunction();
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
|
|
private async addValidators() {
|
|
private async addValidators() {
|
|
@@ -227,6 +228,7 @@ export class WriteTweetPage {
|
|
}
|
|
}
|
|
|
|
|
|
async submitTweet() {
|
|
async submitTweet() {
|
|
|
|
+ console.log('Submitting tweet')
|
|
const loading = this.loadingCtrl.create();
|
|
const loading = this.loadingCtrl.create();
|
|
loading.present();
|
|
loading.present();
|
|
|
|
|
|
@@ -261,13 +263,55 @@ export class WriteTweetPage {
|
|
this.navCtrl.pop();
|
|
this.navCtrl.pop();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public async lookupKeys(email:string){
|
|
|
|
+ var options = {
|
|
|
|
+ query: email
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ let armoredPubkey = await this.hkp.lookup(options);
|
|
|
|
+ console.log('armord pubkey',armoredPubkey);
|
|
|
|
+
|
|
|
|
+ let pubkey = (await openpgp.key.readArmored(armoredPubkey));
|
|
|
|
+ console.log('array of opubkes returened from server',pubkey);
|
|
|
|
+
|
|
|
|
+ pubkey = (await openpgp.key.readArmored(armoredPubkey)).keys[0];
|
|
|
|
+ console.log('latest pubkey is:',pubkey);
|
|
|
|
+ // console.log('Found public key:',pubkey);
|
|
|
|
+
|
|
|
|
+ this.pk.push(pubkey);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
private async tweetPrivate() {
|
|
private async tweetPrivate() {
|
|
const tweet = await this.buildPrivateTweet();
|
|
const tweet = await this.buildPrivateTweet();
|
|
|
|
+ console.log('tweet is:',tweet.full_text);
|
|
const privateKey = await this.storage.get("privateKey");
|
|
const privateKey = await this.storage.get("privateKey");
|
|
- const encryptedTweet = this.cryptoUtils.encrypt(
|
|
|
|
- JSON.stringify(tweet),
|
|
|
|
- privateKey
|
|
|
|
- );
|
|
|
|
|
|
+ //fetch followers and their public keys
|
|
|
|
+ //assuming the email id of rohit.shiva.gowda
|
|
|
|
+ await this.lookupKeys("rohit.hosn@gmail.com");
|
|
|
|
+ console.log('array of pub keys is :', this.pk);
|
|
|
|
+ this.pk = this.pk.map(async (key) => {
|
|
|
|
+ console.log('key is:',key);
|
|
|
|
+ return (await openpgp.key.readArmored(key)).keys[0]
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ console.log("after mapping", this.pk);
|
|
|
|
+
|
|
|
|
+ const options = {
|
|
|
|
+ message: openpgp.message.fromText(tweet), // input as Message object
|
|
|
|
+ publicKeys: await Promise.all(this.pk), // for encryption
|
|
|
|
+ // privateKeys: [privKeyObj] // for signing (optional)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const ciphertext = await openpgp.encrypt(options);
|
|
|
|
+
|
|
|
|
+ const encryptedTweet = ciphertext.data;
|
|
|
|
+ console.log('encrypted tweet is:',encryptedTweet);
|
|
|
|
+
|
|
|
|
+ // const encryptedTweet = this.cryptoUtils.encrypt(
|
|
|
|
+ // JSON.stringify(tweet),
|
|
|
|
+ // privateKey
|
|
|
|
+ // );
|
|
const res = await this.ipfs.storeTweet(encryptedTweet);
|
|
const res = await this.ipfs.storeTweet(encryptedTweet);
|
|
|
|
|
|
this.gun.storeLastTweetHashForUser(
|
|
this.gun.storeLastTweetHashForUser(
|