| /** |
| * @license |
| * Copyright 2016 Google Inc. All rights reserved. |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.google.security.wycheproof; |
| |
| import java.nio.ByteBuffer; |
| import java.security.Provider; |
| import java.security.Security; |
| |
| /** Test utilities */ |
| public class TestUtil { |
| |
| public static String bytesToHex(byte[] bytes) { |
| // bytesToHex is used to convert output from Cipher. |
| // cipher.update can return null, which is equivalent to returning |
| // no plaitext rsp. ciphertext. |
| if (bytes == null) { |
| return ""; |
| } |
| String chars = "0123456789abcdef"; |
| StringBuilder result = new StringBuilder(2 * bytes.length); |
| for (byte b : bytes) { |
| // convert to unsigned |
| int val = b & 0xff; |
| result.append(chars.charAt(val / 16)); |
| result.append(chars.charAt(val % 16)); |
| } |
| return result.toString(); |
| } |
| |
| /** |
| * Returns a hexadecimal representation of the bytes written to ByteBuffer (i.e. all the bytes |
| * before position()). |
| */ |
| public static String byteBufferToHex(ByteBuffer buffer) { |
| ByteBuffer tmp = buffer.duplicate(); |
| tmp.flip(); |
| byte[] bytes = new byte[tmp.remaining()]; |
| tmp.get(bytes); |
| return bytesToHex(bytes); |
| } |
| |
| public static byte[] hexToBytes(String hex) throws IllegalArgumentException { |
| if (hex.length() % 2 != 0) { |
| throw new IllegalArgumentException("Expected a string of even length"); |
| } |
| int size = hex.length() / 2; |
| byte[] result = new byte[size]; |
| for (int i = 0; i < size; i++) { |
| int hi = Character.digit(hex.charAt(2 * i), 16); |
| int lo = Character.digit(hex.charAt(2 * i + 1), 16); |
| if ((hi == -1) || (lo == -1)) { |
| throw new IllegalArgumentException("input is not hexadecimal"); |
| } |
| result[i] = (byte) (16 * hi + lo); |
| } |
| return result; |
| } |
| |
| public static void installOnlyThisProvider(Provider provider) { |
| for (Provider p : Security.getProviders()) { |
| Security.removeProvider(p.getName()); |
| } |
| Security.insertProviderAt(provider, 1); |
| } |
| |
| public static void installOnlyOpenJDKProviders() throws Exception { |
| for (Provider p : Security.getProviders()) { |
| Security.removeProvider(p.getName()); |
| } |
| installOpenJDKProvider("com.sun.net.ssl.internal.ssl.Provider"); |
| installOpenJDKProvider("com.sun.crypto.provider.SunJCE"); |
| installOpenJDKProvider("com.sun.security.sasl.Provider"); |
| installOpenJDKProvider("org.jcp.xml.dsig.internal.dom.XMLDSigRI"); |
| installOpenJDKProvider("sun.security.ec.SunEC"); |
| installOpenJDKProvider("sun.security.jgss.SunProvider"); |
| installOpenJDKProvider("sun.security.provider.Sun"); |
| installOpenJDKProvider("sun.security.rsa.SunRsaSign"); |
| installOpenJDKProvider("sun.security.smartcardio.SunPCSC"); |
| } |
| |
| private static void installOpenJDKProvider(String className) throws Exception { |
| Provider provider = (Provider) Class.forName(className).getConstructor().newInstance(); |
| Security.insertProviderAt(provider, 1); |
| } |
| } |