fix doxygen comment of the init functions of all audio format handlers.
[paraslash.git] / crypt.c
diff --git a/crypt.c b/crypt.c
index cf1cabecbad80cdca6d69cf2bbc2165427a84ed8..0d8b42410ea133355d396a2c689ddaf84b12c160 100644 (file)
--- a/crypt.c
+++ b/crypt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -41,7 +41,17 @@ static EVP_PKEY *load_key(const char *file, int private)
        return pkey;
 }
 
-
+/**
+ * read an RSA key from a file
+ *
+ * \param key_file the file containing the key
+ * \param rsa RSA structure is returned here
+ * \param private if non-zero, read the private key, otherwise the public key
+ *
+ * \return The size of the RSA key on success, negative on errors.
+ *
+ * \sa openssl(1), rsa(1).
+ */
 int get_rsa_key(char *key_file, RSA **rsa, int private)
 {
        EVP_PKEY *key = load_key(key_file, private);
@@ -55,6 +65,19 @@ int get_rsa_key(char *key_file, RSA **rsa, int private)
        return RSA_size(*rsa);
 }
 
+/**
+ * free an RSA structure
+ *
+ * \param rsa pointer to the RSA struct to free
+ *
+ * This must be called for any key obtained by get_rsa_key().
+ */
+void rsa_free(RSA *rsa)
+{
+       if (rsa)
+               RSA_free(rsa);
+}
+
 /**
  * decrypt a buffer using an RSA key
  *
@@ -78,6 +101,7 @@ int para_decrypt_buffer(char *key_file, unsigned char *outbuf, unsigned char *in
        if (ret < 0)
                return ret;
        ret = RSA_private_decrypt(rsa_inlen, inbuf, outbuf, rsa, RSA_PKCS1_PADDING);
+       rsa_free(rsa);
        return (ret > 0)? ret : -E_DECRYPT;
 }