2013-02-18 4 views
5

RSA_generate_key()をHP-UX 11.11で使用します。しかし、hp-ux 11.11は/ dev/randomまたは/ dev/urandomを提供しないので、openssl prngdを使用する必要があります。/dev/randomまたは/ dev/urandomの代わりにprngdを使用するRSA_generate_key()

Cコードでデフォルトでどのように使用するか教えてください。私はopensslをインストールし、prngdを利用できます。

$ ls /opt/openssl/prngd/prngd 
/opt/openssl/prngd/prngd 

詳細情報が必要な場合はお知らせください。

答えて

2

prngdはネットワーク接続を介して "/ dev/random"と "/ dev/urandom"をシミュレートします。これは、UNIXストリームベースのドメインソケット( "/ var/run/egd-pool")またはTCPポート708または4840(デフォルト値---を変更可能)を使用するIPをサポートします。 (ノートをランダムなデータを得るために、これは、ファイルディスクリプタを返すあなたが読むために渡すことができます

#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/un.h> 

int devrandom(void) 
{ 
    union 
    { 
    struct sockaddr sa; 
    struct sockaddr_un path; 
    } location; 
    int sock;    

    memset(&location,0,sizeof(location)); 
    location.path.sun_family = AF_UNIX; 
    strcpy(location.path.sun_path,"/var/run/egd-pool"); 

    sock = socket(AF_UNIX,SOCK_STREAM,0); 
    if (sock < 0) 
    return -1; 

    if (connect(sock,&location.sa,sizeof(struct sockaddr_un)) < 0) 
    return -1; 

    return sock; 
} 

():

ので、Unixドメインソケットを使用して、それは次のようになり、これをコードはテストされていません)。 TCP/IPベースの接続はもう少し複雑です。ソケットをローカルアドレスにバインドしてリモートアドレスに接続する必要がありますが、そのタイプのコードではインターネット上に多くの例があります。

3

prngdがEGDと同じインターフェイスを使用していることに注意してください。指示はhereです。関心の引用である:カーネルあるいは

からエントロピーを提供DEV/*ランダムデバイス/なしのシステムでは

、EGD-インタフェース互換デーモンPRNGDを使用することができます。

OpenSSLは、RAND_bytes()でエントロピーが要求されたとき、またはソケットが/ var/run/egd-pool、/ dev/egd-にある場合、RAND_status()プールまたは/ etc/egd-poolにコピーします。あなたがPRNGDを実行したときに

ので、prngd /dev/egd-poolまたは他の選択肢の一つとして、それを実行し