Bitcoin-Secp256k1
view release on metacpan or search on metacpan
Secp256k1.xs view on Meta::CPAN
croak("something went wrong while negating a pubkey");
}
# Adds a tweak to private key
SV*
_privkey_add(self, privkey, tweak)
SV *self
SV *privkey
SV *tweak
CODE:
secp256k1_perl *ctx = ctx_from_sv(self);
unsigned char *seckey_str = size_bytestr_from_sv(privkey, CURVE_SIZE, "private key");
unsigned char *tweak_str = size_bytestr_from_sv(tweak, CURVE_SIZE, "tweak");
unsigned char new_seckey[CURVE_SIZE];
copy_bytestr(new_seckey, seckey_str, CURVE_SIZE);
int result = secp256k1_ec_seckey_tweak_add(
ctx->ctx,
new_seckey,
tweak_str
);
if (!result) {
clean_secret(new_seckey);
croak("resulting added privkey is not valid");
}
RETVAL = newSVpv((char*) new_seckey, CURVE_SIZE);
clean_secret(new_seckey);
OUTPUT:
RETVAL
# Adds a tweak to public key
void
_pubkey_add(self, tweak)
SV *self
SV *tweak
CODE:
secp256k1_perl *ctx = ctx_from_sv(self);
unsigned char *tweak_str = size_bytestr_from_sv(tweak, CURVE_SIZE, "tweak");
int result = secp256k1_ec_pubkey_tweak_add(
ctx->ctx,
ctx->pubkey,
tweak_str
);
if (!result) {
croak("resulting added pubkey is not valid");
}
# Multiplies private key by a tweak
SV*
_privkey_mul(self, privkey, tweak)
SV *self
SV *privkey
SV *tweak
CODE:
secp256k1_perl *ctx = ctx_from_sv(self);
unsigned char *seckey_str = size_bytestr_from_sv(privkey, CURVE_SIZE, "private_key");
unsigned char *tweak_str = size_bytestr_from_sv(tweak, CURVE_SIZE, "tweak");
unsigned char new_seckey[CURVE_SIZE];
copy_bytestr(new_seckey, seckey_str, CURVE_SIZE);
int result = secp256k1_ec_seckey_tweak_mul(
ctx->ctx,
new_seckey,
tweak_str
);
if (!result) {
clean_secret(new_seckey);
croak("multiplication arguments are not valid");
}
RETVAL = newSVpv((char*) new_seckey, CURVE_SIZE);
clean_secret(new_seckey);
OUTPUT:
RETVAL
# Multiplies public key by a tweak
void
_pubkey_mul(self, tweak)
SV *self
SV *tweak
CODE:
secp256k1_perl *ctx = ctx_from_sv(self);
unsigned char *tweak_str = size_bytestr_from_sv(tweak, CURVE_SIZE, "tweak");
int result = secp256k1_ec_pubkey_tweak_mul(
ctx->ctx,
ctx->pubkey,
tweak_str
);
if (!result) {
croak("multiplication arguments are not valid");
}
# Combines public keys together
void
_pubkey_combine(self)
SV *self
CODE:
secp256k1_perl *ctx = ctx_from_sv(self);
secp256k1_pubkey *result_pubkey = malloc(sizeof *result_pubkey);
int result = secp256k1_ec_pubkey_combine(
ctx->ctx,
result_pubkey,
(const secp256k1_pubkey * const *) ctx->pubkeys,
ctx->pubkeys_count
);
if (!result) {
free(result_pubkey);
croak("resulting sum of pubkeys is not valid");
}
( run in 1.603 second using v1.01-cache-2.11-cpan-364913b4093 )