Change includes and definitions to enable building for Windows NT with MSVC
[pinentry-qt.git] / pinentry.h
1 /* pinentry.h - The interface for the PIN entry support library.
2    Copyright (C) 2002, 2003, 2010 g10 Code GmbH
3    
4    This file is part of PINENTRY.
5    
6    PINENTRY is free software; you can redistribute it and/or modify it
7    under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10  
11    PINENTRY is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    General Public License for more details.
15  
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>. 
18  */
19
20 #ifndef PINENTRY_H
21 #define PINENTRY_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #if 0 
26 }
27 #endif
28 #endif
29
30 #undef ENABLE_ENHANCED
31
32 typedef enum {
33   PINENTRY_COLOR_NONE, PINENTRY_COLOR_DEFAULT,
34   PINENTRY_COLOR_BLACK, PINENTRY_COLOR_RED,
35   PINENTRY_COLOR_GREEN, PINENTRY_COLOR_YELLOW,
36   PINENTRY_COLOR_BLUE, PINENTRY_COLOR_MAGENTA,
37   PINENTRY_COLOR_CYAN, PINENTRY_COLOR_WHITE
38 } pinentry_color_t;
39
40 struct pinentry
41 {
42   /* The window title, or NULL.  */
43   char *title;
44   /* The description to display, or NULL.  */
45   char *description;
46   /* The error message to display, or NULL.  */
47   char *error;
48   /* The prompt to display, or NULL.  */
49   char *prompt;
50   /* The OK button text to display, or NULL.  */
51   char *ok;
52   /* The Not-OK button text to display, or NULL.  */
53   char *notok;
54   /* The Cancel button text to display, or NULL.  */
55   char *cancel;
56   /* The buffer to store the secret into.  */
57   char *pin;
58   /* The length of the buffer.  */
59   int pin_len;
60
61   /* The name of the X display to use if X is available and supported.  */
62   char *display;
63   /* The name of the terminal node to open if X not available or supported.  */
64   char *ttyname;
65   /* The type of the terminal.  */
66   char *ttytype;
67   /* The LC_CTYPE value for the terminal.  */
68   char *lc_ctype;
69   /* The LC_MESSAGES value for the terminal.  */
70   char *lc_messages;
71
72   /* True if debug mode is requested.  */
73   int debug;
74
75 #ifdef ENABLE_ENHANCED
76   /* True if enhanced mode is requested.  */
77   int enhanced;
78 #endif
79
80   /* True if caller should grab the keyboard.  */
81   int grab;
82   /* The window ID of the parent window over which the pinentry window
83      should be displayed.  */
84   int parent_wid;
85
86   /* The name of an optional file which will be touched after a curses
87      entry has been displayed.  */
88   char *touch_file;
89
90   /* The user should set this to -1 if the user canceled the request,
91      and to the length of the PIN stored in pin otherwise.  */
92   int result;
93
94   /* The user should set this if the NOTOK button was pressed.  */
95   int canceled;
96
97   /* The user should set this to true if an error with the local
98      conversion occured. */
99   int locale_err;
100
101   /* The caller should set this to true if only one button is
102      required.  This is useful for notification dialogs where only a
103      dismiss button is required. */
104   int one_button;
105
106   /* If this is not NULL, a passphrase quality indicator is shown.
107      There will also be an inquiry back to the caller to get an
108      indication of the quality for the passphrase entered so far.  The
109      string is used as a label for the quality bar.  */
110   char *quality_bar;
111
112   /* The tooltip to be show for the qualitybar.  Malloced or NULL.  */
113   char *quality_bar_tt;
114
115   /* For the curses pinentry, the color of error messages.  */
116   pinentry_color_t color_fg;
117   int color_fg_bright;
118   pinentry_color_t color_bg;
119   pinentry_color_t color_so;
120   int color_so_bright;
121
122   /* Malloced and i18ned default strings or NULL.  These strings may
123      include an underscore character to indicate an accelerator key.
124      A double underscore represents a plain one.  */
125   char *default_ok;
126   char *default_cancel;
127   char *default_prompt;
128
129   /* For the quality indicator we need to do an inquiry.  Thus we need
130      to save the assuan ctx.  */
131   void *ctx_assuan;
132
133 };
134 typedef struct pinentry *pinentry_t;
135
136 \f
137 /* The pinentry command handler type processes the pinentry request
138    PIN.  If PIN->pin is zero, request a confirmation, otherwise a PIN
139    entry.  On confirmation, the function should return TRUE if
140    confirmed, and FALSE otherwise.  On PIN entry, the function should
141    return -1 if cancelled and the length of the secret otherwise.  */
142 typedef int (*pinentry_cmd_handler_t) (pinentry_t pin);
143
144 /* Start the pinentry event loop.  The program will start to process
145    Assuan commands until it is finished or an error occurs.  If an
146    error occurs, -1 is returned and errno indicates the type of an
147    error.  Otherwise, 0 is returned.  */
148 int pinentry_loop (void);
149
150 /* The same as above but allows to specify the i/o descriptors. */
151 int pinentry_loop2 (int infd, int outfd);
152
153 /* Allow changing the standard file handles.  */
154 void pinentry_set_std_fd (int no, int val);
155
156
157 /* Convert the UTF-8 encoded string TEXT to the encoding given in
158    LC_CTYPE.  Return NULL on error. */
159 char *pinentry_utf8_to_local (char *lc_ctype, char *text);
160
161 /* Convert TEXT which is encoded according to LC_CTYPE to UTF-8.  With
162    SECURE set to true, use secure memory for the returned buffer.
163    Return NULL on error. */
164 char *pinentry_local_to_utf8 (char *lc_ctype, char *text, int secure);
165
166
167 /* Run a quality inquiry for PASSPHRASE of LENGTH. */
168 int pinentry_inq_quality (pinentry_t pin, 
169                           const char *passphrase, size_t length);
170
171 /* Try to make room for at least LEN bytes for the pin in the pinentry
172    PIN.  Returns new buffer on success and 0 on failure.  */
173 char *pinentry_setbufferlen (pinentry_t pin, int len);
174
175 /* Initialize the secure memory subsystem, drop privileges and
176    return.  Must be called early.  */
177 void pinentry_init (const char *pgmname);
178
179 /* Return true if either DISPLAY is set or ARGV contains the string
180    "--display". */
181 int pinentry_have_display (int argc, char **argv);
182
183 /* Parse the command line options.  Returns 1 if user should print
184    version and exit.  Can exit the program if only help output is
185    requested.  */
186 int pinentry_parse_opts (int argc, char *argv[]);
187
188 \f
189 /* The caller must define this variable to process assuan commands.  */
190 extern pinentry_cmd_handler_t pinentry_cmd_handler;
191
192
193
194
195 \f
196 #ifdef HAVE_W32_SYSTEM
197 /* Windows declares sleep as obsolete, but provides a definition for
198    _sleep but non for the still existing sleep.  */
199 #define sleep(a) _sleep ((a))
200 /* On MSVC snprintf is not defined but _snprintf is */
201 #define snprintf _snprintf
202 /* case insensitive comparisons are both */
203 #define strncasecmp _strnicmp
204 /* strdup also got a prefix */
205 #define strdup _strdup
206 #endif /*HAVE_W32_SYSTEM*/
207
208 #ifdef HAVE_W32CE_SYSTEM
209 #define getpid() GetCurrentProcessId ()
210 /* without signals we need not abort */
211 #define abort(a) exit(1)
212 #endif /*HAVE_WIN32CE_SYSTEM*/
213
214 #if 0 
215 {
216 #endif
217 #ifdef __cplusplus
218 }
219 #endif
220
221 #endif  /* PINENTRY_H */