<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi Max,</p>
    <p>Is this due to the RSA KeyPairGenerator impl of MSCAPI provider?
      Is there documentation on how the patch version of this
      RSAKeyPairGenerator class is built and why it'd be placed under
      ${test.classes}/patches/java.base directory?</p>
    <p>I am somewhat unsure about this approach as this would mean that
      we are not using the real default RSA key pair generator
      functionality for ALL env/platforms. Is this not part of what this
      test is about?<br>
    </p>
    <p>I saw comments about Solaris RSA key pair gen being so slow that
      this test is not run on Solaris. If this is window-specific, maybe
      avoid the 8192 key size or find a way to work around this. How do
      user generate 8192-bit RSA keys on windows? Do they just wait?</p>
    Thanks,<br>
    Valerie<br>
    <div class="moz-cite-prefix">On 6/18/2019 7:26 AM, Weijun Wang
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:CB0FC29C-BEE0-41EF-99E9-79FF3F875E3F@oracle.com">
      <meta http-equiv="content-type" content="text/html;
        charset=windows-1252">
      I rethink about this. Since the patched class was meant to make
      the generation faster, it should never silently fallback to "real"
      generation. Otherwise, it could be slow again unnoticed.
      <div class=""><br class="">
      </div>
      <div class="">Updated webrev at <a
          href="http://cr.openjdk.java.net/~weijun/8225257/webrev.01/"
          class="" moz-do-not-send="true">http://cr.openjdk.java.net/~weijun/8225257/webrev.01/</a>.</div>
      <div class=""><br class="">
      </div>
      <div class="">Thanks,</div>
      <div class="">Max</div>
      <div class=""><br class="">
      </div>
      <div class="">p.s. Again, the difference between the original
        class and my patches one is:</div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><b class="">diff
            --git
            src/java.base/share/classes/sun/security/rsa/RSAKeyPairGenerator.java
test/jdk/sun/security/tools/keytool/pss/java.base/sun/security/rsa/RSAKeyPairGenerator.java</b></div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><b class="">index
            07fd44f..d73308f 100644</b></div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><b class="">---
