#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <gtest/gtest.h>
#include <openssl/curve25519.h>
#include "internal.h"
#include "../internal.h"
#include "../test/abi_test.h"
#include "../test/file_test.h"
#include "../test/test_util.h"
#include "../test/wycheproof_util.h"
#include "internal.h"
static inline int ctwrapX25519(uint8_t out_shared_key[32],
const uint8_t private_key[32],
const uint8_t peer_public_value[32]) { … }
TEST(X25519Test, TestVector) { … }
TEST(X25519Test, SmallOrder) { … }
TEST(X25519Test, Iterated) { … }
TEST(X25519Test, DISABLED_IteratedLarge) { … }
TEST(X25519Test, Wycheproof) { … }
#if defined(BORINGSSL_X25519_NEON) && defined(SUPPORTS_ABI_TEST)
TEST(X25519Test, NeonABI) {
if (!CRYPTO_is_NEON_capable()) {
GTEST_SKIP() << "Can't test ABI of NEON code without NEON";
}
static const uint8_t kScalar[32] = {
0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d, 0x3b, 0x16, 0x15,
0x4b, 0x82, 0x46, 0x5e, 0xdd, 0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc,
0x5a, 0x18, 0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4,
};
static const uint8_t kPoint[32] = {
0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb, 0x35, 0x94, 0xc1,
0xa4, 0x24, 0xb1, 0x5f, 0x7c, 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3,
0x35, 0x3b, 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c,
};
uint8_t secret[32];
CHECK_ABI(x25519_NEON, secret, kScalar, kPoint);
}
#endif
#if defined(BORINGSSL_FE25519_ADX) && defined(SUPPORTS_ABI_TEST)
TEST(X25519Test, AdxMulABI) {
static const uint64_t in1[4] = {0}, in2[4] = {0};
uint64_t out[4];
if (CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable() &&
CRYPTO_is_ADX_capable()) {
CHECK_ABI(fiat_curve25519_adx_mul, out, in1, in2);
} else {
GTEST_SKIP() << "Can't test ABI of ADX code without ADX";
}
}
TEST(X25519Test, AdxSquareABI) {
static const uint64_t in[4] = {0};
uint64_t out[4];
if (CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable() &&
CRYPTO_is_ADX_capable()) {
CHECK_ABI(fiat_curve25519_adx_square, out, in);
} else {
GTEST_SKIP() << "Can't test ABI of ADX code without ADX";
}
}
#endif