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 031 /** 032 * DES Keys use the LSB as the odd parity bit. This method can 033 * be used enforce correct parity. 034 * 035 * @param bytes the byte array to set the odd parity on. 036 */ 037 public static void adjustDESParity (byte[] bytes) { 038 for (int i = 0; i < bytes.length; i++) { 039 int b = bytes[i]; 040 bytes[i] = (byte)(b & 0xfe | (b >> 1 ^ b >> 2 ^ b >> 3 ^ b >> 4 ^ b >> 5 ^ b >> 6 ^ b >> 7 ^ 0x01) & 0x01); 041 } 042 } 043 044 /** 045 * DES Keys use the LSB as the odd parity bit. This method checks 046 * whether the parity is adjusted or not 047 * 048 * @param bytes the byte[] to be checked 049 * @return true if parity is adjusted else returns false 050 */ 051 public static boolean isDESParityAdjusted (byte[] bytes) { 052 byte[] correct = bytes.clone(); 053 adjustDESParity(correct); 054 return Arrays.equals(bytes, correct); 055 } 056} 057 058 059