SymCrypt ======== | Version: ``103.1.0`` (tag v103.1.0) | Repository: https://github.com/microsoft/SymCrypt | Docs: Primitives ---------- Supports ECDH and ECDSA with `NIST `__ curves (192, 224, 256, 384, 521) and Twisted Edwards `NUMS `__ curves (NumsP256t1, NumsP384t1, NumsP512t1). Also custom curves. Supports X25519. ECDH ^^^^ KeyGen: - `(signed) Fixed-window `__ via ``SymCryptEcpointGenericSetRandom -> SymCryptEcpointScalarMul -> SymCryptEcpointScalarMulFixedWindow``. Algorithm 1 in `Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis `__. - NIST (Short-Weierstrass) use `Jacobian `__. - `dbl-2007-bl `__ for generic double via ``SymCryptEcpointDouble`` or a `tweak of dbl-2007-bl/dbl-2001-b `__ formulae via ``SymCryptShortWeierstrassDoubleSpecializedAm3`` for ``a=-3``. - `add-2007-bl `__ via ``SymCryptEcpointAddDiffNonZero``. It also has side-channel unsafe version ``SymCryptShortWeierstrassAddSideChannelUnsafe`` and a generic wrapper for both via ``SymCryptEcpointAdd``. - NUMS (Twisted-Edwards) curves use `Extended projective `__. - `dbl-2008-hwcd `__ via ``SymCryptTwistedEdwardsDouble``. - `add-2008-hwcd `__ via ``SymCryptTwistedEdwardsAdd`` or ``SymCryptTwistedEdwardsAddDiffNonZero``. Derive: - `(signed) Fixed-window `__ via ``SymCryptEcDhSecretAgreement -> SymCryptEcpointScalarMul -> SymCryptEcpointScalarMulFixedWindow``. Algorithm 1 in `Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis `__. - Same coordinates and formulas as KeyGen. ECDSA ^^^^^ KeyGen: - Short-Weierstrass - `(signed) Fixed-window `__ via ``SymCryptEcpointGenericSetRandom -> SymCryptEcpointScalarMul -> SymCryptEcpointScalarMulFixedWindow``. Algorithm 1 in `Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis `__. - NIST (Short-Weierstrass) use `Jacobian `__. - `dbl-2007-bl `__ for generic double via ``SymCryptEcpointDouble`` or a `tweak of dbl-2007-bl/dbl-2001-b `__ formulae via ``SymCryptShortWeierstrassDoubleSpecializedAm3`` for ``a=-3``. - `add-2007-bl `__ via ``SymCryptEcpointAddDiffNonZero``. It also has side-channel unsafe version ``SymCryptShortWeierstrassAddSideChannelUnsafe`` and a generic wrapper for both via ``SymCryptEcpointAdd``. - NUMS (Twisted-Edwards) curves use `Extended projective `__. - `dbl-2008-hwcd `__ via ``SymCryptTwistedEdwardsDouble``. - `add-2008-hwcd `__ via ``SymCryptTwistedEdwardsAdd`` or ``SymCryptTwistedEdwardsAddDiffNonZero``. Sign: - Short-Weierstrass - `(signed) Fixed-window `__ via ``SymCryptEcDsaSignEx -> SymCryptEcpointScalarMul -> SymCryptEcpointScalarMulFixedWindow``. Algorithm 1 in `Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis `__. - Same coordinates and formulas as KeyGen. Verify: - Short-Weierstrass - `Double-scalar multiplication using the width-w NAF with interleaving `__ via ``SymCryptEcDsaVerify > SymCryptEcpointMultiScalarMul -> SymCryptEcpointMultiScalarMulWnafWithInterleaving``. Algorithm 9 in `Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis `__. - Same coordinates and formulas as KeyGen. X25519 ^^^^^^ KeyGen: - Montgomery - `Ladder `__ via ``SymCryptMontgomeryPointScalarMul``. - `xz `__. - `ladd-1987-m-3 `__ via ``SymCryptMontgomeryDoubleAndAdd``. Derive: - Same as Keygen.