mirror of
https://github.com/neocturne/libuecc.git
synced 2025-03-04 17:03:31 +01:00
Add functions for point negation and subtraction
This commit is contained in:
parent
a68abb34c2
commit
962888f03f
2 changed files with 32 additions and 0 deletions
|
@ -86,6 +86,13 @@ void ecc_25519_store_packed(ecc_int256_t *out, const ecc_25519_work_t *in);
|
||||||
/** Checks if a point is the identity element of the Elliptic Curve group */
|
/** Checks if a point is the identity element of the Elliptic Curve group */
|
||||||
int ecc_25519_is_identity(const ecc_25519_work_t *in);
|
int ecc_25519_is_identity(const ecc_25519_work_t *in);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Negates a point of the Elliptic Curve
|
||||||
|
*
|
||||||
|
* The same pointer may be given for input and output
|
||||||
|
*/
|
||||||
|
void ecc_25519_negate(ecc_25519_work_t *out, const ecc_25519_work_t *in);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Doubles a point of the Elliptic Curve
|
* Doubles a point of the Elliptic Curve
|
||||||
*
|
*
|
||||||
|
@ -102,6 +109,12 @@ void ecc_25519_double(ecc_25519_work_t *out, const ecc_25519_work_t *in);
|
||||||
*/
|
*/
|
||||||
void ecc_25519_add(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2);
|
void ecc_25519_add(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subtracts two points of the Elliptic Curve
|
||||||
|
*
|
||||||
|
* The same pointers may be given for input and output.
|
||||||
|
*/
|
||||||
|
void ecc_25519_sub(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does a scalar multiplication of a point of the Elliptic Curve with an integer of a given bit length
|
* Does a scalar multiplication of a point of the Elliptic Curve with an integer of a given bit length
|
||||||
|
|
|
@ -498,6 +498,18 @@ int ecc_25519_is_identity(const ecc_25519_work_t *in) {
|
||||||
return (check_zero(in->X)&check_zero(Y_Z));
|
return (check_zero(in->X)&check_zero(Y_Z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ecc_25519_negate(ecc_25519_work_t *out, const ecc_25519_work_t *in) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++) {
|
||||||
|
out->Y[i] = in->Y[i];
|
||||||
|
out->Z[i] = in->Z[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub(out->X, zero, in->X);
|
||||||
|
sub(out->T, zero, in->T);
|
||||||
|
}
|
||||||
|
|
||||||
void ecc_25519_double(ecc_25519_work_t *out, const ecc_25519_work_t *in) {
|
void ecc_25519_double(ecc_25519_work_t *out, const ecc_25519_work_t *in) {
|
||||||
unsigned int A[32], B[32], C[32], D[32], E[32], F[32], G[32], H[32], t0[32], t1[32], t2[32], t3[32];
|
unsigned int A[32], B[32], C[32], D[32], E[32], F[32], G[32], H[32], t0[32], t1[32], t2[32], t3[32];
|
||||||
|
|
||||||
|
@ -542,6 +554,13 @@ void ecc_25519_add(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc
|
||||||
mult(out->Z, F, G);
|
mult(out->Z, F, G);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ecc_25519_sub(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2) {
|
||||||
|
ecc_25519_work_t in2_neg;
|
||||||
|
|
||||||
|
ecc_25519_negate(&in2_neg, in2);
|
||||||
|
ecc_25519_add(out, in1, &in2_neg);
|
||||||
|
}
|
||||||
|
|
||||||
void ecc_25519_scalarmult_bits(ecc_25519_work_t *out, const ecc_int256_t *n, const ecc_25519_work_t *base, unsigned bits) {
|
void ecc_25519_scalarmult_bits(ecc_25519_work_t *out, const ecc_int256_t *n, const ecc_25519_work_t *base, unsigned bits) {
|
||||||
ecc_25519_work_t Q2, Q2p;
|
ecc_25519_work_t Q2, Q2p;
|
||||||
ecc_25519_work_t cur = ecc_25519_work_identity;
|
ecc_25519_work_t cur = ecc_25519_work_identity;
|
||||||
|
|
Loading…
Add table
Reference in a new issue