这篇教程C++ BN_lshift函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中BN_lshift函数的典型用法代码示例。如果您正苦于以下问题:C++ BN_lshift函数的具体用法?C++ BN_lshift怎么用?C++ BN_lshift使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了BN_lshift函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: BN_solinas2bnint 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,
示例2: BN_mod/* rem != m */int BN_mod(BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx){#if 0 /* The old slow way */ int i, nm, nd; BIGNUM *dv; if(BN_ucmp(m, d) < 0) { return ((BN_copy(rem, m) == NULL) ? 0 : 1); } BN_CTX_start(ctx); dv = BN_CTX_get(ctx); if(!BN_copy(rem, m)) { goto err; } nm = BN_num_bits(rem); nd = BN_num_bits(d); if(!BN_lshift(dv, d, nm - nd)) { goto err; } for(i = nm - nd; i >= 0; i--) { if(BN_cmp(rem, dv) >= 0) { if(!BN_sub(rem, rem, dv)) { goto err; } } if(!BN_rshift1(dv, dv)) { goto err; } } BN_CTX_end(ctx); return (1);err: BN_CTX_end(ctx); return (0);#else return (BN_div(NULL, rem, m, d, ctx));#endif}
开发者ID:FFTEAM,项目名称:oscam,代码行数:35,
示例3: BN_div_wordBN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w) { BN_ULONG ret = 0; int i, j; bn_check_top(a); w &= BN_MASK2; if (!w) /* actually this an error (division by zero) */ return (BN_ULONG)-1; if (a->top == 0) return 0; /* normalize input (so bn_div_words doesn't complain) */ j = BN_BITS2 - BN_num_bits_word(w); w <<= j; if (!BN_lshift(a, a, j)) return (BN_ULONG)-1; for (i=a->top-1; i>=0; i--) { BN_ULONG l,d; l=a->d[i]; d=bn_div_words(ret,l,w); ret=(l-((d*w)&BN_MASK2))&BN_MASK2; a->d[i]=d; } if ((a->top > 0) && (a->d[a->top-1] == 0)) a->top--; ret >>= j; bn_check_top(a); return(ret); }
开发者ID:yyyyyao,项目名称:Slicer3-lib-mirrors,代码行数:35,
示例4: BN_divint BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx) { int i,nm,nd; int ret = 0; BIGNUM *D; bn_check_top(m); bn_check_top(d); if (BN_is_zero(d)) { BNerr(BN_F_BN_DIV,BN_R_DIV_BY_ZERO); return(0); } if (BN_ucmp(m,d) < 0) { if (rem != NULL) { if (BN_copy(rem,m) == NULL) return(0); } if (dv != NULL) BN_zero(dv); return(1); } BN_CTX_start(ctx); D = BN_CTX_get(ctx); if (dv == NULL) dv = BN_CTX_get(ctx); if (rem == NULL) rem = BN_CTX_get(ctx); if (D == NULL || dv == NULL || rem == NULL) goto end; nd=BN_num_bits(d); nm=BN_num_bits(m); if (BN_copy(D,d) == NULL) goto end; if (BN_copy(rem,m) == NULL) goto end; /* The next 2 are needed so we can do a dv->d[0]|=1 later * since BN_lshift1 will only work once there is a value :-) */ BN_zero(dv); if(bn_wexpand(dv,1) == NULL) goto end; dv->top=1; if (!BN_lshift(D,D,nm-nd)) goto end; for (i=nm-nd; i>=0; i--) { if (!BN_lshift1(dv,dv)) goto end; if (BN_ucmp(rem,D) >= 0) { dv->d[0]|=1; if (!BN_usub(rem,rem,D)) goto end; }/* CAN IMPROVE (and have now :=) */ if (!BN_rshift1(D,D)) goto end; } rem->neg=BN_is_zero(rem)?0:m->neg; dv->neg=m->neg^d->neg; ret = 1; end: BN_CTX_end(ctx); return(ret); }
开发者ID:EddieGarmon,项目名称:netduino-netmf,代码行数:60,
示例5: test_divinttest_div(BIO *bp, BN_CTX *ctx){ BIGNUM a, b,c, d, e; int i; int rc = 1; BN_init(&a); BN_init(&b); BN_init(&c); BN_init(&d); BN_init(&e); for (i = 0; i < num0 + num1; i++) { if (i < num1) { BN_bntest_rand(&a, 400, 0, 0); BN_copy(&b, &a); BN_lshift(&a, &a, i); BN_add_word(&a, i); } else BN_bntest_rand(&b, 50 + 3*(i - num1), 0, 0); a.neg = rand_neg(); b.neg = rand_neg(); BN_div(&d, &c, &a, &b, ctx); 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"); if (!results) { BN_print(bp, &a); BIO_puts(bp, " % "); BN_print(bp, &b); BIO_puts(bp, " - "); } BN_print(bp, &c); BIO_puts(bp, "/n"); } BN_mul(&e, &d, &b, ctx); BN_add(&d, &e, &c); BN_sub(&d, &d, &a); if (!BN_is_zero(&d)) { fprintf(stderr, "Division test failed!/n"); rc = 0; break; } } BN_free(&a); BN_free(&b); BN_free(&c); BN_free(&d); BN_free(&e); return (rc);}
开发者ID:NSGod,项目名称:openbsd,代码行数:59,
示例6: hit2hit_key/* * /fn hit2hit_key * * /param hit 128-bit Host Identity Tag * /param hit_key buffer for storing HIT_KEY; should be DHT_VAL_SIZE long * * /brief Create a HIT_KEY from a HIT by taking the middle 100 bits and adding * padding. */void hit2hit_key(hip_hit *hit, __u8 *hit_key){ BIGNUM *hk = BN_bin2bn((const unsigned char *)hit, HIT_SIZE, NULL); BN_lshift(hk, hk, 28); /* truncate to 100-bit number */ memset(hit_key, 0, DHT_KEY_SIZE); bn2bin_safe(hk, hit_key, 16); /* lower 28-bits now zeroes */ BN_free(hk);}
开发者ID:carriercomm,项目名称:openhip,代码行数:17,
示例7: test_lshiftint 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,
示例8: Java_java_math_NativeBN_BN_1shiftextern "C" void Java_java_math_NativeBN_BN_1shift(JNIEnv* env, jclass, jlong r, jlong a, int n) { if (!twoValidHandles(env, r, a)) return; if (n >= 0) { BN_lshift(toBigNum(r), toBigNum(a), n); } else { BN_rshift(toBigNum(r), toBigNum(a), -n); } throwExceptionIfNecessary(env);}
开发者ID:AlexeyBychkov,项目名称:robovm,代码行数:9,
示例9: bn_check_topstatic BIGNUM *euclid(BIGNUM *a, BIGNUM *b) { BIGNUM *t; int shifts=0; bn_check_top(a); bn_check_top(b); /* 0 <= b <= a */ while (!BN_is_zero(b)) { /* 0 < b <= a */ if (BN_is_odd(a)) { if (BN_is_odd(b)) { if (!BN_sub(a,a,b)) goto err; if (!BN_rshift1(a,a)) goto err; if (BN_cmp(a,b) < 0) { t=a; a=b; b=t; } } else /* a odd - b even */ { if (!BN_rshift1(b,b)) goto err; if (BN_cmp(a,b) < 0) { t=a; a=b; b=t; } } } else /* a is even */ { if (BN_is_odd(b)) { if (!BN_rshift1(a,a)) goto err; if (BN_cmp(a,b) < 0) { t=a; a=b; b=t; } } else /* a even - b even */ { if (!BN_rshift1(a,a)) goto err; if (!BN_rshift1(b,b)) goto err; shifts++; } } /* 0 <= b <= a */ } if (shifts) { if (!BN_lshift(a,a,shifts)) goto err; } bn_check_top(a); return(a);err: return(NULL); }
开发者ID:RyunosukeOno,项目名称:rayjack,代码行数:56,
示例10: test_divint test_div(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(); for (i = 0; i < num0 + num1; i++) { if (i < num1) { BN_bntest_rand(a, 400, 0, 0); BN_copy(b, a); BN_lshift(a, a, i); BN_add_word(a, i); } else BN_bntest_rand(b, 50 + 3 * (i - num1), 0, 0); a->neg = rand_neg(); b->neg = rand_neg(); BN_div(d, c, a, b, ctx); 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"); if (!results) { BN_print(bp, a); BIO_puts(bp, " % "); BN_print(bp, b); BIO_puts(bp, " - "); } BN_print(bp, c); BIO_puts(bp, "/n"); } BN_mul(e, d, b, ctx); BN_add(d, e, c); BN_sub(d, d, a); if (!BN_is_zero(d)) { fprintf(stderr, "Division test failed!/n"); return 0; } } BN_free(a); BN_free(b); BN_free(c); BN_free(d); BN_free(e); return (1);}
开发者ID:Adallom,项目名称:openssl,代码行数:56,
示例11: fermat_question_askstatic 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 C++ BN_lshift1函数代码示例 C++ BN_is_one函数代码示例
|