001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.security; 020 021import java.util.Arrays; 022 023 024/** 025 * Util class contains some useful methods. 026 * @author Hani S. Kirollos 027 * @version $Revision$ $Date$ 028 */ 029public class Util { 030 /** Default constructor; no instance state to initialise. */ 031 public Util() {} 032 033 /** 034 * DES Keys use the LSB as the odd parity bit. This method can 035 * be used enforce correct parity. 036 * 037 * @param bytes the byte array to set the odd parity on. 038 */ 039 public static void adjustDESParity (byte[] bytes) { 040 for (int i = 0; i < bytes.length; i++) { 041 int b = bytes[i]; 042 bytes[i] = (byte)(b & 0xfe | (b >> 1 ^ b >> 2 ^ b >> 3 ^ b >> 4 ^ b >> 5 ^ b >> 6 ^ b >> 7 ^ 0x01) & 0x01); 043 } 044 } 045 046 /** 047 * DES Keys use the LSB as the odd parity bit. This method checks 048 * whether the parity is adjusted or not 049 * 050 * @param bytes the byte[] to be checked 051 * @return true if parity is adjusted else returns false 052 */ 053 public static boolean isDESParityAdjusted (byte[] bytes) { 054 byte[] correct = bytes.clone(); 055 adjustDESParity(correct); 056 return Arrays.equals(bytes, correct); 057 } 058} 059 060 061