ed25519: rename to edwardsToMontgomeryPub

This commit is contained in:
Paul Miller 2023-04-23 18:28:28 +00:00
parent 049d3bce54
commit 213796db4b
No known key found for this signature in database
GPG Key ID: 697079DA6878B89B
2 changed files with 11 additions and 11 deletions

@ -104,10 +104,10 @@ const ed25519Defaults = {
// d is equal to -121665/121666 over finite field. // d is equal to -121665/121666 over finite field.
// Negative number is P - number, and division is invert(number, P) // Negative number is P - number, and division is invert(number, P)
d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'), d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),
// Finite field 𝔽p over which we'll do calculations; 2n ** 255n - 19n // Finite field 𝔽p over which we'll do calculations; 2n**255n - 19n
Fp, Fp,
// Subgroup order: how many points curve has // Subgroup order: how many points curve has
// 2n ** 252n + 27742317777372353535851937790883648493n; // 2n**252n + 27742317777372353535851937790883648493n;
n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'), n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),
// Cofactor // Cofactor
h: BigInt(8), h: BigInt(8),
@ -165,13 +165,14 @@ export const x25519 = montgomery({
* @example * @example
* const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey()); * const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey());
* const aPriv = x25519.utils.randomPrivateKey(); * const aPriv = x25519.utils.randomPrivateKey();
* x25519.getSharedSecret(aPriv, edwardsToMontgomery(someonesPub)) * x25519.getSharedSecret(aPriv, edwardsToMontgomeryPub(someonesPub))
*/ */
export function edwardsToMontgomery(edwardsPub: Hex): Uint8Array { export function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array {
const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub); const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub);
const _1n = BigInt(1); const _1n = BigInt(1);
return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y))); return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y)));
} }
export const edwardsToMontgomery = edwardsToMontgomeryPub; // deprecated
/** /**
* Converts ed25519 secret key to x25519 secret key. * Converts ed25519 secret key to x25519 secret key.

@ -8,7 +8,7 @@ import {
ed25519, ed25519,
ed25519ctx, ed25519ctx,
ed25519ph, ed25519ph,
edwardsToMontgomery, edwardsToMontgomeryPub,
edwardsToMontgomeryPriv, edwardsToMontgomeryPriv,
RistrettoPoint, RistrettoPoint,
x25519, x25519,
@ -172,7 +172,7 @@ describe('RFC7748 X25519 ECDH', () => {
hex(xPrivate), hex(xPrivate),
'a8cd44eb8e93319c0570bc11005c0e0189d34ff02f6c17773411ad191293c94f' 'a8cd44eb8e93319c0570bc11005c0e0189d34ff02f6c17773411ad191293c94f'
); );
const xPublic = edwardsToMontgomery(edPublic); const xPublic = edwardsToMontgomeryPub(edPublic);
deepStrictEqual( deepStrictEqual(
hex(xPublic), hex(xPublic),
'ed7749b4d989f6957f3bfde6c56767e988e21c9f8784d91d610011cd553f9b06' 'ed7749b4d989f6957f3bfde6c56767e988e21c9f8784d91d610011cd553f9b06'
@ -182,10 +182,9 @@ describe('RFC7748 X25519 ECDH', () => {
should('edwardsToMontgomery should produce correct keyPair', () => { should('edwardsToMontgomery should produce correct keyPair', () => {
const edSecret = ed25519.utils.randomPrivateKey(); const edSecret = ed25519.utils.randomPrivateKey();
const edPublic = ed25519.getPublicKey(edSecret); const edPublic = ed25519.getPublicKey(edSecret);
const hashed = ed25519.CURVE.hash(edSecret.subarray(0, 32)); const xSecret = edwardsToMontgomeryPriv(edSecret);
const xSecret = ed25519.CURVE.adjustScalarBytes(hashed.subarray(0, 32));
const expectedXPublic = x25519.getPublicKey(xSecret); const expectedXPublic = x25519.getPublicKey(xSecret);
const xPublic = edwardsToMontgomery(edPublic); const xPublic = edwardsToMontgomeryPub(edPublic);
deepStrictEqual(xPublic, expectedXPublic); deepStrictEqual(xPublic, expectedXPublic);
}); });
@ -195,8 +194,8 @@ describe('RFC7748 X25519 ECDH', () => {
const edSecret2 = ed25519.utils.randomPrivateKey(); const edSecret2 = ed25519.utils.randomPrivateKey();
const edPublic2 = ed25519.getPublicKey(edSecret2); const edPublic2 = ed25519.getPublicKey(edSecret2);
deepStrictEqual( deepStrictEqual(
x25519.getSharedSecret(edwardsToMontgomeryPriv(edSecret1), edwardsToMontgomery(edPublic2)), x25519.getSharedSecret(edwardsToMontgomeryPriv(edSecret1), edwardsToMontgomeryPub(edPublic2)),
x25519.getSharedSecret(edwardsToMontgomeryPriv(edSecret2), edwardsToMontgomery(edPublic1)) x25519.getSharedSecret(edwardsToMontgomeryPriv(edSecret2), edwardsToMontgomeryPub(edPublic1))
); );
}); });