mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-13 11:10:13 +01:00
44b7f056d9
bug1001332, 56b691c003ad, bug1086145, bug1054069, bug1155922, bug991783, bug1125025, bug1162521, bug1162644, bug1132941, bug1164364, bug1166205, bug1166163, bug1166515, bug1138554, bug1167046, bug1167043, bug1169451, bug1172128, bug1170322, bug102794, bug1128184, bug557830, bug1174648, bug1180244, bug1177784, bug1173413, bug1169174, bug1084669, bug951455, bug1183395, bug1177430, bug1183827, bug1160139, bug1154106, bug1142209, bug1185033, bug1193467, bug1182667(with sha512 changes backed out, which breaks VC6 compilation), bug1158489, bug337796
53 lines
1.7 KiB
C
53 lines
1.7 KiB
C
/*
|
|
* mplogic.h
|
|
*
|
|
* Bitwise logical operations on MPI values
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef _H_MPLOGIC_
|
|
#define _H_MPLOGIC_
|
|
|
|
#include "mpi.h"
|
|
|
|
/*
|
|
The logical operations treat an mp_int as if it were a bit vector,
|
|
without regard to its sign (an mp_int is represented in a signed
|
|
magnitude format). Values are treated as if they had an infinite
|
|
string of zeros left of the most-significant bit.
|
|
*/
|
|
|
|
/* Parity results */
|
|
|
|
#define MP_EVEN MP_YES
|
|
#define MP_ODD MP_NO
|
|
|
|
/* Bitwise functions */
|
|
|
|
mp_err mpl_not(mp_int *a, mp_int *b); /* one's complement */
|
|
mp_err mpl_and(mp_int *a, mp_int *b, mp_int *c); /* bitwise AND */
|
|
mp_err mpl_or(mp_int *a, mp_int *b, mp_int *c); /* bitwise OR */
|
|
mp_err mpl_xor(mp_int *a, mp_int *b, mp_int *c); /* bitwise XOR */
|
|
|
|
/* Shift functions */
|
|
|
|
mp_err mpl_rsh(const mp_int *a, mp_int *b, mp_digit d); /* right shift */
|
|
mp_err mpl_lsh(const mp_int *a, mp_int *b, mp_digit d); /* left shift */
|
|
|
|
/* Bit count and parity */
|
|
|
|
mp_err mpl_num_set(mp_int *a, int *num); /* count set bits */
|
|
mp_err mpl_num_clear(mp_int *a, int *num); /* count clear bits */
|
|
mp_err mpl_parity(mp_int *a); /* determine parity */
|
|
|
|
/* Get & Set the value of a bit */
|
|
|
|
mp_err mpl_set_bit(mp_int *a, mp_size bitNum, mp_size value);
|
|
mp_err mpl_get_bit(const mp_int *a, mp_size bitNum);
|
|
mp_err mpl_get_bits(const mp_int *a, mp_size lsbNum, mp_size numBits);
|
|
mp_size mpl_significant_bits(const mp_int *a);
|
|
|
|
#endif /* end _H_MPLOGIC_ */
|