aboutsummaryrefslogtreecommitdiff
path: root/java/com/google/security/wycheproof/TestUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/security/wycheproof/TestUtil.java')
-rw-r--r--java/com/google/security/wycheproof/TestUtil.java99
1 files changed, 99 insertions, 0 deletions
diff --git a/java/com/google/security/wycheproof/TestUtil.java b/java/com/google/security/wycheproof/TestUtil.java
new file mode 100644
index 0000000..ae21adc
--- /dev/null
+++ b/java/com/google/security/wycheproof/TestUtil.java
@@ -0,0 +1,99 @@
+/**
+ * @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);
+ }
+}