20 #include <ripple/basics/contract.h>
21 #include <ripple/crypto/impl/openssl.h>
22 #include <openssl/hmac.h>
31 Throw<std::runtime_error>(
"BN_new() failed");
38 BIGNUM* bn = BN_bin2bn(data, size,
ptr);
40 Throw<std::runtime_error>(
"BN_bin2bn() failed");
48 ptr = BN_bin2bn(data, size,
nullptr);
50 Throw<std::runtime_error>(
"BN_bin2bn() failed");
57 Throw<std::runtime_error>(
"BN_CTX_new() failed");
64 if (!EC_GROUP_get_order(group, result.
get(), ctx.
get()))
65 Throw<std::runtime_error>(
"EC_GROUP_get_order() failed");
72 ptr = EC_POINT_new(group);
74 Throw<std::runtime_error>(
"EC_POINT_new() failed");
80 if (!EC_POINT_add(group, b.
get(), a.
get(), b.
get(), ctx.
get()))
81 Throw<std::runtime_error>(
"EC_POINT_add() failed");
89 group, result.
get(), n.
get(),
nullptr,
nullptr, ctx.
get()))
90 Throw<std::runtime_error>(
"EC_POINT_mul() failed");
96 bn2point(EC_GROUP
const* group, BIGNUM
const* number)
98 EC_POINT* result = EC_POINT_bn2point(group, number,
nullptr,
nullptr);
99 if (result ==
nullptr)
100 Throw<std::runtime_error>(
"EC_POINT_bn2point() failed");
108 EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp256k1);
111 Throw<std::runtime_error>(
"EC_KEY_new_by_curve_name() failed");
113 EC_KEY_set_conv_form(key, POINT_CONVERSION_COMPRESSED);
122 if (EC_KEY_set_public_key((EC_KEY*)key.
get(), point.
get()) <= 0)
123 Throw<std::runtime_error>(
"EC_KEY_set_public_key() failed");
125 int const size = i2o_ECPublicKey((EC_KEY*)key.
get(), &ptr);
136 FILE _iob[] = {*stdin, *stdout, *stderr};
137 extern "C" FILE* __cdecl __iob_func(
void)