您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ BN_get_word函数代码示例

51自学网 2021-06-01 19:51:54
  C++
这篇教程C++ BN_get_word函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中BN_get_word函数的典型用法代码示例。如果您正苦于以下问题:C++ BN_get_word函数的具体用法?C++ BN_get_word怎么用?C++ BN_get_word使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了BN_get_word函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: 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,


示例2: android_pubkey_encode

bool android_pubkey_encode(const RSA* key, uint8_t* key_buffer, size_t size) {  RSAPublicKey* key_struct = (RSAPublicKey*)key_buffer;  bool ret = false;  BN_CTX* ctx = BN_CTX_new();  BIGNUM* r32 = BN_new();  BIGNUM* n0inv = BN_new();  BIGNUM* rr = BN_new();  if (sizeof(RSAPublicKey) > size ||      RSA_size(key) != ANDROID_PUBKEY_MODULUS_SIZE) {    goto cleanup;  }  // Store the modulus size.  key_struct->modulus_size_words = ANDROID_PUBKEY_MODULUS_SIZE_WORDS;  // Compute and store n0inv = -1 / N[0] mod 2^32.  if (!ctx || !r32 || !n0inv || !BN_set_bit(r32, 32) ||      !BN_mod(n0inv, key->n, r32, ctx) ||      !BN_mod_inverse(n0inv, n0inv, r32, ctx) || !BN_sub(n0inv, r32, n0inv)) {    goto cleanup;  }  key_struct->n0inv = (uint32_t)BN_get_word(n0inv);  // Store the modulus.  if (!android_pubkey_encode_bignum(key->n, key_struct->modulus)) {    goto cleanup;  }  // Compute and store rr = (2^(rsa_size)) ^ 2 mod N.  if (!ctx || !rr || !BN_set_bit(rr, ANDROID_PUBKEY_MODULUS_SIZE * 8) ||      !BN_mod_sqr(rr, rr, key->n, ctx) ||      !android_pubkey_encode_bignum(rr, key_struct->rr)) {    goto cleanup;  }  // Store the exponent.  key_struct->exponent = (uint32_t)BN_get_word(key->e);  ret = true;cleanup:  BN_free(rr);  BN_free(n0inv);  BN_free(r32);  BN_CTX_free(ctx);  return ret;}
开发者ID:ArtBears,项目名称:platform_system_core,代码行数:48,


示例3: get_ulong

static u_longget_ulong(struct number *n){	normalize(n, 0);	return (BN_get_word(n->number));}
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:7,


示例4: test_BN_import_export

static inttest_BN_import_export(void){    BIGNUM *bn;    int ret = 0;    int i;    bn = BN_new();    for (i = 0; i < sizeof(ietests)/sizeof(ietests[0]); i++) {	size_t len;	unsigned char *p;	if (!BN_bin2bn((unsigned char*)ietests[i].data, ietests[i].len, bn))	    return 1;	if (BN_get_word(bn) != ietests[i].num)	    return 1;	len = BN_num_bytes(bn);	if (len != ietests[i].len)	    return 1;	p = malloc(len + 1);	p[len] = 0xf4;	BN_bn2bin(bn, p);	if (p[len] != 0xf4)	    return 1;	if (memcmp(p, ietests[i].data, ietests[i].len) != 0)	    return 1;	free(p);    }    BN_free(bn);    return ret;}
开发者ID:Henauxg,项目名称:minix,代码行数:32,


示例5: to_ascii

static voidto_ascii(void){	struct number *n;	struct value *value;	char str[2];	value = pop();	if (value != NULL) {		str[1] = '/0';		switch (value->type) {		case BCODE_NONE:			return;		case BCODE_NUMBER:			n = value->u.num;			normalize(n, 0);			if (BN_num_bits(n->number) > 8)				bn_check(BN_mask_bits(n->number, 8));			str[0] = (char)BN_get_word(n->number);			break;		case BCODE_STRING:			str[0] = value->u.string[0];			break;		}		stack_free_value(value);		push_string(bstrdup(str));	}}
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:28,


示例6: b58encode_check

void b58encode_check(void *buf, size_t len, char *result){	unsigned char hash1[32];	unsigned char hash2[32];	int d, p;	BN_CTX *bnctx;	BIGNUM *bn, *bndiv, *bntmp;	BIGNUM bna, bnb, bnbase, bnrem;	unsigned char *binres;	int brlen, zpfx;	bnctx = BN_CTX_new();	BN_init(&bna);	BN_init(&bnb);	BN_init(&bnbase);	BN_init(&bnrem);	BN_set_word(&bnbase, 58);	bn = &bna;	bndiv = &bnb;	brlen = (2 * len) + 4;	binres = (unsigned char*) malloc(brlen);	memcpy(binres, buf, len);	SHA256(binres, len, hash1);	SHA256(hash1, sizeof(hash1), hash2);	memcpy(&binres[len], hash2, 4);	BN_bin2bn(binres, len + 4, bn);	for (zpfx = 0; zpfx < (len + 4) && binres[zpfx] == 0; zpfx++);	p = brlen;	while (!BN_is_zero(bn)) {		BN_div(bndiv, &bnrem, bn, &bnbase, bnctx);		bntmp = bn;		bn = bndiv;		bndiv = bntmp;		d = BN_get_word(&bnrem);		binres[--p] = b58alphabet[d];	}	while (zpfx--) {		binres[--p] = b58alphabet[0];	}	memcpy(result, &binres[p], brlen - p);	result[brlen - p] = '/0';	free(binres);	BN_clear_free(&bna);	BN_clear_free(&bnb);	BN_clear_free(&bnbase);	BN_clear_free(&bnrem);	BN_CTX_free(bnctx);}
开发者ID:9cat,项目名称:misc,代码行数:59,


示例7: rsa_plaintext_to_word

int rsa_plaintext_to_word(const rsa_plaintext_t *m, unsigned long *a){	OPENSSL_assert(m);	OPENSSL_assert(a);		*a = BN_get_word(m);	return 0;}
开发者ID:sara62,项目名称:hcrypt,代码行数:8,


示例8: fdt_add_bignum

static int fdt_add_bignum(void *blob, int noffset, const char *prop_name,			  BIGNUM *num, int num_bits){	int nwords = num_bits / 32;	int size;	uint32_t *buf, *ptr;	BIGNUM *tmp, *big2, *big32, *big2_32;	BN_CTX *ctx;	int ret;	tmp = BN_new();	big2 = BN_new();	big32 = BN_new();	big2_32 = BN_new();	if (!tmp || !big2 || !big32 || !big2_32) {		fprintf(stderr, "Out of memory (bignum)/n");		return -ENOMEM;	}	ctx = BN_CTX_new();	if (!tmp) {		fprintf(stderr, "Out of memory (bignum context)/n");		return -ENOMEM;	}	BN_set_word(big2, 2L);	BN_set_word(big32, 32L);	BN_exp(big2_32, big2, big32, ctx); /* B = 2^32 */	size = nwords * sizeof(uint32_t);	buf = malloc(size);	if (!buf) {		fprintf(stderr, "Out of memory (%d bytes)/n", size);		return -ENOMEM;	}	/* Write out modulus as big endian array of integers */	for (ptr = buf + nwords - 1; ptr >= buf; ptr--) {		BN_mod(tmp, num, big2_32, ctx); /* n = N mod B */		*ptr = cpu_to_fdt32(BN_get_word(tmp));		BN_rshift(num, num, 32); /*  N = N/B */	}	/*	 * We try signing with successively increasing size values, so this	 * might fail several times	 */	ret = fdt_setprop(blob, noffset, prop_name, buf, size);	if (ret)		return -FDT_ERR_NOSPACE;	free(buf);	BN_free(tmp);	BN_free(big2);	BN_free(big32);	BN_free(big2_32);	return ret;}
开发者ID:ahedlund,项目名称:u-boot-xlnx,代码行数:56,


示例9: rsa_get_exponent

/* * rsa_get_exponent(): - Get the public exponent from an RSA key */static int rsa_get_exponent(RSA *key, uint64_t *e){	int ret;	BIGNUM *bn_te;	uint64_t te;	ret = -EINVAL;	bn_te = NULL;	if (!e)		goto cleanup;	if (BN_num_bits(key->e) > 64)		goto cleanup;	*e = BN_get_word(key->e);	if (BN_num_bits(key->e) < 33) {		ret = 0;		goto cleanup;	}	bn_te = BN_dup(key->e);	if (!bn_te)		goto cleanup;	if (!BN_rshift(bn_te, bn_te, 32))		goto cleanup;	if (!BN_mask_bits(bn_te, 32))		goto cleanup;	te = BN_get_word(bn_te);	te <<= 32;	*e |= te;	ret = 0;cleanup:	if (bn_te)		BN_free(bn_te);	return ret;}
开发者ID:ahedlund,项目名称:u-boot-xlnx,代码行数:46,


示例10: fdt_add_bignum

static int fdt_add_bignum(void *blob, int noffset, const char *prop_name,			  BIGNUM *num, int num_bits){	int nwords = num_bits / 32;	int size;	uint32_t *buf, *ptr;	BIGNUM *tmp, *big2, *big32, *big2_32;	BN_CTX *ctx;	int ret;	tmp = BN_new();	big2 = BN_new();	big32 = BN_new();	big2_32 = BN_new();	if (!tmp || !big2 || !big32 || !big2_32) {		fprintf(stderr, "Out of memory (bignum)/n");		return -ENOMEM;	}	ctx = BN_CTX_new();	if (!tmp) {		fprintf(stderr, "Out of memory (bignum context)/n");		return -ENOMEM;	}	BN_set_word(big2, 2L);	BN_set_word(big32, 32L);	BN_exp(big2_32, big2, big32, ctx); /* B = 2^32 */	size = nwords * sizeof(uint32_t);	buf = malloc(size);	if (!buf) {		fprintf(stderr, "Out of memory (%d bytes)/n", size);		return -ENOMEM;	}	/* Write out modulus as big endian array of integers */	for (ptr = buf + nwords - 1; ptr >= buf; ptr--) {		BN_mod(tmp, num, big2_32, ctx); /* n = N mod B */		*ptr = cpu_to_fdt32(BN_get_word(tmp));		BN_rshift(num, num, 32); /*  N = N/B */	}	ret = fdt_setprop(blob, noffset, prop_name, buf, size);	if (ret) {		fprintf(stderr, "Failed to write public key to FIT/n");		return -ENOSPC;	}	free(buf);	BN_free(tmp);	BN_free(big2);	BN_free(big32);	BN_free(big2_32);	return ret;}
开发者ID:AeroGirl,项目名称:u-boot-VAR-SOM-AM33-SDK7,代码行数:54,


示例11: not

static voidnot(void){	struct number *a;	a = pop_number();	if (a == NULL)		return;	a->scale = 0;	bn_check(BN_set_word(a->number, BN_get_word(a->number) ? 0 : 1));	push_number(a);}
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:12,


示例12: stackint

static int stackint(GPtrArray *stack, int index){	struct buffer *buf = stacktop(stack, index);	BIGNUM bn;	BN_init(&bn);	int ret = -1;	if (!CastToBigNum(&bn, buf))		goto out;	if (!BN_is_negative(&bn))		ret = BN_get_word(&bn);	else {		BN_set_negative(&bn, 0);		ret = BN_get_word(&bn);		ret = -ret;	}out:	BN_clear_free(&bn);	return ret;}
开发者ID:digiwhite,项目名称:picocoin,代码行数:23,


示例13: bn_probable_prime_dh_coprime

int bn_probable_prime_dh_coprime(BIGNUM *rnd, int bits, BN_CTX *ctx){    int i;    BIGNUM *offset_index;    BIGNUM *offset_count;    int ret = 0;    OPENSSL_assert(bits > prime_multiplier_bits);    BN_CTX_start(ctx);    if ((offset_index = BN_CTX_get(ctx)) == NULL)        goto err;    if ((offset_count = BN_CTX_get(ctx)) == NULL)        goto err;    if (!BN_add_word(offset_count, prime_offset_count))        goto err; loop:    if (!BN_rand(rnd, bits - prime_multiplier_bits,                 BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD))        goto err;    if (BN_is_bit_set(rnd, bits))        goto loop;    if (!BN_rand_range(offset_index, offset_count))        goto err;    if (!BN_mul_word(rnd, prime_multiplier)        || !BN_add_word(rnd, prime_offsets[BN_get_word(offset_index)]))        goto err;    /* we now have a random number 'rand' to test. */    /* skip coprimes */    for (i = first_prime_index; i < NUMPRIMES; i++) {        /* check that rnd is a prime */        BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);        if (mod == (BN_ULONG)-1)            goto err;        if (mod <= 1)            goto loop;    }    ret = 1; err:    BN_CTX_end(ctx);    bn_check_top(rnd);    return ret;}
开发者ID:Castaglia,项目名称:openssl,代码行数:49,


