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