Example #1
0
  public void testCompat() throws Exception {
    if (Security.getProvider("SUN") == null) {
      return;
    }

    Signature s = Signature.getInstance("DSA", "SUN");
    KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "SUN");
    byte[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

    g.initialize(512, new SecureRandom());

    KeyPair p = g.generateKeyPair();

    PrivateKey sKey = p.getPrivate();
    PublicKey vKey = p.getPublic();

    //
    // sign SUN - verify with BC
    //
    s.initSign(sKey);

    s.update(data);

    byte[] sigBytes = s.sign();

    s = Signature.getInstance("DSA", "BC");

    s.initVerify(vKey);

    s.update(data);

    if (!s.verify(sigBytes)) {
      fail("SUN -> BC verification failed");
    }

    //
    // sign BC - verify with SUN
    //

    s.initSign(sKey);

    s.update(data);

    sigBytes = s.sign();

    s = Signature.getInstance("DSA", "SUN");

    s.initVerify(vKey);

    s.update(data);

    if (!s.verify(sigBytes)) {
      fail("BC -> SUN verification failed");
    }

    //
    // key encoding test - BC decoding Sun keys
    //
    KeyFactory f = KeyFactory.getInstance("DSA", "BC");
    X509EncodedKeySpec x509s = new X509EncodedKeySpec(vKey.getEncoded());

    DSAPublicKey k1 = (DSAPublicKey) f.generatePublic(x509s);

    checkPublic(k1, vKey);

    PKCS8EncodedKeySpec pkcs8 = new PKCS8EncodedKeySpec(sKey.getEncoded());

    DSAPrivateKey k2 = (DSAPrivateKey) f.generatePrivate(pkcs8);

    checkPrivateKey(k2, sKey);

    //
    // key decoding test - SUN decoding BC keys
    //
    f = KeyFactory.getInstance("DSA", "SUN");
    x509s = new X509EncodedKeySpec(k1.getEncoded());

    vKey = (DSAPublicKey) f.generatePublic(x509s);

    checkPublic(k1, vKey);

    pkcs8 = new PKCS8EncodedKeySpec(k2.getEncoded());
    sKey = f.generatePrivate(pkcs8);

    checkPrivateKey(k2, sKey);
  }