#include "amplify_tommath_private.h" #ifdef AMPLIFY_BN_MP_SIGNED_RSH_C /* LibTomMath, multiple-precision integer library -- Tom St Denis */ /* SPDX-License-Identifier: Unlicense */ /* Modifications Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. */ /* shift right by a certain bit count with sign extension */ amplify_mp_err amplify_amplify_mp_signed_rsh(const amplify_mp_int *a, int b, amplify_mp_int *c) { amplify_mp_err res; if (a->sign == AMPLIFY_MP_ZPOS) { return amplify_mp_div_2d(a, b, c, NULL); } res = amplify_amplify_mp_add_d(a, 1uL, c); if (res != AMPLIFY_MP_OKAY) { return res; } res = amplify_mp_div_2d(c, b, c, NULL); return (res == AMPLIFY_MP_OKAY) ? amplify_mp_sub_d(c, 1uL, c) : res; } #endif