【发布时间】:2017-09-28 01:52:39
【问题描述】:
我正在尝试使用 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 的对象?
【问题讨论】:
-
“我需要传递 NULL,NULL 而不是 EC_POINT *q, const BIGNUM *m”——这没有意义。 NULL
q在 EC 术语中对应的想法是什么?无穷远点?m也有同样的问题? NULL是否对应0?我问是因为可能有更好的方法来尝试做任何你想做的事情。