internal static extern Status Make(
     ulong number_of_guardians,
     ulong quorum,
     ElementModP.ElementModPHandle elgamal_public_key,
     ElementModQ.ElementModQHandle commitment_hash,
     ElementModQ.ElementModQHandle manifest_hash,
     out CiphertextElectionContextHandle handle);
 internal static extern Status Make(
     ulong number_of_guardians,
     ulong quorum,
     [MarshalAs(UnmanagedType.LPStr)] string hex_elgamal_public_key,
     [MarshalAs(UnmanagedType.LPStr)] string hex_commitment_hash,
     [MarshalAs(UnmanagedType.LPStr)] string hex_manifest_hash,
     out CiphertextElectionContextHandle handle);
 internal static extern Status ToBson(
     CiphertextElectionContextHandle handle, out uint *data, out UIntPtr size);
 internal static extern Status FromBson(
     uint *data, ulong length, CiphertextElectionContextHandle handle);
 internal static extern Status FromJson(
     [MarshalAs(UnmanagedType.LPStr)] string data,
     out CiphertextElectionContextHandle handle);
 internal static extern Status GetCryptoExtendedBaseHash(
     CiphertextElectionContextHandle handle,
     out ElementModQ.ElementModQHandle crypto_extended_base_hash);
 internal static extern Status GetManifestHash(
     CiphertextElectionContextHandle handle,
     out ElementModQ.ElementModQHandle manifest_hash);
 internal static extern Status GetCommitmentHash(
     CiphertextElectionContextHandle handle,
     out ElementModQ.ElementModQHandle commitment_hash);
 internal static extern Status GetElGamalPublicKey(
     CiphertextElectionContextHandle handle,
     out ElementModP.ElementModPHandle elgamal_public_key);
 internal static extern Status Free(CiphertextElectionContextHandle handle);