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

static int generate_rsa_key ( RSA **  rsa_p,
ipmsg_cap_t  key_type 
) [static]

RSAの鍵ペア(公開鍵/秘密鍵)を生成する

Parameters:
[in] fpath 保存先ファイル名
[out] rsa 読み込んだ秘密鍵を格納するRSA情報のアドレスの返却領域
Return values:
0 正常終了
-EINVAL 引数異常(fpathまたはrsaがNULLである).
-EPERM 安全な鍵を生成できなかった.
Attention:
内部リンケージ

Definition at line 702 of file pubcrypt.c.

References G2IPMSG_CRYPT_EBUFSIZ, and pcrypt_get_rsa_key_length().

Referenced by pcrypt_crypt_init_keys().

                                                    {
      char     errbuf[G2IPMSG_CRYPT_EBUFSIZ];
      int          rc = 0;
      RSA        *rsa = NULL;
      int      keylen = 0;
      int retry_count = RSA_KEYGEN_RETRY;

      if (rsa_p == NULL)
            return -EINVAL;

      rc = pcrypt_get_rsa_key_length(key_type, &keylen);
      if (rc != 0)
            return rc;
  
      dbg_out("generate key length:%d\n", keylen);

      /*
       * RSA 鍵生成 
       */
 retry:
      rsa = RSA_generate_key(keylen, RSA_F4, NULL, NULL);
      if ( rsa == NULL ){
            rc = ERR_get_error();
            dbg_out("in generate_key: err=%s\n", ERR_error_string(rc, errbuf));

            return -rc;
      }

      /*
       * RSA鍵の安全性を検証する
       */
      if (RSA_check_key(rsa) > 0){ /* 安全な鍵である  */
            *rsa_p = rsa;
            rc = 0;
      } else {
            /*
             * 安全な鍵の生成に失敗した場合は, 鍵生成をやり直す.
             */
            rc = ERR_get_error();
            err_out("This is invalid key: err=%s\n", ERR_error_string(rc, errbuf));

            RSA_free(rsa);

            rc = -EPERM;
            --retry_count;
            if (retry_count > 0)
                  goto retry;
      }

  return rc;
}


Generated by  Doxygen 1.6.0   Back to index