/* -*-c-*-
*
- * $Id: share.h,v 1.2 2000/06/24 18:29:05 mdw Exp $
+ * $Id$
*
* Shamir's secret sharing
*
* (c) 2000 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of Catacomb.
*
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
- *
+ *
* Catacomb 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 Library General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Library General Public
* License along with Catacomb; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: share.h,v $
- * Revision 1.2 2000/06/24 18:29:05 mdw
- * Interface change: allow shares to be extracted from a context on demand,
- * rather than building them all up-front.
- *
- * Revision 1.1 2000/06/17 12:09:38 mdw
- * Shamir's secret sharing system.
- *
- */
-
/*----- Notes on the sharing system ---------------------------------------*
*
* Shamir's secret-sharing system is based on polynomial interpolation modulo
typedef struct share {
unsigned t; /* Threshold */
unsigned i; /* Next free slot in the vector */
- mp *s; /* The secret */
mp *p; /* Modulus for arithmetic */
share_pt *v; /* Vector of share information */
} share;
-#define SHARE_INIT(t) { t, 0, 0, 0, 0 }
+#define SHARE_INIT(t) { t, 0, 0, 0 }
/*----- Functions provided ------------------------------------------------*/
*
* Arguments: @share *s@ = pointer to share context to fill in
* @grand *r@ = pointer to random number source
+ * @mp *n@ = the secret to share
*
* Returns: ---
*
* Use: Initializes a sharing context to be able to create shares.
* The context structure is expected to be mostly filled in. In
- * particular, @t@ and @s@ must be initialized. If @p@ is zero,
- * a prime number of appropriate size is generated
- * automatically. If @v@ is zero, a vector of appropriate size
- * is allocated. You should use the macro @SHARE_INIT@ or
- * @share_create@ to construct sharing contexts.
+ * particular, @t@ must be initialized. If @p@ is zero, a prime
+ * number of appropriate size is generated automatically. If
+ * @v@ is zero, a vector of appropriate size is allocated. You
+ * should use the macro @SHARE_INIT@ or @share_create@ to
+ * construct sharing contexts.
*/
-extern void share_mkshares(share */*s*/, grand */*r*/);
+extern void share_mkshares(share */*s*/, grand */*r*/, mp */*n*/);
/* --- @share_get@ --- *
*
extern mp *share_get(share */*s*/, mp */*d*/, unsigned /*x*/);
+/* --- @share_addedp@ --- *
+ *
+ * Arguments: @share *s@ = pointer to sharing context
+ * @unsigned x@ = which share number to check
+ *
+ * Returns: Nonzero if share @x@ has been added already, zero if it
+ * hasn't.
+ */
+
+extern int share_addedp(share */*s*/, unsigned /*x*/);
+
/* --- @share_add@ --- *
*
* Arguments: @share *s@ = pointer to sharing context