-/* Thanks Johan Pascal */
-void decaf_ed448_convert_public_key_to_x448(uint8_t x[DECAF_X448_PUBLIC_BYTES],
- const uint8_t
- ed[DECAF_EDDSA_448_PUBLIC_BYTES])
-{
- gf y;
- const uint8_t mask = (uint8_t)(0xFE << (7));
- ignore_result(gf_deserialize(y, ed, 1, mask));
-
- {
- gf n, d;
-
- /* u = y^2 * (1-dy^2) / (1-y^2) */
- gf_sqr(n, y); /* y^2 */
- gf_sub(d, ONE, n); /* 1-y^2 */
- gf_invert(d, d, 0); /* 1/(1-y^2) */
- gf_mul(y, n, d); /* y^2 / (1-y^2) */
- gf_mulw(d, n, EDWARDS_D); /* dy^2 */
- gf_sub(d, ONE, d); /* 1-dy^2 */
- gf_mul(n, y, d); /* y^2 * (1-dy^2) / (1-y^2) */
- gf_serialize(x, n, 1);
-
- OPENSSL_cleanse(y, sizeof(y));
- OPENSSL_cleanse(n, sizeof(n));
- OPENSSL_cleanse(d, sizeof(d));
- }
-}
-