465ae83692
Based on 1 normalized pattern(s): gnupg is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version gnupg is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa note this code is heavily based on the gnu mp library actually it s the same code with only minor changes in the way the data is stored this is to support the abstraction of an optional secure memory allocation which may be used to avoid revealing of sensitive data due to paging etc the gnu mp library itself is published under the lgpl however i decided to publish this code under the plain gpl extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 14 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520170856.639982569@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
84 lines
2.5 KiB
C
84 lines
2.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/* mpi.h - Multi Precision Integers
|
|
* Copyright (C) 1994, 1996, 1998, 1999,
|
|
* 2000, 2001 Free Software Foundation, Inc.
|
|
*
|
|
* This file is part of GNUPG.
|
|
*
|
|
* Note: This code is heavily based on the GNU MP Library.
|
|
* Actually it's the same code with only minor changes in the
|
|
* way the data is stored; this is to support the abstraction
|
|
* of an optional secure memory allocation which may be used
|
|
* to avoid revealing of sensitive data due to paging etc.
|
|
* The GNU MP Library itself is published under the LGPL;
|
|
* however I decided to publish this code under the plain GPL.
|
|
*/
|
|
|
|
#ifndef G10_MPI_H
|
|
#define G10_MPI_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/scatterlist.h>
|
|
|
|
#define BYTES_PER_MPI_LIMB (BITS_PER_LONG / 8)
|
|
#define BITS_PER_MPI_LIMB BITS_PER_LONG
|
|
|
|
typedef unsigned long int mpi_limb_t;
|
|
typedef signed long int mpi_limb_signed_t;
|
|
|
|
struct gcry_mpi {
|
|
int alloced; /* array size (# of allocated limbs) */
|
|
int nlimbs; /* number of valid limbs */
|
|
int nbits; /* the real number of valid bits (info only) */
|
|
int sign; /* indicates a negative number */
|
|
unsigned flags; /* bit 0: array must be allocated in secure memory space */
|
|
/* bit 1: not used */
|
|
/* bit 2: the limb is a pointer to some m_alloced data */
|
|
mpi_limb_t *d; /* array with the limbs */
|
|
};
|
|
|
|
typedef struct gcry_mpi *MPI;
|
|
|
|
#define mpi_get_nlimbs(a) ((a)->nlimbs)
|
|
|
|
/*-- mpiutil.c --*/
|
|
MPI mpi_alloc(unsigned nlimbs);
|
|
void mpi_free(MPI a);
|
|
int mpi_resize(MPI a, unsigned nlimbs);
|
|
|
|
/*-- mpicoder.c --*/
|
|
MPI mpi_read_raw_data(const void *xbuffer, size_t nbytes);
|
|
MPI mpi_read_from_buffer(const void *buffer, unsigned *ret_nread);
|
|
MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int len);
|
|
void *mpi_get_buffer(MPI a, unsigned *nbytes, int *sign);
|
|
int mpi_read_buffer(MPI a, uint8_t *buf, unsigned buf_len, unsigned *nbytes,
|
|
int *sign);
|
|
int mpi_write_to_sgl(MPI a, struct scatterlist *sg, unsigned nbytes,
|
|
int *sign);
|
|
|
|
/*-- mpi-pow.c --*/
|
|
int mpi_powm(MPI res, MPI base, MPI exp, MPI mod);
|
|
|
|
/*-- mpi-cmp.c --*/
|
|
int mpi_cmp_ui(MPI u, ulong v);
|
|
int mpi_cmp(MPI u, MPI v);
|
|
|
|
/*-- mpi-bit.c --*/
|
|
void mpi_normalize(MPI a);
|
|
unsigned mpi_get_nbits(MPI a);
|
|
|
|
/* inline functions */
|
|
|
|
/**
|
|
* mpi_get_size() - returns max size required to store the number
|
|
*
|
|
* @a: A multi precision integer for which we want to allocate a bufer
|
|
*
|
|
* Return: size required to store the number
|
|
*/
|
|
static inline unsigned int mpi_get_size(MPI a)
|
|
{
|
|
return a->nlimbs * BYTES_PER_MPI_LIMB;
|
|
}
|
|
#endif /*G10_MPI_H */
|