src/java.base/share/classes/sun/security/rsa/RSAKeyPairGenerator.java</b></div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><b class="">+++
test/jdk/sun/security/tools/keytool/pss/java.base/sun/security/rsa/RSAKeyPairGenerator.java</b></div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(24, 187, 187); background-color: rgb(255, 255, 255);"
          class="">@@ -1,12 +1,10 @@</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> /*</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * Copyright (c) 2003, 2018, Oracle and/or its
          affiliates. All rights reserved.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+ * Copyright (c) 2019, Oracle and/or its affiliates.
          All rights reserved.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  * DO NOT
          ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  *</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  * This code
          is free software; you can redistribute it and/or modify it</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  * under the
          terms of the GNU General Public License version 2 only, as</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * published by the Free Software Foundation. 
          Oracle designates this</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * particular file as subject to the "Classpath"
          exception as provided</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * by Oracle in the LICENSE file that accompanied
          this code.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+ * published by the Free Software Foundation.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  *</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  * This code
          is distributed in the hope that it will be useful, but WITHOUT</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  * ANY
          WARRANTY; without even the implied warranty of MERCHANTABILITY
          or</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><span
            style="color: #18bbbb" class="">@@ -32,19 +30,11 @@</span>
          import java.security.spec.AlgorithmParameterSpec;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> import
          java.security.spec.RSAKeyGenParameterSpec;</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> import
          sun.security.jca.JCAUtil;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-import static
          sun.security.util.SecurityProviderConstants.DEF_RSA_KEY_SIZE;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-import static
          sun.security.util.SecurityProviderConstants.DEF_RSASSA_PSS_KEY_SIZE;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> import
          sun.security.x509.AlgorithmId;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> import static
          sun.security.rsa.RSAUtil.KeyType;</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> /**</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * RSA keypair generation. Standard algorithm,
          minimum key length 512 bit.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * We generate two random primes until we find two
          where phi is relative</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * prime to the public exponent. Default exponent is
          65537. It has only bit 0</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * and bit 4 set, which makes it particularly
          efficient.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- *</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * @since   1.5</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">- * @author  Andreas Sterbenz</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+ * Fake RSA keypair generation.</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">  */</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> public
          abstract class RSAKeyPairGenerator extends KeyPairGeneratorSpi
          {</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><span
            style="color: #18bbbb" class="">@@ -57,9 +47,6 @@</span>
          public abstract class RSAKeyPairGenerator extends
          KeyPairGeneratorSpi {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     private
          final KeyType type;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     private
          AlgorithmId rsaId;</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    // PRNG to use</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    private SecureRandom random;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">    
          RSAKeyPairGenerator(KeyType type, int defKeySize) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">        
          this.type = type;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          initialize to default in case the app does not call
          initialize()</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><span
            style="color: #18bbbb" class="">@@ -120,35 +107,135 @@</span>
          public abstract class RSAKeyPairGenerator extends
          KeyPairGeneratorSpi {</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">        
          this.keySize = tmpKeySize;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">        
          this.publicExponent = tmpPublicExponent;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        this.random = random;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     }</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     //
          generate the keypair. See JCA doc</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     public
          KeyPair generateKeyPair() {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          accommodate odd key sizes in case anybody wants to use them</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        int lp = (keySize + 1) >> 1;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        int lq = keySize - lp;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        if (random == null) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            random = JCAUtil.getSecureRandom();</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">        
          BigInteger e = publicExponent;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        while (true) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            // generate two random primes of size
          lp/lq</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            BigInteger p =
          BigInteger.probablePrime(lp, random);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            BigInteger q, n;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            do {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                q = BigInteger.probablePrime(lq,
          random);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                // convention is for p > q</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                if (p.compareTo(q) < 0) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                    BigInteger tmp = p;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                    p = q;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                    q = tmp;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                // modulus n = p * q</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        if (!e.equals(RSAKeyGenParameterSpec.F4)) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            throw new AssertionError("Only support
          F4 now");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        BigInteger p, q, n;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        // Pre-calculated p and q for e ==
          RSAKeyGenParameterSpec.F4</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        switch (keySize) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            case 2048:</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                p = new
          BigInteger("1600840041787354447543653385760927"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2642568308955833364523274045522752644800599"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8669541532595690224703734511692014533312515"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1867029838883431415692353449578487671384896"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6611685764860941767986520897595108597563035"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4023785639802607792535812062420427283857665"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9883578590844700707106157871508280052743363"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        + "65749456332400771");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                q = new
          BigInteger("1303880717101677622201474394769850"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7257196073324816341282215626935164930077468"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5999131251387556761167658937349436378464220"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4831804147777472146628148336776639855791417"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3849903041999943901924899580268176393595653"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7357080543898614581363167420619163047562600"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6155574020606891195960345238780709194499010"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        + "43652862954645301");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                break;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            case 4096:</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                p = new
          BigInteger("2985635754414679487171962796211911"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1563710734938215274736352092606404045130913"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2477365484439939846705721840432140066578525"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0762327458086280430118434094733412377416194"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8736124795243564050755767519346747209606612"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5835460937739428885308798309679495432910469"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0294757621321446003970767164933974474924664"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1513767092845098947552598109657871041666676"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2945573325433283821164032766425479703026349"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9433641551427112483593214628620450175257586"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4350119143877183562692754400346175237007314"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7121580349193179272551363894896336921717843"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3734726842184251708799134654802475890197293"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9094908310578403843742664173424031260840446"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "591633359364559754200663");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                q = new
          BigInteger("2279248439141087793789384816271625"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1304008816573950275844533962181244003563987"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6638461665174020058827698592331066726709304"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9231319346136709972639455506783245161859951"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6191872757335765533547033659834427437142631"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3801232751161907082392011429712327250253948"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6012497852063361866175243227579880020724881"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9393797645220239009219998518884396282407710"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7199202450846395844337846503427790307364624"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5124871273035872938616425951596065309519651"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1519189356431513094684173807318945903212527"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7712469749366620048658571121822171067675915"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5479178304648399924549334007222294762969503"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5341584429803583589276956979963609078497238"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "760757619468018224491053");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                break;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            case 8192:</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                p = new
          BigInteger("9821669838446774374944535804569858"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0553278885576950130485823829973470553571905"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3014418421996241500307589880457361653957913"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9176499436767288125182942994089196450118944"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8701794862752733776161684616570463744619126"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4981622564763630694110472008409561205704867"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0221819623405201369630462487520858670679048"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5854008441429858453634949980424333056803703"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1205609490778445762604050796894221725977551"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1428887194691696420765173256600200430067305"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4364524177041858044598166859757042904625691"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4292728453597609683799189454690202563236931"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8171122071288244573793276051041975005528757"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0228306442708182141334279133965507583927772"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9244311696220253059281524393613278272067808"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7017494446447670799055720358621918361716353"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5018317015764698318012095108914870478138809"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8204738169777192718869484177321870413838036"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8149216482968887382371881239714335470844573"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1862934371951394070111726593305334971041399"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5517260339034138718517336990212463882142363"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9154412320743552301967162100734381046548816"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3883737645359595416600487444018399886391071"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3777667222706059170707223589163679915863781"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "4662302526078720977228426750718207481384357"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7918717041190413457052439016978578217755022"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7370720979516554707297685239584071755267452"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6021894842754355160100506065457679069228273"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "95209345267367982516553449135291473361");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                q = new
          BigInteger("7902448465953646210110784092684896"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0265474424590294110174550047938700740921014"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1981650823416127449143596912363210790070524"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2903784112701128957948996730263815210531364"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0489145287401377007608600217628773627723381"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1194123533939872283952535576847014977682278"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9332064706645169741712060131540562788886577"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3762235020990267901959745687867018811088495"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "3716021011509120447248882358515954471433808"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2782236662758287959413069553620728137831579"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2321174813204514354999978428741310035945405"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0226661395731921098764192439072425262100813"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9732949866553839713092238096261034339815187"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2832617055364163276140160068136296115910569"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "9466440903693740716929166334256441926903849"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "1082968246155177124035336609654226388424434"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "5775783323612758615407928446164631651292743"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8428509642959278732826297890909454571009075"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7836191622138731918099379467912681177757761"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "6141378131042432093843778753846726589215845"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7402160146427434508515156204064224022904659"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8645441448874409852211668374267341177082462"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7341410218867175406105046487057429530801973"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0931082058719258230993681115780999537424968"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "2385515792331573549935317407789344892257264"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "7464569110078675090194686816764429827739815"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "0566036514181547634372488184242167294602000"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "8232780963578241583529875079397308150506597"</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                        +
          "37190564909892937290776929541076192569");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                break;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            default:</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+                throw new AssertionError("Unknown
          keySize " + keySize);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+        }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         n =
          p.multiply(q);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                // even with correctly sized p and
          q, there is a chance that</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                // n will be one bit short.
          re-generate the smaller prime if so</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            } while (n.bitLength() < keySize);</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          phi = (p - 1) * (q - 1) must be relative prime to e</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          otherwise RSA just won't work ;-)</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><span
            style="color: #18bbbb" class="">@@ -158,7 +245,7 @@</span>
          public abstract class RSAKeyPairGenerator extends
          KeyPairGeneratorSpi {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          generate new p and q until they work. typically</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          the first try will succeed when using F4</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         if
          (e.gcd(phi).equals(BigInteger.ONE) == false) {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-                continue;</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(25, 187, 3); background-color: rgb(255, 255, 255);"
          class="">+            throw new AssertionError("Should not
          happen");</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         }</div>
        <p style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255); min-height: 13px;"
          class=""> <br class="webkit-block-placeholder">
        </p>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         //
          private exponent d is the inverse of e mod phi</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""><span
            style="color: #18bbbb" class="">@@ -184,16 +271,3 @@</span>
          public abstract class RSAKeyPairGenerator extends
          KeyPairGeneratorSpi {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">         }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class="">     }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono";
          background-color: rgb(255, 255, 255);" class=""> }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    public static final class Legacy extends
          RSAKeyPairGenerator {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        public Legacy() {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            super(KeyType.RSA, DEF_RSA_KEY_SIZE);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    public static final class PSS extends
          RSAKeyPairGenerator {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        public PSS() {</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-            super(KeyType.PSS,
          DEF_RSASSA_PSS_KEY_SIZE);</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-        }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-    }</div>
        <div style="margin: 0px; font-stretch: normal; font-size: 11px;
          line-height: normal; font-family: "SF Mono"; color:
          rgb(187, 0, 4); background-color: rgb(255, 255, 255);"
          class="">-}</div>
        <div class=""><br class="">
        </div>
        <br class="">
        <blockquote type="cite" class="">On Jun 18, 2019, at 12:58 PM,
          Weijun Wang <<a href="mailto:weijun.wang@oracle.com"
            class="" moz-do-not-send="true">weijun.wang@oracle.com</a>>
          wrote:<br class="">
          <br class="">
          Please take a review at<br class="">
          <br class="">
             <a
            href="http://cr.openjdk.java.net/~weijun/8225257/webrev.00/"
            class="" moz-do-not-send="true">http://cr.openjdk.java.net/~weijun/8225257/webrev.00/</a><br
            class="">
          <br class="">
          I've patched the internal
          java.base/sun.security.rsa.RSAKeyPairGenerator class so it
          returns hardcoded pre-calculated key pairs.<br class="">
          <br class="">
          Thanks,<br class="">
          Max<br class="">
        </blockquote>
        <br class="">
      </div>
    </blockquote>
  </body>
</html>