~ubuntu-branches/ubuntu/trusty/openssl/trusty

« back to all changes in this revision

Viewing changes to .pc/no_default_rdrand.patch/crypto/engine/eng_rdrand.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2014-01-08 15:57:24 UTC
  • mfrom: (11.1.46 sid)
  • Revision ID: package-import@ubuntu.com-20140108155724-kl61on9fyqmod2z9
Tags: 1.0.1f-1ubuntu1
* Merge with Debian, remaining changes.
  - debian/libssl1.0.0.postinst:
    + Display a system restart required notification on libssl1.0.0
      upgrade on servers.
    + Use a different priority for libssl1.0.0/restart-services depending
      on whether a desktop, or server dist-upgrade is being performed.
  - debian/{libssl1.0.0-udeb.dirs, control, rules}: Create
    libssl1.0.0-udeb, for the benefit of wget-udeb (no wget-udeb package
    in Debian).
  - debian/{libcrypto1.0.0-udeb.dirs, libssl1.0.0.dirs, libssl1.0.0.files,
    rules}: Move runtime libraries to /lib, for the benefit of
    wpasupplicant.
  - debian/patches/perlpath-quilt.patch: Don't change perl #! paths under
    .pc.
  - debian/rules:
    + Don't run 'make test' when cross-building.
    + Use host compiler when cross-building.  Patch from Neil Williams.
    + Don't build for processors no longer supported: i586 (on i386)
    + Fix Makefile to properly clean up libs/ dirs in clean target.
    + Replace duplicate files in the doc directory with symlinks.
  - debian/control: Mark Debian Vcs-* as XS-Debian-Vcs-*
  - debian/patches/ubuntu_deb676533_arm_asm.patch: Enable arm assembly
    code.
  - debian/rules: Enable optimized 64bit elliptic curve code contributed
    by Google.
* Dropped changes:
  - debian/patches/arm64-support: included in debian-targets.patch
  - debian/patches/no_default_rdrand.patch: upstream
  - debian/patches/openssl-1.0.1e-env-zlib.patch: zlib is now completely
    disabled in debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ====================================================================
2
 
 * Copyright (c) 2011 The OpenSSL Project.  All rights reserved.
3
 
 *
4
 
 * Redistribution and use in source and binary forms, with or without
5
 
 * modification, are permitted provided that the following conditions
6
 
 * are met:
7
 
 *
8
 
 * 1. Redistributions of source code must retain the above copyright
9
 
 *    notice, this list of conditions and the following disclaimer.
10
 
 *
11
 
 * 2. Redistributions in binary form must reproduce the above copyright
12
 
 *    notice, this list of conditions and the following disclaimer in
13
 
 *    the documentation and/or other materials provided with the
14
 
 *    distribution.
15
 
 *
16
 
 * 3. All advertising materials mentioning features or use of this
17
 
 *    software must display the following acknowledgment:
18
 
 *    "This product includes software developed by the OpenSSL Project
19
 
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
20
 
 *
21
 
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22
 
 *    endorse or promote products derived from this software without
23
 
 *    prior written permission. For written permission, please contact
24
 
 *    licensing@OpenSSL.org.
25
 
 *
26
 
 * 5. Products derived from this software may not be called "OpenSSL"
27
 
 *    nor may "OpenSSL" appear in their names without prior written
28
 
 *    permission of the OpenSSL Project.
29
 
 *
30
 
 * 6. Redistributions of any form whatsoever must retain the following
31
 
 *    acknowledgment:
32
 
 *    "This product includes software developed by the OpenSSL Project
33
 
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
34
 
 *
35
 
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36
 
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
 
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
39
 
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41
 
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42
 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43
 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44
 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46
 
 * OF THE POSSIBILITY OF SUCH DAMAGE.
47
 
 * ====================================================================
48
 
 */
49
 
 
50
 
#include <openssl/opensslconf.h>
51
 
 
52
 
#include <stdio.h>
53
 
#include <string.h>
54
 
#include <openssl/engine.h>
55
 
#include <openssl/rand.h>
56
 
#include <openssl/err.h>
57
 
 
58
 
#if (defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \
59
 
     defined(__x86_64) || defined(__x86_64__) || \
60
 
     defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ)
61
 
 
62
 
size_t OPENSSL_ia32_rdrand(void);
63
 
 
64
 
static int get_random_bytes (unsigned char *buf, int num)
65
 
        {
66
 
        size_t rnd;
67
 
 
68
 
        while (num>=(int)sizeof(size_t)) {
69
 
                if ((rnd = OPENSSL_ia32_rdrand()) == 0) return 0;
70
 
 
71
 
                *((size_t *)buf) = rnd;
72
 
                buf += sizeof(size_t);
73
 
                num -= sizeof(size_t);
74
 
        }
75
 
        if (num) {
76
 
                if ((rnd = OPENSSL_ia32_rdrand()) == 0) return 0;
77
 
 
78
 
                memcpy (buf,&rnd,num);
79
 
        }
80
 
 
81
 
        return 1;
82
 
        }
83
 
 
84
 
static int random_status (void)
85
 
{       return 1;       }
86
 
 
87
 
static RAND_METHOD rdrand_meth =
88
 
        {
89
 
        NULL,   /* seed */
90
 
        get_random_bytes,
91
 
        NULL,   /* cleanup */
92
 
        NULL,   /* add */
93
 
        get_random_bytes,
94
 
        random_status,
95
 
        };
96
 
 
97
 
static int rdrand_init(ENGINE *e)
98
 
{       return 1;       }
99
 
 
100
 
static const char *engine_e_rdrand_id = "rdrand";
101
 
static const char *engine_e_rdrand_name = "Intel RDRAND engine";
102
 
 
103
 
static int bind_helper(ENGINE *e)
104
 
        {
105
 
        if (!ENGINE_set_id(e, engine_e_rdrand_id) ||
106
 
            !ENGINE_set_name(e, engine_e_rdrand_name) ||
107
 
            !ENGINE_set_init_function(e, rdrand_init) ||
108
 
            !ENGINE_set_RAND(e, &rdrand_meth) )
109
 
                return 0;
110
 
 
111
 
        return 1;
112
 
        }
113
 
 
114
 
static ENGINE *ENGINE_rdrand(void)
115
 
        {
116
 
        ENGINE *ret = ENGINE_new();
117
 
        if(!ret)
118
 
                return NULL;
119
 
        if(!bind_helper(ret))
120
 
                {
121
 
                ENGINE_free(ret);
122
 
                return NULL;
123
 
                }
124
 
        return ret;
125
 
        }
126
 
 
127
 
void ENGINE_load_rdrand (void)
128
 
        {
129
 
        extern unsigned int OPENSSL_ia32cap_P[];
130
 
 
131
 
        if (OPENSSL_ia32cap_P[1] & (1<<(62-32)))
132
 
                {
133
 
                ENGINE *toadd = ENGINE_rdrand();
134
 
                if(!toadd) return;
135
 
                ENGINE_add(toadd);
136
 
                ENGINE_free(toadd);
137
 
                ERR_clear_error();
138
 
                }
139
 
        }
140
 
#else
141
 
void ENGINE_load_rdrand (void) {}
142
 
#endif