package org.thoughtcrime.SMP.crypto.SMP;
/*
* 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
*/
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);
}
}