aboutsummaryrefslogtreecommitdiffstats
path: root/lang/js
diff options
context:
space:
mode:
Diffstat (limited to 'lang/js')
-rw-r--r--lang/js/BrowserTestExtension/browsertest.html1
-rw-r--r--lang/js/src/gpgmejs.js38
-rw-r--r--lang/js/src/permittedOperations.js44
3 files changed, 82 insertions, 1 deletions
diff --git a/lang/js/BrowserTestExtension/browsertest.html b/lang/js/BrowserTestExtension/browsertest.html
index c379ef53..3d81a9ec 100644
--- a/lang/js/BrowserTestExtension/browsertest.html
+++ b/lang/js/BrowserTestExtension/browsertest.html
@@ -17,6 +17,7 @@
<script src="tests/startup.js"></script>
<script src="tests/encryptTest.js"></script>
<script src="tests/encryptDecryptTest.js"></script>
+ <script src="tests/signTest.js"></script>
<!-- run tests -->
<script src="runbrowsertest.js"></script>
</body>
diff --git a/lang/js/src/gpgmejs.js b/lang/js/src/gpgmejs.js
index 3aa5957a..1e76655e 100644
--- a/lang/js/src/gpgmejs.js
+++ b/lang/js/src/gpgmejs.js
@@ -120,6 +120,44 @@ export class GpgME {
}
+ sign(data, keys, mode='clearsign', base64=false) { //sender
+ if (data === undefined){
+ return Promise.reject(gpgme_error('MSG_EMPTY'));
+ }
+ let key_arr = toKeyIdArray(keys);
+ if (key_arr.length === 0){
+ return Promise.reject(gpgme_error('MSG_NO_KEYS'));
+ }
+ let msg = createMessage('sign');
+
+ msg.setParameter('keys', key_arr);
+ if (base64 === true){
+ msg.setParameter('base64', true);
+ }
+ msg.setParameter('mode', mode);
+ putData(msg, data);
+ if (mode === 'detached') {
+ msg.expected = 'base64';
+ }
+ let me = this;
+ return new Promise(function(resolve,reject) {
+ me.connection.post(msg).then( function(message) {
+ if (mode === 'clearsign'){
+ resolve({
+ data: message.data}
+ );
+ } else if (mode === 'detached') {
+ resolve({
+ data: data,
+ signature: message.data
+ });
+ }
+ }, function(error){
+ reject(error);
+ })
+ });
+ }
+
deleteKey(key, delete_secret = false, no_confirm = false){
return Promise.reject(gpgme_error('NOT_YET_IMPLEMENTED'));
let msg = createMessage('deletekey');
diff --git a/lang/js/src/permittedOperations.js b/lang/js/src/permittedOperations.js
index da46a1fd..aa02a8bc 100644
--- a/lang/js/src/permittedOperations.js
+++ b/lang/js/src/permittedOperations.js
@@ -130,6 +130,49 @@ export const permittedOperations = {
// }]
}
},
+
+ sign: {
+ pinentry: true,
+ required: {
+ 'data': {
+ allowed: ['string']},
+ 'keys': {
+ allowed: ['string'],
+ array_allowed: true
+ }
+ },
+ optional: {
+ 'protocol': {
+ allowed: ['string'],
+ allowed_data: ['cms', 'openpgp']
+ },
+ 'chunksize': {
+ allowed: ['number'],
+ },
+ 'sender': {
+ allowed: ['string'],
+ },
+ 'mode': {
+ allowed: ['string'],
+ allowed_data: ['detached', 'clearsign'] // TODO 'opaque' not used
+ },
+ 'base64': {
+ allowed: ['boolean']
+ },
+ 'armor': {
+ allowed: ['boolean']
+ },
+ },
+ answer: {
+ type: ['signature', 'ciphertext'],
+ data: ['data'], // Unless armor mode is used a Base64 encoded binary
+ // signature. In armor mode a string with an armored
+ // OpenPGP or a PEM message.
+ params: ['base64']
+ }
+ },
+
+
/** TBD: querying the Key's information (keyinfo)
TBD name: {
required: {
@@ -212,6 +255,5 @@ export const permittedOperations = {
*TBD get armored secret different treatment from keyinfo!
* TBD key modification?
* encryptsign: TBD
- * verify: TBD
*/
}