1

私はopensslエンジンを書き始めたばかりです。必要なのは、さまざまな呼び出しへの関数ポインターを定義することだけです。署名を実装する RSA エンジンの場合、次のRSA_METHOD構造体を使用する必要があります。

 typedef struct rsa_meth_st
 {    
        const char *name;    

        int (*rsa_pub_enc)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);

        int (*rsa_pub_dec)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);    

        int (*rsa_priv_enc)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);

        int (*rsa_priv_dec)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);    

        int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);    

        int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
          const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);

        int (*init)(RSA *rsa);

        int (*finish)(RSA *rsa);    

        int flags;    

        char *app_data; /* ?? */    

        int (*rsa_sign)(int type, unsigned char *m, unsigned int m_len,
           unsigned char *sigret, unsigned int *siglen, RSA *rsa);//here m points to digest of type 'type'

        int (*rsa_verify)(int type, unsigned char *m, unsigned int m_len,
           unsigned char *sigbuf, unsigned int siglen, RSA *rsa);

 } RSA_METHOD;

ただし、 or構造体のようなSignInit,SignUpdateポインターは表示されません。EVP_CIPHEREVP_MD

をライブラリSignInitにリダイレクトする必要があります。ダイジェストSignUpdateではなく「元の」メッセージを実装に転送する必要があります。これどうやってするの?

4

1 に答える 1