示例14: set_get

static intset_get(unsigned long num){    BIGNUM *bn;    bn = BN_new();    if (!BN_set_word(bn, num))	return 1;    if (BN_get_word(bn) != num)	return 1;    BN_free(bn);    return 0;}
开发者ID:Henauxg,项目名称:minix,代码行数:15,


示例15: base58_encode

/*place base58 encoding of data into result*/void base58_encode(unsigned char *data, unsigned int len, char *result) {	const char code_string[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";    BIGNUM *x, *rem, *base, *tmp, *tmp2;    x = BN_new();	rem = BN_new();	base = BN_new();	tmp = BN_new();	char * output_string = malloc(64);	x = BN_bin2bn(data, len, x);	BN_set_word(rem, 1);	BN_set_word(base, 58);	BN_CTX *bnctx;	bnctx = BN_CTX_new();	int i = 0;	while (!BN_is_zero(x)) {		BN_div(tmp, rem, x, base, bnctx);		output_string[i++] = code_string[BN_get_word(rem)];		tmp2 = x;		x = tmp;		tmp = tmp2;	}	//public key	int i2 = 0;	while (data[i2] == 0) {		output_string[i++] = code_string[0];		i2++;	}	int base58len = i;	while (i>=0) {		result[base58len-i] = output_string[i-1];		i--;	}	result[base58len] = 0;	BN_free(x);	BN_free(base);	BN_free(rem);	BN_free(tmp);	BN_CTX_free(bnctx);	free(output_string);}
开发者ID:runeksvendsen,项目名称:sbag,代码行数:49,


示例16: check

int check(RSA* key) {  int public_exponent = BN_get_word(key->e);  int modulus = BN_num_bits(key->n);  if (public_exponent != 65537) {    fprintf(stderr, "WARNING: Public exponent should be 65537 (but is %d)./n",            public_exponent);  }  if (modulus != 1024 && modulus != 2048 && modulus != 4096      && modulus != 8192) {    fprintf(stderr, "ERROR: Unknown modulus length = %d./n", modulus);    return 0;  }  return 1;}
开发者ID:Docworld,项目名称:chromiumos,代码行数:16,


示例17: BN_init

qint32 CryptoUtils::checkDHParams (BIGNUM *p, qint32 g) {    if (g < 2 || g > 7) { return -1; }    BIGNUM t;    BN_init (&t);    BIGNUM dh_g;    BN_init (&dh_g);    Utils::ensure (BN_set_word (&dh_g, 4 * g));    Utils::ensure (BN_mod (&t, p, &dh_g, BN_ctx));    qint32 x = BN_get_word (&t);    Q_ASSERT(x >= 0 && x < 4 * g);    BN_free (&dh_g);    switch (g) {    case 2:        if (x != 7) { return -1; }        break;    case 3:        if (x % 3 != 2 ) { return -1; }        break;    case 4:        break;    case 5:        if (x % 5 != 1 && x % 5 != 4) { return -1; }        break;    case 6:        if (x != 19 && x != 23) { return -1; }        break;    case 7:        if (x % 7 != 3 && x % 7 != 5 && x % 7 != 6) { return -1; }        break;    }    if (!checkPrime (p)) { return -1; }    BIGNUM b;    BN_init (&b);    Utils::ensure (BN_set_word (&b, 2));    Utils::ensure (BN_div (&t, 0, p, &b, BN_ctx));    if (!checkPrime (&t)) { return -1; }    BN_free (&b);    BN_free (&t);    return 0;}
开发者ID:KAMiKAZOW,项目名称:libqtelegram-aseman-edition,代码行数:46,


示例18: check

int check(RSA* key) {  const BIGNUM *n, *e;  int public_exponent, modulus;  RSA_get0_key(key, &n, &e, NULL);  public_exponent = BN_get_word(e);  modulus = BN_num_bits(n);  if (public_exponent != 3 && public_exponent != 65537) {    fprintf(stderr,            "WARNING: Public exponent should be 3 or 65537 (but is %d)./n",            public_exponent);  }  if (modulus != 1024 && modulus != 2048 && modulus != 3072 && modulus != 4096      && modulus != 8192) {    fprintf(stderr, "ERROR: Unknown modulus length = %d./n", modulus);    return 0;  }  return 1;}
开发者ID:coreboot,项目名称:vboot,代码行数:21,


示例19: paillier_decryptll

int paillier_decryptll(long long *plain, const BIGNUM *c, const privKey *key, BN_CTX *ctx){    int ret = 1;    BN_CTX_start(ctx);    BIGNUM *plain_BN = BN_CTX_get(ctx);    if (paillier_decrypt(plain_BN, c, key, ctx) != 0)        goto end;    *plain = BN_get_word(plain_BN);    if (*plain == 0xffffffffL)        goto end;    ret = 0;end:    if (ret)    {        ERR_load_crypto_strings();        fprintf(stderr, "Can't decrypt: %s", ERR_error_string(ERR_get_error(), NULL));    }    BN_CTX_end(ctx);    return ret;}
开发者ID:marshallnaito,项目名称:PaillierEncryptedDatabaseService,代码行数:24,


示例20: get_key_bignum

static int get_key_bignum(BIGNUM *num, int num_bits, uint32_t *key_mod){	BIGNUM *tmp, *big2, *big32, *big2_32;	BN_CTX *ctx;	int ret;	tmp = BN_new();	big2 = BN_new();	big32 = BN_new();	big2_32 = BN_new();	if (!tmp || !big2 || !big32 || !big2_32) {		fprintf(stderr, "Out of memory (bignum)/n");		return -1;	}	ctx = BN_CTX_new();	if (!tmp) {		fprintf(stderr, "Out of memory (bignum context)/n");		return -1;	}	BN_set_word(big2, 2L);	BN_set_word(big32, 32L);	BN_exp(big2_32, big2, big32, ctx); /* B = 2^32 */	for (ret = 0; ret <= 63; ret++) {		BN_mod(tmp, num, big2_32, ctx); /* n = N mod B */		key_mod[ret] = htonl(BN_get_word(tmp));		BN_rshift(num, num, 32); /*  N = N/B */	}	BN_free(tmp);	BN_free(big2);	BN_free(big32);	BN_free(big2_32);	return 0;}
开发者ID:hello--world,项目名称:hiwifi-openwrt-HC5661-HC5761,代码行数:36,


示例21: probable_prime

static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods){    int i;    BN_ULONG delta;    BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES - 1];    char is_single_word = bits <= BN_BITS2; again:    if (!BN_priv_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD))        return 0;    /* we now have a random number 'rnd' to test. */    for (i = 1; i < NUMPRIMES; i++) {        BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);        if (mod == (BN_ULONG)-1)            return 0;        mods[i] = (prime_t) mod;    }    /*     * If bits is so small that it fits into a single word then we     * additionally don't want to exceed that many bits.     */    if (is_single_word) {        BN_ULONG size_limit;        if (bits == BN_BITS2) {            /*             * Shifting by this much has undefined behaviour so we do it a             * different way             */            size_limit = ~((BN_ULONG)0) - BN_get_word(rnd);        } else {            size_limit = (((BN_ULONG)1) << bits) - BN_get_word(rnd) - 1;        }        if (size_limit < maxdelta)            maxdelta = size_limit;    }    delta = 0; loop:    if (is_single_word) {        BN_ULONG rnd_word = BN_get_word(rnd);        /*-         * In the case that the candidate prime is a single word then         * we check that:         *   1) It's greater than primes[i] because we shouldn't reject         *      3 as being a prime number because it's a multiple of         *      three.         *   2) That it's not a multiple of a known prime. We don't         *      check that rnd-1 is also coprime to all the known         *      primes because there aren't many small primes where         *      that's true.         */        for (i = 1; i < NUMPRIMES && primes[i] < rnd_word; i++) {            if ((mods[i] + delta) % primes[i] == 0) {                delta += 2;                if (delta > maxdelta)                    goto again;                goto loop;            }        }    } else {        for (i = 1; i < NUMPRIMES; i++) {            /*             * check that rnd is not a prime and also that gcd(rnd-1,primes)             * == 1 (except for 2)             */            if (((mods[i] + delta) % primes[i]) <= 1) {                delta += 2;                if (delta > maxdelta)                    goto again;                goto loop;            }        }    }    if (!BN_add_word(rnd, delta))        return 0;    if (BN_num_bits(rnd) != bits)        goto again;    bn_check_top(rnd);    return 1;}
开发者ID:Bilibili,项目名称:openssl,代码行数:81,


