Remove pth dependency
[platform/upstream/gpg2.git] / sm / sign.c
1 /* sign.c - Sign a message
2  * Copyright (C) 2001, 2002, 2003, 2008,
3  *               2010 Free Software Foundation, Inc.
4  * Copyright (C) 2003-2012, 2016-2017, 2019,
5  *               2020, 2022-2023 g10 Code GmbH
6  *
7  * This file is part of GnuPG.
8  *
9  * GnuPG is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * GnuPG is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, see <https://www.gnu.org/licenses/>.
21  * SPDX-License-Identifier: GPL-3.0-or-later
22  */
23
24 #include <config.h>
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include <errno.h>
29 #include <unistd.h>
30 #include <time.h>
31
32 #include "gpgsm.h"
33 #include <gcrypt.h>
34 #include <ksba.h>
35
36 #include "keydb.h"
37 #include "../common/i18n.h"
38 #include "../common/tlv.h"
39
40
41 /* Hash the data and return if something was hashed.  Return -1 on error.  */
42 static int
43 hash_data (int fd, gcry_md_hd_t md)
44 {
45   estream_t fp;
46   char buffer[4096];
47   int nread;
48   int rc = 0;
49
50   fp = es_fdopen_nc (fd, "rb");
51   if (!fp)
52     {
53       log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
54       return -1;
55     }
56
57   do
58     {
59       nread = es_fread (buffer, 1, DIM(buffer), fp);
60       gcry_md_write (md, buffer, nread);
61     }
62   while (nread);
63   if (es_ferror (fp))
64     {
65       log_error ("read error on fd %d: %s\n", fd, strerror (errno));
66       rc = -1;
67     }
68   es_fclose (fp);
69   return rc;
70 }
71
72
73 static int
74 hash_and_copy_data (int fd, gcry_md_hd_t md, ksba_writer_t writer)
75 {
76   gpg_error_t err;
77   estream_t fp;
78   char buffer[4096];
79   int nread;
80   int rc = 0;
81   int any = 0;
82
83   fp = es_fdopen_nc (fd, "rb");
84   if (!fp)
85     {
86       gpg_error_t tmperr = gpg_error_from_syserror ();
87       log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
88       return tmperr;
89     }
90
91   do
92     {
93       nread = es_fread (buffer, 1, DIM(buffer), fp);
94       if (nread)
95         {
96           any = 1;
97           gcry_md_write (md, buffer, nread);
98           err = ksba_writer_write_octet_string (writer, buffer, nread, 0);
99           if (err)
100             {
101               log_error ("write failed: %s\n", gpg_strerror (err));
102               rc = err;
103             }
104         }
105     }
106   while (nread && !rc);
107   if (es_ferror (fp))
108     {
109       rc = gpg_error_from_syserror ();
110       log_error ("read error on fd %d: %s\n", fd, strerror (errno));
111     }
112   es_fclose (fp);
113   if (!any)
114     {
115       /* We can't allow signing an empty message because it does not
116          make much sense and more seriously, ksba_cms_build has
117          already written the tag for data and now expects an octet
118          string and an octet string of size 0 is illegal.  */
119       log_error ("cannot sign an empty message\n");
120       rc = gpg_error (GPG_ERR_NO_DATA);
121     }
122   if (!rc)
123     {
124       err = ksba_writer_write_octet_string (writer, NULL, 0, 1);
125       if (err)
126         {
127           log_error ("write failed: %s\n", gpg_strerror (err));
128           rc = err;
129         }
130     }
131
132   return rc;
133 }
134
135
136 /* Get the default certificate which is defined as the first
137    certificate capable of signing returned by the keyDB and has a
138    secret key available. */
139 int
140 gpgsm_get_default_cert (ctrl_t ctrl, ksba_cert_t *r_cert)
141 {
142   KEYDB_HANDLE hd;
143   ksba_cert_t cert = NULL;
144   int rc;
145   char *p;
146
147   hd = keydb_new (ctrl);
148   if (!hd)
149     return gpg_error (GPG_ERR_GENERAL);
150   rc = keydb_search_first (ctrl, hd);
151   if (rc)
152     {
153       keydb_release (hd);
154       return rc;
155     }
156
157   do
158     {
159       rc = keydb_get_cert (hd, &cert);
160       if (rc)
161         {
162           log_error ("keydb_get_cert failed: %s\n", gpg_strerror (rc));
163           keydb_release (hd);
164           return rc;
165         }
166
167       if (!gpgsm_cert_use_sign_p (cert, 1))
168         {
169           p = gpgsm_get_keygrip_hexstring (cert);
170           if (p)
171             {
172               if (!gpgsm_agent_havekey (ctrl, p))
173                 {
174                   xfree (p);
175                   keydb_release (hd);
176                   *r_cert = cert;
177                   return 0; /* got it */
178                 }
179               xfree (p);
180             }
181         }
182
183       ksba_cert_release (cert);
184       cert = NULL;
185     }
186   while (!(rc = keydb_search_next (ctrl, hd)));
187   if (rc && rc != -1)
188     log_error ("keydb_search_next failed: %s\n", gpg_strerror (rc));
189
190   ksba_cert_release (cert);
191   keydb_release (hd);
192   return rc;
193 }
194
195
196 static ksba_cert_t
197 get_default_signer (ctrl_t ctrl)
198 {
199   KEYDB_SEARCH_DESC desc;
200   ksba_cert_t cert = NULL;
201   KEYDB_HANDLE kh = NULL;
202   int rc;
203
204   if (!opt.local_user)
205     {
206       rc = gpgsm_get_default_cert (ctrl, &cert);
207       if (rc)
208         {
209           if (rc != -1)
210             log_debug ("failed to find default certificate: %s\n",
211                        gpg_strerror (rc));
212           return NULL;
213         }
214       return cert;
215     }
216
217   rc = classify_user_id (opt.local_user, &desc, 0);
218   if (rc)
219     {
220       log_error ("failed to find default signer: %s\n", gpg_strerror (rc));
221       return NULL;
222     }
223
224   kh = keydb_new (ctrl);
225   if (!kh)
226     return NULL;
227
228   rc = keydb_search (ctrl, kh, &desc, 1);
229   if (rc)
230     {
231       log_debug ("failed to find default certificate: rc=%d\n", rc);
232     }
233   else
234     {
235       rc = keydb_get_cert (kh, &cert);
236       if (rc)
237         {
238           log_debug ("failed to get cert: rc=%d\n", rc);
239         }
240     }
241
242   keydb_release (kh);
243   return cert;
244 }
245
246 /* Depending on the options in CTRL add the certificate CERT as well as
247    other certificate up in the chain to the Root-CA to the CMS
248    object. */
249 static int
250 add_certificate_list (ctrl_t ctrl, ksba_cms_t cms, ksba_cert_t cert)
251 {
252   gpg_error_t err;
253   int rc = 0;
254   ksba_cert_t next = NULL;
255   int n;
256   int not_root = 0;
257
258   ksba_cert_ref (cert);
259
260   n = ctrl->include_certs;
261   if (n == -2)
262     {
263       not_root = 1;
264       n = -1;
265     }
266   if (n < 0 || n > 50)
267     n = 50; /* We better apply an upper bound */
268
269   /* First add my own certificate unless we don't want any certificate
270      included at all. */
271   if (n)
272     {
273       if (not_root && gpgsm_is_root_cert (cert))
274         err = 0;
275       else
276         err = ksba_cms_add_cert (cms, cert);
277       if (err)
278         goto ksba_failure;
279       if (n>0)
280         n--;
281     }
282   /* Walk the chain to include all other certificates.  Note that a -1
283      used for N makes sure that there is no limit and all certs get
284      included. */
285   while ( n-- && !(rc = gpgsm_walk_cert_chain (ctrl, cert, &next)) )
286     {
287       if (not_root && gpgsm_is_root_cert (next))
288         err = 0;
289       else
290         err = ksba_cms_add_cert (cms, next);
291       ksba_cert_release (cert);
292       cert = next; next = NULL;
293       if (err)
294         goto ksba_failure;
295     }
296   ksba_cert_release (cert);
297
298   return gpg_err_code (rc) == GPG_ERR_NOT_FOUND? 0 : rc;
299
300  ksba_failure:
301   ksba_cert_release (cert);
302   log_error ("ksba_cms_add_cert failed: %s\n", gpg_strerror (err));
303   return err;
304 }
305
306
307 static gpg_error_t
308 add_signed_attribute (ksba_cms_t cms, const char *attrstr)
309 {
310   gpg_error_t err;
311   char **fields = NULL;
312   const char *s;
313   int i;
314   unsigned char *der = NULL;
315   size_t derlen;
316
317   fields = strtokenize (attrstr, ":");
318   if (!fields)
319     {
320       err = gpg_error_from_syserror ();
321       log_error ("strtokenize failed: %s\n", gpg_strerror (err));
322       goto leave;
323     }
324
325   for (i=0; fields[i]; i++)
326     ;
327   if (i != 3)
328     {
329       err = gpg_error (GPG_ERR_SYNTAX);
330       log_error ("invalid attribute specification '%s': %s\n",
331                  attrstr, i < 3 ? "not enough fields":"too many fields");
332       goto leave;
333     }
334   if (!ascii_strcasecmp (fields[1], "u"))
335     {
336       err = 0;
337       goto leave; /* Skip unsigned attributes.  */
338     }
339   if (ascii_strcasecmp (fields[1], "s"))
340     {
341       err = gpg_error (GPG_ERR_SYNTAX);
342       log_error ("invalid attribute specification '%s': %s\n",
343                  attrstr, "type is not 's' or 'u'");
344       goto leave;
345     }
346   /* Check that the OID is valid.  */
347   err = ksba_oid_from_str (fields[0], &der, &derlen);
348   if (err)
349     {
350       log_error ("invalid attribute specification '%s': %s\n",
351                  attrstr, gpg_strerror (err));
352       goto leave;
353     }
354   xfree (der);
355   der = NULL;
356
357   if (strchr (fields[2], '/'))
358     {
359       /* FIXME: read from file. */
360     }
361   else /* Directly given in hex.  */
362     {
363       for (i=0, s = fields[2]; hexdigitp (s); s++, i++)
364         ;
365       if (*s || !i || (i&1))
366         {
367           log_error ("invalid attribute specification '%s': %s\n",
368                      attrstr, "invalid hex encoding of the data");
369           err = gpg_error (GPG_ERR_SYNTAX);
370           goto leave;
371         }
372       der = xtrystrdup (fields[2]);
373       if (!der)
374         {
375           err = gpg_error_from_syserror ();
376           log_error ("malloc failed: %s\n", gpg_strerror (err));
377           goto leave;
378         }
379       for (s=fields[2], derlen=0; s[0] && s[1]; s += 2)
380         der[derlen++] = xtoi_2 (s);
381     }
382
383   /* Store the data in the CMS object for all signers.  */
384 #if 0
385   err = ksba_cms_add_attribute (cms, -1, fields[0], 0, der, derlen);
386 #else
387   (void)cms;
388   err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
389 #endif
390   if (err)
391     {
392       log_error ("invalid attribute specification '%s': %s\n",
393                  attrstr, gpg_strerror (err));
394       goto leave;
395     }
396
397  leave:
398   xfree (der);
399   xfree (fields);
400   return err;
401 }
402
403
404 \f
405 /* This function takes a binary detached signature in (BLOB,BLOBLEN)
406  * and writes it to OUT_FP.  The core of the function is to replace
407  * NDEF length sequences in the input to those with fixed inputs.
408  * This helps certain other implementations to properly verify
409  * detached signature.  Moreover, it allows our own trailing zero
410  * stripping code - which we need for PDF signatures - to work
411  * correctly.
412  *
413  * Example start of a detached signature as created by us:
414  *   0 NDEF: SEQUENCE {      -- 1st sequence
415  *   2    9:   OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
416  *  13 NDEF:   [0] {         -- 2nd sequence
417  *  15 NDEF:     SEQUENCE {  -- 3rd sequence
418  *  17    1:       INTEGER 1 -- version
419  *  20   15:       SET {     -- set of algorithms
420  *  22   13:         SEQUENCE {
421  *  24    9:           OBJECT IDENTIFIER sha-256 (2 16 840 1 101 3 4 2 1)
422  *  35    0:           NULL
423  *         :           }
424  *         :         }
425  *  37 NDEF:       SEQUENCE { -- 4th pretty short sequence
426  *  39    9:         OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
427  *         :         }
428  *  52  869:       [0] {
429  * Our goal is to replace the NDEF by fixed length tags.
430  */
431 static gpg_error_t
432 write_detached_signature (ctrl_t ctrl, const void *blob, size_t bloblen,
433                           estream_t out_fp)
434 {
435   gpg_error_t err;
436   const unsigned char *p;
437   size_t n, objlen, hdrlen;
438   int class, tag, cons, ndef;
439   const unsigned char *p_ctoid, *p_version, *p_algoset, *p_dataoid;
440   size_t               n_ctoid,  n_version,  n_algoset,  n_dataoid;
441   const unsigned char *p_certset, *p_signerinfos;
442   size_t               n_certset,  n_signerinfos;
443   int i;
444   ksba_der_t dbld;
445   unsigned char *finalder = NULL;
446   size_t finalderlen;
447
448   (void)ctrl;
449
450   p = blob;
451   n = bloblen;
452   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
453     return err;
454   if (!(class == CLASS_UNIVERSAL && tag == TAG_SEQUENCE && cons))
455     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No 1st sequence.  */
456
457   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
458     return err;
459   if (!(class == CLASS_UNIVERSAL && tag == TAG_OBJECT_ID && !cons))
460     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No signedData OID.  */
461   if (objlen > n)
462     return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
463   p_ctoid = p;
464   n_ctoid = objlen;
465   p += objlen;
466   n -= objlen;
467
468   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
469     return err;
470   if (!(class == CLASS_CONTEXT && tag == 0 && cons))
471     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No 2nd sequence.  */
472
473   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
474     return err;
475   if (!(class == CLASS_UNIVERSAL && tag == TAG_SEQUENCE && cons))
476     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No 3rd sequence.  */
477
478   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
479     return err;
480   if (!(class == CLASS_UNIVERSAL && tag == TAG_INTEGER))
481     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No version.  */
482   if (objlen > n)
483     return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
484   p_version = p;
485   n_version = objlen;
486   p += objlen;
487   n -= objlen;
488
489   p_algoset = p;
490   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
491     return err;
492   if (!(class == CLASS_UNIVERSAL && tag == TAG_SET && cons && !ndef))
493     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No set of algorithms.  */
494   if (objlen > n)
495     return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
496   n_algoset = hdrlen + objlen;
497   p += objlen;
498   n -= objlen;
499
500   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
501     return err;
502   if (!(class == CLASS_UNIVERSAL && tag == TAG_SEQUENCE && cons))
503     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No 4th sequence.  */
504
505   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
506     return err;
507   if (!(class == CLASS_UNIVERSAL && tag == TAG_OBJECT_ID && !cons))
508     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No data OID.  */
509   if (objlen > n)
510     return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
511   p_dataoid = p;
512   n_dataoid = objlen;
513   p += objlen;
514   n -= objlen;
515
516   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
517     return err;
518   if (!(class == CLASS_UNIVERSAL && tag == TAG_NONE && !cons && !objlen))
519     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No End tag.  */
520
521   /* certificates [0] IMPLICIT CertificateSet OPTIONAL,
522    * Note: We ignore the following
523    *       crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
524    * because gpgsm does not create them.   */
525   if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,&objlen,&hdrlen)))
526     return err;
527   if (class == CLASS_CONTEXT && tag == 0 && cons)
528     {
529       if (objlen > n)
530         return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
531       p_certset = p;
532       n_certset = objlen;
533       p += objlen;
534       n -= objlen;
535       if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,
536                                  &objlen,&hdrlen)))
537         return err;
538     }
539   else
540     {
541       p_certset = NULL;
542       n_certset = 0;
543     }
544
545   /*  SignerInfos ::= SET OF SignerInfo  */
546   if (!(class == CLASS_UNIVERSAL && tag == TAG_SET && cons && !ndef))
547     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No set of signerInfos.  */
548   if (objlen > n)
549     return gpg_error (GPG_ERR_BAD_BER);     /* Object larger than data. */
550   p_signerinfos = p;
551   n_signerinfos = objlen;
552   p += objlen;
553   n -= objlen;
554
555   /* For the fun of it check the 3 end tags.  */
556   for (i=0; i < 3; i++)
557     {
558       if ((err=parse_ber_header (&p,&n,&class,&tag,&cons,&ndef,
559                                  &objlen,&hdrlen)))
560         return err;
561       if (!(class == CLASS_UNIVERSAL && tag == TAG_NONE && !cons && !objlen))
562         return gpg_error (GPG_ERR_INV_CMS_OBJ); /* No End tag.  */
563     }
564   if (n)
565     return gpg_error (GPG_ERR_INV_CMS_OBJ); /* Garbage */
566
567   /*---- From here on we jump to leave on error.  ----*/
568
569   /* Now create a new object from the collected data.  */
570   dbld = ksba_der_builder_new (16);  /* (pre-allocate 16 items)  */
571   if (!dbld)
572     {
573       err = gpg_error_from_syserror ();
574       goto leave;
575     }
576   ksba_der_add_tag (dbld, 0, KSBA_TYPE_SEQUENCE);
577   ksba_der_add_val ( dbld, 0, KSBA_TYPE_OBJECT_ID, p_ctoid, n_ctoid);
578   ksba_der_add_tag ( dbld, KSBA_CLASS_CONTEXT, 0);
579   ksba_der_add_tag (  dbld, 0, KSBA_TYPE_SEQUENCE);
580   ksba_der_add_val (   dbld, 0, KSBA_TYPE_INTEGER, p_version, n_version);
581   ksba_der_add_der (   dbld, p_algoset, n_algoset);
582   ksba_der_add_tag (   dbld, 0, KSBA_TYPE_SEQUENCE);
583   ksba_der_add_val (    dbld, 0, KSBA_TYPE_OBJECT_ID, p_dataoid, n_dataoid);
584   ksba_der_add_end (   dbld);
585   if (p_certset)
586     {
587       ksba_der_add_tag (   dbld, KSBA_CLASS_CONTEXT, 0);
588       ksba_der_add_der (    dbld, p_certset, n_certset);
589       ksba_der_add_end (   dbld);
590     }
591   ksba_der_add_tag (   dbld, 0, KSBA_TYPE_SET);
592   ksba_der_add_der (    dbld, p_signerinfos, n_signerinfos);
593   ksba_der_add_end (   dbld);
594   ksba_der_add_end (  dbld);
595   ksba_der_add_end ( dbld);
596   ksba_der_add_end (dbld);
597
598   err = ksba_der_builder_get (dbld, &finalder, &finalderlen);
599   if (err)
600     goto leave;
601
602   if (es_fwrite (finalder, finalderlen, 1, out_fp) != 1)
603     {
604       err = gpg_error_from_syserror ();
605       goto leave;
606     }
607
608
609  leave:
610   ksba_der_release (dbld);
611   ksba_free (finalder);
612   return err;
613 }
614
615
616 \f
617 /* Perform a sign operation.
618
619    Sign the data received on DATA-FD in embedded mode or in detached
620    mode when DETACHED is true.  Write the signature to OUT_FP.  The
621    keys used to sign are taken from SIGNERLIST or the default one will
622    be used if the value of this argument is NULL. */
623 int
624 gpgsm_sign (ctrl_t ctrl, certlist_t signerlist,
625             int data_fd, int detached, estream_t out_fp)
626 {
627   int i, rc;
628   gpg_error_t err;
629   gnupg_ksba_io_t b64writer = NULL;
630   ksba_writer_t writer;
631   estream_t sig_fp = NULL;  /* Used for detached signatures.  */
632   ksba_cms_t cms = NULL;
633   ksba_stop_reason_t stopreason;
634   KEYDB_HANDLE kh = NULL;
635   gcry_md_hd_t data_md = NULL;
636   int signer;
637   const char *algoid;
638   int algo;
639   ksba_isotime_t signed_at;
640   certlist_t cl;
641   int release_signerlist = 0;
642   int binary_detached = detached && !ctrl->create_pem && !ctrl->create_base64;
643
644   audit_set_type (ctrl->audit, AUDIT_TYPE_SIGN);
645
646   kh = keydb_new (ctrl);
647   if (!kh)
648     {
649       log_error (_("failed to allocate keyDB handle\n"));
650       rc = gpg_error (GPG_ERR_GENERAL);
651       goto leave;
652     }
653
654   if (!gnupg_rng_is_compliant (opt.compliance))
655     {
656       rc = gpg_error (GPG_ERR_FORBIDDEN);
657       log_error (_("%s is not compliant with %s mode\n"),
658                  "RNG",
659                  gnupg_compliance_option_string (opt.compliance));
660       gpgsm_status_with_error (ctrl, STATUS_ERROR,
661                                "random-compliance", rc);
662       goto leave;
663     }
664
665   /* Note that in detached mode the b64 write is actually a binary
666    * writer because we need to fixup the created signature later.
667    * Note that we do this only for binary output because we have no
668    * PEM writer interface outside of the ksba create writer code.  */
669   ctrl->pem_name = "SIGNED MESSAGE";
670   if (binary_detached)
671     {
672       sig_fp = es_fopenmem (0, "w+");
673       rc = sig_fp? 0 : gpg_error_from_syserror ();
674       if (!rc)
675         rc = gnupg_ksba_create_writer (&b64writer, 0, NULL, sig_fp, &writer);
676     }
677   else
678     {
679       rc = gnupg_ksba_create_writer
680         (&b64writer, ((ctrl->create_pem? GNUPG_KSBA_IO_PEM : 0)
681                       | (ctrl->create_base64? GNUPG_KSBA_IO_BASE64 : 0)),
682          ctrl->pem_name, out_fp, &writer);
683     }
684   if (rc)
685     {
686       log_error ("can't create writer: %s\n", gpg_strerror (rc));
687       goto leave;
688     }
689
690   gnupg_ksba_set_progress_cb (b64writer, gpgsm_progress_cb, ctrl);
691   if (ctrl->input_size_hint)
692     gnupg_ksba_set_total (b64writer, ctrl->input_size_hint);
693
694   err = ksba_cms_new (&cms);
695   if (err)
696     {
697       rc = err;
698       goto leave;
699     }
700
701   err = ksba_cms_set_reader_writer (cms, NULL, writer);
702   if (err)
703     {
704       log_debug ("ksba_cms_set_reader_writer failed: %s\n",
705                  gpg_strerror (err));
706       rc = err;
707       goto leave;
708     }
709
710   /* We are going to create signed data with data as encap. content.
711    * In authenticode mode we use spcIndirectDataContext instead.  */
712   err = ksba_cms_set_content_type (cms, 0, KSBA_CT_SIGNED_DATA);
713   if (!err)
714     err = ksba_cms_set_content_type
715       (cms, 1,
716        opt.authenticode? KSBA_CT_SPC_IND_DATA_CTX :
717        KSBA_CT_DATA
718        );
719   if (err)
720     {
721       log_debug ("ksba_cms_set_content_type failed: %s\n",
722                  gpg_strerror (err));
723       rc = err;
724       goto leave;
725     }
726
727   /* If no list of signers is given, use the default certificate. */
728   if (!signerlist)
729     {
730       ksba_cert_t cert = get_default_signer (ctrl);
731       if (!cert)
732         {
733           log_error ("no default signer found\n");
734           gpgsm_status2 (ctrl, STATUS_INV_SGNR,
735                          get_inv_recpsgnr_code (GPG_ERR_NO_SECKEY), NULL);
736           rc = gpg_error (GPG_ERR_GENERAL);
737           goto leave;
738         }
739
740       /* Although we don't check for ambiguous specification we will
741          check that the signer's certificate is usable and valid.  */
742       rc = gpgsm_cert_use_sign_p (cert, 0);
743       if (!rc)
744         rc = gpgsm_validate_chain (ctrl, cert,
745                                    GNUPG_ISOTIME_NONE, NULL, 0, NULL, 0, NULL);
746       if (rc)
747         {
748           char *tmpfpr;
749
750           tmpfpr = gpgsm_get_fingerprint_hexstring (cert, 0);
751           gpgsm_status2 (ctrl, STATUS_INV_SGNR,
752                          get_inv_recpsgnr_code (rc), tmpfpr, NULL);
753           xfree (tmpfpr);
754           goto leave;
755         }
756
757       /* That one is fine - create signerlist. */
758       signerlist = xtrycalloc (1, sizeof *signerlist);
759       if (!signerlist)
760         {
761           rc = out_of_core ();
762           ksba_cert_release (cert);
763           goto leave;
764         }
765       signerlist->cert = cert;
766       release_signerlist = 1;
767     }
768
769
770   /* Figure out the hash algorithm to use. We do not want to use the
771      one for the certificate but if possible an OID for the plain
772      algorithm.  */
773   if (opt.forced_digest_algo && opt.verbose)
774     log_info ("user requested hash algorithm %d\n", opt.forced_digest_algo);
775   for (i=0, cl=signerlist; cl; cl = cl->next, i++)
776     {
777       const char *oid;
778       unsigned int nbits;
779       int pk_algo;
780
781       pk_algo = gpgsm_get_key_algo_info (cl->cert, &nbits);
782       cl->pk_algo = pk_algo;
783
784       if (opt.forced_digest_algo)
785         {
786           oid = NULL;
787           cl->hash_algo = opt.forced_digest_algo;
788         }
789       else
790         {
791           if (pk_algo == GCRY_PK_ECC)
792             {
793               /* Map the Curve to a corresponding hash algo.  */
794               if (nbits <= 256)
795                 oid = "2.16.840.1.101.3.4.2.1"; /* sha256 */
796               else if (nbits <= 384)
797                 oid = "2.16.840.1.101.3.4.2.2"; /* sha384 */
798               else
799                 oid = "2.16.840.1.101.3.4.2.3"; /* sha512 */
800             }
801           else
802             {
803               /* For RSA we reuse the hash algo used by the certificate.  */
804               oid = ksba_cert_get_digest_algo (cl->cert);
805             }
806           cl->hash_algo = oid ? gcry_md_map_name (oid) : 0;
807         }
808       switch (cl->hash_algo)
809         {
810         case GCRY_MD_SHA1:   oid = "1.3.14.3.2.26"; break;
811         case GCRY_MD_RMD160: oid = "1.3.36.3.2.1"; break;
812         case GCRY_MD_SHA224: oid = "2.16.840.1.101.3.4.2.4"; break;
813         case GCRY_MD_SHA256: oid = "2.16.840.1.101.3.4.2.1"; break;
814         case GCRY_MD_SHA384: oid = "2.16.840.1.101.3.4.2.2"; break;
815         case GCRY_MD_SHA512: oid = "2.16.840.1.101.3.4.2.3"; break;
816 /*         case GCRY_MD_WHIRLPOOL: oid = "No OID yet"; break; */
817
818         case GCRY_MD_MD5:  /* We don't want to use MD5.  */
819         case 0:            /* No algorithm found in cert.  */
820         default:           /* Other algorithms.  */
821           log_info (_("hash algorithm %d (%s) for signer %d not supported;"
822                       " using %s\n"),
823                     cl->hash_algo, oid? oid: "?", i,
824                     gcry_md_algo_name (GCRY_MD_SHA1));
825           cl->hash_algo = GCRY_MD_SHA1;
826           oid = "1.3.14.3.2.26";
827           break;
828         }
829       cl->hash_algo_oid = oid;
830
831       /* Check compliance.  */
832       if (! gnupg_digest_is_allowed (opt.compliance, 1, cl->hash_algo))
833         {
834           log_error (_("digest algorithm '%s' may not be used in %s mode\n"),
835                      gcry_md_algo_name (cl->hash_algo),
836                      gnupg_compliance_option_string (opt.compliance));
837           err = gpg_error (GPG_ERR_DIGEST_ALGO);
838           goto leave;
839         }
840
841       if (! gnupg_pk_is_allowed (opt.compliance, PK_USE_SIGNING, pk_algo, 0,
842                                  NULL, nbits, NULL))
843         {
844           char  kidstr[10+1];
845
846           snprintf (kidstr, sizeof kidstr, "0x%08lX",
847                     gpgsm_get_short_fingerprint (cl->cert, NULL));
848           log_error (_("key %s may not be used for signing in %s mode\n"),
849                      kidstr,
850                      gnupg_compliance_option_string (opt.compliance));
851           err = gpg_error (GPG_ERR_PUBKEY_ALGO);
852           goto leave;
853         }
854
855     }
856
857   if (opt.verbose > 1 || opt.debug)
858     {
859       for (i=0, cl=signerlist; cl; cl = cl->next, i++)
860         log_info (_("hash algorithm used for signer %d: %s (%s)\n"),
861                   i, gcry_md_algo_name (cl->hash_algo), cl->hash_algo_oid);
862     }
863
864
865   /* Gather certificates of signers and store them in the CMS object. */
866   for (cl=signerlist; cl; cl = cl->next)
867     {
868       rc = gpgsm_cert_use_sign_p (cl->cert, 0);
869       if (rc)
870         goto leave;
871
872       err = ksba_cms_add_signer (cms, cl->cert);
873       if (err)
874         {
875           log_error ("ksba_cms_add_signer failed: %s\n", gpg_strerror (err));
876           rc = err;
877           goto leave;
878         }
879       rc = add_certificate_list (ctrl, cms, cl->cert);
880       if (rc)
881         {
882           log_error ("failed to store list of certificates: %s\n",
883                      gpg_strerror(rc));
884           goto leave;
885         }
886       /* Set the hash algorithm we are going to use */
887       err = ksba_cms_add_digest_algo (cms, cl->hash_algo_oid);
888       if (err)
889         {
890           log_debug ("ksba_cms_add_digest_algo failed: %s\n",
891                      gpg_strerror (err));
892           rc = err;
893           goto leave;
894         }
895     }
896
897
898   /* Check whether one of the certificates is qualified.  Note that we
899      already validated the certificate and thus the user data stored
900      flag must be available. */
901   if (!opt.no_chain_validation)
902     {
903       for (cl=signerlist; cl; cl = cl->next)
904         {
905           size_t buflen;
906           char buffer[1];
907
908           err = ksba_cert_get_user_data (cl->cert, "is_qualified",
909                                          &buffer, sizeof (buffer), &buflen);
910           if (err || !buflen)
911             {
912               log_error (_("checking for qualified certificate failed: %s\n"),
913                          gpg_strerror (err));
914               rc = err;
915               goto leave;
916             }
917           if (*buffer)
918             err = gpgsm_qualified_consent (ctrl, cl->cert);
919           else
920             err = gpgsm_not_qualified_warning (ctrl, cl->cert);
921           if (err)
922             {
923               rc = err;
924               goto leave;
925             }
926         }
927     }
928
929   /* Prepare hashing (actually we are figuring out what we have set
930      above). */
931   rc = gcry_md_open (&data_md, 0, 0);
932   if (rc)
933     {
934       log_error ("md_open failed: %s\n", gpg_strerror (rc));
935       goto leave;
936     }
937   if (DBG_HASHING)
938     gcry_md_debug (data_md, "sign.data");
939
940   for (i=0; (algoid=ksba_cms_get_digest_algo_list (cms, i)); i++)
941     {
942       algo = gcry_md_map_name (algoid);
943       if (!algo)
944         {
945           log_error ("unknown hash algorithm '%s'\n", algoid? algoid:"?");
946           rc = gpg_error (GPG_ERR_BUG);
947           goto leave;
948         }
949       gcry_md_enable (data_md, algo);
950       audit_log_i (ctrl->audit, AUDIT_DATA_HASH_ALGO, algo);
951     }
952
953   audit_log (ctrl->audit, AUDIT_SETUP_READY);
954
955   if (detached)
956     { /* We hash the data right now so that we can store the message
957          digest.  ksba_cms_build() takes this as an flag that detached
958          data is expected. */
959       unsigned char *digest;
960       size_t digest_len;
961
962       if (!hash_data (data_fd, data_md))
963         audit_log (ctrl->audit, AUDIT_GOT_DATA);
964       for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
965         {
966           digest = gcry_md_read (data_md, cl->hash_algo);
967           digest_len = gcry_md_get_algo_dlen (cl->hash_algo);
968           if ( !digest || !digest_len )
969             {
970               log_error ("problem getting the hash of the data\n");
971               rc = gpg_error (GPG_ERR_BUG);
972               goto leave;
973             }
974           err = ksba_cms_set_message_digest (cms, signer, digest, digest_len);
975           if (err)
976             {
977               log_error ("ksba_cms_set_message_digest failed: %s\n",
978                          gpg_strerror (err));
979               rc = err;
980               goto leave;
981             }
982         }
983     }
984
985   gnupg_get_isotime (signed_at);
986   for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
987     {
988       err = ksba_cms_set_signing_time (cms, signer, signed_at);
989       if (err)
990         {
991           log_error ("ksba_cms_set_signing_time failed: %s\n",
992                      gpg_strerror (err));
993           rc = err;
994           goto leave;
995         }
996     }
997
998   {
999     strlist_t sl;
1000
1001     for (sl = opt.attributes; sl; sl = sl->next)
1002       if ((err = add_signed_attribute (cms, sl->d)))
1003         goto leave;
1004   }
1005
1006
1007   /* We need to write at least a minimal list of our capabilities to
1008    * try to convince some MUAs to use 3DES and not the crippled
1009    * RC2. Our list is:
1010    *
1011    *   aes256-CBC
1012    *   aes128-CBC
1013    *   des-EDE3-CBC
1014    */
1015   err = ksba_cms_add_smime_capability (cms, "2.16.840.1.101.3.4.1.42", NULL,0);
1016   if (!err)
1017     err = ksba_cms_add_smime_capability (cms, "2.16.840.1.101.3.4.1.2", NULL,0);
1018   if (!err)
1019     err = ksba_cms_add_smime_capability (cms, "1.2.840.113549.3.7", NULL, 0);
1020   if (err)
1021     {
1022       log_error ("ksba_cms_add_smime_capability failed: %s\n",
1023                  gpg_strerror (err));
1024       goto leave;
1025     }
1026
1027
1028   /* Main building loop. */
1029   do
1030     {
1031       err = ksba_cms_build (cms, &stopreason);
1032       if (err)
1033         {
1034           log_error ("creating CMS object failed: %s\n", gpg_strerror (err));
1035           rc = err;
1036           goto leave;
1037         }
1038
1039       if (stopreason == KSBA_SR_BEGIN_DATA)
1040         {
1041           /* Hash the data and store the message digest. */
1042           unsigned char *digest;
1043           size_t digest_len;
1044
1045           log_assert (!detached);
1046
1047           rc = hash_and_copy_data (data_fd, data_md, writer);
1048           if (rc)
1049             goto leave;
1050           audit_log (ctrl->audit, AUDIT_GOT_DATA);
1051           for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
1052             {
1053               digest = gcry_md_read (data_md, cl->hash_algo);
1054               digest_len = gcry_md_get_algo_dlen (cl->hash_algo);
1055               if ( !digest || !digest_len )
1056                 {
1057                   log_error ("problem getting the hash of the data\n");
1058                   rc = gpg_error (GPG_ERR_BUG);
1059                   goto leave;
1060                 }
1061               err = ksba_cms_set_message_digest (cms, signer,
1062                                                  digest, digest_len);
1063               if (err)
1064                 {
1065                   log_error ("ksba_cms_set_message_digest failed: %s\n",
1066                              gpg_strerror (err));
1067                   rc = err;
1068                   goto leave;
1069                 }
1070             }
1071         }
1072       else if (stopreason == KSBA_SR_NEED_SIG)
1073         {
1074           /* Compute the signature for all signers.  */
1075           gcry_md_hd_t md;
1076
1077           rc = gcry_md_open (&md, 0, 0);
1078           if (rc)
1079             {
1080               log_error ("md_open failed: %s\n", gpg_strerror (rc));
1081               goto leave;
1082             }
1083           if (DBG_HASHING)
1084             gcry_md_debug (md, "sign.attr");
1085           ksba_cms_set_hash_function (cms, HASH_FNC, md);
1086           for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
1087             {
1088               unsigned char *sigval = NULL;
1089               char *buf, *fpr;
1090
1091               audit_log_i (ctrl->audit, AUDIT_NEW_SIG, signer);
1092               if (signer)
1093                 gcry_md_reset (md);
1094               {
1095                 certlist_t cl_tmp;
1096
1097                 for (cl_tmp=signerlist; cl_tmp; cl_tmp = cl_tmp->next)
1098                   {
1099                     gcry_md_enable (md, cl_tmp->hash_algo);
1100                     audit_log_i (ctrl->audit, AUDIT_ATTR_HASH_ALGO,
1101                                  cl_tmp->hash_algo);
1102                   }
1103               }
1104
1105               rc = ksba_cms_hash_signed_attrs (cms, signer);
1106               if (rc)
1107                 {
1108                   log_debug ("hashing signed attrs failed: %s\n",
1109                              gpg_strerror (rc));
1110                   gcry_md_close (md);
1111                   goto leave;
1112                 }
1113
1114               rc = gpgsm_create_cms_signature (ctrl, cl->cert,
1115                                                md, cl->hash_algo, &sigval);
1116               if (rc)
1117                 {
1118                   audit_log_cert (ctrl->audit, AUDIT_SIGNED_BY, cl->cert, rc);
1119                   gcry_md_close (md);
1120                   goto leave;
1121                 }
1122
1123               err = ksba_cms_set_sig_val (cms, signer, sigval);
1124               xfree (sigval);
1125               if (err)
1126                 {
1127                   audit_log_cert (ctrl->audit, AUDIT_SIGNED_BY, cl->cert, err);
1128                   log_error ("failed to store the signature: %s\n",
1129                              gpg_strerror (err));
1130                   rc = err;
1131                   gcry_md_close (md);
1132                   goto leave;
1133                 }
1134
1135               /* write a status message */
1136               fpr = gpgsm_get_fingerprint_hexstring (cl->cert, GCRY_MD_SHA1);
1137               if (!fpr)
1138                 {
1139                   rc = gpg_error (GPG_ERR_ENOMEM);
1140                   gcry_md_close (md);
1141                   goto leave;
1142                 }
1143               rc = 0;
1144               if (opt.verbose)
1145                 {
1146                   char *pkalgostr = gpgsm_pubkey_algo_string (cl->cert, NULL);
1147                   log_info (_("%s/%s signature using %s key %s\n"),
1148                             pubkey_algo_to_string (cl->pk_algo),
1149                             gcry_md_algo_name (cl->hash_algo),
1150                             pkalgostr, fpr);
1151                   xfree (pkalgostr);
1152                 }
1153               buf = xtryasprintf ("%c %d %d 00 %s %s",
1154                                   detached? 'D':'S',
1155                                   cl->pk_algo,
1156                                   cl->hash_algo,
1157                                   signed_at,
1158                                   fpr);
1159               if (!buf)
1160                 rc = gpg_error_from_syserror ();
1161               xfree (fpr);
1162               if (rc)
1163                 {
1164                   gcry_md_close (md);
1165                   goto leave;
1166                 }
1167               gpgsm_status (ctrl, STATUS_SIG_CREATED, buf);
1168               xfree (buf);
1169               audit_log_cert (ctrl->audit, AUDIT_SIGNED_BY, cl->cert, 0);
1170             }
1171           gcry_md_close (md);
1172         }
1173     }
1174   while (stopreason != KSBA_SR_READY);
1175
1176   rc = gnupg_ksba_finish_writer (b64writer);
1177   if (rc)
1178     {
1179       log_error ("write failed: %s\n", gpg_strerror (rc));
1180       goto leave;
1181     }
1182
1183   if (binary_detached)
1184     {
1185       void *blob = NULL;
1186       size_t bloblen;
1187
1188       rc = es_fclose_snatch (sig_fp, &blob, &bloblen);
1189       sig_fp = NULL;
1190       if (rc)
1191         goto leave;
1192       rc = write_detached_signature (ctrl, blob, bloblen, out_fp);
1193       xfree (blob);
1194       if (rc)
1195         goto leave;
1196     }
1197
1198
1199   audit_log (ctrl->audit, AUDIT_SIGNING_DONE);
1200   log_info ("signature created\n");
1201
1202  leave:
1203   if (rc)
1204     log_error ("error creating signature: %s <%s>\n",
1205                gpg_strerror (rc), gpg_strsource (rc) );
1206   if (release_signerlist)
1207     gpgsm_release_certlist (signerlist);
1208   ksba_cms_release (cms);
1209   gnupg_ksba_destroy_writer (b64writer);
1210   keydb_release (kh);
1211   gcry_md_close (data_md);
1212   es_fclose (sig_fp);
1213   return rc;
1214 }