/* -*-c-*-
*
- * $Id: share.h,v 1.1 2000/06/17 12:09:38 mdw Exp $
+ * $Id: share.h,v 1.2 2000/06/24 18:29:05 mdw Exp $
*
* Shamir's secret sharing
*
/*----- 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.
*
typedef struct share {
unsigned t; /* Threshold */
- unsigned n; /* The number of shares to make */
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, n) { t, n, 0, 0, 0, 0 }
+#define SHARE_INIT(t) { t, 0, 0, 0, 0 }
/*----- Functions provided ------------------------------------------------*/
/* --- @share_create@ --- *
*
* Arguments: @share *s@ = pointer to share context to initialize
- * @unsigned t, n@ = threshold parameters for the system
+ * @unsigned t@ = threshold for the system
*
* Returns: ---
*
* Use: Initializes a sharing context.
*/
-extern void share_create(share */*s*/, unsigned /*t*/, unsigned /*n*/);
+extern void share_create(share */*s*/, unsigned /*t*/);
/* --- @share_destroy@ --- *
*
*
* Returns: ---
*
- * Use: Generates @c->n@ secret shares, such that any @c->t@ of them
- * may be used to recover the secret.
- *
+ * Use: Initializes a sharing context to be able to create shares.
* The context structure is expected to be mostly filled in. In
- * particular, @t@, @n@ and @s@ must be initialized. If @p@ is
- * zero, a prime number of appropriate size is generated
+ * 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.
extern void share_mkshares(share */*s*/, grand */*r*/);
+/* --- @share_get@ --- *
+ *
+ * Arguments: @share *s@ = pointer to share conext
+ * @mp *d@ = destination for the share
+ * @unsigned x@ = share index to fetch
+ *
+ * Returns: The share, as requested.
+ *
+ * Use: Extracts a share from the system. You may extract @MPW_MAX@
+ * shares, or @s->p@ shares from the system, whichever is
+ * smaller. Shares are indexed from 0.
+ */
+
+extern mp *share_get(share */*s*/, mp */*d*/, unsigned /*x*/);
+
/* --- @share_add@ --- *
*
* Arguments: @share *s@ = pointer to sharing context