gpgme.git
14 months agojs: avoid async getters
Maximilian Krambach [Thu, 16 Aug 2018 12:40:53 +0000 (14:40 +0200)]
js: avoid async getters

--

* src/Key.js get armored was returning a promise on async keys.
  As getters should not do that, it returns an error in this case.

14 months agojs: wrong object assumed in recent commit
Maximilian Krambach [Thu, 16 Aug 2018 10:13:10 +0000 (12:13 +0200)]
js: wrong object assumed in recent commit

--

* src/Keyring.js I wrongly assumed an object to be a GPGME_Key,
  it was the raw answer from nativeMessaging instead. Now it returns
  a GPGME_Key again.

14 months agojs: get default key fixes
Maximilian Krambach [Thu, 16 Aug 2018 10:03:30 +0000 (12:03 +0200)]
js: get default key fixes

--

* src/Keyring.js: The answer was not parsed correctly, so a config was
  being ignored.

* If no config is set, we return the first non-invalid key with a
  secret, instead of the first key (which may be e.g. an expired one)

14 months agojs: simplify getDefaultKey
Maximilian Krambach [Thu, 16 Aug 2018 09:29:10 +0000 (11:29 +0200)]
js: simplify getDefaultKey

--

* src/Keyring.js: In case no default Key is set in configuration,
  only Keys reported as having a secret part should be considered
  for default Keys, avoiding some extra requests.

14 months agojs: consistently return uppercase fingerprint
Maximilian Krambach [Thu, 16 Aug 2018 09:25:50 +0000 (11:25 +0200)]
js: consistently return uppercase fingerprint

--

* src/Key.js: the fingerprint returned by a Key is now always upper
  case hex, even if the constructor had lower case input. This is to be
  more consistent with gpgme and to be more readable and reliable in
  comparisions.

14 months agojs: make init export immutable
Maximilian Krambach [Wed, 1 Aug 2018 10:51:12 +0000 (12:51 +0200)]
js: make init export immutable

--

* src/index.js: The export now uses a freezed Object, which does not
  allow for simply overwriting the init method by e.g. a third-party
  library.
* BrowsertestExtension: Added some tests trying if decryption of bad
  data properly fails

14 months agojs: fix confusion about loop in last commit
Maximilian Krambach [Tue, 31 Jul 2018 15:35:52 +0000 (17:35 +0200)]
js: fix confusion about loop in last commit

--

* The aim is to iterate through the results of the first request
 (all keys), and then add the propert 'hasSecret' to those that
  are in the second request (secret Keysring)  as well. I messed
  this up in a recent change, and it escaped testing.

14 months agojs: Fix Key.hasSecret answer
Maximilian Krambach [Tue, 31 Jul 2018 14:54:43 +0000 (16:54 +0200)]
js: Fix Key.hasSecret answer

--

* The comparision result between Keyring and Keyring with secrets was
  set to the wrong Object which was not returned at all.

14 months agojs: Making objects inmutable
Maximilian Krambach [Mon, 30 Jul 2018 10:31:27 +0000 (12:31 +0200)]
js: Making objects inmutable

--

* An Object.freeze should stop any malicious third party from changing
  objects' methods once the objects are instantiated (see unittest for
  an approach that would have worked before)
  - An initialized gpgmejs- object doesn't have a '_Keyring' property
    anymore (it still has its 'Keyring')
  - The internal expect='base64' needed to be turned into a method.

14 months agojs: fix indentaion
Maximilian Krambach [Fri, 27 Jul 2018 18:56:11 +0000 (20:56 +0200)]
js: fix indentaion

--

* doing the indentation changes that became neccesary in the last
  commit.

14 months agojs: change the write access for js class methods
Maximilian Krambach [Fri, 27 Jul 2018 18:36:21 +0000 (20:36 +0200)]
js: change the write access for js class methods

--
* src/ [Connection, Error, Key, Keyring, MEssage, Signature, gpgmejs]:
    Functions and values that are not meant to be overwritten are now
    moved into their constructors, thus eliminating the possibility of
    overwrites after initialization.

* Key: The mode of use (synchronous cached, or async promises) ivs now
  determined at initialization of that Key. The property Key.isAsync
  reflects this state.

* unittests: fixed old Key syntax for testing.

* Message.js isComplete is now a method and not a getter anymore.

* Added some startup tests.

14 months agojs: clean up test extension
Maximilian Krambach [Fri, 27 Jul 2018 09:20:33 +0000 (11:20 +0200)]
js: clean up test extension

--

Tests will now run with one instance of gpgmejs each block,
which reduces overhead. Readability is (hopefully) improved),
some negative tests are added.

There is still a performance problem in base64 encoding/decoding,
which causes some tests to fail due to time out.

14 months agojs: include armored Key in import callback
Maximilian Krambach [Tue, 24 Jul 2018 12:56:33 +0000 (14:56 +0200)]
js: include armored Key in import callback

--

* The import answer now also directly contains the armored Key as Key
  property, without need to refresh the Key object created in the
  answer. This allows for direct comparision of input and output.
* BrowserTestExtension: added test for that import callback

14 months agojs: Fix wrong encoding in received error messages
Maximilian Krambach [Tue, 24 Jul 2018 12:50:54 +0000 (14:50 +0200)]
js: Fix wrong encoding in received error messages

--

* The libgpg error strings arrive in the browser in a different
  encoding than used by browsers. Escaping and then decoding it
  should cover most languages in the supported browsers.

