RSAMultiPrimePrivateCrtKeyTest.java revision adc854b798c1cfe3bfd4c27d68d5cee38ca617da
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.interfaces;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargets;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestLevel;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetNew;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetClass;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.interfaces.RSAMultiPrimePrivateCrtKey;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.RSAOtherPrimeInfo;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.interfaces.RSAMultiPrimePrivateCrtKeyImpl;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@TestTargetClass(RSAMultiPrimePrivateCrtKey.class)
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class RSAMultiPrimePrivateCrtKeyTest extends TestCase {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reference array of RSAOtherPrimeInfo. DO NOT MODIFY
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final RSAOtherPrimeInfo[] opi = new RSAOtherPrimeInfo[] {
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new RSAOtherPrimeInfo(BigInteger.ONE, BigInteger.ONE, BigInteger.ONE),
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new RSAOtherPrimeInfo(BigInteger.ONE, BigInteger.ONE, BigInteger.ONE),
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new RSAOtherPrimeInfo(BigInteger.ONE, BigInteger.ONE, BigInteger.ONE)
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    };
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger publicExponent = BigInteger.ONE;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger primeExponentP = BigInteger.ONE;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger primeExponentQ = BigInteger.ONE;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger primeP = BigInteger.ONE;
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger primeQ = BigInteger.ONE;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger crtCoefficient = BigInteger.ONE;
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class RSAMulti extends RSAMultiPrimePrivateCrtKeyImpl {
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public RSAMulti(BigInteger publicExp,
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        BigInteger primeExpP,
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        BigInteger primeExpQ,
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        BigInteger prP,
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        BigInteger prQ,
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        BigInteger crtCft,
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        RSAOtherPrimeInfo[] otherPrmInfo) {
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(publicExp, primeExpP, primeExpQ, prP, prQ, crtCft, otherPrmInfo);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getCrtCoefficient()
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getPrimeExponentP()
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getPrimeExponentQ()
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getPrimeP()
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getPrimeQ()
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getPublicExponent()
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargets({
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getCrtCoefficient",
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getPrimeExponentP",
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getPrimeExponentQ",
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getPrimeP",
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getPrimeQ",
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ),
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @TestTargetNew(
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            level = TestLevel.COMPLETE,
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            notes = "",
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            method = "getPublicExponent",
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            args = {}
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        )
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    })
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_RSAMultiPrimePrivateCrtKey() {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        RSAMulti rsam = new RSAMulti(publicExponent, primeExponentP, primeExponentQ,
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                     primeP, primeQ, crtCoefficient, opi);
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getCrtCoefficient(), crtCoefficient);
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getPrimeExponentP(), primeExponentP);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getPrimeExponentQ(), primeExponentQ);
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getPrimeP(), primeP);
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getPrimeQ(), primeQ);
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getPublicExponent(), publicExponent);
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception: " + e);
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.interfaces.RSAMultiPrimePrivateCrtKey#getOtherPrimeInfo()
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getOtherPrimeInfo",
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getOtherPrimeInfo() {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        RSAMulti rsam = new RSAMulti(publicExponent, primeExponentP, primeExponentQ,
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                     primeP, primeQ, crtCoefficient, null);
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Object RSAOtherPrimeInfo is not NULL", rsam.getOtherPrimeInfo());
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception: " + e);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rsam = new RSAMulti(publicExponent, primeExponentP, primeExponentQ,
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            primeP, primeQ, crtCoefficient, opi);
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(rsam.getOtherPrimeInfo(), opi);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception: " + e);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}