Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/keyfiles.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9208 by nmaya, Sat Apr 17 06:15:51 2021 UTC revision 9209 by nmaya, Sat Apr 17 06:32:42 2021 UTC
# Line 354  Key *KEYFILES_read_private_key(PTInstVar Line 354  Key *KEYFILES_read_private_key(PTInstVar
354  // bcrypt KDF 形式で読む  // bcrypt KDF 形式で読む
355  // based on key_parse_private2() @ OpenSSH 6.5  // based on key_parse_private2() @ OpenSSH 6.5
356  static Key *read_SSH2_private2_key(PTInstVar pvar,  static Key *read_SSH2_private2_key(PTInstVar pvar,
357                             FILE * fp,                                     FILE * fp,
358                             char * passphrase,                                     char * passphrase,
359                             BOOL * invalid_passphrase,                                     BOOL * invalid_passphrase,
360                             BOOL is_auto_login,                                     BOOL is_auto_login,
361                             char *errmsg,                                     char *errmsg,
362                             int errmsg_len)                                     int errmsg_len)
363  {  {
364          /* (A)          /* (A)
365           * buffer_consume系関数を使う場合は、buffer_lenとbuffer_ptrが使えないので、           * buffer_consume系関数を使う場合は、buffer_lenとbuffer_ptrが使えないので、
# Line 553  static Key *read_SSH2_private2_key(PTIns Line 553  static Key *read_SSH2_private2_key(PTIns
553          // 復号化          // 復号化
554          cp = buffer_append_space(b, len);          cp = buffer_append_space(b, len);
555          cipher_init_SSH2(cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_DECRYPT,          cipher_init_SSH2(cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_DECRYPT,
556                  get_cipher_EVP_CIPHER(cipher), 0, 0, pvar);                           get_cipher_EVP_CIPHER(cipher), 0, 0, pvar);
557          ret = EVP_Cipher(cipher_ctx, cp, buffer_tail_ptr(copy_consumed), len);          ret = EVP_Cipher(cipher_ctx, cp, buffer_tail_ptr(copy_consumed), len);
558          if (ret == 0) {          if (ret == 0) {
                 cipher_cleanup_SSH2(cipher_ctx);  
559                  goto error;                  goto error;
560          }          }
         cipher_cleanup_SSH2(cipher_ctx);  
561          buffer_consume(copy_consumed, len);          buffer_consume(copy_consumed, len);
562    
563          if (buffer_remain_len(copy_consumed) != 0) {          if (buffer_remain_len(copy_consumed) != 0) {
# Line 607  error: Line 605  error:
605          buffer_free(kdf);          buffer_free(kdf);
606          buffer_free(encoded);          buffer_free(encoded);
607          buffer_free(copy_consumed);          buffer_free(copy_consumed);
608            cipher_free_SSH2(cipher_ctx);
609    
610          free(ciphername);          free(ciphername);
611          free(kdfname);          free(kdfname);
# Line 615  error: Line 614  error:
614          free(salt);          free(salt);
615          free(comment);          free(comment);
616    
         if (cipher_ctx) {  
                 EVP_CIPHER_CTX_free(cipher_ctx);  
         }  
   
617          // KDF ではなかった          // KDF ではなかった
618          if (keyfmt == NULL) {          if (keyfmt == NULL) {
619                  fseek(fp, 0, SEEK_SET);                  fseek(fp, 0, SEEK_SET);
# Line 943  Key *read_SSH2_PuTTY_private_key(PTInstV Line 938  Key *read_SSH2_PuTTY_private_key(PTInstV
938                  }                  }
939    
940                  cipher_ctx = EVP_CIPHER_CTX_new();                  cipher_ctx = EVP_CIPHER_CTX_new();
941                  if (ctx == NULL) {                  if (cipher_ctx == NULL) {
942                          EVP_MD_CTX_free(ctx);                          EVP_MD_CTX_free(ctx);
943                          goto error;                          goto error;
944                  }                  }
# Line 970  Key *read_SSH2_PuTTY_private_key(PTInstV Line 965  Key *read_SSH2_PuTTY_private_key(PTInstV
965                  if (ret == 0) {                  if (ret == 0) {
966                          strncpy_s(errmsg, errmsg_len, "Key decrypt error", _TRUNCATE);                          strncpy_s(errmsg, errmsg_len, "Key decrypt error", _TRUNCATE);
967                          free(decrypted);                          free(decrypted);
968                          cipher_cleanup_SSH2(cipher_ctx);                          cipher_free_SSH2(cipher_ctx);
                         EVP_CIPHER_CTX_free(cipher_ctx);  
969                          goto error;                          goto error;
970                  }                  }
971                  buffer_clear(prikey);                  buffer_clear(prikey);
972                  buffer_append(prikey, decrypted, len);                  buffer_append(prikey, decrypted, len);
973                  free(decrypted);                  free(decrypted);
974                  cipher_cleanup_SSH2(cipher_ctx);                  cipher_free_SSH2(cipher_ctx);
                 EVP_CIPHER_CTX_free(cipher_ctx);  
975          }          }
976    
977          // verity MAC          // verity MAC
# Line 1541  Key *read_SSH2_SECSH_private_key(PTInstV Line 1534  Key *read_SSH2_SECSH_private_key(PTInstV
1534                  ret = EVP_Cipher(cipher_ctx, decrypted, blob->buf + blob->offset, len);                  ret = EVP_Cipher(cipher_ctx, decrypted, blob->buf + blob->offset, len);
1535                  if (ret == 0) {                  if (ret == 0) {
1536                          strncpy_s(errmsg, errmsg_len, "Key decrypt error", _TRUNCATE);                          strncpy_s(errmsg, errmsg_len, "Key decrypt error", _TRUNCATE);
1537                          cipher_cleanup_SSH2(cipher_ctx);                          cipher_free_SSH2(cipher_ctx);
                         EVP_CIPHER_CTX_free(cipher_ctx);  
1538                          goto error;                          goto error;
1539                  }                  }
1540                  buffer_append(blob2, decrypted, len);                  buffer_append(blob2, decrypted, len);
1541                  free(decrypted);                  free(decrypted);
1542                  cipher_cleanup_SSH2(cipher_ctx);                  cipher_free_SSH2(cipher_ctx);
                 EVP_CIPHER_CTX_free(cipher_ctx);  
1543    
1544                  *invalid_passphrase = TRUE;                  *invalid_passphrase = TRUE;
1545          }          }

Legend:
Removed from v.9208  
changed lines
  Added in v.9209

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26