示例22: test_BN_uadd

static inttest_BN_uadd(void){    BIGNUM *a, *b, *c;    char *p;    a = BN_new();    b = BN_new();    c = BN_new();    BN_set_word(a, 1);    BN_set_word(b, 2);    BN_uadd(c, a, b);    if (BN_get_word(c) != 3)	return 1;    BN_uadd(c, b, a);    if (BN_get_word(c) != 3)	return 1;    BN_set_word(b, 0xff);    BN_uadd(c, a, b);    if (BN_get_word(c) != 0x100)	return 1;    BN_uadd(c, b, a);    if (BN_get_word(c) != 0x100)	return 1;    BN_set_word(a, 0xff);    BN_uadd(c, a, b);    if (BN_get_word(c) != 0x1fe)	return 1;    BN_uadd(c, b, a);    if (BN_get_word(c) != 0x1fe)	return 1;    BN_free(a);    BN_free(b);    BN_hex2bn(&a, "50212A3B611D46642C825A16A354CE0FD4D85DD2");    BN_hex2bn(&b, "84B6C7E8D28ACA1614954DA");    BN_uadd(c, b, a);    p = BN_bn2hex(c);    if (strcmp(p, "50212A3B611D466434CDC695307D7AB13621B2AC") != 0) {	free(p);	return 1;    }    free(p);    BN_uadd(c, a, b);    p = BN_bn2hex(c);    if (strcmp(p, "50212A3B611D466434CDC695307D7AB13621B2AC") != 0) {	free(p);	return 1;    }    free(p);    BN_free(a);    BN_free(b);    BN_free(c);    return 0;}
开发者ID:Henauxg,项目名称:minix,代码行数:72,


