Parcourir la source

refactor der_encode_asn1_length

in order to avoid comparison : len <= 0xffffffffffffffffULL
Francois Perrad il y a 7 ans
Parent
commit
1662910b40
1 fichiers modifiés avec 11 ajouts et 5 suppressions
  1. 11 5
      src/pk/asn1/der/general/der_encode_asn1_length.c

+ 11 - 5
src/pk/asn1/der/general/der_encode_asn1_length.c

@@ -63,13 +63,21 @@ int der_encode_asn1_length(unsigned long len, unsigned char *out, unsigned long
          out[x++] = (unsigned char)((len>>16UL)&255);
          out[x++] = (unsigned char)((len>>8UL)&255);
          out[x++] = (unsigned char)(len&255);
+      #if ULONG_MAX != ULLONG_MAX
+      } else {
+         out[x++] = 0x84;
+         out[x++] = (unsigned char)((len>>24UL)&255);
+         out[x++] = (unsigned char)((len>>16UL)&255);
+         out[x++] = (unsigned char)((len>>8UL)&255);
+         out[x++] = (unsigned char)(len&255);
+      }
+      #else
       } else if (len <= 0xffffffffUL) {
          out[x++] = 0x84;
          out[x++] = (unsigned char)((len>>24UL)&255);
          out[x++] = (unsigned char)((len>>16UL)&255);
          out[x++] = (unsigned char)((len>>8UL)&255);
          out[x++] = (unsigned char)(len&255);
-   #if ULONG_MAX == ULLONG_MAX
       } else if (len <= 0xffffffffffULL) {
          out[x++] = 0x85;
          out[x++] = (unsigned char)((len>>32ULL)&255);
@@ -94,7 +102,7 @@ int der_encode_asn1_length(unsigned long len, unsigned char *out, unsigned long
          out[x++] = (unsigned char)((len>>16ULL)&255);
          out[x++] = (unsigned char)((len>>8ULL)&255);
          out[x++] = (unsigned char)(len&255);
-      } else if (len <= 0xffffffffffffffffULL) {
+      } else {
          out[x++] = 0x88;
          out[x++] = (unsigned char)((len>>56ULL)&255);
          out[x++] = (unsigned char)((len>>48ULL)&255);
@@ -104,10 +112,8 @@ int der_encode_asn1_length(unsigned long len, unsigned char *out, unsigned long
          out[x++] = (unsigned char)((len>>16ULL)&255);
          out[x++] = (unsigned char)((len>>8ULL)&255);
          out[x++] = (unsigned char)(len&255);
-   #endif
-      } else {
-         return CRYPT_INPUT_TOO_LONG;
       }
+      #endif
    }
    *outlen = x;