/* * Java OTR library Copyright (C) 2008-2009 Ian Goldberg, Muhaimeen Ashraf, * Andrew Chung, Can Tang * * This library is free software; you can redistribute it and/or modify it under * the terms of version 2.1 of the GNU Lesser General Public License as * published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package net.java.otr4j.crypto; public class Util { public static boolean arrayEquals(byte[] b1, byte[] b2) { if (b1 == null || b2 == null || b1.length != b2.length) { return false; } for (int i = 0; i < b1.length; i++) { if (b1[i] != b2[i]) { return false; } } return true; } public static void checkBytes(String s, byte[] bytes) { String hexString = new String(); for (int i = 0; i < bytes.length; i++) { hexString += Integer.toHexString((bytes[i] >>> 4) & 0x0F); hexString += Integer.toHexString(0x0F & bytes[i]); } System.out.println(s + ": " + hexString); } static void writeInt(byte[] dst, int index, int src) { dst[index] = (byte) ((src >> 24) & 0xff); dst[index + 1] = (byte) ((src >> 16) & 0xff); dst[index + 2] = (byte) ((src >> 8) & 0xff); dst[index + 3] = (byte) (src & 0xff); } static int readInt(byte[] src, int index) { int ret = ((int) src[index] << 24) | ((int) (src[index + 1] << 16) & 0xff0000) | ((int) (src[index + 2] << 8) & 0xff00) | ((int) src[index + 3] & 0xff); return ret; } static byte[] hexStringToBytes(String s) { byte[] sbytes = s.getBytes(); if (sbytes.length % 2 != 0) return null; byte[] ret = new byte[sbytes.length / 2]; for (int i = 0; i < ret.length; i++) { if (sbytes[2 * i] >= 'A' && sbytes[2 * i] <= 'F') { ret[i] = (byte) ((sbytes[2 * i] - ('A' - 10)) << 4); } else if (sbytes[2 * i] >= 'a' && sbytes[2 * i] <= 'f') { ret[i] = (byte) ((sbytes[2 * i] - ('a' - 10)) << 4); } else { ret[i] = (byte) ((sbytes[2 * i] - '0') << 4); } if (sbytes[2 * i + 1] >= 'A' && sbytes[2 * i + 1] <= 'F') { ret[i] |= (byte) (sbytes[2 * i + 1] - ('A' - 10)); } else if (sbytes[2 * i + 1] >= 'a' && sbytes[2 * i + 1] <= 'f') { ret[i] |= (byte) (sbytes[2 * i + 1] - ('a' - 10)); } else { ret[i] |= (byte) (sbytes[2 * i + 1] - '0'); } } return ret; } static String bytesToHexString(byte[] mpi) { byte[] hex = new byte[2 * mpi.length]; for (int i = 0; i < mpi.length; i++) { int num = (int) (mpi[i] >> 4 & 0xf); if (num <= 9) { hex[2 * i] = (byte) ('0' + num); } else { hex[2 * i] = (byte) ('A' + num - 10); } num = (int) (mpi[i] & 0xf); if (num <= 9) { hex[2 * i + 1] = (byte) ('0' + num); } else { hex[2 * i + 1] = (byte) ('A' + num - 10); } } return new String(hex); } }