114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root/*
214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * Copyright 2014 The Android Open Source Project
314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root *
414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * you may not use this file except in compliance with the License.
614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * You may obtain a copy of the License at
714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root *
814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root *
1014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * Unless required by applicable law or agreed to in writing, software
1114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * See the License for the specific language governing permissions and
1414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root * limitations under the License.
1514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root */
1614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
1714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootpackage org.apache.harmony.crypto.tests.javax.crypto;
1814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
1914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.InvalidAlgorithmParameterException;
2014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.InvalidKeyException;
2114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.Key;
2214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.NoSuchAlgorithmException;
2314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.SecureRandom;
2414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport java.security.spec.AlgorithmParameterSpec;
2514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport javax.crypto.KeyAgreementSpi;
2614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport javax.crypto.SecretKey;
2714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport javax.crypto.ShortBufferException;
2814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport libcore.javax.crypto.MockKey;
2914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootimport libcore.javax.crypto.MockKey2;
3014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
3114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Rootpublic class MockKeyAgreementSpi extends KeyAgreementSpi {
3214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    public static class SpecificKeyTypes extends MockKeyAgreementSpi {
3314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        @Override
3414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        public void checkKeyType(Key key) throws InvalidKeyException {
3514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            if (!(key instanceof MockKey)) {
3614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root                throw new InvalidKeyException("Must be MockKey!");
3714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            }
3814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        }
3914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
4014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
4114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    public static class SpecificKeyTypes2 extends MockKeyAgreementSpi {
4214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        @Override
4314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        public void checkKeyType(Key key) throws InvalidKeyException {
4414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            if (!(key instanceof MockKey2)) {
4514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root                throw new InvalidKeyException("Must be MockKey2!");
4614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            }
4714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        }
4814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
4914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
5014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    public static class AllKeyTypes extends MockKeyAgreementSpi {
5114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
5214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
5314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    public void checkKeyType(Key key) throws InvalidKeyException {
5414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
5514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
5614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
5714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException,
5814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            IllegalStateException {
5914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        throw new UnsupportedOperationException();
6014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
6114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
6214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
6314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected byte[] engineGenerateSecret() throws IllegalStateException {
6414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        throw new UnsupportedOperationException();
6514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
6614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
6714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
6814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected int engineGenerateSecret(byte[] sharedSecret, int offset)
6914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            throws IllegalStateException, ShortBufferException {
7014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        throw new UnsupportedOperationException();
7114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
7214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
7314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
7414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException,
7514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            NoSuchAlgorithmException, InvalidKeyException {
7614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        throw new UnsupportedOperationException();
7714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
7814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
7914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
8014a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected void engineInit(Key key, SecureRandom random) throws InvalidKeyException {
8114a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        checkKeyType(key);
8214a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
8314a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root
8414a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    @Override
8514a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    protected void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random)
8614a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root            throws InvalidKeyException, InvalidAlgorithmParameterException {
8714a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root        checkKeyType(key);
8814a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root    }
8914a26bd0975d4f986552b8f5aa34c6526ab4f6b7Kenny Root}
90