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

Diff for /src/usr.bin/ssh/ssh-ecdsa.c between version 1.14 and 1.15

version 1.14, 2018/02/07 02:06:51 version 1.15, 2018/09/13 02:08:33
Line 45 
Line 45 
     const u_char *data, size_t datalen, u_int compat)      const u_char *data, size_t datalen, u_int compat)
 {  {
         ECDSA_SIG *sig = NULL;          ECDSA_SIG *sig = NULL;
           const BIGNUM *sig_r, *sig_s;
         int hash_alg;          int hash_alg;
         u_char digest[SSH_DIGEST_MAX_LENGTH];          u_char digest[SSH_DIGEST_MAX_LENGTH];
         size_t len, dlen;          size_t len, dlen;
Line 76 
Line 77 
                 ret = SSH_ERR_ALLOC_FAIL;                  ret = SSH_ERR_ALLOC_FAIL;
                 goto out;                  goto out;
         }          }
         if ((ret = sshbuf_put_bignum2(bb, sig->r)) != 0 ||          ECDSA_SIG_get0(sig, &sig_r, &sig_s);
             (ret = sshbuf_put_bignum2(bb, sig->s)) != 0)          if ((ret = sshbuf_put_bignum2(bb, sig_r)) != 0 ||
               (ret = sshbuf_put_bignum2(bb, sig_s)) != 0)
                 goto out;                  goto out;
         if ((ret = sshbuf_put_cstring(b, sshkey_ssh_name_plain(key))) != 0 ||          if ((ret = sshbuf_put_cstring(b, sshkey_ssh_name_plain(key))) != 0 ||
             (ret = sshbuf_put_stringb(b, bb)) != 0)              (ret = sshbuf_put_stringb(b, bb)) != 0)
Line 108 
Line 110 
     const u_char *data, size_t datalen, u_int compat)      const u_char *data, size_t datalen, u_int compat)
 {  {
         ECDSA_SIG *sig = NULL;          ECDSA_SIG *sig = NULL;
           BIGNUM *sig_r = NULL, *sig_s = NULL;
         int hash_alg;          int hash_alg;
         u_char digest[SSH_DIGEST_MAX_LENGTH];          u_char digest[SSH_DIGEST_MAX_LENGTH];
         size_t dlen;          size_t dlen;
Line 142 
Line 145 
         }          }
   
         /* parse signature */          /* parse signature */
         if ((sig = ECDSA_SIG_new()) == NULL) {          if ((sig = ECDSA_SIG_new()) == NULL ||
               (sig_r = BN_new()) == NULL ||
               (sig_s = BN_new()) == NULL) {
                 ret = SSH_ERR_ALLOC_FAIL;                  ret = SSH_ERR_ALLOC_FAIL;
                 goto out;                  goto out;
         }          }
         if (sshbuf_get_bignum2(sigbuf, sig->r) != 0 ||          if (sshbuf_get_bignum2(sigbuf, sig_r) != 0 ||
             sshbuf_get_bignum2(sigbuf, sig->s) != 0) {              sshbuf_get_bignum2(sigbuf, sig_s) != 0) {
                 ret = SSH_ERR_INVALID_FORMAT;                  ret = SSH_ERR_INVALID_FORMAT;
                 goto out;                  goto out;
         }          }
           if (!ECDSA_SIG_set0(sig, sig_r, sig_s)) {
                   ret = SSH_ERR_LIBCRYPTO_ERROR;
                   goto out;
           }
           sig_r = sig_s = NULL; /* transferred */
   
         if (sshbuf_len(sigbuf) != 0) {          if (sshbuf_len(sigbuf) != 0) {
                 ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;                  ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
                 goto out;                  goto out;
Line 176 
Line 187 
         sshbuf_free(sigbuf);          sshbuf_free(sigbuf);
         sshbuf_free(b);          sshbuf_free(b);
         ECDSA_SIG_free(sig);          ECDSA_SIG_free(sig);
           BN_clear_free(sig_r);
           BN_clear_free(sig_s);
         free(ktype);          free(ktype);
         return ret;          return ret;
 }  }

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15