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

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

秘密鍵をファイルから読み込む

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

Definition at line 593 of file pubcrypt.c.

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

Referenced by pcrypt_load_rsa_key().

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


      if ( (fpath == NULL) || (rsa == NULL) )
            return -EINVAL;

      rc = open_key_file_for_read(&fd, fpath);
      if (rc != 0)
            goto error_out;

    
      fp = fdopen(fd, "r");
      if (fp == NULL) {
            rc = -errno;
            goto error_out;
      }

      ref = PEM_read_RSAPrivateKey(fp,rsa, ipmsg_pem_passwd_call_back, 
                             (void *)passwd);

      if (ref == NULL){
        rc = ERR_get_error();
        err_out("Can not load 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;  

error_out:
      return rc;
}


Generated by  Doxygen 1.6.0   Back to index