allow choice of digest algorithm in certificate generation
[strongswan.git] / src / libstrongswan / credentials / builder.h
index 92e13c6..650d052 100644 (file)
@@ -38,9 +38,27 @@ typedef builder_t* (*builder_constructor_t)(int subtype);
  * Parts to build credentials from.
  */
 enum builder_part_t {
-       /** DER encoded ASN1 blob, argument is a chunk_t */
+       /** path to a file encoded in any format, char* */
+       BUILD_FROM_FILE,
+       /** file descriptor to read data, encoded in any format, int */
+       BUILD_FROM_FD,
+       /** unix socket of a ssh/pgp agent, char* */
+       BUILD_AGENT_SOCKET,
+       /** DER encoded ASN.1 blob, chunk_t */
        BUILD_BLOB_ASN1_DER,
-       /** key size in bits, as used for key generation, as u_int */
+       /** PEM encoded ASN.1/PGP blob, chunk_t */
+       BUILD_BLOB_PEM,
+       /**  OpenPGP key blob, chunk_t */
+       BUILD_BLOB_PGP,
+       /** DNS public key blob (RFC 4034, RSA specifc RFC 3110), chunk_t */
+       BUILD_BLOB_DNSKEY,
+       /** passphrase for e.g. PEM decryption, chunk_t */
+       BUILD_PASSPHRASE,
+       /** passphrase callback, chunk_t(*fn)(void *user, int try), void *user.
+        *  The callback is invoked until the returned passphrase is accepted, or
+        *  a zero-length passphrase is returned. Try starts at 1. */
+       BUILD_PASSPHRASE_CALLBACK,
+       /** key size in bits, as used for key generation, u_int */
        BUILD_KEY_SIZE,
        /** private key to use for signing, private_key_t* */
        BUILD_SIGNING_KEY,
@@ -60,14 +78,38 @@ enum builder_part_t {
        BUILD_NOT_BEFORE_TIME,
        /** notAfter, time_t* */
        BUILD_NOT_AFTER_TIME,
-       /** notAfter, time_t* */
-       BUILD_SERIAL,
        /** a serial number in binary form, chunk_t */
+       BUILD_SERIAL,
+       /** digest algorithm to be used for signature, int */
+       BUILD_DIGEST_ALG,
+       /** a comma-separated list of ietf group attributes, char* */
+       BUILD_IETF_GROUP_ATTR,
+       /** a ca certificate, certificate_t* */
        BUILD_CA_CERT,
        /** a certificate, certificate_t* */
        BUILD_CERT,
        /** enforce an additional X509 flag, x509_flag_t */
        BUILD_X509_FLAG,
+       /** key ID of a key on a smartcard, null terminated char* ([slot:]keyid) */
+       BUILD_SMARTCARD_KEYID,
+       /** pin to access a key on a smartcard, null terminated char* */
+       BUILD_SMARTCARD_PIN,
+       /** modulus (n) of a RSA key, chunk_t */
+       BUILD_RSA_MODULUS,
+       /** public exponent (e) of a RSA key, chunk_t */
+       BUILD_RSA_PUB_EXP,
+       /** private exponent (d) of a RSA key, chunk_t */
+       BUILD_RSA_PRIV_EXP,
+       /** prime 1 (p) of a RSA key (p < q), chunk_t */
+       BUILD_RSA_PRIME1,
+       /** prime 2 (q) of a RSA key (p < q), chunk_t */
+       BUILD_RSA_PRIME2,
+       /** exponent 1 (exp1) of a RSA key, chunk_t */
+       BUILD_RSA_EXP1,
+       /** exponent 2 (exp1) of a RSA key, chunk_t */
+       BUILD_RSA_EXP2,
+       /** coefficient (coeff) of a RSA key, chunk_t */
+       BUILD_RSA_COEFF,
        /** end of variable argument builder list */
        BUILD_END,
 };
@@ -88,8 +130,8 @@ struct builder_t {
        /**
         * Add a part to the construct.
         *
-        * Any added parts get owned by the builder/construct, so clone/refcount
-        * them if needed.
+        * Any added parts are cloned/refcounted by the builder implementation, a 
+        * caller may need to free the passed ressources themself.
         *
         * @param part          kind of part
         * @param ...           part specific variable argument
@@ -106,4 +148,15 @@ struct builder_t {
        void* (*build)(builder_t *this);
 };
 
-#endif /* BUILDER_H_ @}*/
+/**
+ * Helper macro to cancel a build in a builder
+ */
+#define builder_cancel(builder) { (builder)->add = (void*)nop; \
+                                                                 (builder)->build = (void*)builder_free; }
+
+/**
+ * Helper function for a cancelled build.
+ */
+void* builder_free(builder_t *this);
+
+#endif /** BUILDER_H_ @}*/