| README.apichanges 2003-07-28 |
| |
| NOTE: THESE ARE API CHANGES DONE BEFORE THE FIRST STABLE RELEASE SO |
| THEY ARE NOT RELEVANT ANYMORE [stable is 1.2.4 right now] |
| |
| We decided to change a couple of annoying things in Libgcrypt and to |
| cleanup the API. The new API better fits into a multi-threaded |
| environment and is more consistent. One import change is that all |
| functions return error codes from a set of error codes shared between |
| GnuPG, GPGME and Libgcrypt. |
| |
| This file contains some hints on how to port your application from |
| libgcrypt <= 1.1.12 to the current API as of 1.1.42. We hope that |
| there won't be another need for such a major change. |
| |
| |
| * Types |
| |
| All types definitions changed to a foo_t scheme; for some time we |
| will support the old names but you better start to rename them: |
| |
| s/GCRY_MPI/gcry_mpi_t/ |
| s/GcryMPI/gcry_mpi_t/ |
| s/GCRY_SEXP/gcry_sexp_t/ |
| s/GcrySexp/gcry_sexp_t/ |
| s/GCRY_CIPHER_HD/gcry_cipher_hd_t/ |
| s/GcryCipherHd/gcry_cipher_hd_t/ |
| s/GCRY_MD_HD/gcry_md_hd_t/ |
| s/GcryMDHd/gcry_md_hd_t/ |
| |
| * Initialization |
| |
| For proper initialization of the library, you must call |
| gcry_check_version() before calling any other function except for |
| these gcry_control operations: |
| GCRYCTL_SUSPEND_SECMEM_WARN |
| GCRYCTL_DISABLE_INTERNAL_LOCKING |
| GCRYCTL_ANY_INITIALIZATION_P |
| GCRYCTL_INITIALIZATION_FINISHED_P |
| |
| |
| * Handles |
| |
| gcry_cipher_open and gcry_md_open do now return an error code |
| instead of a NULL handle; the handle is now returned by |
| asigning it to the first argument. Example on how to change your |
| code: |
| |
| Old: |
| |
| hd = gcry_md_open (algo, flags); |
| if (!hd) |
| { |
| fprintf (stderr, "md_open failed: %s\n", gcry_errno (-1)); |
| .... |
| |
| New: |
| |
| rc = gcry_md_open (&hd, algo, flags); |
| if (rc) |
| { |
| fprintf (stderr, "md_open failed: %s\n", gcry_strerror (rc)); |
| .... |
| |
| If you are not interested in the error code, you can do it in a |
| simplified way: |
| |
| gcry_md_open (&hd, algo, flags); |
| if (!hd) |
| abort (); |
| |
| i.e. the function makes sure that HD points to NULL in case of an error. |
| The required change for gcry_cipher_open is similar. |
| |
| * Message Digests |
| |
| The order of the arguments to gcry_md_copy has been changed in order |
| to be more consistent with other functions of this type. This means |
| that the new message digest handle will be a copy of the message |
| handle specified by the second argument and stored at the address |
| pointed to by the first argument. |
| |
| * Error codes |
| |
| gcry_errno () has been removed because it is hard to use in |
| multi-threaded environment. You need to save the error code |
| returned by the functions and use it either numerical or passing it |
| to gcry_strerror (since gcry_strerror is a wrapper function for |
| gpg_strerror, the latter function can also be used). |
| |
| Instead of using the error codes GCRYERR_*, you have to use the |
| GPG_ERR_* names. |
| |
| * S-expressions |
| |
| gcry_sexp_canon_len used to return a `historical' error code in |
| `errcode', this is not the case anymore; the value returned in |
| `errcode' is now a standard Libgcrypt (i.e. gpg-error) error code. |
| |
| * MPI |
| |
| gcry_mpi_scan and gcry_mpi_print need the size of a provided buffer |
| as input and return the number of bytes actually scanned/printed to |
| the user. The old API used a single size_t Pointer for both tasks, |
| the new API distinguishes between the input and the output values. |
| |
| * Public Key cryptography |
| |
| gcry_pk_decrypt used to return a `simple S-expression part' that |
| contains a single MPI value. In case the `data' S-expression |
| contains a `flags' element, the result S-expression is filled with a |
| complete S-expression of the following format: |
| |
| (value PLAINTEXT) |
| |