MDGoldenData.java revision 561ee011997c6c2f1befbfaa9d5f0a99771c1d63
1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17/**
18* @author Vladimir N. Molotkov
19*/
20
21package org.apache.harmony.security.tests.support;
22
23import java.util.HashMap;
24
25/**
26 * Golden data for Message Digest related tests.<br>
27 * Encapsulates the following data:<br>
28 * - reference message<br>
29 * - reference message digests calculated using
30 *   BEA JRockit j2sdk1.4.2_04 (http://www.bea.com)
31 *   for various MD algorithms:
32 *   SHA-1, SHA-256, SHA-384, SHA-512, MD-5.
33 * Standard algorithm names are defined in
34 * "JavaTM Cryptography Architecture API Specification & Reference"
35 *
36 */
37public class MDGoldenData {
38    // The length of test message
39    private static final int MY_MESSAGE_LEN = 1024;
40    // Test message for digest computations
41    private static final byte[] myMessage = new byte[MY_MESSAGE_LEN];
42    // Reference digests for various algorithms calculated
43    // for <code>myMessage</code>
44    private static final HashMap goldenData = new HashMap();
45
46    static {
47        // fill myMessage
48        for (int i=0; i<myMessage.length; i++) {
49            myMessage[i] = (byte)i;
50        }
51        // fill goldenData
52        // digest updated with myMessage bytes
53        goldenData.put("SHA-1", new byte[] {
54                (byte)0x5b, (byte)0x00, (byte)0x66, (byte)0x9c,
55                (byte)0x48, (byte)0x0d, (byte)0x5c, (byte)0xff,
56                (byte)0xbd, (byte)0xfa, (byte)0x8b, (byte)0xdb,
57                (byte)0xa9, (byte)0x95, (byte)0x61, (byte)0x16,
58                (byte)0x0f, (byte)0x2d, (byte)0x1b, (byte)0x77
59        });
60        // digest without updates at all;
61        // use MD algorithm name + "_NU" if not updated MD value is needed
62        goldenData.put("SHA-1_NU", new byte[] {
63                (byte)0xda, (byte)0x39, (byte)0xa3, (byte)0xee,
64                (byte)0x5e, (byte)0x6b, (byte)0x4b, (byte)0x0d,
65                (byte)0x32, (byte)0x55, (byte)0xbf, (byte)0xef,
66                (byte)0x95, (byte)0x60, (byte)0x18, (byte)0x90,
67                (byte)0xaf, (byte)0xd8, (byte)0x07, (byte)0x09
68        });
69
70        goldenData.put("SHA", goldenData.get("SHA-1"));
71        goldenData.put("SHA_NU", goldenData.get("SHA-1_NU"));
72
73        goldenData.put("SHA1", goldenData.get("SHA-1"));
74        goldenData.put("SHA1_NU", goldenData.get("SHA-1_NU"));
75
76        goldenData.put("SHA-256", new byte[] {
77                (byte)0x78, (byte)0x5b, (byte)0x07, (byte)0x51,
78                (byte)0xfc, (byte)0x2c, (byte)0x53, (byte)0xdc,
79                (byte)0x14, (byte)0xa4, (byte)0xce, (byte)0x3d,
80                (byte)0x80, (byte)0x0e, (byte)0x69, (byte)0xef,
81                (byte)0x9c, (byte)0xe1, (byte)0x00, (byte)0x9e,
82                (byte)0xb3, (byte)0x27, (byte)0xcc, (byte)0xf4,
83                (byte)0x58, (byte)0xaf, (byte)0xe0, (byte)0x9c,
84                (byte)0x24, (byte)0x2c, (byte)0x26, (byte)0xc9
85        });
86        goldenData.put("SHA-256_NU", new byte[] {
87                (byte)0xe3, (byte)0xb0, (byte)0xc4, (byte)0x42,
88                (byte)0x98, (byte)0xfc, (byte)0x1c, (byte)0x14,
89                (byte)0x9a, (byte)0xfb, (byte)0xf4, (byte)0xc8,
90                (byte)0x99, (byte)0x6f, (byte)0xb9, (byte)0x24,
91                (byte)0x27, (byte)0xae, (byte)0x41, (byte)0xe4,
92                (byte)0x64, (byte)0x9b, (byte)0x93, (byte)0x4c,
93                (byte)0xa4, (byte)0x95, (byte)0x99, (byte)0x1b,
94                (byte)0x78, (byte)0x52, (byte)0xb8, (byte)0x55
95        });
96        goldenData.put("SHA-384", new byte[] {
97                (byte)0x55, (byte)0xfd, (byte)0x17, (byte)0xee,
98                (byte)0xb1, (byte)0x61, (byte)0x1f, (byte)0x91,
99                (byte)0x93, (byte)0xf6, (byte)0xac, (byte)0x60,
100                (byte)0x02, (byte)0x38, (byte)0xce, (byte)0x63,
101                (byte)0xaa, (byte)0x29, (byte)0x8c, (byte)0x2e,
102                (byte)0x33, (byte)0x2f, (byte)0x04, (byte)0x2b,
103                (byte)0x80, (byte)0xc8, (byte)0xf6, (byte)0x91,
104                (byte)0xf8, (byte)0x00, (byte)0xe4, (byte)0xc7,
105                (byte)0x50, (byte)0x5a, (byte)0xf2, (byte)0x0c,
106                (byte)0x1a, (byte)0x86, (byte)0xa3, (byte)0x1f,
107                (byte)0x08, (byte)0x50, (byte)0x45, (byte)0x87,
108                (byte)0x39, (byte)0x5f, (byte)0x08, (byte)0x1f
109        });
110        goldenData.put("SHA-384_NU", new byte[] {
111                (byte)0x38, (byte)0xb0, (byte)0x60, (byte)0xa7,
112                (byte)0x51, (byte)0xac, (byte)0x96, (byte)0x38,
113                (byte)0x4c, (byte)0xd9, (byte)0x32, (byte)0x7e,
114                (byte)0xb1, (byte)0xb1, (byte)0xe3, (byte)0x6a,
115                (byte)0x21, (byte)0xfd, (byte)0xb7, (byte)0x11,
116                (byte)0x14, (byte)0xbe, (byte)0x07, (byte)0x43,
117                (byte)0x4c, (byte)0x0c, (byte)0xc7, (byte)0xbf,
118                (byte)0x63, (byte)0xf6, (byte)0xe1, (byte)0xda,
119                (byte)0x27, (byte)0x4e, (byte)0xde, (byte)0xbf,
120                (byte)0xe7, (byte)0x6f, (byte)0x65, (byte)0xfb,
121                (byte)0xd5, (byte)0x1a, (byte)0xd2, (byte)0xf1,
122                (byte)0x48, (byte)0x98, (byte)0xb9, (byte)0x5b
123        });
124        goldenData.put("SHA-512", new byte[] {
125                (byte)0x37, (byte)0xf6, (byte)0x52, (byte)0xbe,
126                (byte)0x86, (byte)0x7f, (byte)0x28, (byte)0xed,
127                (byte)0x03, (byte)0x32, (byte)0x69, (byte)0xcb,
128                (byte)0xba, (byte)0x20, (byte)0x1a, (byte)0xf2,
129                (byte)0x11, (byte)0x2c, (byte)0x2b, (byte)0x3f,
130                (byte)0xd3, (byte)0x34, (byte)0xa8, (byte)0x9f,
131                (byte)0xd2, (byte)0xf7, (byte)0x57, (byte)0x93,
132                (byte)0x8d, (byte)0xde, (byte)0xe8, (byte)0x15,
133                (byte)0x78, (byte)0x7c, (byte)0xc6, (byte)0x1d,
134                (byte)0x6e, (byte)0x24, (byte)0xa8, (byte)0xa3,
135                (byte)0x33, (byte)0x40, (byte)0xd0, (byte)0xf7,
136                (byte)0xe8, (byte)0x6f, (byte)0xfc, (byte)0x05,
137                (byte)0x88, (byte)0x16, (byte)0xb8, (byte)0x85,
138                (byte)0x30, (byte)0x76, (byte)0x6b, (byte)0xa6,
139                (byte)0xe2, (byte)0x31, (byte)0x62, (byte)0x0a,
140                (byte)0x13, (byte)0x0b, (byte)0x56, (byte)0x6c
141        });
142        goldenData.put("SHA-512_NU", new byte[] {
143                (byte)0xcf, (byte)0x83, (byte)0xe1, (byte)0x35,
144                (byte)0x7e, (byte)0xef, (byte)0xb8, (byte)0xbd,
145                (byte)0xf1, (byte)0x54, (byte)0x28, (byte)0x50,
146                (byte)0xd6, (byte)0x6d, (byte)0x80, (byte)0x07,
147                (byte)0xd6, (byte)0x20, (byte)0xe4, (byte)0x05,
148                (byte)0x0b, (byte)0x57, (byte)0x15, (byte)0xdc,
149                (byte)0x83, (byte)0xf4, (byte)0xa9, (byte)0x21,
150                (byte)0xd3, (byte)0x6c, (byte)0xe9, (byte)0xce,
151                (byte)0x47, (byte)0xd0, (byte)0xd1, (byte)0x3c,
152                (byte)0x5d, (byte)0x85, (byte)0xf2, (byte)0xb0,
153                (byte)0xff, (byte)0x83, (byte)0x18, (byte)0xd2,
154                (byte)0x87, (byte)0x7e, (byte)0xec, (byte)0x2f,
155                (byte)0x63, (byte)0xb9, (byte)0x31, (byte)0xbd,
156                (byte)0x47, (byte)0x41, (byte)0x7a, (byte)0x81,
157                (byte)0xa5, (byte)0x38, (byte)0x32, (byte)0x7a,
158                (byte)0xf9, (byte)0x27, (byte)0xda, (byte)0x3e
159        });
160        goldenData.put("MD5", new byte[] {
161                (byte)0xb2, (byte)0xea, (byte)0x9f, (byte)0x7f,
162                (byte)0xce, (byte)0xa8, (byte)0x31, (byte)0xa4,
163                (byte)0xa6, (byte)0x3b, (byte)0x21, (byte)0x3f,
164                (byte)0x41, (byte)0xa8, (byte)0x85, (byte)0x5b
165        });
166        goldenData.put("MD5_NU", new byte[] {
167                (byte)0xd4, (byte)0x1d, (byte)0x8c, (byte)0xd9,
168                (byte)0x8f, (byte)0x00, (byte)0xb2, (byte)0x04,
169                (byte)0xe9, (byte)0x80, (byte)0x09, (byte)0x98,
170                (byte)0xec, (byte)0xf8, (byte)0x42, (byte)0x7e
171        });
172    }
173
174    // No need to instantiate
175    private MDGoldenData() {
176    }
177
178    /**
179     * Returns reference message
180     *
181     * @return reference message
182     */
183    public static byte[] getMessage() {
184        return myMessage.clone();
185    }
186
187    /**
188     * Returns digest golden data
189     *
190     * @param key
191     *  MD algorithm name or MD algorithm name + "_NU" if
192     *  not updated MD value requested
193     * @return
194     *  reference digest for specified MD algorithm name
195     */
196    public static byte[] getDigest(String key) {
197        return ((byte[])goldenData.get(key)).clone();
198    }
199
200}
201