14 months agojs: repair BrowserTextExtension test
Maximilian Krambach [Fri, 20 Jul 2018 08:59:57 +0000 (10:59 +0200)]
js: repair BrowserTextExtension test

--

* the signed message to verify was signed by a wrong test key

15 months agojs: typo in comment
Maximilian Krambach [Wed, 18 Jul 2018 11:43:47 +0000 (13:43 +0200)]
js: typo in comment

--

* Documentation typo that caused jsdoc to exit with an error

15 months agojs: fix getkeys with locate option
Maximilian Krambach [Tue, 17 Jul 2018 09:07:49 +0000 (11:07 +0200)]
js: fix getkeys with locate option

--

* src/Keyring.js:
  As locate will not work with the "secret" option, the first message
  cannot be reused, thus a new one must be created here

15 months agojs: allow optional Key retrieve pattern to be null
Maximilian Krambach [Thu, 12 Jul 2018 09:48:17 +0000 (11:48 +0200)]
js: allow optional Key retrieve pattern to be null

--

* src/Keyring.js: If the optional "pattern" parameter is not to be
  used, but another, following parameter is, null is more of a
  convention in javascript, thus both null and undefined are
  interpreted as "this parameter is not meant to be set".

15 months agojs: add with-sec-fprs to getKeysArmored
Maximilian Krambach [Thu, 12 Jul 2018 09:36:55 +0000 (11:36 +0200)]
js: add with-sec-fprs to getKeysArmored

--

* Reflects the changes made to gpgme-json in commit
  6cc842c9aa76d19448141e5117ac59452d7a1ff3.

  - getKeysArmored now returns an object with property 'armored' being
    the exported armored block, and an (optional) array of fingerprint
    strings for those keys that can be used in sign/encrypt operations
    as property 'secret_fprs'. With this, extensions such as mailvelope
    will be able to bulk fetch all necessary key information in one
    request.

15 months agojs: documentation
Maximilian Krambach [Tue, 10 Jul 2018 12:32:26 +0000 (14:32 +0200)]
js: documentation

--

* Fixed errors:
- src/Message.js post(): Set chunksize to defined default value instead
  of hardcoded
- src/Keys.js: added getHasSecret() to refreshKey operation.

* Reviewed and updated the documentation

* non-documentation changes which do not affect functionality:
- src/Errors: disabled a console.warn that is only useful for debugging
- helpers.js: renamed "string" to "value" in isFingerprint and isLongId
  to avoid confusion
- src/Keyring: prepare_sync, search are both explicitly set to false by
  default

15 months agojs: fix verify result reporting
Maximilian Krambach [Mon, 9 Jul 2018 09:57:01 +0000 (11:57 +0200)]
js: fix verify result reporting

--

* src/Signature.js: searching for overall validity in the "summary"
  property
* BrowsertestExtension: Added two verify tests

15 months agojs: reduce request spam at getKeys()
Maximilian Krambach [Mon, 9 Jul 2018 09:24:46 +0000 (11:24 +0200)]
js: reduce request spam at getKeys()

--

* Don't make a secret-Key request for each Key retrieved, use one
  request for all of them instead, and assemble the info later. This
  should reduce the traffic with large Keyrings. The bulk retrieval
  for the public armored Keys for each of these Keys is still up to
  discussion

