| 
					
				 | 
			
			
				@@ -1,120 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/***************************************************************************** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- *                                  _   _ ____  _      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- *  Project                     ___| | | |  _ \| |     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- *                             / __| | | | |_) | |     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- *                            | (__| |_| |  _ <| |___  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- *                             \___|\___/|_| \_\_____| 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * $Id$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <stdio.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <curl/curl.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <curl/types.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <curl/easy.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/* some requirements for this to work: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   1.   set pCertFile to the file with the client certificate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   2.   if the key is passphrase protected, set pPassphrase to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        passphrase you use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   3.   if you are using a crypto engine: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   3.1. set a #define USE_ENGINE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   3.2. set pEngine to the name of the crypto engine you use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   3.3. set pKeyName to the key identifier you want to use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   4.   if you don't use a crypto engine: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   4.1. set pKeyName to the file name of your client key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   4.2. if the format of the key file is DER, set pKeyType to "DER" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   !! verify of the server certificate is not implemented here !! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   **** This example only works with libcurl 7.9.3 and later! **** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int main(int argc, char **argv) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  CURL *curl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  CURLcode res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  FILE *headerfile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pCertFile = "testcert.pem"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pCACertFile="cacert.pem" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pKeyName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pKeyType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pEngine; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#if USE_ENGINE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pKeyName  = "rsa_test"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pKeyType  = "ENG"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pEngine   = "chil";            /* for nChiper HSM... */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pKeyName  = "testkey.pem"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pKeyType  = "PEM"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pEngine   = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const char *pPassphrase = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  headerfile = fopen("dumpit", "w"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  curl_global_init(CURL_GLOBAL_DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  curl = curl_easy_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if(curl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* what call to write: */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://curl.haxx.se"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    while(1)                    /* do some ugly short cut... */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       if (pEngine)             /* use crypto engine */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (curl_easy_setopt(curl, CURLOPT_SSLENGINE,pEngine) != CURLE_OK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {                     /* load the crypto engine */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             fprintf(stderr,"can't set crypto engine\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT,1) != CURLE_OK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {                     /* set the crypto engine as default */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* only needed for the first time you load 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   a engine in a curl object... */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             fprintf(stderr,"can't set crypto engine as default\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* cert is stored PEM coded in file... */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* since PEM is default, we needn't set it for PEM */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* set the cert for client authentication */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* sorry, for engine we must set the passphrase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   (if the key has one...) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       if (pPassphrase) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,pPassphrase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* if we use a key stored in a crypto engine, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   we must set the key type to "ENG" */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* set the private key (file or ID in engine) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* set the file with the certs vaildating the server */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                /* disconnect if we can't validate server's cert */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       res = curl_easy_perform(curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       break;                   /* we are done... */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* always cleanup */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    curl_easy_cleanup(curl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  curl_global_cleanup(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (headerfile) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fclose(headerfile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |