Logo Search packages:      
Sourcecode: g2ipmsg version File versions  Download package

static int store_private_key ( const char *  fpath,
const RSA *  rsa,
const char *  passwd 
) [static]

秘密鍵を3DES-EDE-CBCに従って暗号化してファイルに保存する

Parameters:
[in] fpath 保存先ファイル名
[in] rsa 保存対象RSA情報のアドレス
[in] passwd 鍵保存時のPKCS#5鍵導出に使用するパスフレーズ NULLの場合は, 暗号化せずに鍵を保存する.
Return values:
0 正常終了
-EINVAL 引数異常(fpathまたはrsaがNULLである).
-EPERM ファイルへの書込み権がないか, 安全でないファイルへ書き込みを試みた
-ENOMEM メモリが不足しいる.
Attention:
内部リンケージ

Definition at line 478 of file pubcrypt.c.

References G2IPMSG_CRYPT_EBUFSIZ, ipmsg_pem_passwd_call_back(), and open_key_file_for_write().

Referenced by pcrypt_store_rsa_key().

                                                                        {
      int          rc = 0;
      int          fd = 0;
      FILE        *fp = NULL;
      EVP_CIPHER *enc = NULL;
      char     errbuf[G2IPMSG_CRYPT_EBUFSIZ];

      if ( (fpath == NULL) || (rsa == NULL) )
            return -EINVAL;
      
      rc = open_key_file_for_write(&fd, fpath);
      if (rc != 0)
            goto error_out;

      fp = fdopen(fd, "w");
      if (fp == NULL) {
            rc = -errno;
            goto error_out;
      }
      
      if (passwd != NULL) 
            enc = (EVP_CIPHER *)EVP_des_ede_cbc();
  
      rc = PEM_write_RSAPrivateKey(fp, (RSA *)rsa, enc, NULL, 0, 
                             ipmsg_pem_passwd_call_back, (void *)passwd);  

      if (rc == 0) {
            rc = ERR_get_error();
            err_out("Can not store private key %s : err=%s\n", 
                fpath, ERR_error_string(rc, errbuf));
            rc = -EPERM;
            fclose(fp);
            goto error_out;
      }

      rc = fclose(fp);
      if (rc != 0) {
            rc = -errno;
            goto error_out;
      }
      
      rc = 0;  

      dbg_out("Store key into %s\n", fpath);

error_out:
      return rc;
}


Generated by  Doxygen 1.6.0   Back to index