+WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_id_modulus(d0_blind_id_t *ctx)
+{
+ USING(rsa_n);
+ REPLACING(schnorr_G);
+
+ CHECK_ASSIGN(ctx->schnorr_G, d0_bignum_zero(ctx->schnorr_G));
+ CHECK(d0_dl_generate_key(d0_bignum_size(ctx->rsa_n)-1, ctx->schnorr_G));
+ return 1;
+fail:
+ return 0;
+}
+
+WARN_UNUSED_RESULT BOOL d0_blind_id_read_private_id_modulus(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen)
+{
+ d0_iobuf_t *in = d0_iobuf_open_read(inbuf, inbuflen);
+ CHECK_ASSIGN(ctx->schnorr_G, d0_iobuf_read_bignum(in, ctx->schnorr_G));
+ return d0_iobuf_close(in, NULL);
+
+fail:
+ d0_iobuf_close(in, NULL);
+ return 0;
+}
+
+WARN_UNUSED_RESULT BOOL d0_blind_id_write_private_id_modulus(d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen)
+{
+ d0_iobuf_t *out;
+
+ USING(schnorr_G);
+
+ out = d0_iobuf_open_write(outbuf, *outbuflen);
+ CHECK(d0_iobuf_write_bignum(out, ctx->schnorr_G));
+ return d0_iobuf_close(out, outbuflen);
+
+fail:
+ d0_iobuf_close(out, outbuflen);
+ return 0;
+}
+