/* * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] * * 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. */ /* * StringUtil.java */ package org.maxkey.crypto.cert; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.Locale; import org.bouncycastle.asn1.ASN1Integer; /** * String utilities. * * @author */ public class StringUtil { /** * Convert the supplied object to hex characters sub-divided by spaces every given number of characters, * and left-padded with zeros to fill group size. * * @param obj Object (byte array, BigInteger, DERInteger) * @param groupSize number of characters to group hex characters by * @param separator grouping separator * @return Hex string * @throws IllegalArgumentException if obj is not a BigInteger, byte array, or a DERInteger, or groupSize * < 0 */ public static StringBuilder toHex(Object obj, int groupSize, String separator) { if (groupSize < 0) { throw new IllegalArgumentException("Group size must be >= 0"); } BigInteger bigInt; if (obj instanceof BigInteger) { bigInt = (BigInteger) obj; } else if (obj instanceof byte[]) { bigInt = new BigInteger(1, (byte[]) obj); } else if (obj instanceof ASN1Integer) { bigInt = ((ASN1Integer) obj).getValue(); } else { throw new IllegalArgumentException("Don't know how to convert " + obj.getClass().getName() + " to a hex string"); } // Convert to hex StringBuilder sb = new StringBuilder(bigInt.toString(16).toUpperCase(Locale.ENGLISH)); // Left-pad if asked and necessary if (groupSize != 0) { int len = groupSize - (sb.length() % groupSize); if (len != groupSize) { for (int i = 0; i < len; i++) { sb.insert(0, '0'); } } } // Place separator at every groupSize characters if (sb.length() > groupSize && !separator.isEmpty()) { for (int i = groupSize; i < sb.length(); i += groupSize + separator.length()) { sb.insert(i, separator); } } return sb; } // 1. String --> InputStream public static InputStream String2InputStream(String str) { ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); return stream; } // 2. InputStream --> String public static String inputStream2String(InputStream is) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = in.readLine()) != null) { buffer.append(line); } return buffer.toString(); } }