Beispiel #1
0
void test_ecdsa_openssl(void) {
    secp256k1_scalar_t key, msg;
    unsigned char message[32];
    secp256k1_rand256_test(message);
    secp256k1_scalar_set_b32(&msg, message, NULL);
    random_scalar_order_test(&key);
    secp256k1_gej_t qj;
    secp256k1_ecmult_gen(&qj, &key);
    secp256k1_ge_t q;
    secp256k1_ge_set_gej(&q, &qj);
    EC_KEY *ec_key = get_openssl_key(&key);
    CHECK(ec_key);
    unsigned char signature[80];
    unsigned int sigsize = 80;
    CHECK(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key));
    secp256k1_ecdsa_sig_t sig;
    CHECK(secp256k1_ecdsa_sig_parse(&sig, signature, sigsize));
    CHECK(secp256k1_ecdsa_sig_verify(&sig, &q, &msg));
    secp256k1_scalar_t one;
    secp256k1_scalar_set_int(&one, 1);
    secp256k1_scalar_t msg2;
    secp256k1_scalar_add(&msg2, &msg, &one);
    CHECK(!secp256k1_ecdsa_sig_verify(&sig, &q, &msg2));

    random_sign(&sig, &key, &msg, NULL);
    int secp_sigsize = 80;
    CHECK(secp256k1_ecdsa_sig_serialize(signature, &secp_sigsize, &sig));
    CHECK(ECDSA_verify(0, message, sizeof(message), signature, secp_sigsize, ec_key) == 1);

    EC_KEY_free(ec_key);
}
Beispiel #2
0
void test_ecdsa_openssl() {
    const secp256k1_ge_consts_t *c = secp256k1_ge_consts;
    secp256k1_num_t key, msg;
    secp256k1_num_init(&msg);
    unsigned char message[32];
    secp256k1_rand256_test(message);
    secp256k1_num_set_bin(&msg, message, 32);
    secp256k1_num_init(&key);
    random_num_order_test(&key);
    secp256k1_gej_t qj;
    secp256k1_ecmult_gen(&qj, &key);
    secp256k1_ge_t q;
    secp256k1_ge_set_gej(&q, &qj);
    EC_KEY *ec_key = get_openssl_key(&key);
    assert(ec_key);
    unsigned char signature[80];
    int sigsize = 80;
    assert(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key));
    secp256k1_ecdsa_sig_t sig;
    secp256k1_ecdsa_sig_init(&sig);
    assert(secp256k1_ecdsa_sig_parse(&sig, signature, sigsize));
    assert(secp256k1_ecdsa_sig_verify(&sig, &q, &msg));
    secp256k1_num_inc(&sig.r);
    assert(!secp256k1_ecdsa_sig_verify(&sig, &q, &msg));

    random_sign(&sig, &key, &msg, NULL);
    sigsize = 80;
    assert(secp256k1_ecdsa_sig_serialize(signature, &sigsize, &sig));
    assert(ECDSA_verify(0, message, sizeof(message), signature, sigsize, ec_key) == 1);

    secp256k1_ecdsa_sig_free(&sig);
    EC_KEY_free(ec_key);
    secp256k1_num_free(&key);
    secp256k1_num_free(&msg);
}
Beispiel #3
0
void test_ecdsa_sign_verify(void) {
    secp256k1_scalar_t msg, key;
    random_scalar_order_test(&msg);
    random_scalar_order_test(&key);
    secp256k1_gej_t pubj; secp256k1_ecmult_gen(&pubj, &key);
    secp256k1_ge_t pub; secp256k1_ge_set_gej(&pub, &pubj);
    secp256k1_ecdsa_sig_t sig;
    random_sign(&sig, &key, &msg, NULL);
    secp256k1_num_t msg_num;
    secp256k1_scalar_get_num(&msg_num, &msg);
    CHECK(secp256k1_ecdsa_sig_verify(&sig, &pub, &msg_num));
    secp256k1_num_inc(&msg_num);
    CHECK(!secp256k1_ecdsa_sig_verify(&sig, &pub, &msg_num));
}
Beispiel #4
0
void test_ecdsa_sign_verify(void) {
    int recid;
    int getrec;
    secp256k1_scalar_t msg, key;
    random_scalar_order_test(&msg);
    random_scalar_order_test(&key);
    secp256k1_gej_t pubj; secp256k1_ecmult_gen(&pubj, &key);
    secp256k1_ge_t pub; secp256k1_ge_set_gej(&pub, &pubj);
    secp256k1_ecdsa_sig_t sig;
    getrec = secp256k1_rand32()&1;
    random_sign(&sig, &key, &msg, getrec?&recid:NULL);
    if (getrec) CHECK(recid >= 0 && recid < 4);
    CHECK(secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
    secp256k1_scalar_t one;
    secp256k1_scalar_set_int(&one, 1);
    secp256k1_scalar_add(&msg, &msg, &one);
    CHECK(!secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
}
Beispiel #5
0
void test_ecdsa_sign_verify() {
    const secp256k1_ge_consts_t *c = secp256k1_ge_consts;
    secp256k1_num_t msg, key;
    secp256k1_num_init(&msg);
    random_num_order_test(&msg);
    secp256k1_num_init(&key);
    random_num_order_test(&key);
    secp256k1_gej_t pubj; secp256k1_ecmult_gen(&pubj, &key);
    secp256k1_ge_t pub; secp256k1_ge_set_gej(&pub, &pubj);
    secp256k1_ecdsa_sig_t sig;
    secp256k1_ecdsa_sig_init(&sig);
    random_sign(&sig, &key, &msg, NULL);
    assert(secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
    secp256k1_num_inc(&msg);
    assert(!secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
    secp256k1_ecdsa_sig_free(&sig);
    secp256k1_num_free(&msg);
    secp256k1_num_free(&key);
}
 Cell_contents_t generate(Table_cell_type table_cell_type) {
   switch(table_cell_type) {
    case CELL_TYPE_INT8: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::int8_t(random_sign()?
                                                            -temp % std::numeric_limits< boost::int8_t >::max():
                                                            temp % std::numeric_limits< boost::int8_t >::max()));
      break;
    }
    case CELL_TYPE_INT32: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::int32_t(random_sign()?
                                                             -temp % std::numeric_limits< boost::int32_t >::max() :
                                                             temp % std::numeric_limits< boost::int32_t >::max()));
      break;
    }
    case CELL_TYPE_INT64: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::int64_t(random_sign()?
                                                             -temp % std::numeric_limits< boost::int64_t >::max():
                                                             temp % std::numeric_limits< boost::int64_t >::max()));
      break;
    }
    case CELL_TYPE_UINT8: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::uint8_t(temp % std::numeric_limits< boost::int8_t >::max()));
      break;
    }
    case CELL_TYPE_UINT32: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::uint32_t(temp % std::numeric_limits< boost::int32_t >::max()));
      break;
    }
    case CELL_TYPE_UINT64: {
      boost::int64_t temp(int_generator_());
      return Cell_contents_t(boost::uint64_t(temp % std::numeric_limits< boost::int64_t >::max()));
      break;
    }
    case CELL_TYPE_FLOAT: {
      return Cell_contents_t(
        static_cast< float >(random_sign()? 
                             -log(fmod(rand(), std::numeric_limits< float >::max())) : 
                             log(fmod(rand(), std::numeric_limits< float >::max()))));
      break;
    }
    case CELL_TYPE_DOUBLE: {
      return Cell_contents_t
        (static_cast<double>
         ((random_sign()? -rand() : rand()) + (static_cast<double>(rand())/RAND_MAX)));
      break;
    }
    case CELL_TYPE_LONG_DOUBLE: {
      return Cell_contents_t
        (static_cast<long double>
         ((random_sign()? -rand() : rand()) + (static_cast<double>(rand())/RAND_MAX)));
      break;
    }
    case CELL_TYPE_STRING: {
      return Cell_contents_t(std::string("make_random"));
      break;
    }
    default: {
      return Cell_contents_t(std::string("Oops"));
    }
   }
 }