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

Diff for /src/usr.bin/ssh/ssh-sk.c between version 1.2 and 1.3

version 1.2, 2019/11/12 19:29:54 version 1.3, 2019/11/12 19:30:21
Line 300 
Line 300 
         return r;          return r;
 }  }
   
   static int
   sshsk_ecdsa_inner_sig(struct sk_sign_response *resp, struct sshbuf **retp)
   {
           struct sshbuf *inner_sig = NULL;
           int r = SSH_ERR_INTERNAL_ERROR;
   
           *retp = NULL;
           if ((inner_sig = sshbuf_new()) == NULL) {
                   r = SSH_ERR_ALLOC_FAIL;
                   goto out;
           }
           /* Prepare inner signature object */
           if ((r = sshbuf_put_bignum2_bytes(inner_sig,
               resp->sig_r, resp->sig_r_len)) != 0 ||
               (r = sshbuf_put_bignum2_bytes(inner_sig,
               resp->sig_s, resp->sig_s_len)) != 0 ||
               (r = sshbuf_put_u8(inner_sig, resp->flags)) != 0 ||
               (r = sshbuf_put_u32(inner_sig, resp->counter)) != 0) {
                   debug("%s: buffer error: %s", __func__, ssh_err(r));
                   goto out;
           }
   #ifdef DEBUG_SK
           fprintf(stderr, "%s: sig_r:\n", __func__);
           sshbuf_dump_data(resp->sig_r, resp->sig_r_len, stderr);
           fprintf(stderr, "%s: sig_s:\n", __func__);
           sshbuf_dump_data(resp->sig_s, resp->sig_s_len, stderr);
           fprintf(stderr, "%s: sig_flags = 0x%02x, sig_counter = %u\n",
               __func__, resp->flags, resp->counter);
   #endif
           *retp = inner_sig;
           inner_sig = NULL;
           r = 0;
   out:
           sshbuf_free(inner_sig);
           return r;
   }
   
 int  int
 sshsk_ecdsa_sign(const char *provider_path, const struct sshkey *key,  sshsk_ecdsa_sign(const char *provider_path, const struct sshkey *key,
     u_char **sigp, size_t *lenp, const u_char *data, size_t datalen,      u_char **sigp, size_t *lenp, const u_char *data, size_t datalen,
Line 341 
Line 378 
                 debug("%s: sk_sign failed with code %d", __func__, r);                  debug("%s: sk_sign failed with code %d", __func__, r);
                 goto out;                  goto out;
         }          }
         if ((sig = sshbuf_new()) == NULL ||  
             (inner_sig = sshbuf_new()) == NULL) {  
                 r = SSH_ERR_ALLOC_FAIL;  
                 goto out;  
         }  
         /* Prepare inner signature object */          /* Prepare inner signature object */
         if ((r = sshbuf_put_bignum2_bytes(inner_sig,          if ((r = sshsk_ecdsa_inner_sig(resp, &inner_sig)) != 0)
             resp->sig_r, resp->sig_r_len)) != 0 ||  
             (r = sshbuf_put_bignum2_bytes(inner_sig,  
             resp->sig_s, resp->sig_s_len)) != 0 ||  
             (r = sshbuf_put_u8(inner_sig, resp->flags)) != 0 ||  
             (r = sshbuf_put_u32(inner_sig, resp->counter)) != 0) {  
                 debug("%s: buffer error (inner): %s", __func__, ssh_err(r));  
                 goto out;                  goto out;
         }  
         /* Assemble outer signature */          /* Assemble outer signature */
           if ((sig = sshbuf_new()) == NULL) {
                   r = SSH_ERR_ALLOC_FAIL;
                   goto out;
           }
         if ((r = sshbuf_put_cstring(sig, sshkey_ssh_name_plain(key))) != 0 ||          if ((r = sshbuf_put_cstring(sig, sshkey_ssh_name_plain(key))) != 0 ||
             (r = sshbuf_put_stringb(sig, inner_sig)) != 0) {              (r = sshbuf_put_stringb(sig, inner_sig)) != 0) {
                 debug("%s: buffer error (outer): %s", __func__, ssh_err(r));                  debug("%s: buffer error (outer): %s", __func__, ssh_err(r));
                 goto out;                  goto out;
         }          }
 #ifdef DEBUG_SK  #ifdef DEBUG_SK
         fprintf(stderr, "%s: sig_r:\n", __func__);  
         sshbuf_dump_data(resp->sig_r, resp->sig_r_len, stderr);  
         fprintf(stderr, "%s: sig_s:\n", __func__);  
         sshbuf_dump_data(resp->sig_s, resp->sig_s_len, stderr);  
         fprintf(stderr, "%s: sig_flags = 0x%02x, sig_counter = %u\n",  
             __func__, resp->flags, resp->counter);  
         fprintf(stderr, "%s: hashed message:\n", __func__);          fprintf(stderr, "%s: hashed message:\n", __func__);
         sshbuf_dump_data(message, sizeof(message), stderr);          sshbuf_dump_data(message, sizeof(message), stderr);
         fprintf(stderr, "%s: inner:\n", __func__);          fprintf(stderr, "%s: inner:\n", __func__);

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3