120e310656f03cd83355eae5cd25237f71b80341aKenny Root/*
220e310656f03cd83355eae5cd25237f71b80341aKenny Root * Copyright 2015 The Android Open Source Project
320e310656f03cd83355eae5cd25237f71b80341aKenny Root *
420e310656f03cd83355eae5cd25237f71b80341aKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
520e310656f03cd83355eae5cd25237f71b80341aKenny Root * you may not use this file except in compliance with the License.
620e310656f03cd83355eae5cd25237f71b80341aKenny Root * You may obtain a copy of the License at
720e310656f03cd83355eae5cd25237f71b80341aKenny Root *
820e310656f03cd83355eae5cd25237f71b80341aKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
920e310656f03cd83355eae5cd25237f71b80341aKenny Root *
1020e310656f03cd83355eae5cd25237f71b80341aKenny Root * Unless required by applicable law or agreed to in writing, software
1120e310656f03cd83355eae5cd25237f71b80341aKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1220e310656f03cd83355eae5cd25237f71b80341aKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320e310656f03cd83355eae5cd25237f71b80341aKenny Root * See the License for the specific language governing permissions and
1420e310656f03cd83355eae5cd25237f71b80341aKenny Root * limitations under the License.
1520e310656f03cd83355eae5cd25237f71b80341aKenny Root */
1620e310656f03cd83355eae5cd25237f71b80341aKenny Root
1720e310656f03cd83355eae5cd25237f71b80341aKenny Rootpackage libcore.javax.crypto;
1820e310656f03cd83355eae5cd25237f71b80341aKenny Root
1920e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.InvalidAlgorithmParameterException;
2020e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.InvalidKeyException;
2120e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.Key;
2220e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.NoSuchAlgorithmException;
2320e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.SecureRandom;
2420e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport java.security.spec.AlgorithmParameterSpec;
2520e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport javax.crypto.KeyAgreementSpi;
2620e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport javax.crypto.SecretKey;
2720e310656f03cd83355eae5cd25237f71b80341aKenny Rootimport javax.crypto.ShortBufferException;
2820e310656f03cd83355eae5cd25237f71b80341aKenny Root
2920e310656f03cd83355eae5cd25237f71b80341aKenny Root/**
3020e310656f03cd83355eae5cd25237f71b80341aKenny Root * Mock KeyAgreementSpi used by {@link KeyAgreementTest}.
3120e310656f03cd83355eae5cd25237f71b80341aKenny Root */
3220e310656f03cd83355eae5cd25237f71b80341aKenny Rootpublic class MockKeyAgreementSpi extends KeyAgreementSpi {
3320e310656f03cd83355eae5cd25237f71b80341aKenny Root    public static class SpecificKeyTypes extends MockKeyAgreementSpi {
3420e310656f03cd83355eae5cd25237f71b80341aKenny Root        @Override
3520e310656f03cd83355eae5cd25237f71b80341aKenny Root        public void checkKeyType(Key key) throws InvalidKeyException {
3620e310656f03cd83355eae5cd25237f71b80341aKenny Root            if (!(key instanceof MockKey)) {
3720e310656f03cd83355eae5cd25237f71b80341aKenny Root                throw new InvalidKeyException("Must be MockKey!");
3820e310656f03cd83355eae5cd25237f71b80341aKenny Root            }
3920e310656f03cd83355eae5cd25237f71b80341aKenny Root        }
4020e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
4120e310656f03cd83355eae5cd25237f71b80341aKenny Root
4220e310656f03cd83355eae5cd25237f71b80341aKenny Root    public static class SpecificKeyTypes2 extends MockKeyAgreementSpi {
4320e310656f03cd83355eae5cd25237f71b80341aKenny Root        @Override
4420e310656f03cd83355eae5cd25237f71b80341aKenny Root        public void checkKeyType(Key key) throws InvalidKeyException {
4520e310656f03cd83355eae5cd25237f71b80341aKenny Root            System.err.println("Checking key of type " + key.getClass().getName());
4620e310656f03cd83355eae5cd25237f71b80341aKenny Root            if (!(key instanceof MockKey2)) {
4720e310656f03cd83355eae5cd25237f71b80341aKenny Root                throw new InvalidKeyException("Must be MockKey2!");
4820e310656f03cd83355eae5cd25237f71b80341aKenny Root            }
4920e310656f03cd83355eae5cd25237f71b80341aKenny Root        }
5020e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
5120e310656f03cd83355eae5cd25237f71b80341aKenny Root
5220e310656f03cd83355eae5cd25237f71b80341aKenny Root    public static class AllKeyTypes extends MockKeyAgreementSpi {
5320e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
5420e310656f03cd83355eae5cd25237f71b80341aKenny Root
5520e310656f03cd83355eae5cd25237f71b80341aKenny Root    public void checkKeyType(Key key) throws InvalidKeyException {
5620e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
5720e310656f03cd83355eae5cd25237f71b80341aKenny Root
5820e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
5920e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException,
6020e310656f03cd83355eae5cd25237f71b80341aKenny Root            IllegalStateException {
6120e310656f03cd83355eae5cd25237f71b80341aKenny Root        throw new UnsupportedOperationException("not implemented");
6220e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
6320e310656f03cd83355eae5cd25237f71b80341aKenny Root
6420e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
6520e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected byte[] engineGenerateSecret() throws IllegalStateException {
6620e310656f03cd83355eae5cd25237f71b80341aKenny Root        throw new UnsupportedOperationException("not implemented");
6720e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
6820e310656f03cd83355eae5cd25237f71b80341aKenny Root
6920e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
7020e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected int engineGenerateSecret(byte[] sharedSecret, int offset)
7120e310656f03cd83355eae5cd25237f71b80341aKenny Root            throws IllegalStateException, ShortBufferException {
7220e310656f03cd83355eae5cd25237f71b80341aKenny Root        throw new UnsupportedOperationException("not implemented");
7320e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
7420e310656f03cd83355eae5cd25237f71b80341aKenny Root
7520e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
7620e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException,
7720e310656f03cd83355eae5cd25237f71b80341aKenny Root            NoSuchAlgorithmException, InvalidKeyException {
7820e310656f03cd83355eae5cd25237f71b80341aKenny Root        throw new UnsupportedOperationException("not implemented");
7920e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
8020e310656f03cd83355eae5cd25237f71b80341aKenny Root
8120e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
8220e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected void engineInit(Key key, SecureRandom random) throws InvalidKeyException {
8320e310656f03cd83355eae5cd25237f71b80341aKenny Root        checkKeyType(key);
8420e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
8520e310656f03cd83355eae5cd25237f71b80341aKenny Root
8620e310656f03cd83355eae5cd25237f71b80341aKenny Root    @Override
8720e310656f03cd83355eae5cd25237f71b80341aKenny Root    protected void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random)
8820e310656f03cd83355eae5cd25237f71b80341aKenny Root            throws InvalidKeyException, InvalidAlgorithmParameterException {
8920e310656f03cd83355eae5cd25237f71b80341aKenny Root        checkKeyType(key);
9020e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
9120e310656f03cd83355eae5cd25237f71b80341aKenny Root}
92