summaryrefslogtreecommitdiff
path: root/common/math_util.c
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2022-09-21 14:08:36 -0700
committerTom Hughes <tomhughes@chromium.org>2022-09-22 12:59:38 -0700
commitc453fd704268ef72de871b0c5ac7a989de662334 (patch)
treefcf6ce5810f9ff9e3c8cce434812dd75492269ed /common/math_util.c
parent6c1587ca70f558b4f96b3f0b18ad8b027d3ba99d (diff)
parent28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff)
downloadchrome-ec-c453fd704268ef72de871b0c5ac7a989de662334.tar.gz
Merge remote-tracking branch cros/main into firmware-fpmcu-dartmonkey-releasefirmware-fpmcu-dartmonkey-release
Generated by: ./util/update_release_branch.py --board dartmonkey --relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware-fpmcu-dartmonkey-release Relevant changes: git log --oneline 6c1587ca70..28712dae9d -- board/nocturne_fp board/dartmonkey common/fpsensor docs/fingerprint driver/fingerprint util/getversion.sh ded9307b79 util/getversion.sh: Fix version when not in a git repo 956055e692 board: change Google USB vendor info 71b2ef709d Update license boilerplate text in source code files 33e11afda0 Revert "fpsensor: Build fpsensor source file with C++" c8d0360723 fpsensor: Build fpsensor source file with C++ bc113abd53 fpsensor: Fix g++ compiler error 150a58a0dc fpsensor: Fix fp_set_sensor_mode return type b33b5ce85b fpsensor: Remove nested designators for C++ compatibility 2e864b2539 tree-wide: const-ify argv for console commands 56d8b360f9 test: Add test for get ikm failure when seed not set 3a3d6c3690 test: Add test for fpsensor trivial key failure 233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256 0a041b285b docs/fingerprint: Typo correction c03fab67e2 docs/fingerprint: Fix the path of fputils.py 0b5d4baf5a util/getversion.sh: Fix empty file list handling 6e128fe760 FPMCU dev board environment with Satlab 3eb29b6aa5 builtin: Move ssize_t to sys/types.h 345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release c25ffdb316 common: Conditionally support printf %l and %i modifiers 9a3c514b45 test: Add a test to check if the debugger is connected 54e603413f Move standard library tests to their own file 43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release 25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format 4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format 738de2b575 trng: Rename rand to trng_rand 14b8270edd docs/fingerprint: Update dragonclaw power numbers 0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format a0751778f4 board/nocturne_fp/ro_workarounds.c: Format with clang-format 5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format 6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format 58f0246dbe board/nocturne_fp/board_ro.c: Format with clang-format 7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format 21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format 98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format 84e53a65da board/nocturne_fp/board.h: Format with clang-format 73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format 0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format 1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format dca9d74321 Revert "trng: Rename rand to trng_rand" a6b0b3554f trng: Rename rand to trng_rand 28d0b75b70 third_party/boringssl: Remove unused header BRANCH=None BUG=b:244387210 b:242720240 b:215613183 b:242720910 b:236386294 BUG=b:234181908 b:244781166 b:234781655 b:234143158 b:234181908 BUG=b:237344361 b:236025198 b:234181908 b:180945056 chromium:1098010 BUG=b:246424843 b:234181908 b:131913998 TEST=`make -j buildall` TEST=./util/run_device_tests.py --board dartmonkey Test "aes": PASSED Test "cec": PASSED Test "cortexm_fpu": PASSED Test "crc": PASSED Test "flash_physical": PASSED Test "flash_write_protect": PASSED Test "fpsensor_hw": PASSED Test "fpsensor_spi_ro": PASSED Test "fpsensor_spi_rw": PASSED Test "fpsensor_uart_ro": PASSED Test "fpsensor_uart_rw": PASSED Test "mpu_ro": PASSED Test "mpu_rw": PASSED Test "mutex": PASSED Test "pingpong": PASSED Test "printf": PASSED Test "queue": PASSED Test "rollback_region0": PASSED Test "rollback_region1": PASSED Test "rollback_entropy": PASSED Test "rtc": PASSED Test "sha256": PASSED Test "sha256_unrolled": PASSED Test "static_if": PASSED Test "stdlib": PASSED Test "system_is_locked_wp_on": PASSED Test "system_is_locked_wp_off": PASSED Test "timer_dos": PASSED Test "utils": PASSED Test "utils_str": PASSED Test "panic_data_dartmonkey_v2.0.2887": PASSED Test "panic_data_nocturne_fp_v2.2.64": PASSED Test "panic_data_nami_fp_v2.2.144": PASSED Force-Relevant-Builds: all Signed-off-by: Tom Hughes <tomhughes@chromium.org> Change-Id: I2c312583a709fedae8fe11d92c22328c3b634bc7
Diffstat (limited to 'common/math_util.c')
-rw-r--r--common/math_util.c110
1 files changed, 52 insertions, 58 deletions
diff --git a/common/math_util.c b/common/math_util.c
index ff305438eb..c0a279b825 100644
--- a/common/math_util.c
+++ b/common/math_util.c
@@ -1,4 +1,4 @@
-/* Copyright 2014 The Chromium OS Authors. All rights reserved.
+/* Copyright 2014 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -11,18 +11,18 @@
#include "util.h"
/* For cosine lookup table, define the increment and the size of the table. */
-#define COSINE_LUT_INCR_DEG 5
-#define COSINE_LUT_SIZE ((180 / COSINE_LUT_INCR_DEG) + 1)
+#define COSINE_LUT_INCR_DEG 5
+#define COSINE_LUT_SIZE ((180 / COSINE_LUT_INCR_DEG) + 1)
/* Lookup table for the value of cosine from 0 degrees to 180 degrees. */
static const fp_t cos_lut[] = {
- FLOAT_TO_FP( 1.00000), FLOAT_TO_FP( 0.99619), FLOAT_TO_FP( 0.98481),
- FLOAT_TO_FP( 0.96593), FLOAT_TO_FP( 0.93969), FLOAT_TO_FP( 0.90631),
- FLOAT_TO_FP( 0.86603), FLOAT_TO_FP( 0.81915), FLOAT_TO_FP( 0.76604),
- FLOAT_TO_FP( 0.70711), FLOAT_TO_FP( 0.64279), FLOAT_TO_FP( 0.57358),
- FLOAT_TO_FP( 0.50000), FLOAT_TO_FP( 0.42262), FLOAT_TO_FP( 0.34202),
- FLOAT_TO_FP( 0.25882), FLOAT_TO_FP( 0.17365), FLOAT_TO_FP( 0.08716),
- FLOAT_TO_FP( 0.00000), FLOAT_TO_FP(-0.08716), FLOAT_TO_FP(-0.17365),
+ FLOAT_TO_FP(1.00000), FLOAT_TO_FP(0.99619), FLOAT_TO_FP(0.98481),
+ FLOAT_TO_FP(0.96593), FLOAT_TO_FP(0.93969), FLOAT_TO_FP(0.90631),
+ FLOAT_TO_FP(0.86603), FLOAT_TO_FP(0.81915), FLOAT_TO_FP(0.76604),
+ FLOAT_TO_FP(0.70711), FLOAT_TO_FP(0.64279), FLOAT_TO_FP(0.57358),
+ FLOAT_TO_FP(0.50000), FLOAT_TO_FP(0.42262), FLOAT_TO_FP(0.34202),
+ FLOAT_TO_FP(0.25882), FLOAT_TO_FP(0.17365), FLOAT_TO_FP(0.08716),
+ FLOAT_TO_FP(0.00000), FLOAT_TO_FP(-0.08716), FLOAT_TO_FP(-0.17365),
FLOAT_TO_FP(-0.25882), FLOAT_TO_FP(-0.34202), FLOAT_TO_FP(-0.42262),
FLOAT_TO_FP(-0.50000), FLOAT_TO_FP(-0.57358), FLOAT_TO_FP(-0.64279),
FLOAT_TO_FP(-0.70711), FLOAT_TO_FP(-0.76604), FLOAT_TO_FP(-0.81915),
@@ -32,7 +32,6 @@ static const fp_t cos_lut[] = {
};
BUILD_ASSERT(ARRAY_SIZE(cos_lut) == COSINE_LUT_SIZE);
-
fp_t arc_cos(fp_t x)
{
int i;
@@ -48,8 +47,8 @@ fp_t arc_cos(fp_t x)
* interpolate for precision.
*/
/* TODO(crosbug.com/p/25600): Optimize with binary search. */
- for (i = 0; i < COSINE_LUT_SIZE-1; i++) {
- if (x >= cos_lut[i+1]) {
+ for (i = 0; i < COSINE_LUT_SIZE - 1; i++) {
+ if (x >= cos_lut[i + 1]) {
const fp_t interp = fp_div(cos_lut[i] - x,
cos_lut[i] - cos_lut[i + 1]);
@@ -104,7 +103,7 @@ int int_sqrtf(fp_inter_t x)
* infrequently enough it doesn't matter.
*/
if (x <= 0)
- return 0; /* Yeah, for imaginary numbers too */
+ return 0; /* Yeah, for imaginary numbers too */
else if (x >= (fp_inter_t)rmax * rmax)
return rmax;
@@ -138,9 +137,8 @@ fp_t fp_sqrtf(fp_t x)
int vector_magnitude(const intv3_t v)
{
- fp_inter_t sum = (fp_inter_t)v[0] * v[0] +
- (fp_inter_t)v[1] * v[1] +
- (fp_inter_t)v[2] * v[2];
+ fp_inter_t sum = (fp_inter_t)v[0] * v[0] + (fp_inter_t)v[1] * v[1] +
+ (fp_inter_t)v[2] * v[2];
return int_sqrtf(sum);
}
@@ -155,8 +153,7 @@ void cross_product(const intv3_t v1, const intv3_t v2, intv3_t v)
fp_inter_t dot_product(const intv3_t v1, const intv3_t v2)
{
- return (fp_inter_t)v1[X] * v2[X] +
- (fp_inter_t)v1[Y] * v2[Y] +
+ return (fp_inter_t)v1[X] * v2[X] + (fp_inter_t)v1[Y] * v2[Y] +
(fp_inter_t)v1[Z] * v2[Z];
}
@@ -215,17 +212,13 @@ void rotate(const intv3_t v, const mat33_fp_t R, intv3_t res)
return;
}
-
/* Rotate */
- t[0] = (fp_inter_t)v[0] * R[0][0] +
- (fp_inter_t)v[1] * R[1][0] +
- (fp_inter_t)v[2] * R[2][0];
- t[1] = (fp_inter_t)v[0] * R[0][1] +
- (fp_inter_t)v[1] * R[1][1] +
- (fp_inter_t)v[2] * R[2][1];
- t[2] = (fp_inter_t)v[0] * R[0][2] +
- (fp_inter_t)v[1] * R[1][2] +
- (fp_inter_t)v[2] * R[2][2];
+ t[0] = (fp_inter_t)v[0] * R[0][0] + (fp_inter_t)v[1] * R[1][0] +
+ (fp_inter_t)v[2] * R[2][0];
+ t[1] = (fp_inter_t)v[0] * R[0][1] + (fp_inter_t)v[1] * R[1][1] +
+ (fp_inter_t)v[2] * R[2][1];
+ t[2] = (fp_inter_t)v[0] * R[0][2] + (fp_inter_t)v[1] * R[1][2] +
+ (fp_inter_t)v[2] * R[2][2];
/* Scale by fixed point shift when writing back to result */
res[0] = FP_TO_INT(t[0]);
@@ -244,38 +237,39 @@ void rotate_inv(const intv3_t v, const mat33_fp_t R, intv3_t res)
return;
}
- deter = fp_mul(R[0][0], (fp_mul(R[1][1], R[2][2]) -
- fp_mul(R[2][1], R[1][2]))) -
- fp_mul(R[0][1], (fp_mul(R[1][0], R[2][2]) -
- fp_mul(R[1][2], R[2][0]))) +
- fp_mul(R[0][2], (fp_mul(R[1][0], R[2][1]) -
- fp_mul(R[1][1], R[2][0])));
+ deter = fp_mul(R[0][0],
+ (fp_mul(R[1][1], R[2][2]) - fp_mul(R[2][1], R[1][2]))) -
+ fp_mul(R[0][1],
+ (fp_mul(R[1][0], R[2][2]) - fp_mul(R[1][2], R[2][0]))) +
+ fp_mul(R[0][2],
+ (fp_mul(R[1][0], R[2][1]) - fp_mul(R[1][1], R[2][0])));
/*
* invert the matrix: from
* http://stackoverflow.com/questions/983999/
* simple-3x3-matrix-inverse-code-c
*/
- t[0] = (fp_inter_t)v[0] * (fp_mul(R[1][1], R[2][2]) -
- fp_mul(R[2][1], R[1][2])) -
- (fp_inter_t)v[1] * (fp_mul(R[1][0], R[2][2]) -
- fp_mul(R[1][2], R[2][0])) +
- (fp_inter_t)v[2] * (fp_mul(R[1][0], R[2][1]) -
- fp_mul(R[2][0], R[1][1]));
-
- t[1] = (fp_inter_t)v[0] * (fp_mul(R[0][1], R[2][2]) -
- fp_mul(R[0][2], R[2][1])) * -1 +
- (fp_inter_t)v[1] * (fp_mul(R[0][0], R[2][2]) -
- fp_mul(R[0][2], R[2][0])) -
- (fp_inter_t)v[2] * (fp_mul(R[0][0], R[2][1]) -
- fp_mul(R[2][0], R[0][1]));
-
- t[2] = (fp_inter_t)v[0] * (fp_mul(R[0][1], R[1][2]) -
- fp_mul(R[0][2], R[1][1])) -
- (fp_inter_t)v[1] * (fp_mul(R[0][0], R[1][2]) -
- fp_mul(R[1][0], R[0][2])) +
- (fp_inter_t)v[2] * (fp_mul(R[0][0], R[1][1]) -
- fp_mul(R[1][0], R[0][1]));
+ t[0] = (fp_inter_t)v[0] *
+ (fp_mul(R[1][1], R[2][2]) - fp_mul(R[2][1], R[1][2])) -
+ (fp_inter_t)v[1] *
+ (fp_mul(R[1][0], R[2][2]) - fp_mul(R[1][2], R[2][0])) +
+ (fp_inter_t)v[2] *
+ (fp_mul(R[1][0], R[2][1]) - fp_mul(R[2][0], R[1][1]));
+
+ t[1] = (fp_inter_t)v[0] *
+ (fp_mul(R[0][1], R[2][2]) - fp_mul(R[0][2], R[2][1])) *
+ -1 +
+ (fp_inter_t)v[1] *
+ (fp_mul(R[0][0], R[2][2]) - fp_mul(R[0][2], R[2][0])) -
+ (fp_inter_t)v[2] *
+ (fp_mul(R[0][0], R[2][1]) - fp_mul(R[2][0], R[0][1]));
+
+ t[2] = (fp_inter_t)v[0] *
+ (fp_mul(R[0][1], R[1][2]) - fp_mul(R[0][2], R[1][1])) -
+ (fp_inter_t)v[1] *
+ (fp_mul(R[0][0], R[1][2]) - fp_mul(R[1][0], R[0][2])) +
+ (fp_inter_t)v[2] *
+ (fp_mul(R[0][0], R[1][1]) - fp_mul(R[1][0], R[0][1]));
/* Scale by fixed point shift when writing back to result */
res[0] = FP_TO_INT(fp_div(t[0], deter));
@@ -287,8 +281,8 @@ void rotate_inv(const intv3_t v, const mat33_fp_t R, intv3_t res)
int round_divide(int64_t dividend, int divisor)
{
return (dividend > 0) ^ (divisor > 0) ?
- (dividend - divisor / 2) / divisor :
- (dividend + divisor / 2) / divisor;
+ (dividend - divisor / 2) / divisor :
+ (dividend + divisor / 2) / divisor;
}
#if ULONG_MAX == 0xFFFFFFFFUL
@@ -303,7 +297,7 @@ uint64_t bitmask_uint64(int offset)
{
union mask64_t {
struct {
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
uint32_t lo;
uint32_t hi;
#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)