extending bandwidth tracker api to support notifications
[oweals/gnunet.git] / src / include / gnunet_crypto_lib.h
index 183231c9b3f385c517796a043188ba91da5b7499..d9c5e49e1e5bc31f1aca0ef7f8cba6c5a9ec745d 100644 (file)
@@ -365,23 +365,16 @@ struct GNUNET_CRYPTO_PaillierPrivateKey
 };
 
 
-/**
- * Paillier plaintext.
- */
-struct GNUNET_CRYPTO_PaillierPlaintext
-{
-  /**
-   * The bits of the plaintext.
-   */
-  unsigned char bits[GNUNET_CRYPTO_PAILLIER_BITS / 8];
-};
-
-
 /**
  * Paillier ciphertext.
  */
 struct GNUNET_CRYPTO_PaillierCiphertext
 {
+  /**
+   * guaranteed minimum number of homomorphic operations with this ciphertext
+   */
+  int32_t remaining_ops GNUNET_PACKED;
+  
   /**
    * The bits of the ciphertext.
    */
@@ -1336,12 +1329,13 @@ GNUNET_CRYPTO_paillier_create (struct GNUNET_CRYPTO_PaillierPublicKey *public_ke
  * Encrypt a plaintext with a paillier public key.
  *
  * @param public_key Public key to use.
- * @param plaintext Plaintext to encrypt.
+ * @param m Plaintext to encrypt.
  * @param[out] ciphertext Encrytion of @a plaintext with @a public_key.
+ * @return guaranteed number of supported homomorphic operations
  */
-void
+int
 GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *public_key,
-                                const struct GNUNET_CRYPTO_PaillierPlaintext *plaintext,
+                                const gcry_mpi_t m,
                                 struct GNUNET_CRYPTO_PaillierCiphertext *ciphertext);
 
 
@@ -1351,13 +1345,13 @@ GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *pu
  * @param private_key Private key to use for decryption.
  * @param public_key Public key to use for decryption.
  * @param ciphertext Ciphertext to decrypt.
- * @param[out] plaintext Decryption of @a ciphertext with @private_key.
+ * @param[out] m Decryption of @a ciphertext with @private_key.
  */
 void
 GNUNET_CRYPTO_paillier_decrypt (const struct GNUNET_CRYPTO_PaillierPrivateKey *private_key,
                                 const struct GNUNET_CRYPTO_PaillierPublicKey *public_key,
                                 const struct GNUNET_CRYPTO_PaillierCiphertext *ciphertext,
-                                struct GNUNET_CRYPTO_PaillierPlaintext *plaintext);
+                                gcry_mpi_t m);
 
 
 /**
@@ -1366,17 +1360,28 @@ GNUNET_CRYPTO_paillier_decrypt (const struct GNUNET_CRYPTO_PaillierPrivateKey *p
  * Note that this operation can only be done a finite number of times
  * before an overflow occurs.
  *
- * @param x1 Paillier cipher text.
- * @param x2 Paillier cipher text.
+ * @param public_key Public key to use for encryption.
+ * @param c1 Paillier cipher text.
+ * @param c2 Paillier cipher text.
  * @param[out] result Result of the homomorphic operation.
  * @return #GNUNET_OK if the result could be computed,
  *         #GNUNET_SYSERR if no more homomorphic operations are remaining.
  */
 int
-GNUNET_CRYPTO_paillier_hom_add (const struct GNUNET_CRYPTO_PaillierCiphertext *x1,
-                                const struct GNUNET_CRYPTO_PaillierCiphertext *x2,
-                                const struct GNUNET_CRYPTO_PaillierCiphertext *result);
+GNUNET_CRYPTO_paillier_hom_add (const struct GNUNET_CRYPTO_PaillierPublicKey *public_key,
+                                const struct GNUNET_CRYPTO_PaillierCiphertext *c1,
+                                const struct GNUNET_CRYPTO_PaillierCiphertext *c2,
+                                struct GNUNET_CRYPTO_PaillierCiphertext *result);
+
 
+/**
+ * Get the number of remaining supported homomorphic operations. 
+ *
+ * @param c Paillier cipher text.
+ * @return the number of remaining homomorphic operations
+ */
+int
+GNUNET_CRYPTO_paillier_hom_get_remaining (const struct GNUNET_CRYPTO_PaillierCiphertext *c);
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {