summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--doc/gcrypt.texi5
-rw-r--r--mpi/mpiutil.c27
-rw-r--r--src/gcrypt.h.in6
4 files changed, 39 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 00435e29..ec853c97 100644
--- a/NEWS
+++ b/NEWS
@@ -101,6 +101,10 @@ Noteworthy changes in version 1.6.0 (unreleased)
gcry_mpi_ec_curve_point NEW.
GCRYMPI_FLAG_IMMUTABLE NEW.
GCRYMPI_FLAG_CONST NEW.
+ GCRYMPI_FLAG_USER1 NEW.
+ GCRYMPI_FLAG_USER2 NEW.
+ GCRYMPI_FLAG_USER3 NEW.
+ GCRYMPI_FLAG_USER4 NEW.
GCRYMPI_CONST_ONE NEW.
GCRYMPI_CONST_TWO NEW.
GCRYMPI_CONST_THREE NEW.
diff --git a/doc/gcrypt.texi b/doc/gcrypt.texi
index 4870a1c1..91168a83 100644
--- a/doc/gcrypt.texi
+++ b/doc/gcrypt.texi
@@ -4822,6 +4822,11 @@ commonly used constants are pre-defined and accessible using the
macros @code{GCRYMPI_CONST_ONE}, @code{GCRYMPI_CONST_TWO},
@code{GCRYMPI_CONST_THREE}, @code{GCRYMPI_CONST_FOUR}, and
@code{GCRYMPI_CONST_EIGHT}.
+@item GCRYMPI_FLAG_USER1
+@itemx GCRYMPI_FLAG_USER2
+@itemx GCRYMPI_FLAG_USER3
+@itemx GCRYMPI_FLAG_USER4
+These flags are reserved for use by the application.
@end table
@deftypefun void gcry_mpi_set_flag (@w{gcry_mpi_t @var{a}}, @
diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c
index a82a8e73..c4259ace 100644
--- a/mpi/mpiutil.c
+++ b/mpi/mpiutil.c
@@ -220,7 +220,11 @@ _gcry_mpi_free( gcry_mpi_t a )
}
/* Check that the flags makes sense. We better allow for bit 1
(value 2) for backward ABI compatibility. */
- if ((a->flags & ~(1|2|4|16)))
+ if ((a->flags & ~(1|2|4|16
+ |GCRYMPI_FLAG_USER1
+ |GCRYMPI_FLAG_USER2
+ |GCRYMPI_FLAG_USER3
+ |GCRYMPI_FLAG_USER4)))
log_bug("invalid flag value in mpi_free\n");
gcry_free(a);
}
@@ -275,7 +279,8 @@ gcry_mpi_set_opaque( gcry_mpi_t a, void *p, unsigned int nbits )
a->alloced = 0;
a->nlimbs = 0;
a->sign = nbits;
- a->flags = 4;
+ a->flags = 4 | (a->flags & (GCRYMPI_FLAG_USER1|GCRYMPI_FLAG_USER2
+ |GCRYMPI_FLAG_USER3|GCRYMPI_FLAG_USER4));
if (gcry_is_secure (a->d))
a->flags |= 1;
return a;
@@ -603,6 +608,12 @@ gcry_mpi_set_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
case GCRYMPI_FLAG_SECURE: mpi_set_secure(a); break;
case GCRYMPI_FLAG_CONST: a->flags |= (16|32); break;
case GCRYMPI_FLAG_IMMUTABLE: a->flags |= 16; break;
+
+ case GCRYMPI_FLAG_USER1:
+ case GCRYMPI_FLAG_USER2:
+ case GCRYMPI_FLAG_USER3:
+ case GCRYMPI_FLAG_USER4: a->flags |= flag; break;
+
case GCRYMPI_FLAG_OPAQUE:
default: log_bug("invalid flag value\n");
}
@@ -619,6 +630,14 @@ gcry_mpi_clear_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
if (!(a->flags & 32))
a->flags &= ~16;
break;
+
+ case GCRYMPI_FLAG_USER1:
+ case GCRYMPI_FLAG_USER2:
+ case GCRYMPI_FLAG_USER3:
+ case GCRYMPI_FLAG_USER4:
+ a->flags &= ~flag;
+ break;
+
case GCRYMPI_FLAG_CONST:
case GCRYMPI_FLAG_SECURE:
case GCRYMPI_FLAG_OPAQUE:
@@ -635,6 +654,10 @@ gcry_mpi_get_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
case GCRYMPI_FLAG_OPAQUE: return !!(a->flags & 4);
case GCRYMPI_FLAG_IMMUTABLE: return !!(a->flags & 16);
case GCRYMPI_FLAG_CONST: return !!(a->flags & 32);
+ case GCRYMPI_FLAG_USER1:
+ case GCRYMPI_FLAG_USER2:
+ case GCRYMPI_FLAG_USER3:
+ case GCRYMPI_FLAG_USER4: return !!(a->flags & flag);
default: log_bug("invalid flag value\n");
}
/*NOTREACHED*/
diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in
index 625fa9fc..53133bf2 100644
--- a/src/gcrypt.h.in
+++ b/src/gcrypt.h.in
@@ -501,7 +501,11 @@ enum gcry_mpi_flag
a way to store some bytes. This is
useful for encrypted big integers. */
GCRYMPI_FLAG_IMMUTABLE = 4, /* Mark the MPI as immutable. */
- GCRYMPI_FLAG_CONST = 8 /* Mark the MPI as a constant. */
+ GCRYMPI_FLAG_CONST = 8, /* Mark the MPI as a constant. */
+ GCRYMPI_FLAG_USER1 = 0x0100,/* User flag 1. */
+ GCRYMPI_FLAG_USER2 = 0x0200,/* User flag 2. */
+ GCRYMPI_FLAG_USER3 = 0x0400,/* User flag 3. */
+ GCRYMPI_FLAG_USER4 = 0x0800,/* User flag 4. */
};