本文整理汇总了C++中BN_one函数的典型用法代码示例。如果您正苦于以下问题:C++ BN_one函数的具体用法?C++ BN_one怎么用?C++ BN_one使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了BN_one函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: test_exp_mod_zero
/*
* test_exp_mod_zero tests that x**0 mod 1 == 0. It returns zero on success.
*/
static int test_exp_mod_zero()
{
BIGNUM a, p, m;
BIGNUM r;
BN_CTX *ctx = BN_CTX_new();
int ret = 1;
BN_init(&m);
BN_one(&m);
BN_init(&a);
BN_one(&a);
BN_init(&p);
BN_zero(&p);
BN_init(&r);
BN_mod_exp(&r, &a, &p, &m, ctx);
BN_CTX_free(ctx);
if (BN_is_zero(&r))
ret = 0;
else {
printf("1**0 mod 1 = ");
BN_print_fp(stdout, &r);
printf(", should be 0\n");
}
BN_free(&r);
BN_free(&a);
BN_free(&p);
BN_free(&m);
return ret;
}
开发者ID:1564143452,项目名称:kbengine,代码行数:38,代码来源:exptest.c
示例2: BN_CTX_new
BIGNUM * Polynomial::GetLagIntCoe(vector<int> *allParties,int index)
{
BN_CTX *ctx = BN_CTX_new();
BIGNUM *up = BN_new();
BN_one(up);
BIGNUM *down = BN_new();
BN_one(down);
vector<int>::iterator iter;
for (iter=allParties->begin();iter!= allParties->end();iter++)
{
if(*iter == index)
continue;
BIGNUM *j = BN_int2bn(-(*iter));
BIGNUM *i_j = BN_int2bn(index-(*iter));
BN_mul(up,up,j,ctx);
BN_mul(down,down,i_j,ctx);
}
BIGNUM * result = BN_new();
BN_mod_inverse(result,down,p,ctx);
BN_mod_mul(result,result,up,p,ctx);
BN_free(up);
BN_free(down);
BN_CTX_free(ctx);
return result;
}
开发者ID:minatojhz,项目名称:ABE,代码行数:28,代码来源:Polynomial.cpp
示例3: compute_y
void compute_y(BIGNUM *bn_y, BIGNUM *bn_a, BIGNUM *bn_r, BIGNUM *bn_n, BN_CTX *bn_ctx){
BIGNUM *bn_i = NULL;
BIGNUM *bn_1 = NULL;
int num_bits = 0;
int i = 0;
BIGNUM **bn_array = NULL;
num_bits = BN_num_bits(bn_r);
bn_array = (BIGNUM **)malloc(sizeof(BIGNUM*) * num_bits);
computeBNArray(bn_array, bn_a, bn_n, bn_ctx, num_bits);
bn_1 = BN_new();
bn_i = BN_new();
BN_one(bn_1);
BN_zero(bn_i);
BN_one(bn_y);
for(i = 0; i < num_bits; i++){
if(BN_is_bit_set(bn_r, i) == 1){
BN_mod_mul(bn_y, bn_y, bn_array[i], bn_n, bn_ctx);
}
}
BN_free(bn_1);
BN_free(bn_i);
}
开发者ID:fengwen2013,项目名称:Generating-Primes,代码行数:25,代码来源:millerrabin.c
示例4: bnem_xgcd
// Extended Euclidean algorithm, Knuth's Algorithm X
int bnem_xgcd (BIGNUM *rx, BIGNUM *ry, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
{
int result = 0; // default return value is failure
BIGNUM x, y, lastx, lasty, q, r, t1, t2, wa, wb;
BN_init (&x);
BN_init (&y);
BN_init (&lastx);
BN_init (&lasty);
BN_init (&q);
BN_init (&r);
BN_init (&t1);
BN_init (&t2);
BN_init (&wa);
BN_init (&wb);
if ( ! BN_copy (&wa, a)) goto err;
if ( ! BN_copy (&wb, b)) goto err;
/*
x, lastx = 0, 1
y, lasty = 1, 0
while b:
q, r = divmod (a, b)
a, b = b, r
x, lastx = (lastx - q*x), x
y, lasty = (lasty - q*y), y
return lastx, lasty
*/
BN_one (&lastx);
BN_one (&y);
while ( ! BN_is_zero (&wb)) {
if ( ! BN_div (&q, &r, &wa, &wb, ctx)) goto err;
if ( ! BN_copy (&wa, &wb)) goto err;
if ( ! BN_copy (&wb, &r)) goto err;
if ( ! BN_copy (&t1, &x)) goto err;
if ( ! BN_mul (&t2, &q, &x, ctx)) goto err;
if ( ! BN_sub (&x, &lastx, &t2)) goto err;
if ( ! BN_copy (&lastx, &t1)) goto err;
if ( ! BN_copy (&t1, &y)) goto err;
if ( ! BN_mul (&t2, &q, &y, ctx)) goto err;
if ( ! BN_sub (&y, &lasty, &t2)) goto err;
if ( ! BN_copy (&lasty, &t1)) goto err;
}
if (rx) { if ( ! BN_copy (rx, &lastx)) goto err; }
if (ry) { if ( ! BN_copy (ry, &lasty)) goto err; }
result = 1; // result is success
err:
BN_clear_free (&x);
BN_clear_free (&y);
BN_clear_free (&lastx);
BN_clear_free (&lasty);
BN_clear_free (&q);
BN_clear_free (&r);
BN_clear_free (&t1);
BN_clear_free (&t2);
BN_clear_free (&wa);
BN_clear_free (&wb);
return result;
} // bnem_xgcd
开发者ID:melwilson,项目名称:bignum-embedded,代码行数:60,代码来源:bnem_lib.c
示例5: test_exp
int test_exp(BIO *bp, BN_CTX *ctx)
{
BIGNUM *a,*b,*d,*e,*one;
int i;
a=BN_new();
b=BN_new();
d=BN_new();
e=BN_new();
one=BN_new();
BN_one(one);
for (i=0; i<num2; i++)
{
BN_bntest_rand(a,20+i*5,0,0); /**/
BN_bntest_rand(b,2+i,0,0); /**/
if (!BN_exp(d,a,b,ctx))
return(00);
if (bp != NULL)
{
if (!results)
{
BN_print(bp,a);
BIO_puts(bp," ^ ");
BN_print(bp,b);
BIO_puts(bp," - ");
}
BN_print(bp,d);
BIO_puts(bp,"\n");
}
BN_one(e);
for( ; !BN_is_zero(b) ; BN_sub(b,b,one))
BN_mul(e,e,a,ctx);
BN_sub(e,e,d);
if(!BN_is_zero(e))
{
fprintf(stderr,"Exponentiation test failed!\n");
return 0;
}
}
BN_free(a);
BN_free(b);
BN_free(d);
BN_free(e);
BN_free(one);
return(1);
}
开发者ID:froggatt,项目名称:edimax-br-6528n,代码行数:49,代码来源:bntest.c
示例6: ec_GF2m_simple_make_affine
/* Forces the given EC_POINT to internally use affine coordinates. */
int ec_GF2m_simple_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx)
{
BN_CTX *new_ctx = NULL;
BIGNUM *x, *y;
int ret = 0;
if (point->Z_is_one || EC_POINT_is_at_infinity(group, point))
return 1;
if (ctx == NULL)
{
ctx = new_ctx = BN_CTX_new();
if (ctx == NULL)
return 0;
}
BN_CTX_start(ctx);
x = BN_CTX_get(ctx);
y = BN_CTX_get(ctx);
if (y == NULL) goto err;
if (!EC_POINT_get_affine_coordinates_GF2m(group, point, x, y, ctx)) goto err;
if (!BN_copy(&point->X, x)) goto err;
if (!BN_copy(&point->Y, y)) goto err;
if (!BN_one(&point->Z)) goto err;
ret = 1;
err:
if (ctx) BN_CTX_end(ctx);
if (new_ctx) BN_CTX_free(new_ctx);
return ret;
}
开发者ID:vmlemon,项目名称:OpenBSD-lib-patches,代码行数:34,代码来源:ec2_smpl.c
示例7: get_sequence
data_chunk deterministic_wallet::generate_public_key(
size_t n, bool for_change) const
{
hash_digest sequence = get_sequence(n, for_change);
ssl_bignum x, y, z;
BN_bin2bn(sequence.data(), sequence.size(), z);
BN_bin2bn(master_public_key_.data(), 32, x);
BN_bin2bn(master_public_key_.data() + 32, 32, y);
// Create a point.
ec_group group(EC_GROUP_new_by_curve_name(NID_secp256k1));
ec_point mpk(EC_POINT_new(group));
bn_ctx ctx(BN_CTX_new());
EC_POINT_set_affine_coordinates_GFp(group, mpk, x, y, ctx);
ec_point result(EC_POINT_new(group));
// result pubkey_point = mpk_pubkey_point + z*curve.generator
ssl_bignum one;
BN_one(one);
EC_POINT_mul(group, result, z, mpk, one, ctx);
// Create the actual public key.
EC_POINT_get_affine_coordinates_GFp(group, result, x, y, ctx);
// 04 + x + y
data_chunk raw_pubkey{0x04};
extend_data(raw_pubkey, bignum_data(x));
extend_data(raw_pubkey, bignum_data(y));
return raw_pubkey;
}
开发者ID:jestin,项目名称:libbitcoin-old,代码行数:30,代码来源:deterministic_wallet.cpp
示例8: selfTestGeneralOps1
CHECK_RETVAL_BOOL \
static BOOLEAN selfTestGeneralOps1( void )
{
BIGNUM a;
/* Simple tests that don't need the support of higher-level routines
like importBignum() */
BN_init( &a );
if( !BN_zero( &a ) )
return( FALSE );
if( !BN_is_zero( &a ) || BN_is_one( &a ) )
return( FALSE );
if( !BN_is_word( &a, 0 ) || BN_is_word( &a, 1 ) )
return( FALSE );
if( BN_is_odd( &a ) )
return( FALSE );
if( BN_get_word( &a ) != 0 )
return( FALSE );
if( !BN_one( &a ) )
return( FALSE );
if( BN_is_zero( &a ) || !BN_is_one( &a ) )
return( FALSE );
if( BN_is_word( &a, 0 ) || !BN_is_word( &a, 1 ) )
return( FALSE );
if( !BN_is_odd( &a ) )
return( FALSE );
if( BN_num_bytes( &a ) != 1 )
return( FALSE );
if( BN_get_word( &a ) != 1 )
return( FALSE );
BN_clear( &a );
return( TRUE );
}
开发者ID:deflomu,项目名称:cryptlib,代码行数:34,代码来源:ctx_bntest.c
示例9: BN_solinas2bn
int BN_solinas2bn(const BN_SOLINAS *solinas, BIGNUM *bn)
{
int ret = 0;
BIGNUM *tmp = NULL;
if (!solinas || !bn) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_MALLOC_FAILURE);
return 0;
}
if (solinas->b <= 0 || solinas->a <= solinas->b
|| (solinas->s != 1 && solinas->s != -1)
|| (solinas->c != 1 && solinas->c != -1)) {
BNerr(BN_F_BN_SOLINAS2BN, BN_R_INVALID_SOLINAS_PARAMETERS);
return 0;
}
if (!(tmp = BN_new())) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_MALLOC_FAILURE);
goto end;
}
BN_one(tmp);
if (!BN_lshift(bn, tmp, solinas->a)) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_BN_LIB);
goto end;
}
if (!BN_lshift(tmp, tmp, solinas->b)) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_BN_LIB);
goto end;
}
if (!BN_add_word(tmp, solinas->c)) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_BN_LIB);
goto end;
}
if (solinas->s > 0) {
if (!BN_add(bn, bn, tmp)) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_BN_LIB);
goto end;
}
} else {
if (!BN_sub(bn, bn, tmp)) {
BNerr(BN_F_BN_SOLINAS2BN, ERR_R_BN_LIB);
goto end;
}
}
/* check if it is a prime */
ret = 1;
end:
BN_free(tmp);
return ret;
}
开发者ID:zsdev2015,项目名称:GmSSL,代码行数:58,代码来源:bn_solinas.c
示例10: gf2m_Mxy
/* Compute the x, y affine coordinates from the point (x1, z1) (x2, z2)
* using Montgomery point multiplication algorithm Mxy() in appendix of
* Lopez, J. and Dahab, R. "Fast multiplication on elliptic curves over
* GF(2^m) without precomputation" (CHES '99, LNCS 1717).
* Returns:
* 0 on error
* 1 if return value should be the point at infinity
* 2 otherwise
*/
static int gf2m_Mxy(const EC_GROUP *group, const BIGNUM *x, const BIGNUM *y, BIGNUM *x1,
BIGNUM *z1, BIGNUM *x2, BIGNUM *z2, BN_CTX *ctx)
{
BIGNUM *t3, *t4, *t5;
int ret = 0;
if (BN_is_zero(z1))
{
BN_zero(x2);
BN_zero(z2);
return 1;
}
if (BN_is_zero(z2))
{
if (!BN_copy(x2, x)) return 0;
if (!BN_GF2m_add(z2, x, y)) return 0;
return 2;
}
/* Since Mxy is static we can guarantee that ctx != NULL. */
BN_CTX_start(ctx);
t3 = BN_CTX_get(ctx);
t4 = BN_CTX_get(ctx);
t5 = BN_CTX_get(ctx);
if (t5 == NULL) goto err;
if (!BN_one(t5)) goto err;
if (!group->meth->field_mul(group, t3, z1, z2, ctx)) goto err;
if (!group->meth->field_mul(group, z1, z1, x, ctx)) goto err;
if (!BN_GF2m_add(z1, z1, x1)) goto err;
if (!group->meth->field_mul(group, z2, z2, x, ctx)) goto err;
if (!group->meth->field_mul(group, x1, z2, x1, ctx)) goto err;
if (!BN_GF2m_add(z2, z2, x2)) goto err;
if (!group->meth->field_mul(group, z2, z2, z1, ctx)) goto err;
if (!group->meth->field_sqr(group, t4, x, ctx)) goto err;
if (!BN_GF2m_add(t4, t4, y)) goto err;
if (!group->meth->field_mul(group, t4, t4, t3, ctx)) goto err;
if (!BN_GF2m_add(t4, t4, z2)) goto err;
if (!group->meth->field_mul(group, t3, t3, x, ctx)) goto err;
if (!group->meth->field_div(group, t3, t5, t3, ctx)) goto err;
if (!group->meth->field_mul(group, t4, t3, t4, ctx)) goto err;
if (!group->meth->field_mul(group, x2, x1, t3, ctx)) goto err;
if (!BN_GF2m_add(z2, x2, x)) goto err;
if (!group->meth->field_mul(group, z2, z2, t4, ctx)) goto err;
if (!BN_GF2m_add(z2, z2, y)) goto err;
ret = 2;
err:
BN_CTX_end(ctx);
return ret;
}
开发者ID:Chenhx,项目名称:moai-dev,代码行数:67,代码来源:ec2_mult.c
示例11: test_lshift
int test_lshift(BIO *bp,BN_CTX *ctx,BIGNUM *a_)
{
BIGNUM *a,*b,*c,*d;
int i;
b=BN_new();
c=BN_new();
d=BN_new();
BN_one(c);
if(a_)
a=a_;
else
{
a=BN_new();
BN_bntest_rand(a,200,0,0); /**/
a->neg=rand_neg();
}
for (i=0; i<num0; i++)
{
BN_lshift(b,a,i+1);
BN_add(c,c,c);
if (bp != NULL)
{
if (!results)
{
BN_print(bp,a);
BIO_puts(bp," * ");
BN_print(bp,c);
BIO_puts(bp," - ");
}
BN_print(bp,b);
BIO_puts(bp,"\n");
}
BN_mul(d,a,c,ctx);
BN_sub(d,d,b);
if(!BN_is_zero(d))
{
fprintf(stderr,"Left shift test failed!\n");
fprintf(stderr,"a=");
BN_print_fp(stderr,a);
fprintf(stderr,"\nb=");
BN_print_fp(stderr,b);
fprintf(stderr,"\nc=");
BN_print_fp(stderr,c);
fprintf(stderr,"\nd=");
BN_print_fp(stderr,d);
fprintf(stderr,"\n");
return 0;
}
}
BN_free(a);
BN_free(b);
BN_free(c);
BN_free(d);
return(1);
}
开发者ID:froggatt,项目名称:edimax-br-6528n,代码行数:57,代码来源:bntest.c
示例12: gost_do_verify
int gost_do_verify (const unsigned char *dgst, int dgst_len, DSA_SIG * sig, DSA * dsa)
{
BIGNUM *md, *tmp = NULL;
BIGNUM *q2 = NULL;
BIGNUM *u = NULL, *v = NULL, *z1 = NULL, *z2 = NULL;
BIGNUM *tmp2 = NULL, *tmp3 = NULL;
int ok;
BN_CTX *ctx = BN_CTX_new ();
BN_CTX_start (ctx);
if (BN_cmp (sig->s, dsa->q) >= 1 || BN_cmp (sig->r, dsa->q) >= 1)
{
GOSTerr (GOST_F_GOST_DO_VERIFY, GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q);
return 0;
}
md = hashsum2bn (dgst);
tmp = BN_CTX_get (ctx);
v = BN_CTX_get (ctx);
q2 = BN_CTX_get (ctx);
z1 = BN_CTX_get (ctx);
z2 = BN_CTX_get (ctx);
tmp2 = BN_CTX_get (ctx);
tmp3 = BN_CTX_get (ctx);
u = BN_CTX_get (ctx);
BN_mod (tmp, md, dsa->q, ctx);
if (BN_is_zero (tmp))
{
BN_one (md);
}
BN_copy (q2, dsa->q);
BN_sub_word (q2, 2);
BN_mod_exp (v, md, q2, dsa->q, ctx);
BN_mod_mul (z1, sig->s, v, dsa->q, ctx);
BN_sub (tmp, dsa->q, sig->r);
BN_mod_mul (z2, tmp, v, dsa->p, ctx);
BN_mod_exp (tmp, dsa->g, z1, dsa->p, ctx);
BN_mod_exp (tmp2, dsa->pub_key, z2, dsa->p, ctx);
BN_mod_mul (tmp3, tmp, tmp2, dsa->p, ctx);
BN_mod (u, tmp3, dsa->q, ctx);
ok = BN_cmp (u, sig->r);
BN_free (md);
BN_CTX_end (ctx);
BN_CTX_free (ctx);
if (ok != 0)
{
GOSTerr (GOST_F_GOST_DO_VERIFY, GOST_R_SIGNATURE_MISMATCH);
}
return (ok == 0);
}
开发者ID:274914765,项目名称:C,代码行数:57,代码来源:gost_sign.c
示例13: BN_exp
int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) {
int i, bits, ret = 0;
BIGNUM *v, *rr;
if ((p->flags & BN_FLG_CONSTTIME) != 0) {
/* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
return 0;
}
BN_CTX_start(ctx);
if (r == a || r == p) {
rr = BN_CTX_get(ctx);
} else {
rr = r;
}
v = BN_CTX_get(ctx);
if (rr == NULL || v == NULL) {
goto err;
}
if (BN_copy(v, a) == NULL) {
goto err;
}
bits = BN_num_bits(p);
if (BN_is_odd(p)) {
if (BN_copy(rr, a) == NULL) {
goto err;
}
} else {
if (!BN_one(rr)) {
goto err;
}
}
for (i = 1; i < bits; i++) {
if (!BN_sqr(v, v, ctx)) {
goto err;
}
if (BN_is_bit_set(p, i)) {
if (!BN_mul(rr, rr, v, ctx)) {
goto err;
}
}
}
if (r != rr && !BN_copy(r, rr)) {
goto err;
}
ret = 1;
err:
BN_CTX_end(ctx);
return ret;
}
开发者ID:DemiMarie,项目名称:ring,代码行数:57,代码来源:bn_test_lib.c
示例14: test_exp_mod_zero
/*
* test_exp_mod_zero tests that x**0 mod 1 == 0. It returns zero on success.
*/
static int test_exp_mod_zero()
{
BIGNUM *a = NULL, *p = NULL, *m = NULL;
BIGNUM *r = NULL;
BN_CTX *ctx = BN_CTX_new();
int ret = 1;
m = BN_new();
if (!m)
goto err;
BN_one(m);
a = BN_new();
if (!a)
goto err;
BN_one(a);
p = BN_new();
if (!p)
goto err;
BN_zero(p);
r = BN_new();
if (!r)
goto err;
BN_mod_exp(r, a, p, m, ctx);
BN_CTX_free(ctx);
if (BN_is_zero(r))
ret = 0;
else {
printf("1**0 mod 1 = ");
BN_print_fp(stdout, r);
printf(", should be 0\n");
}
err:
BN_free(r);
BN_free(a);
BN_free(p);
BN_free(m);
return ret;
}
开发者ID:GH-JY,项目名称:openssl,代码行数:47,代码来源:exptest.c
示例15: ASSERT
/**
https://core.telegram.org/api/end-to-end says:
"Both clients in a secret chat creation are to check that g, g_a and g_b are greater than one and smaller than p-1.
Recommented checking that g_a and g_b are between 2^{2048-64} and p - 2^{2048-64} as well."
*/
qint32 CryptoUtils::checkCalculatedParams(const BIGNUM *gAOrB, const BIGNUM *g, const BIGNUM *p) {
ASSERT(gAOrB);
ASSERT(g);
ASSERT(p);
// 1) gAOrB and g greater than one and smaller than p-1
BIGNUM one;
BN_init(&one);
Utils::ensure(BN_one(&one));
BIGNUM *pMinusOne = BN_dup(p);
Utils::ensure(BN_sub_word(pMinusOne, 1));
// check params greater than one
if (BN_cmp(gAOrB, &one) <= 0) return -1;
if (BN_cmp(g, &one) <= 0) return -1;
// check params <= p-1
if (BN_cmp(gAOrB, pMinusOne) >= 0) return -1;
if (BN_cmp(g, pMinusOne) >= 0) return -1;
// 2) gAOrB between 2^{2048-64} and p - 2^{2048-64}
quint64 expWord = 2048 - 64;
BIGNUM exp;
BN_init(&exp);
Utils::ensure(BN_set_word(&exp, expWord));
BIGNUM base;
BN_init(&base);
Utils::ensure(BN_set_word(&base, 2));
// lowLimit = base ^ exp
BIGNUM lowLimit;
BN_init(&lowLimit);
Utils::ensure(BN_exp(&lowLimit, &base, &exp, BN_ctx));
// highLimit = p - lowLimit
BIGNUM highLimit;
BN_init(&highLimit);
BN_sub(&highLimit, p, &lowLimit);
if (BN_cmp(gAOrB, &lowLimit) < 0) return -1;
if (BN_cmp(gAOrB, &highLimit) > 0) return -1;
BN_free(&one);
BN_free(pMinusOne);
BN_free(&exp);
BN_free(&lowLimit);
BN_free(&highLimit);
delete g;
delete gAOrB;
delete p;
return 0;
}
开发者ID:Ahamtech,项目名称:TB10,代码行数:60,代码来源:cryptoutils.cpp
示例16: fermat_question_ask
static RSA *
fermat_question_ask(const RSA *rsa)
{
BIGNUM
*a = BN_new(),
*b = BN_new(),
*a2 = BN_new(),
*b2 = BN_new();
BIGNUM *n = rsa->n;
BIGNUM
*tmp = BN_new(),
*rem = BN_new(),
*dssdelta = BN_new();
BN_CTX *ctx = BN_CTX_new();
RSA *ret = NULL;
BN_sqrtmod(tmp, rem, n, ctx);
/* Δ = |p - q| = |a + b - a + b| = |2b| > √N 2⁻¹⁰⁰ */
/* BN_rshift(dssdelta, tmp, 101); */
BN_one(dssdelta);
BN_lshift(dssdelta, dssdelta, BN_num_bits(n) / 4 + 10);
BN_copy(a, tmp);
BN_sqr(a2, a, ctx);
do {
/* a² += 2a + 1 */
BN_lshift1(tmp, a);
BN_uiadd1(tmp);
BN_add(a2, a2, tmp);
/* a += 1 */
BN_uiadd1(a);
/* b² = a² - N */
BN_usub(b2, a2, n);
/* b */
BN_sqrtmod(b, rem, b2, ctx);
} while (!BN_is_zero(rem) && BN_cmp(b, dssdelta) < 1);
if (BN_is_zero(rem)) {
BN_uadd(a, a, b);
ret = qa_RSA_recover(rsa, a, ctx);
}
BN_CTX_free(ctx);
BN_free(a);
BN_free(b);
BN_free(a2);
BN_free(b2);
BN_free(dssdelta);
BN_free(tmp);
BN_free(rem);
return ret;
}
开发者ID:fxfactorial,项目名称:bachelor,代码行数:53,代码来源:fermat.c
示例17: DSA_SIG_new
/*
* Computes signature and returns it as DSA_SIG structure
*/
DSA_SIG *gost_do_sign (const unsigned char *dgst, int dlen, DSA * dsa)
{
BIGNUM *k = NULL, *tmp = NULL, *tmp2 = NULL;
DSA_SIG *newsig = DSA_SIG_new ();
BIGNUM *md = hashsum2bn (dgst);
/* check if H(M) mod q is zero */
BN_CTX *ctx = BN_CTX_new ();
BN_CTX_start (ctx);
if (!newsig)
{
GOSTerr (GOST_F_GOST_DO_SIGN, GOST_R_NO_MEMORY);
goto err;
}
tmp = BN_CTX_get (ctx);
k = BN_CTX_get (ctx);
tmp2 = BN_CTX_get (ctx);
BN_mod (tmp, md, dsa->q, ctx);
if (BN_is_zero (tmp))
{
BN_one (md);
}
do
{
do
{
/*Generate random number k less than q */
BN_rand_range (k, dsa->q);
/* generate r = (a^x mod p) mod q */
BN_mod_exp (tmp, dsa->g, k, dsa->p, ctx);
if (!(newsig->r))
newsig->r = BN_new ();
BN_mod (newsig->r, tmp, dsa->q, ctx);
}
while (BN_is_zero (newsig->r));
/* generate s = (xr + k(Hm)) mod q */
BN_mod_mul (tmp, dsa->priv_key, newsig->r, dsa->q, ctx);
BN_mod_mul (tmp2, k, md, dsa->q, ctx);
if (!newsig->s)
newsig->s = BN_new ();
BN_mod_add (newsig->s, tmp, tmp2, dsa->q, ctx);
}
while (BN_is_zero (newsig->s));
err:
BN_free (md);
BN_CTX_end (ctx);
BN_CTX_free (ctx);
return newsig;
}
开发者ID:274914765,项目名称:C,代码行数:55,代码来源:gost_sign.c
示例18: test_rshift
int test_rshift(BIO *bp,BN_CTX *ctx)
{
BIGNUM *a,*b,*c,*d,*e;
int i;
a=BN_new();
b=BN_new();
c=BN_new();
d=BN_new();
e=BN_new();
BN_one(c);
BN_bntest_rand(a,200,0,0); /**/
a->neg=rand_neg();
for (i=0; i<num0; i++)
{
BN_rshift(b,a,i+1);
BN_add(c,c,c);
if (bp != NULL)
{
if (!results)
{
BN_print(bp,a);
BIO_puts(bp," / ");
BN_print(bp,c);
BIO_puts(bp," - ");
}
BN_print(bp,b);
BIO_puts(bp,"\n");
}
BN_div(d,e,a,c,ctx);
BN_sub(d,d,b);
if(!BN_is_zero(d))
{
fprintf(stderr,"Right shift test failed!\n");
return 0;
}
}
BN_free(a);
BN_free(b);
BN_free(c);
BN_free(d);
BN_free(e);
return(1);
}
开发者ID:froggatt,项目名称:edimax-br-6528n,代码行数:45,代码来源:bntest.c
示例19: setup
void setup()
{
mod = BN_bin2bn( mod_buffer, /*len*/192, NULL );
// modOrder = ( mod - 1 ) / 2
BIGNUM* postSubtract = BN_new();
BIGNUM* oneBN = BN_new();
int ret = BN_one( oneBN );
if ( ret != 1 )
{
printf( "setup: BN_one failed: %d", ret );
}
ret = BN_sub( postSubtract, mod, oneBN ); // r = a - b
if ( ret != 1 )
{
printf( "setup: BN_sub failed: %d", ret );
}
BN_clear_free( oneBN );
modOrder = BN_new();
ret = BN_rshift1( modOrder, postSubtract ); // r = a Ö 2
if ( ret != 1 )
{
printf( "setup: BN_rshift1 failed: %d", ret );
}
BN_clear_free( postSubtract );
g2 = BN_new();
g3 = BN_new();
c1 = BN_new();
c2 = BN_new();
d1 = BN_new();
d2 = BN_new();
g3a = BN_new();
// exponent used in step 1
gen = BN_new();
ret = BN_set_word( gen, 2 );
match = 0;
}
开发者ID:jchrisweaver,项目名称:smp,代码行数:42,代码来源:smp.c
示例20: prime_totient
/*
* prime_totient(p,q,totient)
* Euler totient function of n, under the assumption
* that n = pq and p and q are prime
* inputs: BIGNUM* p
* BIGNUM* q
* output: BIGNUM* totient
*
* return value: 0 if failure
* 1 if success
*/
int prime_totient(BIGNUM* p, BIGNUM* q, BIGNUM* totient){
BIGNUM one;
BN_init(&one);
BN_one(&one);
BIGNUM* temp_p = BN_dup(p);
BIGNUM* temp_q = BN_dup(q);
BN_sub_word(temp_p, 1);
BN_sub_word(temp_q, 1);
BN_CTX* ctx = BN_CTX_new();
BN_mul(totient, temp_p, temp_q, ctx);
BN_free(temp_p);
BN_free(temp_q);
BN_CTX_free(ctx);
return 1;
}
开发者ID:tan01,项目名称:UDOO-PRNG,代码行数:32,代码来源:key_gen.c
注:本文中的BN_one函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论