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