Rewrote x509 certificate request writing to use structure for storing
diff --git a/include/polarssl/x509write.h b/include/polarssl/x509write.h
index 0d94f01..c845f78 100644
--- a/include/polarssl/x509write.h
+++ b/include/polarssl/x509write.h
@@ -33,6 +33,10 @@
 
 #include "rsa.h"
 
+#define POLARSSL_ERR_X509_WRITE_UNKNOWN_OID             -1
+#define POLARSSL_ERR_X509_WRITE_BAD_INPUT_DATA          -1
+#define POLARSSL_ERR_X509_WRITE_MALLOC_FAILED           -1
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -46,10 +50,23 @@
 }
 x509_req_name;
 
+typedef struct _x509_cert_req
+{
+    rsa_context *rsa;
+    x509_req_name *subject;
+    md_type_t md_alg;
+}
+x509_cert_req;
+
+void x509cert_req_init( x509_cert_req *ctx );
+int x509cert_req_set_subject_name( x509_cert_req *ctx, char *subject_name );
+void x509cert_req_set_rsa_key( x509_cert_req *ctx, rsa_context *rsa );
+void x509cert_req_set_md_alg( x509_cert_req *ctx, md_type_t md_alg );
+void x509cert_req_free( x509_cert_req *ctx );
+
 int x509_write_pubkey_der( unsigned char *buf, size_t size, rsa_context *rsa );
 int x509_write_key_der( unsigned char *buf, size_t size, rsa_context *rsa );
-int x509_write_cert_req( unsigned char *buf, size_t size, rsa_context *rsa,
-                         x509_req_name *req_name, md_type_t md_alg );
+int x509_write_cert_req( x509_cert_req *ctx, unsigned char *buf, size_t size );
 
 #ifdef __cplusplus
 }