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 */ 36public class MDGoldenData { 37 // The length of test message 38 private static final int MY_MESSAGE_LEN = 1024; 39 // Test message for digest computations 40 private static final byte[] myMessage = new byte[MY_MESSAGE_LEN]; 41 // Reference digests for various algorithms calculated 42 // for <code>myMessage</code> 43 private static final HashMap goldenData = new HashMap(); 44 45 static { 46 // fill myMessage 47 for (int i = 0; i < myMessage.length; i++) { 48 myMessage[i] = (byte) i; 49 } 50 // fill goldenData 51 // digest updated with myMessage bytes 52 goldenData.put("SHA-1", new byte[] { 53 (byte) 0x5b, (byte) 0x00, (byte) 0x66, (byte) 0x9c, 54 (byte) 0x48, (byte) 0x0d, (byte) 0x5c, (byte) 0xff, 55 (byte) 0xbd, (byte) 0xfa, (byte) 0x8b, (byte) 0xdb, 56 (byte) 0xa9, (byte) 0x95, (byte) 0x61, (byte) 0x16, 57 (byte) 0x0f, (byte) 0x2d, (byte) 0x1b, (byte) 0x77 58 }); 59 // digest without updates at all; 60 // use MD algorithm name + "_NU" if not updated MD value is needed 61 goldenData.put("SHA-1_NU", new byte[] { 62 (byte) 0xda, (byte) 0x39, (byte) 0xa3, (byte) 0xee, 63 (byte) 0x5e, (byte) 0x6b, (byte) 0x4b, (byte) 0x0d, 64 (byte) 0x32, (byte) 0x55, (byte) 0xbf, (byte) 0xef, 65 (byte) 0x95, (byte) 0x60, (byte) 0x18, (byte) 0x90, 66 (byte) 0xaf, (byte) 0xd8, (byte) 0x07, (byte) 0x09 67 }); 68 69 goldenData.put("SHA", goldenData.get("SHA-1")); 70 goldenData.put("SHA_NU", goldenData.get("SHA-1_NU")); 71 72 goldenData.put("SHA1", goldenData.get("SHA-1")); 73 goldenData.put("SHA1_NU", goldenData.get("SHA-1_NU")); 74 75 goldenData.put("SHA-256", new byte[] { 76 (byte) 0x78, (byte) 0x5b, (byte) 0x07, (byte) 0x51, 77 (byte) 0xfc, (byte) 0x2c, (byte) 0x53, (byte) 0xdc, 78 (byte) 0x14, (byte) 0xa4, (byte) 0xce, (byte) 0x3d, 79 (byte) 0x80, (byte) 0x0e, (byte) 0x69, (byte) 0xef, 80 (byte) 0x9c, (byte) 0xe1, (byte) 0x00, (byte) 0x9e, 81 (byte) 0xb3, (byte) 0x27, (byte) 0xcc, (byte) 0xf4, 82 (byte) 0x58, (byte) 0xaf, (byte) 0xe0, (byte) 0x9c, 83 (byte) 0x24, (byte) 0x2c, (byte) 0x26, (byte) 0xc9 84 }); 85 goldenData.put("SHA-256_NU", new byte[] { 86 (byte) 0xe3, (byte) 0xb0, (byte) 0xc4, (byte) 0x42, 87 (byte) 0x98, (byte) 0xfc, (byte) 0x1c, (byte) 0x14, 88 (byte) 0x9a, (byte) 0xfb, (byte) 0xf4, (byte) 0xc8, 89 (byte) 0x99, (byte) 0x6f, (byte) 0xb9, (byte) 0x24, 90 (byte) 0x27, (byte) 0xae, (byte) 0x41, (byte) 0xe4, 91 (byte) 0x64, (byte) 0x9b, (byte) 0x93, (byte) 0x4c, 92 (byte) 0xa4, (byte) 0x95, (byte) 0x99, (byte) 0x1b, 93 (byte) 0x78, (byte) 0x52, (byte) 0xb8, (byte) 0x55 94 }); 95 goldenData.put("SHA-384", new byte[] { 96 (byte) 0x55, (byte) 0xfd, (byte) 0x17, (byte) 0xee, 97 (byte) 0xb1, (byte) 0x61, (byte) 0x1f, (byte) 0x91, 98 (byte) 0x93, (byte) 0xf6, (byte) 0xac, (byte) 0x60, 99 (byte) 0x02, (byte) 0x38, (byte) 0xce, (byte) 0x63, 100 (byte) 0xaa, (byte) 0x29, (byte) 0x8c, (byte) 0x2e, 101 (byte) 0x33, (byte) 0x2f, (byte) 0x04, (byte) 0x2b, 102 (byte) 0x80, (byte) 0xc8, (byte) 0xf6, (byte) 0x91, 103 (byte) 0xf8, (byte) 0x00, (byte) 0xe4, (byte) 0xc7, 104 (byte) 0x50, (byte) 0x5a, (byte) 0xf2, (byte) 0x0c, 105 (byte) 0x1a, (byte) 0x86, (byte) 0xa3, (byte) 0x1f, 106 (byte) 0x08, (byte) 0x50, (byte) 0x45, (byte) 0x87, 107 (byte) 0x39, (byte) 0x5f, (byte) 0x08, (byte) 0x1f 108 }); 109 goldenData.put("SHA-384_NU", new byte[] { 110 (byte) 0x38, (byte) 0xb0, (byte) 0x60, (byte) 0xa7, 111 (byte) 0x51, (byte) 0xac, (byte) 0x96, (byte) 0x38, 112 (byte) 0x4c, (byte) 0xd9, (byte) 0x32, (byte) 0x7e, 113 (byte) 0xb1, (byte) 0xb1, (byte) 0xe3, (byte) 0x6a, 114 (byte) 0x21, (byte) 0xfd, (byte) 0xb7, (byte) 0x11, 115 (byte) 0x14, (byte) 0xbe, (byte) 0x07, (byte) 0x43, 116 (byte) 0x4c, (byte) 0x0c, (byte) 0xc7, (byte) 0xbf, 117 (byte) 0x63, (byte) 0xf6, (byte) 0xe1, (byte) 0xda, 118 (byte) 0x27, (byte) 0x4e, (byte) 0xde, (byte) 0xbf, 119 (byte) 0xe7, (byte) 0x6f, (byte) 0x65, (byte) 0xfb, 120 (byte) 0xd5, (byte) 0x1a, (byte) 0xd2, (byte) 0xf1, 121 (byte) 0x48, (byte) 0x98, (byte) 0xb9, (byte) 0x5b 122 }); 123 goldenData.put("SHA-512", new byte[] { 124 (byte) 0x37, (byte) 0xf6, (byte) 0x52, (byte) 0xbe, 125 (byte) 0x86, (byte) 0x7f, (byte) 0x28, (byte) 0xed, 126 (byte) 0x03, (byte) 0x32, (byte) 0x69, (byte) 0xcb, 127 (byte) 0xba, (byte) 0x20, (byte) 0x1a, (byte) 0xf2, 128 (byte) 0x11, (byte) 0x2c, (byte) 0x2b, (byte) 0x3f, 129 (byte) 0xd3, (byte) 0x34, (byte) 0xa8, (byte) 0x9f, 130 (byte) 0xd2, (byte) 0xf7, (byte) 0x57, (byte) 0x93, 131 (byte) 0x8d, (byte) 0xde, (byte) 0xe8, (byte) 0x15, 132 (byte) 0x78, (byte) 0x7c, (byte) 0xc6, (byte) 0x1d, 133 (byte) 0x6e, (byte) 0x24, (byte) 0xa8, (byte) 0xa3, 134 (byte) 0x33, (byte) 0x40, (byte) 0xd0, (byte) 0xf7, 135 (byte) 0xe8, (byte) 0x6f, (byte) 0xfc, (byte) 0x05, 136 (byte) 0x88, (byte) 0x16, (byte) 0xb8, (byte) 0x85, 137 (byte) 0x30, (byte) 0x76, (byte) 0x6b, (byte) 0xa6, 138 (byte) 0xe2, (byte) 0x31, (byte) 0x62, (byte) 0x0a, 139 (byte) 0x13, (byte) 0x0b, (byte) 0x56, (byte) 0x6c 140 }); 141 goldenData.put("SHA-512_NU", new byte[] { 142 (byte) 0xcf, (byte) 0x83, (byte) 0xe1, (byte) 0x35, 143 (byte) 0x7e, (byte) 0xef, (byte) 0xb8, (byte) 0xbd, 144 (byte) 0xf1, (byte) 0x54, (byte) 0x28, (byte) 0x50, 145 (byte) 0xd6, (byte) 0x6d, (byte) 0x80, (byte) 0x07, 146 (byte) 0xd6, (byte) 0x20, (byte) 0xe4, (byte) 0x05, 147 (byte) 0x0b, (byte) 0x57, (byte) 0x15, (byte) 0xdc, 148 (byte) 0x83, (byte) 0xf4, (byte) 0xa9, (byte) 0x21, 149 (byte) 0xd3, (byte) 0x6c, (byte) 0xe9, (byte) 0xce, 150 (byte) 0x47, (byte) 0xd0, (byte) 0xd1, (byte) 0x3c, 151 (byte) 0x5d, (byte) 0x85, (byte) 0xf2, (byte) 0xb0, 152 (byte) 0xff, (byte) 0x83, (byte) 0x18, (byte) 0xd2, 153 (byte) 0x87, (byte) 0x7e, (byte) 0xec, (byte) 0x2f, 154 (byte) 0x63, (byte) 0xb9, (byte) 0x31, (byte) 0xbd, 155 (byte) 0x47, (byte) 0x41, (byte) 0x7a, (byte) 0x81, 156 (byte) 0xa5, (byte) 0x38, (byte) 0x32, (byte) 0x7a, 157 (byte) 0xf9, (byte) 0x27, (byte) 0xda, (byte) 0x3e 158 }); 159 goldenData.put("MD5", new byte[] { 160 (byte) 0xb2, (byte) 0xea, (byte) 0x9f, (byte) 0x7f, 161 (byte) 0xce, (byte) 0xa8, (byte) 0x31, (byte) 0xa4, 162 (byte) 0xa6, (byte) 0x3b, (byte) 0x21, (byte) 0x3f, 163 (byte) 0x41, (byte) 0xa8, (byte) 0x85, (byte) 0x5b 164 }); 165 goldenData.put("MD5_NU", new byte[] { 166 (byte) 0xd4, (byte) 0x1d, (byte) 0x8c, (byte) 0xd9, 167 (byte) 0x8f, (byte) 0x00, (byte) 0xb2, (byte) 0x04, 168 (byte) 0xe9, (byte) 0x80, (byte) 0x09, (byte) 0x98, 169 (byte) 0xec, (byte) 0xf8, (byte) 0x42, (byte) 0x7e 170 }); 171 } 172 173 // No need to instantiate 174 private MDGoldenData() { 175 } 176 177 /** 178 * Returns reference message 179 * 180 * @return reference message 181 */ 182 public static byte[] getMessage() { 183 return myMessage.clone(); 184 } 185 186 /** 187 * Returns digest golden data 188 * 189 * @param key MD algorithm name or MD algorithm name + "_NU" if 190 * not updated MD value requested 191 * @return reference digest for specified MD algorithm name 192 */ 193 public static byte[] getDigest(String key) { 194 return ((byte[]) goldenData.get(key)).clone(); 195 } 196 197} 198