* unittests: disabled assertion for the armored key (as it currently
  doesn't work)

* encryptTest: clarified the mechanism/reason of rejection for
  Messages >64 MB. This is still a TODO, as this error comes from a
  different place (the browser itself) and behaves different from the
  other errors.

15 months agojs: properly reject pgp message without signature
Maximilian Krambach [Wed, 4 Jul 2018 13:46:45 +0000 (15:46 +0200)]
js: properly reject pgp message without signature

--

* A verify at gpgme-json does not fail if there is a valid pgp message
  that does not include a signature. Instead, the answer will be devoid
  of signatures. In javascript, the SIG_NO_SIG error should be reported
  here, but wasn't.

15 months agojs: Add jsdoc, update webpack-cli dependency
Maximilian Krambach [Wed, 4 Jul 2018 11:38:54 +0000 (13:38 +0200)]
js: Add jsdoc, update webpack-cli dependency

--
* package.json:
  - the old webpack-cli version depended on two packages
    with vulnerabilities, set to minimum version 3.0.8 to fix this
    (nodesecurity.io/advisories/157, nodesecurity.io/advisories/612)
  - added License identifier

* README: Updated documentation

* jsdoc.conf: Added a configuration file for jsdoc

* some minor documentation changes, indentations

15 months agojs: add Key lookup
Maximilian Krambach [Wed, 4 Jul 2018 10:11:35 +0000 (12:11 +0200)]
js: add Key lookup

--

* src/Keyring.js: getKeys() now has the option "search", which will
  trigger a remote lookup (as configured in gpg) for the string given
  as pattern.
* src/permittedOperations: make use of the new 'locate' option in
  keylist
* DemoExtension: Add a button for lookup, to demonstrate the
  functionality

15 months agojs: fixing Key import/export test
Maximilian Krambach [Tue, 3 Jul 2018 10:41:49 +0000 (12:41 +0200)]
js: fixing Key import/export test

--

* BrowserTestExtension:
 - The KeyImport/Export test had some errors, which have now been fixed
 - The secret key used for the test examples is now placed more
   prominently, and a clarification added that decrypt tests will not
   work if this key is not imported.

* permittedOperations.js: typo

  Thanks to rrenkert@intevation.de for the fixes

15 months agojs: Demoextension update
Maximilian Krambach [Wed, 20 Jun 2018 11:42:19 +0000 (13:42 +0200)]
js: Demoextension update

--

* src/Signature: typo
* src/gpgmejs.js: fixed wrong scope in verification
* right now verify does not succeed in the DemoExtension.
  This is probably a problem in conversion or line ending.

15 months agoPrepare build system for gpgme-js and dist it
Andre Heinecke [Tue, 19 Jun 2018 14:40:40 +0000 (16:40 +0200)]
Prepare build system for gpgme-js and dist it

* configure.ac: Add js as language.
* lang/Makefile.am: Add js as dist language.
* lang/js/BrowserTestExtension/Makefile.am,
lang/js/DemoExtension/Makefile.am,
lang/js/Makefile.am,
lang/js/src/Makefile.am: Populate EXTRA_DIST variables.

--
There is no actual build done yet as there seems to be
no way to build it with debian stable tools. This needs
clarification.

16 months agojs: getDefaultKey and GenerateKey improvements
Maximilian Krambach [Tue, 19 Jun 2018 07:26:01 +0000 (09:26 +0200)]
js: getDefaultKey and GenerateKey improvements

--

* src/Keyring.js: added more options for key generation.

* src/Key.js: GetDefaultKey now relies on the info associated with the
  key, as the approach of relying on a secret subkey did not work as
  intended
* DemoExtension: Added a button for retrieval of the subkey, to test
  this functionality.

16 months agojs: import result feedback
Maximilian Krambach [Thu, 14 Jun 2018 12:50:25 +0000 (14:50 +0200)]
js: import result feedback

--

* src/Keyring.js: Changed and documented the import result feedback
  towards the javascript side

16 months agojs: add verify and signature parsing
Maximilian Krambach [Thu, 14 Jun 2018 10:15:51 +0000 (12:15 +0200)]
js: add verify and signature parsing

--

* src/gpgmejs.js:
  - Added verify method
  - Added verification results in decrypt (if signatures are present
    in the message)
  - Added a base64 option to decrypt

* src/Signature.js: Convenience class for verification results. Used
   for e.g. converting timestamps to javascript time, quick overall
   validity checks

* src/Keyring.js: removed debug code

* src/Errors.js add two new Signature errors

16 months agojs: getDefaultKey and verify fix
Maximilian Krambach [Wed, 13 Jun 2018 13:22:03 +0000 (15:22 +0200)]
js: getDefaultKey and verify fix

--

* DemoExtension/maindemo.js - added a Demo for retrieving the default
  signing key

* src/Errors.js - add a new Error if no default key can be determined

* src/Key.js added documentation and a TODO marker for hasSecret.

* src/Keyring.js implemented getDefaultKey

* src/permittedOperations.js: Added missing entry for verify,
    added config_opt

16 months agojs: less confusing icons for test/Demo extension
Maximilian Krambach [Wed, 13 Jun 2018 09:49:37 +0000 (11:49 +0200)]
js: less confusing icons for test/Demo extension

--
* The current test icon was just a generic pin. Changed that by the
  gnupg lock symbol with 'Demo'/'Tests' written on it. Original taken
  from gnupg artwork/icons/lock-wing.svg.

16 months agojs: removed config
Maximilian Krambach [Mon, 11 Jun 2018 13:10:43 +0000 (15:10 +0200)]
js: removed config

--

* There is no use for a configuration at the moment, and it seems
  improbable that this use will arise.

16 months agojs: Add key creation to Keyring
Maximilian Krambach [Mon, 11 Jun 2018 10:08:50 +0000 (12:08 +0200)]
js: Add key creation to Keyring

--

* src/Keyring.js: Added method generateKey for new Keys
  Still TODO: Key length and some further testing. Automated testing
  does not work in this case, and gpgmejs will not be able to delete
  test keys again.
* src/permittedOperations.js Added new method's definitions according
  to gpgme-json

16 months agojs: change chunksize handling and decoding
Maximilian Krambach [Fri, 8 Jun 2018 15:54:58 +0000 (17:54 +0200)]
js: change chunksize handling and decoding

--

* the nativeApp now sends all data in one base64-encoded string, which
  needs reassembly, but in a much easier way now.

* there are some new performance problems now, especially with
  decrypting data

16 months agojs: change Keyinfo timestamps into javascript date
Maximilian Krambach [Wed, 6 Jun 2018 13:29:21 +0000 (15:29 +0200)]
js: change Keyinfo timestamps into javascript date

--
* src/Key.js

16 months agojs: code cleanup (eslint)
Maximilian Krambach [Wed, 6 Jun 2018 11:05:53 +0000 (13:05 +0200)]
js: code cleanup (eslint)

--
* trying to stick to eslint from now on for readability

* As some attribution was lost in previous git confusions, I added my
  name into some of the licence headers

16 months agojs: implement import/delete Key, some fixes
Maximilian Krambach [Wed, 6 Jun 2018 09:57:41 +0000 (11:57 +0200)]
js: implement import/delete Key, some fixes

--

* Keyring.js
   - implemented importKey: importing one or more armored public key
     blocks.
   - implemented deleteKey: deleting a public Key from gpg.

* Key.js renamed property Key.armor to Key.armored

* Helpers.js: toKeyIDArray does not complain anymore if there are no
  keys. Not having Keys in e.g. signing keys in encrypt is legitimate
  and common, the complaints were getting spammy

* Errors.js: gpgme_errors now always pass an optional additional
  message, for easier debugging in minified code

* Connection.js: Fix in gpgme-json responses containing objects

* eslintrc.json: Start using eslint. A cleanup to conform to it is not
  done yet

* Added further tests for the new functionality

16 months agojs: more Keyring/Key handling
Maximilian Krambach [Wed, 30 May 2018 15:05:54 +0000 (17:05 +0200)]
js: more Keyring/Key handling

--

* src/Keys.js
  - made setKeyData more consistent with other methods
  - added convenience methods (Key.armored, Key.hasSecret)
  - Added a Key delete function

* src/Keyring.js:
  - added a getkeysArmored which allows for bulk export of public Keys

gpgmejs:
  - removed deleteKey. It is now a method of the Key itself
  - Encrypt: Added some common options as parameter, and the
    possibility to set all allowed flags via an additional Object

16 months agojs: Keyring listing keys
Maximilian Krambach [Mon, 28 May 2018 15:26:56 +0000 (17:26 +0200)]
js: Keyring listing keys

--

* implementing Keyring methods:

  - Keyring.getKeys: has an additional option that retrieves the armor
    and secret state once at the beginning. This is power hungry, but
    allows for Keys to be used directly (without querying gpgme-json
    each call)
  * permittedOperations.js: reflect recent changes in the native
    counterpart, adding more options
  * Key: adding two methods for retrieving the armored Key block and
    for finding out if the Key includes a secret subkey.

16 months agojs: Treat a connection as a gpgme Context
Maximilian Krambach [Mon, 28 May 2018 14:52:50 +0000 (16:52 +0200)]
js: Treat a  connection as a gpgme Context

--

* After an operation a connection should be disconnected again.
  The "end of operation" is now assumed to be either an error as
  answer, or a message not including a "more"

* GPGME, GPGME_Key, GPGME_Keyring don't require a connection
  anymore
* Message.js: The Message.post() method will open a connection as
  required

16 months agojs: implement Key handling (1)
Maximilian Krambach [Fri, 25 May 2018 17:02:18 +0000 (19:02 +0200)]
js: implement Key handling (1)

--

* Keys can now be queried for information. Onne version queries gnug
  directly (asynchronous Promise in javascript terms), the cached
  version refreshes on demand.

* Small fixes:
  src/Connection.js joins answers that stay json properly now

16 months agojs: use version operation for connection checks
Maximilian Krambach [Fri, 25 May 2018 09:53:24 +0000 (11:53 +0200)]
js: use version operation for connection checks

--

* src/Connection.js: isConnected was renamed to checkConnection, that
  returns a promise with either version information or Boolean
* Connection checks have been adapted to reflect that checkConnection
  returns a Promise
* BrowsertestExtension: tests/signTest.js was missing from my last
  commit

16 months agojs: adding sign method
Maximilian Krambach [Thu, 24 May 2018 13:16:18 +0000 (15:16 +0200)]
js: adding sign method

--

  * src/gpgmejs.js: method, update in src/permittedOperations
  * basic testing in BrowsertestExtension

16 months agoMerge branch 'master' into javascript-binding
Maximilian Krambach [Thu, 24 May 2018 12:03:09 +0000 (14:03 +0200)]
Merge branch 'master' into javascript-binding

16 months agojson: Put signature info before data output
Andre Heinecke [Thu, 24 May 2018 11:36:31 +0000 (13:36 +0200)]
json: Put signature info before data output

* src/gpgme-json.c (op_decrypt): Move info before data.

--
This should enable it to first parse signatures before
handling very large chunks of data.

16 months agojson: Add sign to help
Andre Heinecke [Thu, 24 May 2018 11:31:15 +0000 (13:31 +0200)]
json: Add sign to help

* src/gpgme-json.c (hlp_help): Add sign.

16 months agojson: Add op_sign
Andre Heinecke [Thu, 24 May 2018 11:24:02 +0000 (13:24 +0200)]
json: Add op_sign

* src/gpgme-json.c (op_sign): New.

16 months agojson: Fix invalid function call
Andre Heinecke [Thu, 24 May 2018 11:16:55 +0000 (13:16 +0200)]
json: Fix invalid function call

* src/gpgme-json.c (add_signatures_to_object): Fix call to
xjson_CreateArray.

--
That is what happens if you edit code while reviewing changes,
without testing it again,..

16 months agojson: Print signatures for decrypt/verify
Andre Heinecke [Thu, 24 May 2018 10:34:31 +0000 (12:34 +0200)]
json: Print signatures for decrypt/verify

* gpgme-json.c (xJSON_CreateArray),
(add_summary_to_object, validity_to_string): New helpers.
(add_signature_to_object, add_signatures_to_object)
(add_signatures_object): New.
(op_decrypt): Handle verify_result.
(hlp_help): Mention decrypt.

16 months agojson: Minor typo fixes
Andre Heinecke [Thu, 24 May 2018 08:26:41 +0000 (10:26 +0200)]
json: Minor typo fixes

* src/gpgme-json.c: Minor typo fixes.

16 months agojs: remove openpgp mode
Maximilian Krambach [Wed, 23 May 2018 10:56:23 +0000 (12:56 +0200)]
js: remove openpgp mode

--

* After discussion, that mode is not required, and can result in
  being quite misleading and a maintenance hassle later on.

16 months agodocs and examples: python howto
Ben McGinnes [Wed, 23 May 2018 04:43:06 +0000 (14:43 +1000)]
docs and examples: python howto

* Updated the decryption example code in the HOWTO and the
  corresponding decrypt-file.py script to gracefully handle a
  decryption failure.  This error will always be triggered when GPGME
  is used to try to decrypt an old, MDC-less encrypted message or
  file.

16 months agojs: transfer encoding changes
Maximilian Krambach [Tue, 22 May 2018 12:24:16 +0000 (14:24 +0200)]
js: transfer encoding changes

--

* Uint8Arrays are not supported for now there are unsolved issues in
  conversion, and they are lower priority

* encrypt gains a new option to indicate that input values are base64
  encoded
* as decrypted values are always base64 encoded, the option base64 will
  not try to decode the result into utf, but leave it as it is

16 months agocpp: Expose sessionKey and symkeyAlgo
Andre Heinecke [Tue, 22 May 2018 10:08:01 +0000 (12:08 +0200)]
cpp: Expose sessionKey and symkeyAlgo

* lang/cpp/decryptionresult.cpp, lang/cpp/decryptionresult.h
(DecryptionResult::symkeyAlgo, DecryptionResult::sessionKey): New.

17 months agocore, w32: Add w64 handling for regkeys
Andre Heinecke [Thu, 17 May 2018 15:41:53 +0000 (17:41 +0200)]
core, w32: Add w64 handling for regkeys

* src/w32-util.c (_gpgme_get_gpg_path): Use new defines.
(GNUPG_REGKEY_2): x64 aware regkey as used by GnuPG in Gpg4win 2.x
(GNUPG_REGKEY_3): x64 aware regkey as used by GnuPG in Gpg4win 3.x
(_gpgme_get_gpgconf_path): Use new regkeys. Add another fallback.

--
This should fix more "unsupported protocol" issues if Gpg4win /
GnuPG is installed in a non standard path on 64bit systems.

The regkey handling is similar to that of gpgex and gpgol.

GnuPG-Bug-Id: T3988

17 months agocore: Always fail if an OpenPG message is not integrity protected.
Werner Koch [Thu, 17 May 2018 07:14:40 +0000 (09:14 +0200)]
core: Always fail if an OpenPG message is not integrity protected.

* src/decrypt.c (struct op_data_t): Add field not_integrity_protected.
(parse_decryption_info): Set this.  Also rename mode to aead_algo for
clarity.
(_gpgme_decrypt_status_handler): Force failure in case of a missing
MDC.
--

This extra check makes sure that a missing or stripped MDC in
 - gpg < 2.1
 - or gpg 2.2 with an old cipher algorithm
will lead to a decryption failure.  gpg 2.3 will always fail in this
case.  Implementing this check here and not backporting the 2.3 change
to 2.2 has the benefit that all GPGME using applications are protected
but scripts relying on rfc2440 (i.e. without MDC) will only break when
migrating to 2.3.

Note that S/MIME has no integrity protection mechanism but gpgsm
neither emits a DECRYPTION_INFO status line, so an error will not be
triggered.  If in the future gpgsm supports authenticated encryption
it may issue a DECRYPTION_INFO line to force a failure here but it
will in that case also emit a DECRYPTION_FAILED anyway.

GnuPG-bug-id: 3981
Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agojs: Testing lare messages
Maximilian Krambach [Mon, 14 May 2018 17:02:49 +0000 (19:02 +0200)]
js: Testing lare messages

--

* Some assumption on messages were wrong. Now the tests use more
  reasonable sizes.
* bigString now uses the full utf8-extent, with the exception of
  U+0000. This code gets dropped during the encryption-decryption
  process.

17 months agojs: remove non-browser tests
Maximilian Krambach [Mon, 14 May 2018 14:36:05 +0000 (16:36 +0200)]
js: remove non-browser tests

--

* The majority of tests needs to be run in a nativeMessaging context.
  Offering the few tests that don't need this context at two places
  introduces issues with maintainability. All tests now removed can be
  found in ./unittests.js

17 months agojs: Tests and improvements for openpgp mode
Maximilian Krambach [Mon, 14 May 2018 14:23:24 +0000 (16:23 +0200)]
js: Tests and improvements for openpgp mode

--

* Added openpgp - Mode tests to the browsertest Extension. These tests
  require openpgp, which should not be a hard dependency for the main
  project. Packing openpgpjs into the extension is still TODO

* Fixes:
  - openpgp mode API now correctly handles parameters as an object,
    similar to openpgpjs
  - proper check and parsing of openpgpjs Message Objects

17 months agojs: more testing of nativeMessaging connection
Maximilian Krambach [Wed, 9 May 2018 17:40:57 +0000 (19:40 +0200)]
js: more testing of nativeMessaging connection

--

* There were some inconsistencies between utf-8, transfer and browsers'
  utf16, which broke characters that were split between individual
  messages. src/Connection now contains a workaround that reassembles
  javascripts' format from passed base64 strings. This needs someone
  more experienced looking.
* Added several new tests which were failing during initial debugging
  of this issue
* reorganized BrowsertestExtension to avoid cluttering.

17 months agoMerge branch 'master' into javascript-binding
Maximilian Krambach [Wed, 9 May 2018 14:55:50 +0000 (16:55 +0200)]
Merge branch 'master' into javascript-binding

17 months agojson: Improve auto-base64 encoding to not split UTF-8 chars.
Werner Koch [Wed, 9 May 2018 14:41:05 +0000 (16:41 +0200)]
json: Improve auto-base64 encoding to not split UTF-8 chars.

* src/gpgme-json.c (make_data_object): Switch to Base64 also for UTF-8
characters.

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agocore: Make the status-fd monitor work for all gpgsm commands.
Werner Koch [Wed, 9 May 2018 14:39:30 +0000 (16:39 +0200)]
core: Make the status-fd monitor work for all gpgsm commands.

* src/engine-gpgsm.c (status_handler): Call the status monitor also
here.

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agojs: more testing
Maximilian Krambach [Tue, 8 May 2018 16:33:41 +0000 (18:33 +0200)]
js: more testing

--

* Tests: Under certain circumstances, some data change during
  encrypt-decrypt. Committing the current state so the problem can be
  discussed.

* Fixes:
  - disconnecting the test ports after tests are complete
  - fixed passing of the error message from gpgme-json

17 months agojs: fixing errors found by testing: encrypt/decrypt
Maximilian Krambach [Mon, 7 May 2018 16:27:25 +0000 (18:27 +0200)]
js: fixing errors found by testing: encrypt/decrypt

--

* Key.js: Error code for wrong parameter in createKey should be
  "PARAM_WRONG"
* Helpers.js: The property openpgpjs-like Objects were checked for in
  toKeyIdArray was not defined.
* src/permittedOperations.js: updated more expectations and assumptions
  for the native API

* new Problems:
  - There seems to be a message size limit of about 21 MB for
    nativeMessaging, much lower than the documented 4GB.
  - Some bytes are lost with random data in an encrypt-decrypt
    roundtrip. The culprit is unclear.

17 months agopython: key expiration datetime stamp tests
Ben McGinnes [Sat, 5 May 2018 02:27:17 +0000 (12:27 +1000)]
python: key expiration datetime stamp tests

* Changed the expiration date for the generated test key to NYE this
  century, rather than the NYE this millennium as originally suggested
  in job #3815.
* This covers the lifetimes of current users (except, maybe, some very
  healthy millennials) as well as the 32-bit clock end date in 2038;
  without falling foul of OpenPGP's 2106 expiration.

17 months agojs: fixing errors found by testing
Maximilian Krambach [Fri, 4 May 2018 10:56:59 +0000 (12:56 +0200)]
js: fixing errors found by testing

--

* Key.js: Error code for wrong parameter in createKey should be
  "PARAM_WRONG"

* Helpers.js: The property openpgpjs-like Objects were checked for in
  toKeyIdArray was not defined.

* src/permittedOperations.js: updated more expectations and assumptions
  for the native API

17 months agoqt: Respect --disable-gpg-test for tests
Andre Heinecke [Fri, 4 May 2018 08:03:42 +0000 (10:03 +0200)]
qt: Respect --disable-gpg-test for tests

* lang/qt/Makefile.am: Respect --disable-gpg-test

--
This is similar to the core switch to disable the tests.

17 months agojs: Added browser testing for unit tests
Maximilian Krambach [Thu, 3 May 2018 16:03:22 +0000 (18:03 +0200)]
js: Added browser testing for unit tests

--

* Added unittests to be run inside a Browser. To be able to access
  the non-exposed functions and classes, a testing bundle will be
  created, containing the tests (unittests.js) and the items to be
  tested.
* src/Helpelpers, src/Key, src/Keyring: fixed some errors found
  during testing.

17 months agojs: changed Key class stub
Maximilian Krambach [Thu, 3 May 2018 12:12:10 +0000 (14:12 +0200)]
js: changed Key class stub

--

* src/Key.js:
  A Key object cannot offer more than basic functionality outside a
  connection, so it now requires a connection to be present.

17 months agojs: more testing
Maximilian Krambach [Fri, 27 Apr 2018 18:03:09 +0000 (20:03 +0200)]
js: more testing

--

* Tests: initialization of the two modes, encryption

* gpgme.js: reintroduced message check before calling
  Connection.post()

* gpgmejs_openpgp.js: Fixed openpgp mode not passing keys

* index.js: fixed some confusion in parseconfig()

* Inserted some TODO stubs for missing error handling

17 months agojs: fixed empty operation setter in Message
Maximilian Krambach [Fri, 27 Apr 2018 08:21:13 +0000 (10:21 +0200)]
js: fixed empty operation setter in Message

--

* src/Message.js Messages failed because they were not assigned
  operations

17 months agojs: fixed wrong paths in DemoExtension
Maximilian Krambach [Thu, 26 Apr 2018 15:59:40 +0000 (17:59 +0200)]
js: fixed wrong paths in DemoExtension

--

* Some forgotten internal links after the move to a subdir and cleaning

17 months agojs: created TestExtension and smaller fixes
Maximilian Krambach [Thu, 26 Apr 2018 15:13:34 +0000 (17:13 +0200)]
js: created TestExtension and smaller fixes

--

* Extensions:

  - Moved testapplication to Demoextension
  - Created BrowserTestExtension.
    Includes mocha and chai. For running tests that cannot be run
    outside a WebExtension

  Both Extensions can be found zipped in build/extensions after
  running build_extensions.sh

* Code changes:
  - src/Config: Place for the configuration
  - small fixes raised during testing in Keyring.js, Message.js,
  - src/gpgmejs_openpgpjs.js don't offer direct GpgME object to the
    outside, as it only causes confusion
  - index.js init() now checks the config for validity

* Tests:
  - Reordered tests in test/.
  - Input values are now in a separate file which may be of use for
    bulk testing

* moved the build directory from dist to build

17 months agoqt: Fix filename handling in cryptoconfig
Andre Heinecke [Thu, 26 Apr 2018 12:11:19 +0000 (14:11 +0200)]
qt: Fix filename handling in cryptoconfig

* src/qgpgmenewcryptoconfig.cpp (QGpgMENewCryptoConfigEntry::urlValue):
Build url from local file.
(QGpgMENewCryptoConfigEntry::setURLValue): Set native seperated
path.

--
This fixes setting files through cryptoconfig on Windows.
GnuPG-Bug-Id: T3939

17 months agojs: First testing and improvements
Maximilian Krambach [Wed, 25 Apr 2018 17:45:39 +0000 (19:45 +0200)]
js: First testing and improvements

--

* Introduced Mocha/chai as testsuite. After development build
  'npm test' should run the unit tests. Functionality exclusive to
  Browsers/WebExtensions cannot be run this way, so some other testing
  is still needed.

  - package.json: Added required development packages
  - .babelrc indirect configuration for mocha. ES6 transpiling
    needs some babel configuration, but mocha has no setting for it.
  - test/mocha.opts Vonfiguration for mocha runs

* Fixed errors:
  - Helpers.js toKeyIdArray; isLongId is now exported
  - Key.js Key constructor failed
  - Message.js will not throw an Error during construction, a new
    message is now created with createMessage, which can return an
    Error or a GPGME_Message object

* Tests:
  - test/Helpers: exports from Helpers.js, GPGME_Error handling
  - test/Message: first init test with bad parameters

17 months agojs: Configuration and Error handling
Maximilian Krambach [Wed, 25 Apr 2018 13:59:36 +0000 (15:59 +0200)]
js: Configuration and Error handling

--

* gpgmejs_openpgpjs
  - unsuported values with no negative consequences can now reject,
    warn or be ignored, according to config.unconsidered_params
  - cleanup of unsupported/supported parameters and TODOS

* A src/index.js init() now accepts a configuration object

* Errors will now be derived from Error, offering more info and a
  stacktrace.

* Fixed Connection.post() timeout triggering on wrong cases

* Added comments in permittedOperations.js, which gpgme interactions
  are still unimplemented and should be added next

17 months agojs: reactivate timeout on connection
Maximilian Krambach [Wed, 25 Apr 2018 09:32:21 +0000 (11:32 +0200)]
js: reactivate timeout on connection

--
* A timeout of 5 seconds is activated for functions that do not require
  a pinentry. This definition is written to src/permittedOperations.js
* testapplication.js now alerts the proper error codes and messages.
* src/Errors.js fixed two typos in error handling

17 months agojs: change in Error behaviour
Maximilian Krambach [Wed, 25 Apr 2018 08:54:24 +0000 (10:54 +0200)]
js: change in Error behaviour

--

* Error objects will now return the error code if defined as error type
  in src/Errors.js, or do a console.log if it is a warning. Errors from
  the native gpgme-json will be marked as GNUPG_ERROR.

17 months agojs: allow openpgp-like Message objects as Data
Maximilian Krambach [Tue, 24 Apr 2018 17:47:48 +0000 (19:47 +0200)]
js: allow openpgp-like Message objects as Data

--

* src/gpgmejs.js: If a message offers a getText, consider it as the
  message's content

17 months agojs: Key object adjustments after discussion
Maximilian Krambach [Tue, 24 Apr 2018 17:29:32 +0000 (19:29 +0200)]
js: Key object adjustments after discussion

--

* src/aKey.js changed fingerprint to setter (to avoid overwrites)
* src/gpgmejs_openpgpjs.js
  - Added a class GPGME_Key_openpgpmode, which allows for renaming and
    deviation from GPGME.
  - renamed classes *_openPGPCompatibility to *_openpgpmode. They are
    not fully compatible, but only offer a subset of properties. Also,
    the name seems less clunky

17 months agojs: change in initialization ancd connection handling
Maximilian Krambach [Tue, 24 Apr 2018 16:44:30 +0000 (18:44 +0200)]
js: change in initialization ancd connection handling

--

* The Connection will now be started before an object is created, to
  better account for failures.
* index.js: now exposes an init(), which returns a Promise of
  configurable <GpgME | gpgmeGpgME_openPGPCompatibility> with an
  established connection.
* TODO: There is currently no way to recover from a "connection lost"
* Connection.js offers Connection.isConnected, which toggles on port
  closing.

17 months agojs: don't allow message operation changes
Maximilian Krambach [Mon, 23 Apr 2018 17:15:40 +0000 (19:15 +0200)]
js: don't allow message operation changes

--

Once an operation is changed, their set of allowed/required parameters
will change. So we shouldn't set/change the operation later.

17 months agojs: Key handling stubs, Error handling, refactoring
Maximilian Krambach [Mon, 23 Apr 2018 15:18:46 +0000 (17:18 +0200)]
js: Key handling stubs, Error handling, refactoring

--

* Error handling: introduced GPGMEJS_Error class that handles errors
  at a more centralized and consistent position
* src/Connection.js:
  The nativeMessaging port now opens per session instead of per
  message. Some methods were added that reflect this change
  - added methods disconnect() and reconnect()
  - added connection status query
* src/gpgmejs.js
  - stub for key deletion
  - error handling
  - high level API for changing connection status
* src/gpgmejs_openpgpjs.js
  - added stubs for Key/Keyring handling according to current
    state of discussion. It is still subject to change
* src/Helpers.js
  - toKeyIdArray creates an array of KeyIds, now accepting
    fingerprints, GPGMEJS_Key objects and openpgp Key objects.
* Key objects (src/Key.js) Querying information about a key
  directly from gnupg. Currently a stub, only the Key.fingerprint is
  functional.
* Keyring queries (src/Keyring.js): Listing and searching keys.
  Currently a stub.

17 months agojs: encrypt improvement and decrypt method
Maximilian Krambach [Wed, 18 Apr 2018 14:38:06 +0000 (16:38 +0200)]
js: encrypt improvement and decrypt method

* Compatibility class gpgme_openpgpjs offers an API that should accept
  openpgpjs syntax, throwing errors if a parameter is unexpected/not
  implemented
* tried to be more generic in methods
* waiting for multiple answers if 'more' is in the answer
* more consistency checking on sending and receiving
* updated the example extension
--

17 months agoMerge branch 'master' into javascript-binding
Maximilian Krambach [Fri, 20 Apr 2018 13:23:57 +0000 (15:23 +0200)]
Merge branch 'master' into javascript-binding

17 months agocore: Do not modify args for ignored failures
Andre Heinecke [Fri, 20 Apr 2018 12:30:53 +0000 (14:30 +0200)]
core: Do not modify args for ignored failures

* src/op-support.c (_gpgme_parse_failure): Ignore gpg-exit failures
before modifying args.

--
For op_decrypt_verify the status handler for both decrypt and
verify would parse the failure when the first parser ignored
the failure. This resulted in an ERR_INV_ENGINE as the first
call to parse_failure modified the args.

GnuPG-Bug-Id: T3919

17 months agoPost release updates
Werner Koch [Fri, 20 Apr 2018 08:41:38 +0000 (10:41 +0200)]
Post release updates

--

17 months agoRelease 1.11.1 gpgme-1.11.1
Werner Koch [Fri, 20 Apr 2018 08:22:12 +0000 (10:22 +0200)]
Release 1.11.1

* configure.ac: Bump LT version to C31/A20/R1.  For cpp to C13/A7/R0.
For qt to: C10/A3/R2.

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agocore: Remove another debug output leftover.
Werner Koch [Fri, 20 Apr 2018 08:32:37 +0000 (10:32 +0200)]
core: Remove another debug output leftover.

* src/decrypt.c (_gpgme_decrypt_status_handler): Remove log debug.

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agobuild: More release creation automation.
Werner Koch [Fri, 20 Apr 2018 08:13:25 +0000 (10:13 +0200)]
build: More release creation automation.

* Makefile.am: Add release and sign-release targets.

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agodoc: Suggest the use of strconcat for recipient strings.
Werner Koch [Fri, 20 Apr 2018 06:56:01 +0000 (08:56 +0200)]
doc: Suggest the use of strconcat for recipient strings.

--
GnuPG-bug-id: 3775

Signed-off-by: Werner Koch <wk@gnupg.org>
17 months agojson: Remove the -noinstall flag used during development.
Werner Koch [Thu, 19 Apr 2018 14:19:47 +0000 (16:19 +0200)]
json: Remove the -noinstall flag used during development.

* src/Makefile.am (gpgme-json_LDFLAGS): Remove.
--

Reported-by: Alon Bar-Lev <alon.barlev@gmail.com>
Signed-off-by: Werner Koch <wk@gnupg.org>
18 months agocpp: Add origin and last_update to UserID
Andre Heinecke [Thu, 19 Apr 2018 09:56:15 +0000 (11:56 +0200)]
cpp: Add origin and last_update to UserID

* NEWS: Mention it.
* lang/cpp/src/key.cpp, lang/cpp/src/key.h (UserID::lastUpdate),
(UserID::origin): New.
(gpgme_origin_to_pp_origin): New helper.

18 months agocpp: Add origin and last_update
Andre Heinecke [Thu, 19 Apr 2018 08:44:01 +0000 (10:44 +0200)]
cpp: Add origin and last_update

* NEWS: mention interface change.
* lang/cpp/src/key.cpp (Key::origin, Key::lastUpdate): New.
* lang/cpp/src/key.h (Key::Origin): New enum.

18 months agocore: Remove leftover debug output.
Werner Koch [Thu, 19 Apr 2018 08:34:32 +0000 (10:34 +0200)]
core: Remove leftover debug output.

* src/verify.c (_gpgme_verify_status_handler): Remove debug output.
--

Actually this is a real bug because it uses a debug function available
only in the new libgpg-error versions.  Time to call Jenkins back from
vacation; there are rumors that he has been seen in the city looking
for a new Ryzen tail coat.

Signed-off-by: Werner Koch <wk@gnupg.org>
18 months agotests: Fix t-verify test for GnuPG < 2.2.7.
Werner Koch [Thu, 19 Apr 2018 08:29:30 +0000 (10:29 +0200)]
tests: Fix t-verify test for GnuPG < 2.2.7.

* tests/gpg/t-verify.c (check_result): Tweak for gnupg < 2.2.7.
--

The not yet releases 2.2.7-beta may print a full fingerprint in the
ERRSIG status.  This is compliant with the dscription but the new
t-verify test case did not took in account that older GnuPG versions
print only a keyid.

Fixes-commit: b99502274ae5efdf6df0d967900ec3d1e64373d7
GnUPG-bug-id: 3920
Signed-off-by: Werner Koch <wk@gnupg.org>
18 months agoPost release updates
Werner Koch [Wed, 18 Apr 2018 18:27:14 +0000 (20:27 +0200)]
Post release updates

--