Blame SPECS/TestCryptoLevel.java

Packit 09eae3
/* TestCryptoLevel -- Ensure unlimited crypto policy is in use.
Packit 09eae3
   Copyright (C) 2012 Red Hat, Inc.
Packit 09eae3
Packit 09eae3
This program is free software: you can redistribute it and/or modify
Packit 09eae3
it under the terms of the GNU Affero General Public License as
Packit 09eae3
published by the Free Software Foundation, either version 3 of the
Packit 09eae3
License, or (at your option) any later version.
Packit 09eae3
Packit 09eae3
This program is distributed in the hope that it will be useful,
Packit 09eae3
but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 09eae3
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 09eae3
GNU Affero General Public License for more details.
Packit 09eae3
Packit 09eae3
You should have received a copy of the GNU Affero General Public License
Packit 09eae3
along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 09eae3
*/
Packit 09eae3
Packit 09eae3
import java.lang.reflect.Field;
Packit 09eae3
import java.lang.reflect.Method;
Packit 09eae3
import java.lang.reflect.InvocationTargetException;
Packit 09eae3
Packit 09eae3
import java.security.Permission;
Packit 09eae3
import java.security.PermissionCollection;
Packit 09eae3
Packit 09eae3
public class TestCryptoLevel
Packit 09eae3
{
Packit 09eae3
  public static void main(String[] args)
Packit 09eae3
    throws NoSuchFieldException, ClassNotFoundException,
Packit 09eae3
           IllegalAccessException, InvocationTargetException
Packit 09eae3
  {
Packit 09eae3
    Class cls = null;
Packit 09eae3
    Method def = null, exempt = null;
Packit 09eae3
Packit 09eae3
    try
Packit 09eae3
      {
Packit 09eae3
        cls = Class.forName("javax.crypto.JceSecurity");
Packit 09eae3
      }
Packit 09eae3
    catch (ClassNotFoundException ex)
Packit 09eae3
      {
Packit 09eae3
        System.err.println("Running a non-Sun JDK.");
Packit 09eae3
        System.exit(0);
Packit 09eae3
      }
Packit 09eae3
    try
Packit 09eae3
      {
Packit 09eae3
        def = cls.getDeclaredMethod("getDefaultPolicy");
Packit 09eae3
        exempt = cls.getDeclaredMethod("getExemptPolicy");
Packit 09eae3
      }
Packit 09eae3
    catch (NoSuchMethodException ex)
Packit 09eae3
      {
Packit 09eae3
        System.err.println("Running IcedTea with the original crypto patch.");
Packit 09eae3
        System.exit(0);
Packit 09eae3
      }
Packit 09eae3
    def.setAccessible(true);
Packit 09eae3
    exempt.setAccessible(true);
Packit 09eae3
    PermissionCollection defPerms = (PermissionCollection) def.invoke(null);
Packit 09eae3
    PermissionCollection exemptPerms = (PermissionCollection) exempt.invoke(null);
Packit 09eae3
    Class apCls = Class.forName("javax.crypto.CryptoAllPermission");
Packit 09eae3
    Field apField = apCls.getDeclaredField("INSTANCE");
Packit 09eae3
    apField.setAccessible(true);
Packit 09eae3
    Permission allPerms = (Permission) apField.get(null);
Packit 09eae3
    if (defPerms.implies(allPerms) && (exemptPerms == null || exemptPerms.implies(allPerms)))
Packit 09eae3
      {
Packit 09eae3
        System.err.println("Running with the unlimited policy.");
Packit 09eae3
        System.exit(0);
Packit 09eae3
      }
Packit 09eae3
    else
Packit 09eae3
      {
Packit 09eae3
        System.err.println("WARNING: Running with a restricted crypto policy.");
Packit 09eae3
        System.exit(-1);
Packit 09eae3
      }
Packit 09eae3
  }
Packit 09eae3
}