1 /*
   2  * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 8014618
  27  * @summary Need to strip leading zeros in TlsPremasterSecret of DHKeyAgreement
  28  * @library ..
  29  * @author Pasi Eronen
  30  * @modules jdk.crypto.token
  31  * @run main/othervm TestLeadingZeroesP11
  32  * @run main/othervm TestLeadingZeroesP11 sm
  33  */
  34 
  35 
  36 import java.security.KeyFactory;
  37 import java.security.PrivateKey;
  38 import java.security.Provider;
  39 import java.security.PublicKey;
  40 import java.security.spec.PKCS8EncodedKeySpec;
  41 import java.security.spec.X509EncodedKeySpec;
  42 import javax.crypto.KeyAgreement;
  43 
  44 /**
  45  * Test that leading zeroes are stripped in TlsPremasterSecret case,
  46  * but are left as-is in other cases.
  47  *
  48  * We use pre-generated keypairs, since with randomly generated keypairs,
  49  * a leading zero happens only (roughly) 1 out of 256 cases.
  50  */
  51 
  52 public class TestLeadingZeroesP11 extends PKCS11Test {
  53 
  54     public static void main(String[] args) throws Exception {
  55         main(new TestLeadingZeroesP11(), args);
  56     }
  57 
  58     @Override
  59     public void main(Provider p) throws Exception {
  60 
  61         // decode pre-generated keypairs
  62         KeyFactory kfac = KeyFactory.getInstance("DH", p);
  63         PublicKey alicePubKey =
  64             kfac.generatePublic(new X509EncodedKeySpec(alicePubKeyEnc));
  65         PublicKey bobPubKey =
  66             kfac.generatePublic(new X509EncodedKeySpec(bobPubKeyEnc));
  67         PrivateKey alicePrivKey =
  68             kfac.generatePrivate(new PKCS8EncodedKeySpec(alicePrivKeyEnc));
  69         PrivateKey bobPrivKey =
  70             kfac.generatePrivate(new PKCS8EncodedKeySpec(bobPrivKeyEnc));
  71 
  72         // generate normal shared secret
  73         KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH", p);
  74         aliceKeyAgree.init(alicePrivKey);
  75         aliceKeyAgree.doPhase(bobPubKey, true);
  76         byte[] sharedSecret = aliceKeyAgree.generateSecret();
  77         System.out.println("shared secret:\n" + toHexString(sharedSecret));
  78 
  79         // verify that leading zero is present
  80         if (sharedSecret.length != 128) {
  81             throw new Exception("Unexpected shared secret length");
  82         }
  83         if (sharedSecret[0] != 0) {
  84             throw new Exception("First byte is not zero as expected");
  85         }
  86 
  87         // now, test TLS premaster secret
  88         aliceKeyAgree.init(alicePrivKey);
  89         aliceKeyAgree.doPhase(bobPubKey, true);
  90         byte[] tlsPremasterSecret =
  91             aliceKeyAgree.generateSecret("TlsPremasterSecret").getEncoded();
  92         System.out.println(
  93             "tls premaster secret:\n" + toHexString(tlsPremasterSecret));
  94 
  95         // check that leading zero has been stripped
  96         if (tlsPremasterSecret.length != 127) {
  97             throw new Exception("Unexpected TLS premaster secret length");
  98         }
  99         if (tlsPremasterSecret[0] == 0) {
 100             throw new Exception("First byte is zero");
 101         }
 102         for (int i = 0; i < tlsPremasterSecret.length; i++) {
 103             if (tlsPremasterSecret[i] != sharedSecret[i+1]) {
 104                 throw new Exception("Shared secrets differ");
 105             }
 106         }
 107 
 108     }
 109 
 110     /*
 111      * Converts a byte to hex digit and writes to the supplied buffer
 112      */
 113     private void byte2hex(byte b, StringBuffer buf) {
 114         char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
 115                             '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 116         int high = ((b & 0xf0) >> 4);
 117         int low = (b & 0x0f);
 118         buf.append(hexChars[high]);
 119         buf.append(hexChars[low]);
 120     }
 121 
 122     /*
 123      * Converts a byte array to hex string
 124      */
 125     private String toHexString(byte[] block) {
 126         StringBuffer buf = new StringBuffer();
 127 
 128         int len = block.length;
 129 
 130         for (int i = 0; i < len; i++) {
 131              byte2hex(block[i], buf);
 132              if (i < len-1) {
 133                  buf.append(":");
 134              }
 135         }
 136         return buf.toString();
 137     }
 138 
 139     private static final byte alicePubKeyEnc[] = {
 140         (byte)0x30, (byte)0x82, (byte)0x01, (byte)0x24,
 141         (byte)0x30, (byte)0x81, (byte)0x99, (byte)0x06,
 142         (byte)0x09, (byte)0x2A, (byte)0x86, (byte)0x48,
 143         (byte)0x86, (byte)0xF7, (byte)0x0D, (byte)0x01,
 144         (byte)0x03, (byte)0x01, (byte)0x30, (byte)0x81,
 145         (byte)0x8B, (byte)0x02, (byte)0x81, (byte)0x81,
 146         (byte)0x00, (byte)0xF4, (byte)0x88, (byte)0xFD,
 147         (byte)0x58, (byte)0x4E, (byte)0x49, (byte)0xDB,
 148         (byte)0xCD, (byte)0x20, (byte)0xB4, (byte)0x9D,
 149         (byte)0xE4, (byte)0x91, (byte)0x07, (byte)0x36,
 150         (byte)0x6B, (byte)0x33, (byte)0x6C, (byte)0x38,
 151         (byte)0x0D, (byte)0x45, (byte)0x1D, (byte)0x0F,
 152         (byte)0x7C, (byte)0x88, (byte)0xB3, (byte)0x1C,
 153         (byte)0x7C, (byte)0x5B, (byte)0x2D, (byte)0x8E,
 154         (byte)0xF6, (byte)0xF3, (byte)0xC9, (byte)0x23,
 155         (byte)0xC0, (byte)0x43, (byte)0xF0, (byte)0xA5,
 156         (byte)0x5B, (byte)0x18, (byte)0x8D, (byte)0x8E,
 157         (byte)0xBB, (byte)0x55, (byte)0x8C, (byte)0xB8,
 158         (byte)0x5D, (byte)0x38, (byte)0xD3, (byte)0x34,
 159         (byte)0xFD, (byte)0x7C, (byte)0x17, (byte)0x57,
 160         (byte)0x43, (byte)0xA3, (byte)0x1D, (byte)0x18,
 161         (byte)0x6C, (byte)0xDE, (byte)0x33, (byte)0x21,
 162         (byte)0x2C, (byte)0xB5, (byte)0x2A, (byte)0xFF,
 163         (byte)0x3C, (byte)0xE1, (byte)0xB1, (byte)0x29,
 164         (byte)0x40, (byte)0x18, (byte)0x11, (byte)0x8D,
 165         (byte)0x7C, (byte)0x84, (byte)0xA7, (byte)0x0A,
 166         (byte)0x72, (byte)0xD6, (byte)0x86, (byte)0xC4,
 167         (byte)0x03, (byte)0x19, (byte)0xC8, (byte)0x07,
 168         (byte)0x29, (byte)0x7A, (byte)0xCA, (byte)0x95,
 169         (byte)0x0C, (byte)0xD9, (byte)0x96, (byte)0x9F,
 170         (byte)0xAB, (byte)0xD0, (byte)0x0A, (byte)0x50,
 171         (byte)0x9B, (byte)0x02, (byte)0x46, (byte)0xD3,
 172         (byte)0x08, (byte)0x3D, (byte)0x66, (byte)0xA4,
 173         (byte)0x5D, (byte)0x41, (byte)0x9F, (byte)0x9C,
 174         (byte)0x7C, (byte)0xBD, (byte)0x89, (byte)0x4B,
 175         (byte)0x22, (byte)0x19, (byte)0x26, (byte)0xBA,
 176         (byte)0xAB, (byte)0xA2, (byte)0x5E, (byte)0xC3,
 177         (byte)0x55, (byte)0xE9, (byte)0x2F, (byte)0x78,
 178         (byte)0xC7, (byte)0x02, (byte)0x01, (byte)0x02,
 179         (byte)0x02, (byte)0x02, (byte)0x02, (byte)0x00,
 180         (byte)0x03, (byte)0x81, (byte)0x85, (byte)0x00,
 181         (byte)0x02, (byte)0x81, (byte)0x81, (byte)0x00,
 182         (byte)0xEE, (byte)0xD6, (byte)0xB1, (byte)0xA3,
 183         (byte)0xB4, (byte)0x78, (byte)0x2B, (byte)0x35,
 184         (byte)0xEF, (byte)0xCD, (byte)0x17, (byte)0x86,
 185         (byte)0x63, (byte)0x2B, (byte)0x97, (byte)0x0E,
 186         (byte)0x7A, (byte)0xD1, (byte)0xFF, (byte)0x7A,
 187         (byte)0xEB, (byte)0x57, (byte)0x61, (byte)0xA1,
 188         (byte)0xF7, (byte)0x90, (byte)0x11, (byte)0xA7,
 189         (byte)0x79, (byte)0x28, (byte)0x69, (byte)0xBA,
 190         (byte)0xA7, (byte)0xB2, (byte)0x37, (byte)0x17,
 191         (byte)0xAE, (byte)0x3C, (byte)0x92, (byte)0x89,
 192         (byte)0x88, (byte)0xE5, (byte)0x7E, (byte)0x8E,
 193         (byte)0xF0, (byte)0x24, (byte)0xD0, (byte)0xE1,
 194         (byte)0xC4, (byte)0xB0, (byte)0x26, (byte)0x5A,
 195         (byte)0x1E, (byte)0xBD, (byte)0xA0, (byte)0xCF,
 196         (byte)0x3E, (byte)0x97, (byte)0x2A, (byte)0x13,
 197         (byte)0x92, (byte)0x3B, (byte)0x39, (byte)0xD0,
 198         (byte)0x1D, (byte)0xA3, (byte)0x6B, (byte)0x3E,
 199         (byte)0xC2, (byte)0xBB, (byte)0x14, (byte)0xB6,
 200         (byte)0xE2, (byte)0x4C, (byte)0x0E, (byte)0x5B,
 201         (byte)0x4B, (byte)0xA4, (byte)0x9D, (byte)0xA6,
 202         (byte)0x21, (byte)0xB0, (byte)0xF9, (byte)0xDE,
 203         (byte)0x55, (byte)0xAE, (byte)0x5C, (byte)0x29,
 204         (byte)0x0E, (byte)0xC1, (byte)0xFC, (byte)0xBA,
 205         (byte)0x51, (byte)0xD3, (byte)0xB6, (byte)0x6D,
 206         (byte)0x75, (byte)0x72, (byte)0xDF, (byte)0x43,
 207         (byte)0xAB, (byte)0x94, (byte)0x21, (byte)0x6E,
 208         (byte)0x0C, (byte)0xD1, (byte)0x93, (byte)0x54,
 209         (byte)0x56, (byte)0x7D, (byte)0x4B, (byte)0x90,
 210         (byte)0xF1, (byte)0x94, (byte)0x45, (byte)0xD4,
 211         (byte)0x2A, (byte)0x71, (byte)0xA1, (byte)0xB8,
 212         (byte)0xDD, (byte)0xAA, (byte)0x05, (byte)0xF0,
 213         (byte)0x27, (byte)0x37, (byte)0xBD, (byte)0x44
 214     };
 215 
 216     private static final byte alicePrivKeyEnc[] = {
 217         (byte)0x30, (byte)0x81, (byte)0xE3, (byte)0x02,
 218         (byte)0x01, (byte)0x00, (byte)0x30, (byte)0x81,
 219         (byte)0x99, (byte)0x06, (byte)0x09, (byte)0x2A,
 220         (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xF7,
 221         (byte)0x0D, (byte)0x01, (byte)0x03, (byte)0x01,
 222         (byte)0x30, (byte)0x81, (byte)0x8B, (byte)0x02,
 223         (byte)0x81, (byte)0x81, (byte)0x00, (byte)0xF4,
 224         (byte)0x88, (byte)0xFD, (byte)0x58, (byte)0x4E,
 225         (byte)0x49, (byte)0xDB, (byte)0xCD, (byte)0x20,
 226         (byte)0xB4, (byte)0x9D, (byte)0xE4, (byte)0x91,
 227         (byte)0x07, (byte)0x36, (byte)0x6B, (byte)0x33,
 228         (byte)0x6C, (byte)0x38, (byte)0x0D, (byte)0x45,
 229         (byte)0x1D, (byte)0x0F, (byte)0x7C, (byte)0x88,
 230         (byte)0xB3, (byte)0x1C, (byte)0x7C, (byte)0x5B,
 231         (byte)0x2D, (byte)0x8E, (byte)0xF6, (byte)0xF3,
 232         (byte)0xC9, (byte)0x23, (byte)0xC0, (byte)0x43,
 233         (byte)0xF0, (byte)0xA5, (byte)0x5B, (byte)0x18,
 234         (byte)0x8D, (byte)0x8E, (byte)0xBB, (byte)0x55,
 235         (byte)0x8C, (byte)0xB8, (byte)0x5D, (byte)0x38,
 236         (byte)0xD3, (byte)0x34, (byte)0xFD, (byte)0x7C,
 237         (byte)0x17, (byte)0x57, (byte)0x43, (byte)0xA3,
 238         (byte)0x1D, (byte)0x18, (byte)0x6C, (byte)0xDE,
 239         (byte)0x33, (byte)0x21, (byte)0x2C, (byte)0xB5,
 240         (byte)0x2A, (byte)0xFF, (byte)0x3C, (byte)0xE1,
 241         (byte)0xB1, (byte)0x29, (byte)0x40, (byte)0x18,
 242         (byte)0x11, (byte)0x8D, (byte)0x7C, (byte)0x84,
 243         (byte)0xA7, (byte)0x0A, (byte)0x72, (byte)0xD6,
 244         (byte)0x86, (byte)0xC4, (byte)0x03, (byte)0x19,
 245         (byte)0xC8, (byte)0x07, (byte)0x29, (byte)0x7A,
 246         (byte)0xCA, (byte)0x95, (byte)0x0C, (byte)0xD9,
 247         (byte)0x96, (byte)0x9F, (byte)0xAB, (byte)0xD0,
 248         (byte)0x0A, (byte)0x50, (byte)0x9B, (byte)0x02,
 249         (byte)0x46, (byte)0xD3, (byte)0x08, (byte)0x3D,
 250         (byte)0x66, (byte)0xA4, (byte)0x5D, (byte)0x41,
 251         (byte)0x9F, (byte)0x9C, (byte)0x7C, (byte)0xBD,
 252         (byte)0x89, (byte)0x4B, (byte)0x22, (byte)0x19,
 253         (byte)0x26, (byte)0xBA, (byte)0xAB, (byte)0xA2,
 254         (byte)0x5E, (byte)0xC3, (byte)0x55, (byte)0xE9,
 255         (byte)0x2F, (byte)0x78, (byte)0xC7, (byte)0x02,
 256         (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x02,
 257         (byte)0x02, (byte)0x00, (byte)0x04, (byte)0x42,
 258         (byte)0x02, (byte)0x40, (byte)0x36, (byte)0x4D,
 259         (byte)0xD0, (byte)0x58, (byte)0x64, (byte)0x91,
 260         (byte)0x78, (byte)0xA2, (byte)0x4B, (byte)0x79,
 261         (byte)0x46, (byte)0xFE, (byte)0xC9, (byte)0xD9,
 262         (byte)0xCA, (byte)0x5C, (byte)0xF9, (byte)0xFD,
 263         (byte)0x6C, (byte)0x5D, (byte)0x76, (byte)0x3A,
 264         (byte)0x41, (byte)0x6D, (byte)0x44, (byte)0x62,
 265         (byte)0x75, (byte)0x93, (byte)0x81, (byte)0x93,
 266         (byte)0x00, (byte)0x4C, (byte)0xB1, (byte)0xD8,
 267         (byte)0x7D, (byte)0x9D, (byte)0xF3, (byte)0x16,
 268         (byte)0x2C, (byte)0x6C, (byte)0x9F, (byte)0x7A,
 269         (byte)0x84, (byte)0xA3, (byte)0x7A, (byte)0xC1,
 270         (byte)0x4F, (byte)0x60, (byte)0xE3, (byte)0xB5,
 271         (byte)0x86, (byte)0x28, (byte)0x08, (byte)0x4D,
 272         (byte)0x94, (byte)0xB6, (byte)0x04, (byte)0x0D,
 273         (byte)0xAC, (byte)0xBD, (byte)0x1F, (byte)0x42,
 274         (byte)0x8F, (byte)0x1B
 275     };
 276 
 277     private static final byte bobPubKeyEnc[] = {
 278         (byte)0x30, (byte)0x82, (byte)0x01, (byte)0x23,
 279         (byte)0x30, (byte)0x81, (byte)0x99, (byte)0x06,
 280         (byte)0x09, (byte)0x2A, (byte)0x86, (byte)0x48,
 281         (byte)0x86, (byte)0xF7, (byte)0x0D, (byte)0x01,
 282         (byte)0x03, (byte)0x01, (byte)0x30, (byte)0x81,
 283         (byte)0x8B, (byte)0x02, (byte)0x81, (byte)0x81,
 284         (byte)0x00, (byte)0xF4, (byte)0x88, (byte)0xFD,
 285         (byte)0x58, (byte)0x4E, (byte)0x49, (byte)0xDB,
 286         (byte)0xCD, (byte)0x20, (byte)0xB4, (byte)0x9D,
 287         (byte)0xE4, (byte)0x91, (byte)0x07, (byte)0x36,
 288         (byte)0x6B, (byte)0x33, (byte)0x6C, (byte)0x38,
 289         (byte)0x0D, (byte)0x45, (byte)0x1D, (byte)0x0F,
 290         (byte)0x7C, (byte)0x88, (byte)0xB3, (byte)0x1C,
 291         (byte)0x7C, (byte)0x5B, (byte)0x2D, (byte)0x8E,
 292         (byte)0xF6, (byte)0xF3, (byte)0xC9, (byte)0x23,
 293         (byte)0xC0, (byte)0x43, (byte)0xF0, (byte)0xA5,
 294         (byte)0x5B, (byte)0x18, (byte)0x8D, (byte)0x8E,
 295         (byte)0xBB, (byte)0x55, (byte)0x8C, (byte)0xB8,
 296         (byte)0x5D, (byte)0x38, (byte)0xD3, (byte)0x34,
 297         (byte)0xFD, (byte)0x7C, (byte)0x17, (byte)0x57,
 298         (byte)0x43, (byte)0xA3, (byte)0x1D, (byte)0x18,
 299         (byte)0x6C, (byte)0xDE, (byte)0x33, (byte)0x21,
 300         (byte)0x2C, (byte)0xB5, (byte)0x2A, (byte)0xFF,
 301         (byte)0x3C, (byte)0xE1, (byte)0xB1, (byte)0x29,
 302         (byte)0x40, (byte)0x18, (byte)0x11, (byte)0x8D,
 303         (byte)0x7C, (byte)0x84, (byte)0xA7, (byte)0x0A,
 304         (byte)0x72, (byte)0xD6, (byte)0x86, (byte)0xC4,
 305         (byte)0x03, (byte)0x19, (byte)0xC8, (byte)0x07,
 306         (byte)0x29, (byte)0x7A, (byte)0xCA, (byte)0x95,
 307         (byte)0x0C, (byte)0xD9, (byte)0x96, (byte)0x9F,
 308         (byte)0xAB, (byte)0xD0, (byte)0x0A, (byte)0x50,
 309         (byte)0x9B, (byte)0x02, (byte)0x46, (byte)0xD3,
 310         (byte)0x08, (byte)0x3D, (byte)0x66, (byte)0xA4,
 311         (byte)0x5D, (byte)0x41, (byte)0x9F, (byte)0x9C,
 312         (byte)0x7C, (byte)0xBD, (byte)0x89, (byte)0x4B,
 313         (byte)0x22, (byte)0x19, (byte)0x26, (byte)0xBA,
 314         (byte)0xAB, (byte)0xA2, (byte)0x5E, (byte)0xC3,
 315         (byte)0x55, (byte)0xE9, (byte)0x2F, (byte)0x78,
 316         (byte)0xC7, (byte)0x02, (byte)0x01, (byte)0x02,
 317         (byte)0x02, (byte)0x02, (byte)0x02, (byte)0x00,
 318         (byte)0x03, (byte)0x81, (byte)0x84, (byte)0x00,
 319         (byte)0x02, (byte)0x81, (byte)0x80, (byte)0x2C,
 320         (byte)0x40, (byte)0xFA, (byte)0xF6, (byte)0xA6,
 321         (byte)0xF8, (byte)0xAC, (byte)0xC2, (byte)0x4F,
 322         (byte)0xCD, (byte)0xC7, (byte)0x37, (byte)0x93,
 323         (byte)0xE5, (byte)0xE4, (byte)0x5E, (byte)0x18,
 324         (byte)0x14, (byte)0xE6, (byte)0x50, (byte)0xDA,
 325         (byte)0x55, (byte)0x38, (byte)0x5D, (byte)0x24,
 326         (byte)0xF5, (byte)0x42, (byte)0x68, (byte)0x5F,
 327         (byte)0xF5, (byte)0x15, (byte)0xC8, (byte)0x9B,
 328         (byte)0x5D, (byte)0x06, (byte)0x3D, (byte)0xE1,
 329         (byte)0x52, (byte)0x2F, (byte)0x98, (byte)0xFF,
 330         (byte)0x37, (byte)0xBB, (byte)0x75, (byte)0x48,
 331         (byte)0x48, (byte)0xE9, (byte)0x65, (byte)0x84,
 332         (byte)0x37, (byte)0xBB, (byte)0xB3, (byte)0xE9,
 333         (byte)0x36, (byte)0x01, (byte)0xB4, (byte)0x6A,
 334         (byte)0x1C, (byte)0xB2, (byte)0x11, (byte)0x82,
 335         (byte)0xCE, (byte)0x3D, (byte)0x65, (byte)0xE5,
 336         (byte)0x3C, (byte)0x89, (byte)0xE9, (byte)0x52,
 337         (byte)0x19, (byte)0xBD, (byte)0x58, (byte)0xF6,
 338         (byte)0xA2, (byte)0x03, (byte)0xA8, (byte)0xB2,
 339         (byte)0xA5, (byte)0xDB, (byte)0xEB, (byte)0xF5,
 340         (byte)0x94, (byte)0xF9, (byte)0x46, (byte)0xBE,
 341         (byte)0x45, (byte)0x4C, (byte)0x65, (byte)0xD2,
 342         (byte)0xD1, (byte)0xCF, (byte)0xFF, (byte)0xFF,
 343         (byte)0xFA, (byte)0x38, (byte)0xF1, (byte)0x72,
 344         (byte)0xAB, (byte)0xB9, (byte)0x14, (byte)0x4E,
 345         (byte)0xF5, (byte)0xF0, (byte)0x7A, (byte)0x8E,
 346         (byte)0x45, (byte)0xFD, (byte)0x5B, (byte)0xF9,
 347         (byte)0xA2, (byte)0x97, (byte)0x1B, (byte)0xAE,
 348         (byte)0x2C, (byte)0x7B, (byte)0x6B, (byte)0x7C,
 349         (byte)0x98, (byte)0xFE, (byte)0x58, (byte)0xDD,
 350         (byte)0xBE, (byte)0xF6, (byte)0x1C, (byte)0x8E,
 351         (byte)0xD0, (byte)0xA1, (byte)0x72
 352     };
 353 
 354     private static final byte bobPrivKeyEnc[] = {
 355         (byte)0x30, (byte)0x81, (byte)0xE4, (byte)0x02,
 356         (byte)0x01, (byte)0x00, (byte)0x30, (byte)0x81,
 357         (byte)0x99, (byte)0x06, (byte)0x09, (byte)0x2A,
 358         (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xF7,
 359         (byte)0x0D, (byte)0x01, (byte)0x03, (byte)0x01,
 360         (byte)0x30, (byte)0x81, (byte)0x8B, (byte)0x02,
 361         (byte)0x81, (byte)0x81, (byte)0x00, (byte)0xF4,
 362         (byte)0x88, (byte)0xFD, (byte)0x58, (byte)0x4E,
 363         (byte)0x49, (byte)0xDB, (byte)0xCD, (byte)0x20,
 364         (byte)0xB4, (byte)0x9D, (byte)0xE4, (byte)0x91,
 365         (byte)0x07, (byte)0x36, (byte)0x6B, (byte)0x33,
 366         (byte)0x6C, (byte)0x38, (byte)0x0D, (byte)0x45,
 367         (byte)0x1D, (byte)0x0F, (byte)0x7C, (byte)0x88,
 368         (byte)0xB3, (byte)0x1C, (byte)0x7C, (byte)0x5B,
 369         (byte)0x2D, (byte)0x8E, (byte)0xF6, (byte)0xF3,
 370         (byte)0xC9, (byte)0x23, (byte)0xC0, (byte)0x43,
 371         (byte)0xF0, (byte)0xA5, (byte)0x5B, (byte)0x18,
 372         (byte)0x8D, (byte)0x8E, (byte)0xBB, (byte)0x55,
 373         (byte)0x8C, (byte)0xB8, (byte)0x5D, (byte)0x38,
 374         (byte)0xD3, (byte)0x34, (byte)0xFD, (byte)0x7C,
 375         (byte)0x17, (byte)0x57, (byte)0x43, (byte)0xA3,
 376         (byte)0x1D, (byte)0x18, (byte)0x6C, (byte)0xDE,
 377         (byte)0x33, (byte)0x21, (byte)0x2C, (byte)0xB5,
 378         (byte)0x2A, (byte)0xFF, (byte)0x3C, (byte)0xE1,
 379         (byte)0xB1, (byte)0x29, (byte)0x40, (byte)0x18,
 380         (byte)0x11, (byte)0x8D, (byte)0x7C, (byte)0x84,
 381         (byte)0xA7, (byte)0x0A, (byte)0x72, (byte)0xD6,
 382         (byte)0x86, (byte)0xC4, (byte)0x03, (byte)0x19,
 383         (byte)0xC8, (byte)0x07, (byte)0x29, (byte)0x7A,
 384         (byte)0xCA, (byte)0x95, (byte)0x0C, (byte)0xD9,
 385         (byte)0x96, (byte)0x9F, (byte)0xAB, (byte)0xD0,
 386         (byte)0x0A, (byte)0x50, (byte)0x9B, (byte)0x02,
 387         (byte)0x46, (byte)0xD3, (byte)0x08, (byte)0x3D,
 388         (byte)0x66, (byte)0xA4, (byte)0x5D, (byte)0x41,
 389         (byte)0x9F, (byte)0x9C, (byte)0x7C, (byte)0xBD,
 390         (byte)0x89, (byte)0x4B, (byte)0x22, (byte)0x19,
 391         (byte)0x26, (byte)0xBA, (byte)0xAB, (byte)0xA2,
 392         (byte)0x5E, (byte)0xC3, (byte)0x55, (byte)0xE9,
 393         (byte)0x2F, (byte)0x78, (byte)0xC7, (byte)0x02,
 394         (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x02,
 395         (byte)0x02, (byte)0x00, (byte)0x04, (byte)0x43,
 396         (byte)0x02, (byte)0x41, (byte)0x00, (byte)0xE0,
 397         (byte)0x31, (byte)0xE7, (byte)0x77, (byte)0xB8,
 398         (byte)0xD0, (byte)0x7E, (byte)0x0A, (byte)0x9B,
 399         (byte)0x94, (byte)0xD5, (byte)0x3D, (byte)0x33,
 400         (byte)0x62, (byte)0x32, (byte)0x51, (byte)0xCE,
 401         (byte)0x74, (byte)0x5C, (byte)0xA5, (byte)0x72,
 402         (byte)0xD9, (byte)0x36, (byte)0xF3, (byte)0x8A,
 403         (byte)0x3F, (byte)0x8B, (byte)0xC6, (byte)0xFE,
 404         (byte)0xEF, (byte)0x94, (byte)0x8B, (byte)0x50,
 405         (byte)0x41, (byte)0x9B, (byte)0x14, (byte)0xC8,
 406         (byte)0xE9, (byte)0x1F, (byte)0x24, (byte)0x1F,
 407         (byte)0x65, (byte)0x8E, (byte)0xD3, (byte)0x85,
 408         (byte)0xD0, (byte)0x68, (byte)0x6C, (byte)0xF1,
 409         (byte)0x79, (byte)0x45, (byte)0xD0, (byte)0x06,
 410         (byte)0xA4, (byte)0xB8, (byte)0xE0, (byte)0x64,
 411         (byte)0xF5, (byte)0x38, (byte)0x72, (byte)0x97,
 412         (byte)0x00, (byte)0x23, (byte)0x5F
 413     };
 414 }
 415