int get_rawpub (rawpub *rpub_ptr, dckey *pub) { const char *pub_as_str = (const char *) dcexport (pub); if (skip_str (&pub_as_str, ELGAMAL_STR) || skip_str (&pub_as_str, ":Pub,p=")) return -1; mpz_init (rpub_ptr->p); mpz_init (rpub_ptr->q); mpz_init (rpub_ptr->g); mpz_init (rpub_ptr->y); if (read_mpz (&pub_as_str, rpub_ptr->p) || skip_str (&pub_as_str, ",q=") || read_mpz (&pub_as_str, rpub_ptr->q) || skip_str (&pub_as_str, ",g=") || read_mpz (&pub_as_str, rpub_ptr->g) || skip_str (&pub_as_str, ",y=") || read_mpz (&pub_as_str, rpub_ptr->y)) { return -1; } return 0; }
int get_rawpriv (rawpriv *rpriv_ptr, dckey *priv) { const char *priv_as_str = (const char *) dcexport (priv); if (skip_str (&priv_as_str, ELGAMAL_STR) || skip_str (&priv_as_str, ":Priv,p=")) return -1; mpz_init (rpriv_ptr->p); mpz_init (rpriv_ptr->q); mpz_init (rpriv_ptr->g); mpz_init (rpriv_ptr->x); if (read_mpz (&priv_as_str, rpriv_ptr->p) || skip_str (&priv_as_str, ",q=") || read_mpz (&priv_as_str, rpriv_ptr->q) || skip_str (&priv_as_str, ",g=") || read_mpz (&priv_as_str, rpriv_ptr->g) || skip_str (&priv_as_str, ",x=") || read_mpz (&priv_as_str, rpriv_ptr->x)) { return -1; } return 0; }
dckey * dckeydup (const dckey *key) { dckey *k = NULL; char *a; if ((a = dcexport (key))) { k = dcimport (a); free (a); } return k; }