~ubuntu-branches/ubuntu/hardy/openssl/hardy-security

« back to all changes in this revision

Viewing changes to fips/sha1/fips_standalone_sha1.c

  • Committer: Bazaar Package Importer
  • Author(s): Kurt Roeckx
  • Date: 2005-12-13 21:37:42 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051213213742-7em5nrw5c7ceegyd
Tags: 0.9.8a-5
Stop ssh from crashing randomly on sparc (Closes: #335912)
Patch from upstream cvs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ====================================================================
2
 
 * Copyright (c) 2003 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
 
 *    openssl-core@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/sha.h>
51
 
#include <openssl/hmac.h>
52
 
#include <openssl/opensslconf.h>
53
 
#include <stdio.h>
54
 
#include <stdlib.h>
55
 
#include <string.h>
56
 
 
57
 
int FIPS_selftest_failed() { return 0; }
58
 
 
59
 
#ifdef OPENSSL_FIPS
60
 
 
61
 
static void hmac_init(SHA_CTX *md_ctx,SHA_CTX *o_ctx,
62
 
                      const char *key)
63
 
    {
64
 
    int len=strlen(key);
65
 
    int i;
66
 
    unsigned char keymd[HMAC_MAX_MD_CBLOCK];
67
 
    unsigned char pad[HMAC_MAX_MD_CBLOCK];
68
 
 
69
 
    if (len > SHA_CBLOCK)
70
 
        {
71
 
        SHA1_Init(md_ctx);
72
 
        SHA1_Update(md_ctx,key,len);
73
 
        SHA1_Final(keymd,md_ctx);
74
 
        len=20;
75
 
        }
76
 
    else
77
 
        memcpy(keymd,key,len);
78
 
    memset(&keymd[len],'\0',HMAC_MAX_MD_CBLOCK-len);
79
 
 
80
 
    for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
81
 
        pad[i]=0x36^keymd[i];
82
 
    SHA1_Init(md_ctx);
83
 
    SHA1_Update(md_ctx,pad,SHA_CBLOCK);
84
 
 
85
 
    for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
86
 
        pad[i]=0x5c^keymd[i];
87
 
    SHA1_Init(o_ctx);
88
 
    SHA1_Update(o_ctx,pad,SHA_CBLOCK);
89
 
    }
90
 
 
91
 
static void hmac_final(unsigned char *md,SHA_CTX *md_ctx,SHA_CTX *o_ctx)
92
 
    {
93
 
    unsigned char buf[20];
94
 
 
95
 
    SHA1_Final(buf,md_ctx);
96
 
    SHA1_Update(o_ctx,buf,sizeof buf);
97
 
    SHA1_Final(md,o_ctx);
98
 
    }
99
 
 
100
 
#endif
101
 
 
102
 
int main(int argc,char **argv)
103
 
    {
104
 
#ifdef OPENSSL_FIPS
105
 
    static char key[]="etaonrishdlcupfm";
106
 
    int n;
107
 
 
108
 
    if(argc < 2)
109
 
        {
110
 
        fprintf(stderr,"%s [<file>]+\n",argv[0]);
111
 
        exit(1);
112
 
        }
113
 
 
114
 
    for(n=1 ; n < argc ; ++n)
115
 
        {
116
 
        FILE *f=fopen(argv[n],"rb");
117
 
        SHA_CTX md_ctx,o_ctx;
118
 
        unsigned char md[20];
119
 
        int i;
120
 
 
121
 
        if(!f)
122
 
            {
123
 
            perror(argv[n]);
124
 
            exit(2);
125
 
            }
126
 
 
127
 
        hmac_init(&md_ctx,&o_ctx,key);
128
 
        for( ; ; )
129
 
            {
130
 
            char buf[1024];
131
 
            int l=fread(buf,1,sizeof buf,f);
132
 
 
133
 
            if(l == 0)
134
 
                {
135
 
                if(ferror(f))
136
 
                    {
137
 
                    perror(argv[n]);
138
 
                    exit(3);
139
 
                    }
140
 
                else
141
 
                    break;
142
 
                }
143
 
            SHA1_Update(&md_ctx,buf,l);
144
 
            }
145
 
        hmac_final(md,&md_ctx,&o_ctx);
146
 
 
147
 
        printf("HMAC-SHA1(%s)= ",argv[n]);
148
 
        for(i=0 ; i < 20 ; ++i)
149
 
            printf("%02x",md[i]);
150
 
        printf("\n");
151
 
        }
152
 
#endif
153
 
    return 0;
154
 
    }
155
 
 
156