diff options
| author | Werner Koch <[email protected]> | 2001-08-01 13:37:41 +0000 | 
|---|---|---|
| committer | Werner Koch <[email protected]> | 2001-08-01 13:37:41 +0000 | 
| commit | a3675dd4af3964bae37eb85093df253c0a50e85f (patch) | |
| tree | 86c3414ca24a999f73031e1519e74ae3aab03576 /complus/tgpgcom.c | |
| parent | missing file (diff) | |
| download | gpgme-a3675dd4af3964bae37eb85093df253c0a50e85f.tar.gz gpgme-a3675dd4af3964bae37eb85093df253c0a50e85f.zip  | |
one more file
Diffstat (limited to '')
| -rw-r--r-- | complus/tgpgcom.c | 157 | 
1 files changed, 157 insertions, 0 deletions
diff --git a/complus/tgpgcom.c b/complus/tgpgcom.c new file mode 100644 index 00000000..27516b1d --- /dev/null +++ b/complus/tgpgcom.c @@ -0,0 +1,157 @@ +/* tgpgcom.c - Test the IGpgme classes + *	Copyright (C) 2001 g10 Code GmbH + * + * This file is part of GPGME. + * + * GPGME is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GPGME is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <assert.h> +#include <time.h> +#include <windows.h> + +#define INITGUID +#include "igpgme.h" + + +int  +main (int argc, char **argv) +{ +    IUnknown *pUnknown = NULL; +    IGpgme   *pGpgme; +    HRESULT hr; +    BSTR bs; +     +    hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);  +    if (hr) +        fprintf (stderr, "CoInitializeEx() failed: hr=%lu\n", hr); + +    fprintf (stderr, "system initialized\n"); +    hr = CoCreateInstance (&CLSID_Gpgme, NULL, CLSCTX_LOCAL_SERVER, +                           &IID_IUnknown, (void**)&pUnknown ); +    if (hr) +        fprintf (stderr, "CoCreateInstance() failed: hr=%lx\n", hr); +    if (!pUnknown) +        exit (1); + +    fprintf (stderr,"got object %p - querying %s\n", +             pUnknown, debugstr_guid(&IID_IGpgme)); +    hr = IGpgme_QueryInterface (pUnknown, &IID_IGpgme, (void**)&pGpgme); +    if (hr) { +        fprintf (stderr, "QueryInterface() failed: hr=%lx\n", hr); +        goto leave; +    } +    fprintf (stderr, "got interface %p\n", pGpgme); + +    hr = IGpgme_SetArmor (pGpgme, 1); +    fprintf (stderr, "SetArmor returned %lx\n", hr); + +    hr = IGpgme_SetTextmode (pGpgme, 0); +    fprintf (stderr, "SetTextmode returned %lx\n", hr); + +    hr = IGpgme_ClearRecipients (pGpgme); +    fprintf (stderr, "ClearRecipients returned %lx\n", hr); + +    bs = SysAllocString (L"alice"); +    if (!bs) +      fprintf (stderr, "SysAllocString failed: ec=%d\n", (int)GetLastError()); +    else { +      int i; +       +      for (i=-4; i < 12; i++ ) +        fprintf (stderr," %02X", ((unsigned char*)bs)[i] ); +      putc ('\n', stderr); +    } +    hr = IGpgme_AddRecipient (pGpgme, bs, -1); +    fprintf (stderr, "AddRecipients returned %lx\n", hr); +     +    { +      SAFEARRAY *sa; +      VARIANT v; +      char *p; +       +      sa = SafeArrayCreateVector (VT_UI1, 0, 20); +      if (!sa) { +        fprintf (stderr, "SafeArrayCreateVector failed\n"); +        goto leave; +      } + +      hr = SafeArrayAccessData (sa, (void**)&p); +      if (hr) { +        fprintf (stderr,"SafeArrayAccessData failed: hr=%lx\n", hr); +        goto leave; +      } + +      memcpy (p, "=> Omnis enim res <=", 20 ); +      SafeArrayUnaccessData (sa); + +      VariantInit (&v); +      v.vt = (VT_ARRAY|VT_UI1); +      v.u.parray = sa; +       +      hr = IGpgme_SetPlaintext (pGpgme, v ); +      fprintf (stderr, "SetPlaintext returned %lx\n", hr); +      SafeArrayDestroyData (sa); +      SafeArrayDestroy (sa); + +      VariantClear (&v); +    } + +    hr = IGpgme_Encrypt (pGpgme); +    fprintf (stderr, "Encrypt returned %lx\n", hr); + +    { +      VARIANT v; +     +      hr = IGpgme_GetCiphertext (pGpgme, &v); +      fprintf (stderr, "GetCiphertext returned %lx\n", hr); +      if (!hr) { +          if (v.vt != (VT_ARRAY|VT_UI1))  +              fprintf (stderr, "Invalid array typed returned\n"); +          else { +              unsigned char *p; +               +              hr = SafeArrayAccessData (v.u.parray, (void**)&p); +              if (hr)  +                  fprintf (stderr,"*** SafeArrayAccessData failed: %lx\n", hr); +              else { +                  size_t arraysize = v.u.parray->rgsabound[0].cElements; +                  fprintf (stderr,"*** got %d bytes\n", (int)arraysize); +                  for (;arraysize; arraysize--, p++ ) +                      putc (*p, stderr); +                  SafeArrayUnaccessData (v.u.parray); +              } +          } +      } +    } +    IGpgme_Release (pGpgme); + + leave: +    CoUninitialize (); +    fprintf (stderr, "system uninitialized\n"); +    return 0; +} +     + + + + +  | 
