src/app/_pgp/pgp-key-store.ts
KeyStore
clearKeysInKeyring |
clearKeysInKeyring()
|
Defined in src/app/_pgp/pgp-key-store.ts:33
|
Returns :
void
|
getEncryptKeys |
getEncryptKeys()
|
Defined in src/app/_pgp/pgp-key-store.ts:17
|
Returns :
Array<any>
|
getFingerprint |
getFingerprint()
|
Defined in src/app/_pgp/pgp-key-store.ts:22
|
Returns :
string
|
getKeyId | ||||||
getKeyId(key: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:23
|
||||||
Parameters :
Returns :
string
|
getKeysForId | ||||||
getKeysForId(keyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:25
|
||||||
Parameters :
Returns :
Array<any>
|
getPrivateKey |
getPrivateKey()
|
Defined in src/app/_pgp/pgp-key-store.ts:19
|
Returns :
any
|
getPrivateKeyForId | ||||||
getPrivateKeyForId(keyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:27
|
||||||
Parameters :
Returns :
any
|
getPrivateKeyId |
getPrivateKeyId()
|
Defined in src/app/_pgp/pgp-key-store.ts:24
|
Returns :
string
|
getPrivateKeys |
getPrivateKeys()
|
Defined in src/app/_pgp/pgp-key-store.ts:18
|
Returns :
Array<any>
|
getPublicKeyForId | ||||||
getPublicKeyForId(keyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:26
|
||||||
Parameters :
Returns :
any
|
getPublicKeyForSubkeyId | ||||||
getPublicKeyForSubkeyId(subkeyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:28
|
||||||
Parameters :
Returns :
any
|
getPublicKeys |
getPublicKeys()
|
Defined in src/app/_pgp/pgp-key-store.ts:14
|
Returns :
Array<any>
|
getPublicKeysForAddress | ||||||
getPublicKeysForAddress(address: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:29
|
||||||
Parameters :
Returns :
Array<any>
|
getTrustedActiveKeys |
getTrustedActiveKeys()
|
Defined in src/app/_pgp/pgp-key-store.ts:16
|
Returns :
Array<any>
|
getTrustedKeys |
getTrustedKeys()
|
Defined in src/app/_pgp/pgp-key-store.ts:15
|
Returns :
Array<any>
|
importKeyPair |
importKeyPair(publicKey: any, privateKey: any)
|
Defined in src/app/_pgp/pgp-key-store.ts:11
|
Returns :
Promise<void>
|
importPrivateKey | ||||||
importPrivateKey(privateKey: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:13
|
||||||
Parameters :
Returns :
Promise<void>
|
importPublicKey | ||||||
importPublicKey(publicKey: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:12
|
||||||
Parameters :
Returns :
void
|
isEncryptedPrivateKey | ||||||
isEncryptedPrivateKey(privateKey: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:21
|
||||||
Parameters :
Returns :
Promise<boolean>
|
isValidKey | ||||||
isValidKey(key: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:20
|
||||||
Parameters :
Returns :
Promise<boolean>
|
loadKeyring |
loadKeyring()
|
Defined in src/app/_pgp/pgp-key-store.ts:10
|
Returns :
void
|
removeKeysForId | ||||||
removeKeysForId(keyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:30
|
||||||
Parameters :
Returns :
Array<any>
|
removePublicKey | ||||||
removePublicKey(publicKey: any)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:32
|
||||||
Parameters :
Returns :
any
|
removePublicKeyForId | ||||||
removePublicKeyForId(keyId: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:31
|
||||||
Parameters :
Returns :
any
|
sign | ||||||
sign(plainText: string)
|
||||||
Defined in src/app/_pgp/pgp-key-store.ts:34
|
||||||
Parameters :
Returns :
Promise<any>
|
import { KeyStore } from 'cic-client-meta';
// TODO should we put this on the mutable key store object
import * as openpgp from 'openpgp';
const keyring = new openpgp.Keyring();
/**
* @extends
*/
interface MutableKeyStore extends KeyStore {
loadKeyring(): void;
importKeyPair(publicKey: any, privateKey: any): Promise<void>;
importPublicKey(publicKey: any): void;
importPrivateKey(privateKey: any): Promise<void>;
getPublicKeys(): Array<any>;
getTrustedKeys(): Array<any>;
getTrustedActiveKeys(): Array<any>;
getEncryptKeys(): Array<any>;
getPrivateKeys(): Array<any>;
getPrivateKey(): any;
isValidKey(key: any): Promise<boolean>;
isEncryptedPrivateKey(privateKey: any): Promise<boolean>;
getFingerprint(): string;
getKeyId(key: any): string;
getPrivateKeyId(): string;
getKeysForId(keyId: string): Array<any>;
getPublicKeyForId(keyId: string): any;
getPrivateKeyForId(keyId: string): any;
getPublicKeyForSubkeyId(subkeyId: string): any;
getPublicKeysForAddress(address: string): Array<any>;
removeKeysForId(keyId: string): Array<any>;
removePublicKeyForId(keyId: string): any;
removePublicKey(publicKey: any): any;
clearKeysInKeyring(): void;
sign(plainText: string): Promise<any>;
}
/**
* @implements
*/
class MutablePgpKeyStore implements MutableKeyStore{
async loadKeyring(): Promise<void> {
await keyring.load();
await keyring.store();
}
async importKeyPair(publicKey: any, privateKey: any): Promise<void> {
await keyring.publicKeys.importKey(publicKey);
await keyring.privateKeys.importKey(privateKey);
}
importPublicKey(publicKey: any): void {
keyring.publicKeys.importKey(publicKey);
}
async importPrivateKey(privateKey: any): Promise<void> {
await keyring.privateKeys.importKey(privateKey);
}
getPublicKeys(): Array<any> {
return keyring.publicKeys.keys;
}
getTrustedKeys(): Array<any> {
return keyring.publicKeys.keys;
}
getTrustedActiveKeys(): Array<any> {
return keyring.publicKeys.keys;
}
getEncryptKeys(): Array<any> {
return [];
}
getPrivateKeys(): Array<any> {
return keyring.privateKeys.keys;
}
getPrivateKey(): any {
return keyring.privateKeys && keyring.privateKeys.keys[0];
}
async isValidKey(key): Promise<boolean> {
// There is supposed to be an openpgp.readKey() method but I can't find it?
const _key = await openpgp.key.readArmored(key);
return !_key.err;
}
async isEncryptedPrivateKey(privateKey: any): Promise<boolean> {
const imported = await openpgp.key.readArmored(privateKey);
for (const key of imported.keys) {
if (key.isDecrypted()) {
return false;
}
}
return true;
}
getFingerprint(): string {
// TODO Handle multiple keys
return keyring.privateKeys && keyring.privateKeys.keys[0] && keyring.privateKeys.keys[0].keyPacket &&
keyring.privateKeys.keys[0].keyPacket.fingerprint;
}
getKeyId(key: any): string {
return key.getKeyId().toHex();
}
getPrivateKeyId(): string {
// TODO is there a library that comes with angular for doing this?
return keyring.privateKeys && keyring.privateKeys.keys[0] && keyring.privateKeys.keys[0].getKeyId().toHex();
}
getKeysForId(keyId: string): Array<any> {
return keyring.getKeysForId(keyId);
}
getPublicKeyForId(keyId): any {
return keyring.publicKeys.getForId(keyId);
}
getPrivateKeyForId(keyId): any {
return keyring.privateKeys.getForId(keyId);
}
getPublicKeyForSubkeyId(subkeyId): any {
return keyring.publicKeys.getForId(subkeyId, true);
}
getPublicKeysForAddress(address): Array<any> {
return keyring.publicKeys.getForAddress(address);
}
removeKeysForId(keyId): Array<any> {
return keyring.removeKeysForId(keyId);
}
removePublicKeyForId(keyId): any {
return keyring.publicKeys.removeForId(keyId);
}
removePublicKey(publicKey: any): any {
const keyId = publicKey.getKeyId().toHex();
return keyring.publicKeys.removeForId(keyId);
}
clearKeysInKeyring(): void {
keyring.clear();
}
async sign(plainText): Promise<any> {
const privateKey = this.getPrivateKey();
if (!privateKey.isDecrypted()) {
const password = window.prompt('password');
await privateKey.decrypt(password);
}
const opts = {
message: openpgp.message.fromText(plainText),
privateKeys: [privateKey],
detached: true,
};
const signatureObject = await openpgp.sign(opts);
return signatureObject.signature;
}
}
export {
MutablePgpKeyStore,
MutableKeyStore
};