[BACK]Return to dh.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/dh.c between version 1.49 and 1.50

version 1.49, 2011/12/07 05:44:38 version 1.50, 2013/06/21 05:42:32
Line 45 
Line 45 
         const char *errstr = NULL;          const char *errstr = NULL;
         long long n;          long long n;
   
           dhg->p = dhg-> g = NULL;
         cp = line;          cp = line;
         if ((arg = strdelim(&cp)) == NULL)          if ((arg = strdelim(&cp)) == NULL)
                 return 0;                  return 0;
Line 56 
Line 57 
   
         /* time */          /* time */
         if (cp == NULL || *arg == '\0')          if (cp == NULL || *arg == '\0')
                 goto fail;                  goto truncated;
         arg = strsep(&cp, " "); /* type */          arg = strsep(&cp, " "); /* type */
         if (cp == NULL || *arg == '\0')          if (cp == NULL || *arg == '\0')
                 goto fail;                  goto truncated;
         /* Ensure this is a safe prime */          /* Ensure this is a safe prime */
         n = strtonum(arg, 0, 5, &errstr);          n = strtonum(arg, 0, 5, &errstr);
         if (errstr != NULL || n != MODULI_TYPE_SAFE)          if (errstr != NULL || n != MODULI_TYPE_SAFE) {
                   error("moduli:%d: type is not %d", linenum, MODULI_TYPE_SAFE);
                 goto fail;                  goto fail;
           }
         arg = strsep(&cp, " "); /* tests */          arg = strsep(&cp, " "); /* tests */
         if (cp == NULL || *arg == '\0')          if (cp == NULL || *arg == '\0')
                 goto fail;                  goto truncated;
         /* Ensure prime has been tested and is not composite */          /* Ensure prime has been tested and is not composite */
         n = strtonum(arg, 0, 0x1f, &errstr);          n = strtonum(arg, 0, 0x1f, &errstr);
         if (errstr != NULL ||          if (errstr != NULL ||
             (n & MODULI_TESTS_COMPOSITE) || !(n & ~MODULI_TESTS_COMPOSITE))              (n & MODULI_TESTS_COMPOSITE) || !(n & ~MODULI_TESTS_COMPOSITE)) {
                   error("moduli:%d: invalid moduli tests flag", linenum);
                 goto fail;                  goto fail;
           }
         arg = strsep(&cp, " "); /* tries */          arg = strsep(&cp, " "); /* tries */
         if (cp == NULL || *arg == '\0')          if (cp == NULL || *arg == '\0')
                 goto fail;                  goto truncated;
         n = strtonum(arg, 0, 1<<30, &errstr);          n = strtonum(arg, 0, 1<<30, &errstr);
         if (errstr != NULL || n == 0)          if (errstr != NULL || n == 0) {
                   error("moduli:%d: invalid primality trial count", linenum);
                 goto fail;                  goto fail;
           }
         strsize = strsep(&cp, " "); /* size */          strsize = strsep(&cp, " "); /* size */
         if (cp == NULL || *strsize == '\0' ||          if (cp == NULL || *strsize == '\0' ||
             (dhg->size = (int)strtonum(strsize, 0, 64*1024, &errstr)) == 0 ||              (dhg->size = (int)strtonum(strsize, 0, 64*1024, &errstr)) == 0 ||
             errstr)              errstr) {
                   error("moduli:%d: invalid prime length", linenum);
                 goto fail;                  goto fail;
           }
         /* The whole group is one bit larger */          /* The whole group is one bit larger */
         dhg->size++;          dhg->size++;
         gen = strsep(&cp, " "); /* gen */          gen = strsep(&cp, " "); /* gen */
         if (cp == NULL || *gen == '\0')          if (cp == NULL || *gen == '\0')
                 goto fail;                  goto truncated;
         prime = strsep(&cp, " "); /* prime */          prime = strsep(&cp, " "); /* prime */
         if (cp != NULL || *prime == '\0')          if (cp != NULL || *prime == '\0') {
    truncated:
                   error("moduli:%d: truncated", linenum);
                 goto fail;                  goto fail;
           }
   
         if ((dhg->g = BN_new()) == NULL)          if ((dhg->g = BN_new()) == NULL)
                 fatal("parse_prime: BN_new failed");                  fatal("parse_prime: BN_new failed");
         if ((dhg->p = BN_new()) == NULL)          if ((dhg->p = BN_new()) == NULL)
                 fatal("parse_prime: BN_new failed");                  fatal("parse_prime: BN_new failed");
         if (BN_hex2bn(&dhg->g, gen) == 0)          if (BN_hex2bn(&dhg->g, gen) == 0) {
                 goto failclean;                  error("moduli:%d: could not parse generator value", linenum);
                   goto fail;
           }
           if (BN_hex2bn(&dhg->p, prime) == 0) {
                   error("moduli:%d: could not parse prime value", linenum);
                   goto fail;
           }
           if (BN_num_bits(dhg->p) != dhg->size) {
                   error("moduli:%d: prime has wrong size: actual %d listed %d",
                       linenum, BN_num_bits(dhg->p), dhg->size - 1);
                   goto fail;
           }
           if (BN_cmp(dhg->g, BN_value_one()) <= 0) {
                   error("moduli:%d: generator is invalid", linenum);
                   goto fail;
           }
   
         if (BN_hex2bn(&dhg->p, prime) == 0)          return 1;
                 goto failclean;  
   
         if (BN_num_bits(dhg->p) != dhg->size)  
                 goto failclean;  
   
         if (BN_is_zero(dhg->g) || BN_is_one(dhg->g))  
                 goto failclean;  
   
         return (1);  
   
  failclean:  
         BN_clear_free(dhg->g);  
         BN_clear_free(dhg->p);  
  fail:   fail:
           if (dhg->g != NULL)
                   BN_clear_free(dhg->g);
           if (dhg->p != NULL)
                   BN_clear_free(dhg->p);
           dhg->g = dhg->p = NULL;
         error("Bad prime description in line %d", linenum);          error("Bad prime description in line %d", linenum);
         return (0);          return 0;
 }  }
   
 DH *  DH *

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.50