Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Java/Openjdk/test/jdk/sun/security/pkcs12/   (Sun/Oracle ©)  Datei vom 13.11.2022 mit Größe 11 kB image not shown  

Quelle  ParamsPreferences.java   Sprache: JAVA

 
/*
 * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */


import jdk.test.lib.SecurityTools;
import sun.security.util.KnownOIDs;

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static jdk.test.lib.security.DerUtils.*;
import static sun.security.util.KnownOIDs.*;

/*
 * @test
 * @bug 8076190 8242151 8153005 8266293
 * @library /test/lib
 * @modules java.base/sun.security.pkcs
 *          java.base/sun.security.util
 * @summary Checks the preferences order of pkcs12 params, whether it's
 *          a system property or a security property, whether the name has
 *          "pkcs12" or "PKCS12", whether the legacy property is set.
 */

public class ParamsPreferences {

    public static final void main(String[] args) throws Exception {
        int c = 0;

        // default
        test(c++,
                Map.of(),
                Map.of(),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                SHA_256, 10000);

        // legacy settings
        test(c++,
                Map.of("keystore.pkcs12.legacy"""),
                Map.of(),
                PBEWithSHA1AndRC2_40, 50000,
                PBEWithSHA1AndDESede, 50000,
                SHA_1, 100000);

        // legacy override everything else
        test(c++,
                Map.of("keystore.pkcs12.legacy""",
                        "keystore.pkcs12.certProtectionAlgorithm""PBEWithHmacSHA256AndAES_128",
                        "keystore.pkcs12.certPbeIterationCount", 3000,
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithHmacSHA256AndAES_128",
                        "keystore.pkcs12.keyPbeIterationCount", 4000,
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA384",
                        "keystore.pkcs12.macIterationCount", 2000),
                Map.of(),
                PBEWithSHA1AndRC2_40, 50000,
                PBEWithSHA1AndDESede, 50000,
                SHA_1, 100000);

        // password-less with system property
        test(c++,
                Map.of("keystore.pkcs12.certProtectionAlgorithm""NONE",
                        "keystore.pkcs12.macAlgorithm""NONE"),
                Map.of(),
                null,
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                null);

        // password-less with security property
        test(c++,
                Map.of(),
                Map.of("keystore.pkcs12.certProtectionAlgorithm""NONE",
                        "keystore.pkcs12.macAlgorithm""NONE"),
                null,
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                null);

        // back to with storepass by overriding security property with system property
        test(c++,
                Map.of("keystore.pkcs12.certProtectionAlgorithm""PBEWithSHA1AndDESede",
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA256"),
                Map.of("keystore.pkcs12.certProtectionAlgorithm""NONE",
                        "keystore.pkcs12.macAlgorithm""NONE"),
                PBEWithSHA1AndDESede, 10000,
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                SHA_256, 10000);

        // back to with storepass by using "" to force hardcoded default
        test(c++,
                Map.of("keystore.pkcs12.certProtectionAlgorithm""",
                        "keystore.pkcs12.keyProtectionAlgorithm""",
                        "keystore.pkcs12.macAlgorithm"""),
                Map.of("keystore.pkcs12.certProtectionAlgorithm""NONE",
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40",
                        "keystore.pkcs12.macAlgorithm""NONE"),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                SHA_256, 10000);

        // change everything with system property
        test(c++,
                Map.of("keystore.pkcs12.certProtectionAlgorithm""PBEWithSHA1AndDESede",
                        "keystore.pkcs12.certPbeIterationCount", 3000,
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40",
                        "keystore.pkcs12.keyPbeIterationCount", 4000,
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA256",
                        "keystore.pkcs12.macIterationCount", 2000),
                Map.of(),
                PBEWithSHA1AndDESede, 3000,
                PBEWithSHA1AndRC2_40, 4000,
                SHA_256, 2000);

        // change everything with security property
        test(c++,
                Map.of(),
                Map.of("keystore.pkcs12.certProtectionAlgorithm""PBEWithSHA1AndDESede",
                        "keystore.pkcs12.certPbeIterationCount", 3000,
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40",
                        "keystore.pkcs12.keyPbeIterationCount", 4000,
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA256",
                        "keystore.pkcs12.macIterationCount", 2000),
                PBEWithSHA1AndDESede, 3000,
                PBEWithSHA1AndRC2_40, 4000,
                SHA_256, 2000);

        // override security property with system property
        test(c++,
                Map.of("keystore.pkcs12.certProtectionAlgorithm""PBEWithSHA1AndDESede",
                        "keystore.pkcs12.certPbeIterationCount", 13000,
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40",
                        "keystore.pkcs12.keyPbeIterationCount", 14000,
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA256",
                        "keystore.pkcs12.macIterationCount", 12000),
                Map.of("keystore.pkcs12.certProtectionAlgorithm""PBEWithSHA1AndRC2_40",
                        "keystore.pkcs12.certPbeIterationCount", 3000,
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndDESede",
                        "keystore.pkcs12.keyPbeIterationCount", 4000,
                        "keystore.pkcs12.macAlgorithm""HmacPBESHA1",
                        "keystore.pkcs12.macIterationCount", 2000),
                PBEWithSHA1AndDESede, 13000,
                PBEWithSHA1AndRC2_40, 14000,
                SHA_256, 12000);

        // check keyProtectionAlgorithm old behavior. Preferences of
        // 4 different settings.

        test(c++,
                Map.of(),
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_128"),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBEWithSHA1AndRC2_128, 10000,
                SHA_256, 10000);
        test(c++,
                Map.of(),
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_128",
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40"),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBEWithSHA1AndRC2_40, 10000,
                SHA_256, 10000);
        test(c++,
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC4_128"),
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_128",
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40"),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBEWithSHA1AndRC4_128, 10000,
                SHA_256, 10000);
        test(c++,
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC4_128",
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC4_40"),
                Map.of("keystore.PKCS12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_128",
                        "keystore.pkcs12.keyProtectionAlgorithm""PBEWithSHA1AndRC2_40"),
                PBES2, HmacSHA256, AES_256$CBC$NoPadding, 10000,
                PBEWithSHA1AndRC4_40, 10000,
                SHA_256, 10000);

        // 8266293
        test(c++,
                Map.of("keystore.pkcs12.keyProtectionAlgorithm""PBEWithMD5AndDES",
                        "keystore.pkcs12.certProtectionAlgorithm""PBEWithMD5AndDES"),
                Map.of(),
                PBEWithMD5AndDES, 10000,
                PBEWithMD5AndDES, 10000,
                SHA_256, 10000);
    }

    /**
     * Run once.
     *
     * @param sysProps system properties
     * @param secProps security properties
     * @param args     an array expected certPbeAlg (sub algs), certPbeIC,
     *                 keyPbeAlg (sub algs), keyPbeIc, macAlg, macIC.
     */

    static void test(int n, Map<String, ?> sysProps,
                     Map<String, ?> secProps,
                     Object... args) throws Exception {

        String cmd = "-keystore ks" + n + " -genkeypair -keyalg EC "
                + "-alias a -dname CN=A -storepass changeit "
                + "-J-Djava.security.properties=" + n + ".conf";

        for (var p : sysProps.entrySet()) {
            cmd += " -J-D" + p.getKey() + "=" + p.getValue();
        }

        List<String> jsConf = new ArrayList<>();
        for (var p : secProps.entrySet()) {
            jsConf.add(p.getKey() + "=" + p.getValue());
        }
        Files.write(Path.of(n + ".conf"), jsConf);
        System.out.println("--------- test starts ----------");
        System.out.println(jsConf);
        SecurityTools.keytool(cmd).shouldHaveExitValue(0);

        int i = 0;
        byte[] data = Files.readAllBytes(Path.of("ks" + n));

        // cert pbe alg + ic
        KnownOIDs certAlg = (KnownOIDs)args[i++];
        if (certAlg == null) {
            checkAlg(data, "110c10", Data);
        } else {
            checkAlg(data, "110c10", EncryptedData);
            checkAlg(data, "110c110110", certAlg);
            if (certAlg == PBES2) {
                checkAlg(data, "110c11011100", PBKDF2WithHmacSHA1);
                checkAlg(data, "110c1101110130", (KnownOIDs)args[i++]);
                checkAlg(data, "110c11011110", (KnownOIDs)args[i++]);
                checkInt(data, "110c110111011", (int) args[i++]);
            } else {
                checkInt(data, "110c1101111", (int) args[i++]);
            }
        }

        // key pbe alg + ic
        KnownOIDs keyAlg = (KnownOIDs)args[i++];
        checkAlg(data, "110c010c01000", keyAlg);
        if (keyAlg == PBES2) {
            checkAlg(data, "110c010c0100100", PBKDF2WithHmacSHA1);
            checkAlg(data, "110c010c010010130", (KnownOIDs)args[i++]);
            checkAlg(data, "110c010c0100110", (KnownOIDs)args[i++]);
            checkInt(data, "110c010c01001011", (int) args[i++]);
        } else {
            checkInt(data, "110c010c010011", (int) args[i++]);
        }

        // mac alg + ic
        KnownOIDs macAlg = (KnownOIDs)args[i++];
        if (macAlg == null) {
            shouldNotExist(data, "2");
        } else {
            checkAlg(data, "2000", macAlg);
            checkInt(data, "22", (int) args[i++]);
        }
    }
}

Messung V0.5
C=88 H=93 G=90

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.