Don't remove leading zero byte.
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 27 Feb 2019 02:09:30 +0000 (11:09 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 27 Feb 2019 02:09:30 +0000 (11:09 +0900)
* src/cms.c (ksba_cms_set_sig_val): Don't remove leading zero byte.
(ksba_cms_set_enc_val): Likewise.
* src/certreq.c (ksba_certreq_set_sig_val): Likewise for RSA.

--

For RSA, here is in PKCS1 format with fixed-size.  There should not be
an extra leading zero byte.  (We used to have an extra leading zero
byte with smartcard.)

GnuPG-bug-id: 4104
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
src/certreq.c
src/cms.c

index ff0ea0a..05413d8 100644 (file)
@@ -501,39 +501,26 @@ ksba_certreq_set_sig_val (ksba_certreq_t cr, ksba_const_sexp_t sigval)
             nparam++;
           else if (pass == 2)
             {
-              if (is_EdDSA)
+              if (is_EdDSA || nparam == 1)
                 len += n;
-              else if (nparam > 1)
+              else
                 len += _ksba_ber_count_tl (TYPE_INTEGER, CLASS_UNIVERSAL, 0, n)
                        + n;
-              else
-                len += (n > 1 && !*s)? n - 1 : n;
             }
           else if (pass == 3)
             {
-              if (is_EdDSA)
+              if (is_EdDSA || nparam == 1)
                 {
                   memcpy (buf, s, n);
                   buf += n;
                 }
-              else if (nparam > 1)
+              else
                 {
                   buf += _ksba_ber_encode_tl (buf, TYPE_INTEGER,
                                               CLASS_UNIVERSAL, 0, n);
                   memcpy (buf, s, n);
                   buf += n;
                 }
-              else
-                {
-                  if (n > 1 && !*s)
-                    { /* Remove leading zero byte, which must not be
-                         included in the bitstring. */
-                      s++;
-                      n--;
-                    }
-                  memcpy (buf, s, n);
-                  buf += n;
-                }
             }
 
           s += n;
index 1cca810..fa2d293 100644 (file)
--- a/src/cms.c
+++ b/src/cms.c
@@ -1675,12 +1675,6 @@ ksba_cms_set_sig_val (ksba_cms_t cms, int idx, ksba_const_sexp_t sigval)
       return gpg_error (GPG_ERR_INV_SEXP);
     }
 
-  if (n > 1 && !*s)
-    { /* We might have a leading zero due to the way we encode
-         MPIs - this zero should not go into the OCTECT STRING.  */
-      s++;
-      n--;
-    }
   sv->value = xtrymalloc (n);
   if (!sv->value)
     {
@@ -1832,12 +1826,6 @@ ksba_cms_set_enc_val (ksba_cms_t cms, int idx, ksba_const_sexp_t encval)
   if (!n || *s != ':')
     return gpg_error (GPG_ERR_INV_SEXP);
   s++;
-  if (n > 1 && !*s)
-    { /* We might have a leading zero due to the way we encode
-         MPIs - this zero should not go into the OCTECT STRING.  */
-      s++;
-      n--;
-    }
   xfree (cl->enc_val.value);
   cl->enc_val.value = xtrymalloc (n);
   if (!cl->enc_val.value)