001 /* 002 * $HeadURL: http://juliusdavies.ca/svn/not-yet-commons-ssl/tags/commons-ssl-0.3.11/src/java/org/apache/commons/ssl/PEMItem.java $ 003 * $Revision: 121 $ 004 * $Date: 2007-11-13 21:26:57 -0800 (Tue, 13 Nov 2007) $ 005 * 006 * ==================================================================== 007 * Licensed to the Apache Software Foundation (ASF) under one 008 * or more contributor license agreements. See the NOTICE file 009 * distributed with this work for additional information 010 * regarding copyright ownership. The ASF licenses this file 011 * to you under the Apache License, Version 2.0 (the 012 * "License"); you may not use this file except in compliance 013 * with the License. You may obtain a copy of the License at 014 * 015 * http://www.apache.org/licenses/LICENSE-2.0 016 * 017 * Unless required by applicable law or agreed to in writing, 018 * software distributed under the License is distributed on an 019 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 020 * KIND, either express or implied. See the License for the 021 * specific language governing permissions and limitations 022 * under the License. 023 * ==================================================================== 024 * 025 * This software consists of voluntary contributions made by many 026 * individuals on behalf of the Apache Software Foundation. For more 027 * information on the Apache Software Foundation, please see 028 * <http://www.apache.org/>. 029 * 030 */ 031 032 package org.apache.commons.ssl; 033 034 import org.apache.commons.ssl.util.Hex; 035 036 import java.util.Collections; 037 import java.util.Map; 038 import java.util.StringTokenizer; 039 import java.util.TreeMap; 040 041 /** 042 * @author Credit Union Central of British Columbia 043 * @author <a href="http://www.cucbc.com/">www.cucbc.com</a> 044 * @author <a href="mailto:juliusdavies@cucbc.com">juliusdavies@cucbc.com</a> 045 * @since 13-Aug-2006 046 */ 047 public class PEMItem { 048 public final static String DEK_INFO = "dek-info"; 049 050 private final byte[] derBytes; 051 public final String pemType; 052 public final Map properties; 053 054 public final String dekInfo; 055 public final byte[] iv; 056 public final String cipher; 057 public final boolean des2; 058 public final String mode; 059 public final int keySizeInBits; 060 061 public PEMItem(byte[] derBytes, String type) { 062 this(derBytes, type, null); 063 } 064 065 public PEMItem(byte[] derBytes, String type, Map properties) { 066 this.derBytes = derBytes; 067 this.pemType = type; 068 if (properties == null) { 069 properties = new TreeMap(); // empty map 070 } 071 this.properties = Collections.unmodifiableMap(properties); 072 String di = (String) properties.get(DEK_INFO); 073 String diCipher = ""; 074 String diIV = ""; 075 if (di != null) { 076 StringTokenizer st = new StringTokenizer(di, ","); 077 if (st.hasMoreTokens()) { 078 diCipher = st.nextToken().trim().toLowerCase(); 079 } 080 if (st.hasMoreTokens()) { 081 diIV = st.nextToken().trim().toLowerCase(); 082 } 083 } 084 this.dekInfo = diCipher; 085 this.iv = Hex.decode(diIV); 086 if (!"".equals(diCipher)) { 087 OpenSSL.CipherInfo cipherInfo = OpenSSL.lookup(diCipher); 088 this.cipher = cipherInfo.javaCipher; 089 this.mode = cipherInfo.blockMode; 090 this.keySizeInBits = cipherInfo.keySize; 091 this.des2 = cipherInfo.des2; 092 } else { 093 this.mode = ""; 094 cipher = "UNKNOWN"; 095 keySizeInBits = -1; 096 des2 = false; 097 } 098 } 099 100 public byte[] getDerBytes() { 101 byte[] b = new byte[derBytes.length]; 102 System.arraycopy(derBytes, 0, b, 0, derBytes.length); 103 return b; 104 } 105 106 }