2

我正在尝试使用 Crypt::OpenSSL::EC 模块中的 Crypt::OpenSSL::EC::EC_POINT::mul() 函数。它有这样的 C 原型:

int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx)

而且我需要传递 NULL, NULL 而不是EC_POINT *q,const BIGNUM *m就像这里所做的那样:https ://stackoverflow.com/a/12482384/3090865

但是这个模块有这样的类型图:

INPUT
BIGNUM
    if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
    $var = (${type}) SvIV( SvRV( $arg ) );

EC_METHOD
    if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
    $var = (${type}) SvIV( SvRV( $arg ) );

EC_GROUP
    if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
    $var = (${type}) SvIV( SvRV( $arg ) );

EC_POINT
    if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
    $var = (${type}) SvIV( SvRV( $arg ) );

EC_KEY
    if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
    $var = (${type}) SvIV( SvRV( $arg ) );

所以,如果我通过 undef 或 0,我会得到“argument is not an object”错误。是否可以在不更改此模块的情况下制作我想要的东西?也许我可以以某种方式创建基于 NULL 的对象?

4

1 回答 1

3

根据类型图,将引用传递给零\0应该可以:

Crypt::OpenSSL::EC::EC_POINT::mul($group, $r, $n, \0, \0, $ctx);
于 2017-04-30T18:49:15.693 回答