2004-04-29 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / doc / ChangeLog
1 2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
2
3         * gpgme.texi (Verify): Correct type of member wrong_key_usage.
4
5 2004-03-29  Moritz Schulte  <moritz@duesseldorf.ccc.de>
6
7         * gpgme.texi (Verify): Fix type of gpgme_op_verify_result.
8         * gpgme.texi (Key Listing Mode): Typo fix.
9
10 2004-03-23  Marcus Brinkmann  <marcus@g10code.de>
11
12         * gpgme.texi (Library Version Check): Fix the instruction when to
13         set the locale.
14
15 2004-03-03  Marcus Brinkmann  <marcus@g10code.de>
16
17         * gpgme.texi (I/O Callback Example Qt): New section by Marc Mutz.
18
19 2004-02-24  Marcus Brinkmann  <marcus@g10code.de>
20
21         * gpgme.texi (cancellation): New section.
22
23 2004-02-17  Werner Koch  <wk@gnupg.org>
24
25         * gpgme.texi (Key Listing Mode): Doc KEYLIST_MODE_VALIDATE.
26
27 2004-02-06  Moritz Schulte  <mo@g10code.com>
28
29         * gpgme.texi: A couple of small fixes regarding the Largfile
30         Support section.
31
32 2004-02-01  Marcus Brinkmann  <marcus@g10code.de>
33
34         * gpgme.texi (Largefile Support): New section.
35
36 2004-01-13  Marcus Brinkmann  <marcus@g10code.de>
37
38         * gpgme.texi (Key Management): Fix exportable field.
39
40 2003-12-25  Marcus Brinkmann  <marcus@g10code.de>
41
42         * gpgme.texi (Key Management): Rename member class in
43         gpgme_key_sig_t to sig_class.
44         (Creating a Signature): Likewise for gpgme_signature_t.
45
46 2003-12-23  Moritz Schulte  <mo@g10code.com>
47
48         * gpgme.texi (Listing Keys): Minor clarification for
49         gpgme_get_key.
50
51 2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
52
53         * gpgme.texi (Signal Handling): New section.
54
55 2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
56
57         * gpgme.texi (Multi Threading): Correct documentation on memory
58         synchronization requirement.
59
60         * gpgme.texi (Locale): New section.
61         (Multi Threading): Set locale in example.
62
63 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
64
65         * gpgme.texi (Error Strings): Add gpgme_strerror_r.
66
67 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
68
69         * gpgme.texi (Multi Threading): Update documentation.
70
71 2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
72
73         * gpgme.texi (Header): We don't use the assuan namespace anymore.
74         Document new thread options.
75
76 2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
77
78         * gpgme.texi (Creating a Signature): Change type of member class
79         to unsigned int.
80
81 2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
82
83         * gpgme.texi (Verify): Get error code from SIG->status in the code
84         for gpgme_get_sig_status.
85
86 2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
87
88         * gpgme.texi (Key Management): Add can_authenticate flag.
89
90         * gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
91         gpgme_get_key.
92
93 2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
94
95         * Makefile.am (EXTRA_DIST): Remove variable.
96
97         * gpgme.texi (Encrypting a Plaintext): Bad passphrase is only
98         possible with symmetric encryption, change the wording to reflect
99         that.
100
101         * gpgme.texi (Creating a Signature): Document
102         GPG_ERR_UNUSABLE_SECKEY.
103
104         * gpgme.texi (Encrypting a Plaintext): Mention encrypt and sign
105         operations in result function.
106         (Creating a Signature): Likewise.
107
108 2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
109
110         * gpgme.texi (Key Listing Mode): Remove word duplication.
111         (Listing Keys): Remove mentioning of force argument.
112         (Verify): Don't mention r_stat.  Fix some typos.
113         (Decrypt and Verify): Correct info how to get the result.  Don't
114         mention r_stat.
115         (Manipulating Data Buffers): Fix documentation of return value.
116         (Listing Keys): Update examples.
117         (Decrypt): Result might also be available when operation failed.
118         (Verify): Result might also be available when operation failed.
119         All spotted by St├ęphane Corth├ęsy.
120
121 2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
122
123         * gpgme.texi (Error Sources): Fix cut and paste error.
124
125 2003-07-09  Marcus Brinkmann  <marcus@g10code.de>
126
127         * gpgme.texi (Key Management): Clarify difference between can_sign
128         and can_certify.
129         (Information About Keys): Likewise for GPGME_ATTR_CAN_SIGN and
130         GPGME_ATTR_CAN_CERTIFY.
131
132 2003-07-08  Marcus Brinkmann  <marcus@g10code.de>
133
134         * gpgme.texi (Progress Meter Callback): Change return type of
135         gpgme_progress_cb_t to void.
136
137 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
138
139         * gpgme.texi: Add 2003 to copyright notice.
140
141         * gpgme.texi (Header): Fix name space documentation on
142         libgpg-error.
143
144 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
145
146         * gpgme.texi (Multi Threading): Remove reference to
147         gpgme_recipients_t.
148
149 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
150
151         * gpgme.texi (Crypto Operations): Rename gpgme_invalid_user_id_t
152         to gpgme_invalid_key_t.
153
154 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
155
156         * gpgme.texi: Change error codes to GPG_ERR_* variants.
157         (Error Handling): Rewritten.
158
159 2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
160
161         * gpgme.texi (Exporting Keys): Change and document prototypes.
162         Add new gpgme_op_export_ext and gpgme_op_export_ext_start
163         variants.
164         (Selecting Recipients): Section removed.
165         (Encrypting a Plaintext): Change prototypes and document the
166         changes.
167
168 2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
169
170         * gpgme.texi (Exporting Keys): Change argument type from
171         gpgme_recipient_t to gpgme_user_id_t.
172         (Encrypting a Plaintext): Likewise.
173         (Selecting Recipients): Rewritten.
174
175 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
176
177         * gpgme.texi (Protocol Selection): Do not use @acronym in @node
178         because that breaks texi2dvi.
179
180         * gpgme.texi (Passphrase Callback): Document new prototype.
181
182 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
183
184         * gpgme.texi (Header): Remove Gpgme as namespace prefix.  Add
185         _GPGME to namespace prefix.
186         * gpgme.texi (Multi Threading): Add note about link order.
187
188 2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
189
190         * gpgme.texi (Listing Keys): Document what happens if key is not
191         found.
192
193         * gpgme.texi (Importing Keys): Fix cut and paste error.
194
195 2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
196
197         * gpgme.texi (Encrypting a Plaintext): Remove reference to
198         gpgme_get_op_info.
199         (Detailed Results): Subsection removed.
200
201         * gpgme.texi (Key Listing Mode): Add GPGME_KEYLIST_MODE_SIGS.
202         (Manipulating Keys): Add obsoleteness note.
203         (Key Signatures): Likewise.
204         (Information About Keys): Likewise.
205         (Key Management): Add new data types GpgmeSubkey, GpgmeKeySig,
206         GpgmeUserID, and all the information about GpgmeKey.
207
208 2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
209
210         * gpgme.texi (Listing Keys): Remove force_update argument from
211         gpgme_get_key.
212
213         * gpgme.texi (Trust Item Management): Add data members of
214         GpgmeTrustItem type.
215         (Information About Trust Items): Add note about obsoleteness.
216         (Manipulating Trust Items): Add gpgme_trust_item_ref and
217         gpgme_trust_item_unref.
218
219 2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
220
221         * gpgme.texi (Verify): Rewritten to take into account new and
222         deprecated functions and data types.
223
224         * gpgme.texi (Decrypt): Descript gpgme_op_decrypt_result and
225         GpgmeDecryptResult.
226
227 2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
228
229         * gpgme.texi (Encrypting a Plaintext): Add info about
230         GpgmeEncryptResult and gpgme_op_encrypt_result.
231
232         * gpgme.texi (Creating a Signature): Add info about
233         GpgmeNewSignature, GpgmeSignResult and gpgme_op_sign_result.
234         (Crypto Operations): Add GpgmeInvalidUserID.
235         (Algorithms): New chapter.
236
237         * gpgme.texi (Deleting Keys): Document
238         GPGME_Ambiguous_Specification.
239         (Error Values): Remove GPGME_Invalid_Type and GPGME_Invalid_Mode.
240         Add GPGME_Unknown_Reason, GPGME_Not_Found,
241         GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
242         GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
243         GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
244         GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
245         GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
246         GPGME_Bad_Signature, GPGME_No_Public_Key.
247
248 2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
249
250         * gpgme.texi (Importing Keys): Change GPGME_IMPORT_PRIVATE to
251         GPGME_IMPORT_SECRET.
252
253         * gpgme.texi (Importing Keys): Remove note about gpgme_get_op_info.
254         (Detailed Results): Remove note about import.
255
256         * gpgme.texi (Importing Keys): Add documentation for
257         GpgmeImportStatus, GpgmeImportResult and gpgme_op_import_result.
258
259         * gpgme.texi (Generating Keys): Fix documentation of public and
260         secret arguments.
261
262 2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
263
264         * gpgme.texi (Generating Keys): Document changed gpgme_op_genkey
265         and new gpgme_op_genkey_result function.  Document
266         GpgmeGenKeyResult data type.
267
268         * gpgme.texi (Error Values): Rename GPGME_No_Passphrase to
269         GPGME_Bad_Passphrase.
270         * gpgme.texi (Decrypt): Likewise.
271         (Decrypt and Verify): Likewise.
272         (Creating a Signature): Likewise.
273         (Encrypting a Plaintext): Likewise.
274
275         * gpgme.texi (Error Values): Rename GPGME_No_Recipients to
276         GPGME_No_UserID and GPGME_Invalid_Recipient to
277         GPGME_Invalid_UserID.
278         (Encrypting a Plaintext): Likewise.
279
280         * gpgme.texi (Error Values): Remove GPGME_Busy and GPGME_No_Request.
281         (Listing Keys): Likewise.
282         (Listing Trust Items): Likewise.
283
284 2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
285
286         * gpgme.texi (Cancelling an Operation): Removed.
287         (Passphrase Callback): Document new type for GpgmePassphraseCb.
288
289 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
290
291         * gpgme.texi (Engine Information): Rename member part to
292         file_name.
293
294         * gpgme.texi (Protocols and Engines): Document
295         gpgme_get_protocol_name.
296
297         * gpgme.texi (Engine Information): Rewritten.
298
299 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
300
301         * gpgme.texi (I/O Callback Interface): Document new even
302         GPGME_EVENT_START.
303         (Waiting For Completion): Document new possible return values.
304         (I/O Callback Interface): Document return type of GpgmeIOCb.
305
306 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
307
308         * gpgme.texi (Hooking Up Into Idle Time): Section removed.
309
310 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
311
312         * gpgme.texi (Verify): Drop R_STAT argument in gpgme_op_verify.
313         * gpgme.texi (Decrypt and Verify): Likewise for
314         gpgme_op_decrypt_verify.
315
316 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
317
318         * gpgme.texi (Information About Keys): Document that
319         GPGME_ATTR_IS_SECRET is not representable as a string anymore.
320
321 2002-12-22  Marcus Brinkmann  <marcus@g10code.de>
322
323         * gpgme.texi (Key Signatures): New section.
324         (Listing Keys): Add gpgme_get_key.
325
326 2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
327
328         * gpgme.texi (Memory Based Data Buffers): New subsection.
329         (File Based Data Buffers): Likewise.
330         (Callback Based Data Buffers): Likewise.
331         (Manipulating Data Buffers): Update interfaces.  Add
332         gpgme_data_seek.
333         * gpgme.texi (Engine Version Check): Remove gpgme_check_engine.
334         
335 2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
336
337         * gpgme.texi (Verify): Document the new interface.
338
339 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
340
341         * gpgme.texi (Generating Keys): Document new argument to
342         gpgme_op_genkey.
343
344 2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
345
346         * gpgme.texi (Verify): Fix prototype of gpgme_get_sig_key.
347         Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
348
349 2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
350
351         * gpgme.texi (Selecting Signers): Fix reference count.
352
353 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
354
355         * gpgme.texi (Header): Document name space.
356
357 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
358
359         * gpgme.texi (Importing Keys): Document gpgme_op_import_ext.
360
361         * gpgme.texi (Importing Keys): Undocument EOF.
362
363 2002-08-14  Werner Koch  <wk@gnupg.org>
364
365         * gpgme.texi (Information About Keys): Changed GPGME_ATTR_TYPE.
366
367 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
368
369         * gpgme.texi (Deleting Keys): Say that secret keys might not be
370         deleted.
371
372 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
373
374         * gpgme.texi (Information About Keys): Document (badly) the new
375         key attributes.
376
377         * gpgme.texi (Manipulating Data Buffers): Mention that backend
378         tries to detect encoding automatically.
379
380 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
381
382         * gpgme.texi (Run Control): Update this section.
383         (Waiting For Completion): Likewise for this subsection.
384         (Cancelling an Operation): Likewise for this subsection.
385         (Using External Event Loops): New subsection with several
386         subsubsections.
387
388 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
389
390         * gpgme.texi (Multi Threading): Remove item about the need to
391         synchronize anything against gpgme_wait (except gpgme_wait
392         itself).
393
394 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
395
396         * gpgme.texi (Information About Keys): Fix documentation for IDX.
397         (Information About Trust Items): Likewise.
398
399 2002-06-26  Werner Koch  <wk@gnupg.org>
400
401         * gpgme.texi (Importing Keys): Document the return value -1 of
402         gpgme_op_import.
403
404 2002-06-20  Werner Koch  <wk@gnupg.org>
405
406         * gpgme.texi (Verify): Explain the new whatidx variable.
407
408 2002-06-10  Werner Koch  <wk@gnupg.org>
409
410         * gpgme.texi (Verify): Document attribute GPGME_ATTR_ERRTOK.
411
412 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
413
414         * gpgme.texi (Multi Threading): Document new autodetection.
415
416 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
417
418         * Makefile.am (DISTCLEANFILES): New variable.
419
420 2002-05-26  Marcus Brinkmann  <marcus@g10code.de>
421
422         * gpgme.texi: Some typographical correctons throughout.
423
424 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
425
426         * gpgme.texi (Using Automake): New section.
427
428 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
429
430         * gpgme.texi (Multi Threading): Escape { and }.
431
432 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
433
434         * gpgme.texi (Overview): Replace note about thread-safeness.
435         (Multi Threading): New section.
436
437 2002-05-03  Werner Koch  <wk@gnupg.org>
438
439         * gpgme.texi (Manipulating Data Buffers): Changed some data types
440         to void*.
441         (Protocol Selection): Added gpgme_get_protocol.
442         (Verify): Updated to include the new attribute fucntions and
443         status codes.
444
445 2002-04-27  Werner Koch  <wk@gnupg.org>
446
447         * gpgme.texi (Manipulating Data Buffers): New type GpgmeDataEncoding.
448
449 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
450
451         * gpgme.texi (Passphrase Callback): Document that either return
452         argument can be NULL.
453         (Progress Meter Callback): Likewise.
454
455 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
456
457         * gpgme.texi (Passphrase Callback): Fix small typo.  Document the
458         new function gpgme_get_passphrase_cb.
459         (Progress Meter Callback): Document the new function
460         gpgme_get_progress_cb.
461
462 2002-04-16  Marcus Brinkmann  <marcus@g10code.de>
463
464         * gpgme.texi (Creating a Signature): Fix function name.  Reported
465         by Wichert Ackerman <wichert@debian.org>.
466
467 2002-03-29  Marcus Brinkmann  <marcus@g10code.de>
468
469         * gpgme.texi (direntry): End index entry with a full stop.
470         Patch submitted by Jose Carlos Garcia Sogo <jsogo@debian.org>.
471         
472 2002-03-17  Marcus Brinkmann  <marcus@g10code.de>
473
474         * gpgme.texi (Detailed Results): Fix syntax error in last change.
475
476 2002-03-08  Werner Koch  <wk@gnupg.org>
477
478         * gpgme.texi (Detailed Results): Import does also return info.
479
480 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
481
482         * gpgme.texi (Encrypting a Plaintext): Document symmetric
483         encryption.
484
485 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
486
487         * gpgme.texi (Error Strings): Add example.
488         * gpgme.texi (Listing Keys): Likewise.
489
490 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
491
492         * gpgme.texi (Information About Keys): Document GPGME_ATTR_EXPIRE.
493
494 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
495
496         * gpgme.texi (Verify): Document verification of normal and
497         cleartext signatures.
498
499 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
500
501         * gpgme.texi (Listing Keys): Document gpgme_op_keylist_ext_start.
502
503 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
504
505         * gpgme.texi (Encrypting a Plaintext): Document
506         GPGME_Invalid_Recipients.
507         (Error Values): Likewise.
508
509 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
510
511         * gpgme.texi (Encrypting a Plaintext): Document
512         gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start.
513
514 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
515
516         * gpgme.texi (Creating a Signature): Add a note about
517         certificates to include.
518         (Included Certificates): New section.
519
520 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
521
522         * gpgme.texi (Detailed Results): Remove literal tags.
523         (Generating Keys): Update documentation.
524
525         * gpgme.texi (Generating Keys): Fix syntax error.
526
527 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
528
529         * gpgme.texi (Waiting For Completion): Adjust doc to changes in
530         the code.
531
532 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
533
534         * gpgme.texi (Key Listing Mode): Update documentation.
535
536 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
537
538         * gpgme.texi (Generating Keys): Document error at creation
539         failure.
540
541 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
542
543         * gpgme.texi (Deleting Keys): Document new error values.
544
545 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
546
547         * gpgme.texi (Importing Keys): Add reference to gpgme_get_op_info.
548
549 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
550
551         * gpgme.texi: Some spell checking.
552
553 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
554
555         * gpgme.texi: Add all the gpgme_op_*_start functions.
556         Fill the concept index with many, many entries.
557
558 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
559
560         * gpgme.texi (Run Control): New section.
561         (Verify): Docuent gpgme_get_notation.
562         (More Information): New section describing gpgme_get_op_info.
563
564 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
565
566         * gpgme.texi (Passphrase callback): Change GpgmePassphraseCb's
567         R_HD type from void* to void**.
568
569 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
570
571         * gpgme.texi (Creating data buffers): Change
572         gpgme_data_new_from_filepart's LENGTH type from off_t to size_t.
573
574 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
575
576         * gpgme.texi (Generating keys): New subsection.
577         (Exporting keys): Likewise.
578         (Importing keys): Likewise.
579         (Deleting keys): Likewise.
580
581 2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
582
583         * gpgme.texi: g10Code -> g10 Code
584
585         * gpgme.texi (Top): Complete detailmenu.
586         
587         * gpgme.texi: Convert embarassing cruft to the real thing.
588
589 2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
590
591         * ChangeLog: New file.
592         * gpgme.texi: Likewise.
593         * gpl.texi: Likewise.
594         * fdl.texi: Likewise.
595         * Makefile.am (info_TEXINFOS): New variable.
596         (gpgme_TEXINFOS): Likewise.
597
598  Copyright 2002, 2003, 2004 g10 Code GmbH
599
600  This file is free software; as a special exception the author gives
601  unlimited permission to copy and/or distribute it, with or without
602  modifications, as long as this notice is preserved.
603
604  This file is distributed in the hope that it will be useful, but
605  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
606  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.