Security fixes brought forward from 0.9.7.
[openssl.git] / demos / sign / sign.c
index 5cbce3cdc52317dcbca68cfceca813931a4f60a3..a6c66e17c3c3183bb047259a7203655215a1fa7b 100644 (file)
 
 /* converted to C - eay :-) */
 
+/* reformated a bit and converted to use the more common functions: this was
+ * initially written at the dawn of time :-) - Steve.
+ */
+
 #include <stdio.h>
-#include "rsa.h"
-#include "evp.h"
-#include "objects.h"
-#include "x509.h"
-#include "err.h"
-#include "pem.h"
-#include "ssl.h"
+#include <openssl/rsa.h>
+#include <openssl/evp.h>
+#include <openssl/objects.h>
+#include <openssl/x509.h>
+#include <openssl/err.h>
+#include <openssl/pem.h>
+#include <openssl/ssl.h>
 
-void main ()
+int main ()
 {
   int err;
   int sig_len;
@@ -90,48 +94,60 @@ void main ()
   
   /* Read private key */
   
-  fp = fopen (keyfile, "r");   if (fp == NULL) exit (1);
-  pkey = (EVP_PKEY*)PEM_ASN1_read ((char *(*)())d2i_PrivateKey,
-                                  PEM_STRING_EVP_PKEY,
-                                  fp,
-                                  NULL, NULL);
-  if (pkey == NULL) {  ERR_print_errors_fp (stderr);    exit (1);  }
+  fp = fopen (keyfile, "r");
+  if (fp == NULL) exit (1);
+  pkey = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
   fclose (fp);
+
+  if (pkey == NULL) { 
+       ERR_print_errors_fp (stderr);
+       exit (1);
+  }
   
   /* Do the signature */
   
-  EVP_SignInit   (&md_ctx, EVP_md5());
+  EVP_SignInit   (&md_ctx, EVP_sha1());
   EVP_SignUpdate (&md_ctx, data, strlen(data));
   sig_len = sizeof(sig_buf);
-  err = EVP_SignFinal (&md_ctx,
-                      sig_buf, 
-                      &sig_len,
-                      pkey);
-  if (err != 1) {  ERR_print_errors_fp (stderr);    exit (1);  }
+  err = EVP_SignFinal (&md_ctx, sig_buf, &sig_len, pkey);
+
+  if (err != 1) {
+       ERR_print_errors_fp(stderr);
+       exit (1);
+  }
+
   EVP_PKEY_free (pkey);
   
   /* Read public key */
   
-  fp = fopen (certfile, "r");   if (fp == NULL) exit (1);
-  x509 = (X509 *)PEM_ASN1_read ((char *(*)())d2i_X509,
-                                  PEM_STRING_X509,
-                                  fp, NULL, NULL);
-  if (x509 == NULL) {  ERR_print_errors_fp (stderr);    exit (1);  }
+  fp = fopen (certfile, "r");
+  if (fp == NULL) exit (1);
+  x509 = PEM_read_X509(fp, NULL, NULL, NULL);
   fclose (fp);
+
+  if (x509 == NULL) {
+       ERR_print_errors_fp (stderr);
+       exit (1);
+  }
   
   /* Get public key - eay */
-  pkey=X509_extract_key(x509);
-  if (pkey == NULL) {  ERR_print_errors_fp (stderr);    exit (1);  }
+  pkey=X509_get_pubkey(x509);
+  if (pkey == NULL) {
+       ERR_print_errors_fp (stderr);
+       exit (1);
+  }
 
   /* Verify the signature */
   
-  EVP_VerifyInit   (&md_ctx, EVP_md5());
+  EVP_VerifyInit   (&md_ctx, EVP_sha1());
   EVP_VerifyUpdate (&md_ctx, data, strlen((char*)data));
-  err = EVP_VerifyFinal (&md_ctx,
-                        sig_buf,
-                        sig_len,
-                        pkey);
-  if (err != 1) {  ERR_print_errors_fp (stderr);    exit (1);  }
+  err = EVP_VerifyFinal (&md_ctx, sig_buf, sig_len, pkey);
   EVP_PKEY_free (pkey);
+
+  if (err != 1) {
+       ERR_print_errors_fp (stderr);
+       exit (1);
+  }
   printf ("Signature Verified Ok.\n");
+  return(0);
 }