RT3246: req command prints version number wrong
[oweals/openssl.git] / crypto / engine / eng_rdrand.c
index 26507c56a6c302a7ca787152454cdb1e44034be5..4e9e91d54b13a7ea0ecca53c0b8d6ef373ff7c65 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <openssl/engine.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
 
 #if (defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \
      defined(__x86_64) || defined(__x86_64__) || \
-     defined(_M_AMD64) || defined (_M_X64)) && !defined(OPENSSL_NO_ASM)
+     defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ)
 
 size_t OPENSSL_ia32_rdrand(void);
 
-static int get_random_bytes (unsigned char *buf, size_t num)
+static int get_random_bytes (unsigned char *buf, int num)
        {
        size_t rnd;
 
-       while (num>=sizeof(size_t)) {
+       while (num>=(int)sizeof(size_t)) {
                if ((rnd = OPENSSL_ia32_rdrand()) == 0) return 0;
 
                *((size_t *)buf) = rnd;
@@ -102,6 +104,7 @@ static int bind_helper(ENGINE *e)
        {
        if (!ENGINE_set_id(e, engine_e_rdrand_id) ||
            !ENGINE_set_name(e, engine_e_rdrand_name) ||
+            !ENGINE_set_flags(e, ENGINE_FLAGS_NO_REGISTER_ALL) ||
            !ENGINE_set_init_function(e, rdrand_init) ||
            !ENGINE_set_RAND(e, &rdrand_meth) )
                return 0;
@@ -124,7 +127,7 @@ static ENGINE *ENGINE_rdrand(void)
 
 void ENGINE_load_rdrand (void)
        {
-       extern OPENSSL_ia32cap_P[];
+       extern unsigned int OPENSSL_ia32cap_P[];
 
        if (OPENSSL_ia32cap_P[1] & (1<<(62-32)))
                {