示例23: probable_prime

static int probable_prime(BIGNUM *rnd, int bits)	{	int i;	prime_t mods[NUMPRIMES];	BN_ULONG delta;	BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES-1];	char is_single_word = bits <= BN_BITS2;again:	if (!BN_rand(rnd,bits,1,1)) return(0);	/* we now have a random number 'rnd' to test. */	for (i=1; i<NUMPRIMES; i++)		mods[i]=(prime_t)BN_mod_word(rnd,(BN_ULONG)primes[i]);	/* If bits is so small that it fits into a single word then we	 * additionally don't want to exceed that many bits. */	if (is_single_word)		{		BN_ULONG size_limit = (((BN_ULONG) 1) << bits) - BN_get_word(rnd) - 1;		if (size_limit < maxdelta)			maxdelta = size_limit;		}	delta=0;loop:	if (is_single_word)		{		BN_ULONG rnd_word = BN_get_word(rnd);		/* In the case that the candidate prime is a single word then		 * we check that:		 *   1) It's greater than primes[i] because we shouldn't reject		 *      3 as being a prime number because it's a multiple of		 *      three.		 *   2) That it's not a multiple of a known prime. We don't		 *      check that rnd-1 is also coprime to all the known		 *      primes because there aren't many small primes where		 *      that's true. */		for (i=1; i<NUMPRIMES && primes[i]<rnd_word; i++)			{			if ((mods[i]+delta)%primes[i] == 0)				{				delta+=2;				if (delta > maxdelta) goto again;				goto loop;				}			}		}	else		{		for (i=1; i<NUMPRIMES; i++)			{			/* check that rnd is not a prime and also			 * that gcd(rnd-1,primes) == 1 (except for 2) */			if (((mods[i]+delta)%primes[i]) <= 1)				{				delta+=2;				if (delta > maxdelta) goto again;				goto loop;				}			}		}	if (!BN_add_word(rnd,delta)) return(0);	if (BN_num_bits(rnd) != bits)		goto again;	bn_check_top(rnd);	return(1);	}
开发者ID:Acidburn0zzz,项目名称:openssl,代码行数:66,


示例24: vg_thread_loop

void *vg_thread_loop(void *arg){	unsigned char hash_buf[128];	unsigned char *eckey_buf;	unsigned char hash1[32];	int i, c, len, output_interval;	int hash_len;	const BN_ULONG rekey_max = 10000000;	BN_ULONG npoints, rekey_at, nbatch;	vg_context_t *vcp = (vg_context_t *) arg;	EC_KEY *pkey = NULL;	const EC_GROUP *pgroup;	const EC_POINT *pgen;	const int ptarraysize = 256;	EC_POINT *ppnt[ptarraysize];	EC_POINT *pbatchinc;	vg_test_func_t test_func = vcp->vc_test;	vg_exec_context_t ctx;	vg_exec_context_t *vxcp;	struct timeval tvstart;	memset(&ctx, 0, sizeof(ctx));	vxcp = &ctx;	vg_exec_context_init(vcp, &ctx);	pkey = vxcp->vxc_key;	pgroup = EC_KEY_get0_group(pkey);	pgen = EC_GROUP_get0_generator(pgroup);	for (i = 0; i < ptarraysize; i++) {		ppnt[i] = EC_POINT_new(pgroup);		if (!ppnt[i]) {			fprintf(stderr, "ERROR: out of memory?/n");			exit(1);		}	}	pbatchinc = EC_POINT_new(pgroup);	if (!pbatchinc) {		fprintf(stderr, "ERROR: out of memory?/n");		exit(1);	}	BN_set_word(&vxcp->vxc_bntmp, ptarraysize);	EC_POINT_mul(pgroup, pbatchinc, &vxcp->vxc_bntmp, NULL, NULL,		     vxcp->vxc_bnctx);	EC_POINT_make_affine(pgroup, pbatchinc, vxcp->vxc_bnctx);	npoints = 0;	rekey_at = 0;	nbatch = 0;	vxcp->vxc_key = pkey;	vxcp->vxc_binres[0] = vcp->vc_addrtype;	c = 0;	output_interval = 1000;	gettimeofday(&tvstart, NULL);	if (vcp->vc_format == VCF_SCRIPT) {		hash_buf[ 0] = 0x51;  // OP_1		hash_buf[ 1] = 0x41;  // pubkey length		// gap for pubkey		hash_buf[67] = 0x51;  // OP_1		hash_buf[68] = 0xae;  // OP_CHECKMULTISIG		eckey_buf = hash_buf + 2;		hash_len = 69;	} else {		eckey_buf = hash_buf;		hash_len = 65;	}	while (!vcp->vc_halt) {		if (++npoints >= rekey_at) {			vg_exec_context_upgrade_lock(vxcp);			/* Generate a new random private key */			EC_KEY_generate_key(pkey);			npoints = 0;			/* Determine rekey interval */			EC_GROUP_get_order(pgroup, &vxcp->vxc_bntmp,					   vxcp->vxc_bnctx);			BN_sub(&vxcp->vxc_bntmp2,			       &vxcp->vxc_bntmp,			       EC_KEY_get0_private_key(pkey));			rekey_at = BN_get_word(&vxcp->vxc_bntmp2);			if ((rekey_at == BN_MASK2) || (rekey_at > rekey_max))				rekey_at = rekey_max;			assert(rekey_at > 0);			EC_POINT_copy(ppnt[0], EC_KEY_get0_public_key(pkey));			vg_exec_context_downgrade_lock(vxcp);			npoints++;//.........这里部分代码省略.........
开发者ID:WorldcoinGlobal,项目名称:worldcoin-vanitygen,代码行数:101,


示例25: get_prefix_ranges

/* * Find the bignum ranges that produce a given prefix. */static intget_prefix_ranges(int addrtype, const char *pfx, BIGNUM **result,		  BN_CTX *bnctx){	int i, p, c;	int zero_prefix = 0;	int check_upper = 0;	int b58pow, b58ceil, b58top = 0;	int ret = -1;	BIGNUM bntarg, bnceil, bnfloor;	BIGNUM bnbase;	BIGNUM *bnap, *bnbp, *bntp;	BIGNUM *bnhigh = NULL, *bnlow = NULL, *bnhigh2 = NULL, *bnlow2 = NULL;	BIGNUM bntmp, bntmp2;	BN_init(&bntarg);	BN_init(&bnceil);	BN_init(&bnfloor);	BN_init(&bnbase);	BN_init(&bntmp);	BN_init(&bntmp2);	BN_set_word(&bnbase, 58);	p = strlen(pfx);	for (i = 0; i < p; i++) {		c = vg_b58_reverse_map[(int)pfx[i]];		if (c == -1) {			fprintf(stderr,				"Invalid character '%c' in prefix '%s'/n",				pfx[i], pfx);			goto out;		}		if (i == zero_prefix) {			if (c == 0) {				/* Add another zero prefix */				zero_prefix++;				if (zero_prefix > 19) {					fprintf(stderr,						"Prefix '%s' is too long/n",						pfx);					goto out;				}				continue;			}			/* First non-zero character */			b58top = c;			BN_set_word(&bntarg, c);		} else {			BN_set_word(&bntmp2, c);			BN_mul(&bntmp, &bntarg, &bnbase, bnctx);			BN_add(&bntarg, &bntmp, &bntmp2);		}	}	/* Power-of-two ceiling and floor values based on leading 1s */	BN_clear(&bntmp);	BN_set_bit(&bntmp, 200 - (zero_prefix * 8));	BN_sub(&bnceil, &bntmp, BN_value_one());	BN_set_bit(&bnfloor, 192 - (zero_prefix * 8));	bnlow = BN_new();	bnhigh = BN_new();	if (b58top) {		/*		 * If a non-zero was given in the prefix, find the		 * numeric boundaries of the prefix.		 */		BN_copy(&bntmp, &bnceil);		bnap = &bntmp;		bnbp = &bntmp2;		b58pow = 0;		while (BN_cmp(bnap, &bnbase) > 0) {			b58pow++;			BN_div(bnbp, NULL, bnap, &bnbase, bnctx);			bntp = bnap;			bnap = bnbp;			bnbp = bntp;		}		b58ceil = BN_get_word(bnap);		if ((b58pow - (p - zero_prefix)) < 6) {			/*			 * Do not allow the prefix to constrain the			 * check value, this is ridiculous.			 */			fprintf(stderr, "Prefix '%s' is too long/n", pfx);			goto out;		}		BN_set_word(&bntmp2, b58pow - (p - zero_prefix));//.........这里部分代码省略.........
开发者ID:bifubao,项目名称:vanitygen,代码行数:101,


示例26: d2i_bio_max

void *d2i_bio_max(const ASN1_ITEM *it, BIO *in, void *x, unsigned int max){    AUTO(uint8_t, buf);    AUTO(BIGNUM, size);    AUTO(BIGNUM, cmp);    size_t blocks = 0;    ssize_t need = 0;    size_t have = 0;    int rd;    size = BN_new();    if (size == NULL)        return NULL;    while (true) {        need = get_size(buf, have, size);        if (need < 0)            return NULL;        else if (need == 0)            break;        if (have + need > max)            return NULL;        if (have + (size_t) need >= blocks * BLOCKSIZE) {            uint8_t *tmp;            blocks = (have + need + BLOCKSIZE - 1) / BLOCKSIZE;            tmp = realloc(buf, blocks * BLOCKSIZE);            if (tmp == NULL)                return NULL;            buf = tmp;        }        rd = BIO_read(in, buf + have, need);        have += need;        if (rd <= 0 || rd != need)            return NULL;    }    cmp = BN_new();    if (cmp == NULL)        return NULL;    if (BN_set_word(cmp, max) <= 0)        return NULL;    if (BN_cmp(size, cmp) > 0)        return NULL;    if (BN_set_word(cmp, BLOCKSIZE) <= 0)        return NULL;    while (true) {        need = BLOCKSIZE;        if (BN_cmp(size, cmp) < 0)            need = BN_get_word(size);        if (need == 0)            break;        if (BN_sub_word(size, need) <= 0)            return NULL;        if (have + (size_t) need >= blocks * BLOCKSIZE) {            uint8_t *tmp;            blocks = (have + need + BLOCKSIZE - 1) / BLOCKSIZE;            tmp = realloc(buf, blocks * BLOCKSIZE);            if (tmp == NULL)                return NULL;            buf = tmp;        }        while (need > 0) {            rd = BIO_read(in, buf + have, need);            if (rd <= 0)                return NULL;            have += rd;            need -= rd;        }    }    return ASN1_item_d2i(x, &(const uint8_t *) { buf }, have, it);}
开发者ID:bupt007,项目名称:deo,代码行数:88,


示例27: test_BN_bit

static inttest_BN_bit(void){    BIGNUM *bn;    int ret = 0;    bn = BN_new();    /* test setting and getting of "word" */    if (!BN_set_word(bn, 1))	return 1;    if (!BN_is_bit_set(bn, 0))	ret += 1;    if (!BN_is_bit_set(bn, 0))	ret += 1;    if (!BN_set_word(bn, 2))	return 1;    if (!BN_is_bit_set(bn, 1))	ret += 1;    if (!BN_set_word(bn, 3))	return 1;    if (!BN_is_bit_set(bn, 0))	ret += 1;    if (!BN_is_bit_set(bn, 1))	ret += 1;    if (!BN_set_word(bn, 0x100))	return 1;    if (!BN_is_bit_set(bn, 8))	ret += 1;    if (!BN_set_word(bn, 0x1000))	return 1;    if (!BN_is_bit_set(bn, 12))	ret += 1;    /* test bitsetting */    if (!BN_set_word(bn, 1))	return 1;    if (!BN_set_bit(bn, 1))	return 1;    if (BN_get_word(bn) != 3)	return 1;    if (!BN_clear_bit(bn, 0))	return 1;    if (BN_get_word(bn) != 2)	return 1;    /* test bitsetting past end of current end */    BN_clear(bn);    if (!BN_set_bit(bn, 12))	return 1;    if (BN_get_word(bn) != 0x1000)	return 1;    /* test bit and byte counting functions */    if (BN_num_bits(bn) != 13)	return 1;    if (BN_num_bytes(bn) != 2)	return 1;    BN_free(bn);    return ret;}
开发者ID:Henauxg,项目名称:minix,代码行数:66,


示例28: printnumber

voidprintnumber(FILE *f, const struct number *b, u_int base){	struct number	*int_part, *fract_part;	int		digits;	char		buf[11];	size_t		sz;	int		i;	struct stack	stack;	char		*p;	charcount = 0;	lastchar = -1;	if (BN_is_zero(b->number))		putcharwrap(f, '0');	int_part = new_number();	fract_part = new_number();	fract_part->scale = b->scale;	if (base <= 16)		digits = 1;	else {		digits = snprintf(buf, sizeof(buf), "%u", base-1);	}	split_number(b, int_part->number, fract_part->number);	i = 0;	stack_init(&stack);	while (!BN_is_zero(int_part->number)) {		BN_ULONG rem = BN_div_word(int_part->number, base);		stack_pushstring(&stack, get_digit(rem, digits, base));		i++;	}	sz = i;	if (BN_cmp(b->number, &zero) < 0)		putcharwrap(f, '-');	for (i = 0; i < sz; i++) {		p = stack_popstring(&stack);		if (base > 16)			putcharwrap(f, ' ');		printwrap(f, p);		free(p);	}	stack_clear(&stack);	if (b->scale > 0) {		struct number	*num_base;		BIGNUM		mult, stop;		putcharwrap(f, '.');		num_base = new_number();		BN_set_word(num_base->number, base);		BN_init(&mult);		BN_one(&mult);		BN_init(&stop);		BN_one(&stop);		scale_number(&stop, b->scale);		i = 0;		while (BN_cmp(&mult, &stop) < 0) {			u_long	rem;			if (i && base > 16)				putcharwrap(f, ' ');			i = 1;			bmul_number(fract_part, fract_part, num_base);			split_number(fract_part, int_part->number, NULL);			rem = BN_get_word(int_part->number);			p = get_digit(rem, digits, base);			int_part->scale = 0;			normalize(int_part, fract_part->scale);			BN_sub(fract_part->number, fract_part->number,			    int_part->number);			printwrap(f, p);			free(p);			BN_mul_word(&mult, base);		}		free_number(num_base);		BN_free(&mult);		BN_free(&stop);	}	flushwrap(f);	free_number(int_part);	free_number(fract_part);}
开发者ID:AhmadTux,项目名称:DragonFlyBSD,代码行数:86,


示例29: vg_regex_test

static intvg_regex_test(vg_exec_context_t *vxcp){	vg_regex_context_t *vcrp = (vg_regex_context_t *) vxcp->vxc_vc;	unsigned char hash1[32], hash2[32];	int i, zpfx, p, d, nres, re_vec[9];	char b58[40];	BIGNUM bnrem;	BIGNUM *bn, *bndiv, *bnptmp;	int res = 0;	pcre *re;	BN_init(&bnrem);	/* Hash the hash and write the four byte check code */	SHA256(vxcp->vxc_binres, 21, hash1);	SHA256(hash1, sizeof(hash1), hash2);	memcpy(&vxcp->vxc_binres[21], hash2, 4);	bn = &vxcp->vxc_bntmp;	bndiv = &vxcp->vxc_bntmp2;	BN_bin2bn(vxcp->vxc_binres, 25, bn);	/* Compute the complete encoded address */	for (zpfx = 0; zpfx < 25 && vxcp->vxc_binres[zpfx] == 0; zpfx++);	p = sizeof(b58) - 1;	b58[p] = '/0';	while (!BN_is_zero(bn)) {		BN_div(bndiv, &bnrem, bn, &vxcp->vxc_bnbase, vxcp->vxc_bnctx);		bnptmp = bn;		bn = bndiv;		bndiv = bnptmp;		d = BN_get_word(&bnrem);		b58[--p] = vg_b58_alphabet[d];	}	while (zpfx--) {		b58[--p] = vg_b58_alphabet[0];	}	/*	 * Run the regular expressions on it	 * SLOW, runs in linear time with the number of REs	 */restart_loop:	nres = vcrp->base.vc_npatterns;	if (!nres) {		res = 2;		goto out;	}	for (i = 0; i < nres; i++) {		d = pcre_exec(vcrp->vcr_regex[i],			      vcrp->vcr_regex_extra[i],			      &b58[p], (sizeof(b58) - 1) - p, 0,			      0,			      re_vec, sizeof(re_vec)/sizeof(re_vec[0]));		if (d <= 0) {			if (d != PCRE_ERROR_NOMATCH) {				fprintf(stderr, "PCRE error: %d/n", d);				res = 2;				goto out;			}			continue;		}		re = vcrp->vcr_regex[i];		if (vg_exec_context_upgrade_lock(vxcp) &&		    ((i >= vcrp->base.vc_npatterns) ||		     (vcrp->vcr_regex[i] != re)))			goto restart_loop;		vg_exec_context_consolidate_key(vxcp);		vcrp->base.vc_output_match(&vcrp->base, vxcp->vxc_key,					   vcrp->vcr_regex_pat[i]);		vcrp->base.vc_found++;		if (vcrp->base.vc_only_one) {			res = 2;			goto out;		}		if (vcrp->base.vc_remove_on_match) {			pcre_free(vcrp->vcr_regex[i]);			if (vcrp->vcr_regex_extra[i])				pcre_free(vcrp->vcr_regex_extra[i]);			nres -= 1;			vcrp->base.vc_npatterns = nres;			if (!nres) {				res = 2;				goto out;			}			vcrp->vcr_regex[i] = vcrp->vcr_regex[nres];			vcrp->vcr_regex_extra[i] =				vcrp->vcr_regex_extra[nres];			vcrp->vcr_regex_pat[i] = vcrp->vcr_regex_pat[nres];			vcrp->base.vc_npatterns = nres;//.........这里部分代码省略.........
开发者ID:bifubao,项目名称:vanitygen,代码行数:101,



注:本文中的BN_get_word函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ BN_hex2bn函数代码示例
C++ BN_free函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。