001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.util.asn1.x509;
019
020 import org.apache.geronimo.util.asn1.DERBitString;
021
022 /**
023 * The KeyUsage object.
024 * <pre>
025 * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
026 *
027 * KeyUsage ::= BIT STRING {
028 * digitalSignature (0),
029 * nonRepudiation (1),
030 * keyEncipherment (2),
031 * dataEncipherment (3),
032 * keyAgreement (4),
033 * keyCertSign (5),
034 * cRLSign (6),
035 * encipherOnly (7),
036 * decipherOnly (8) }
037 * </pre>
038 */
039 public class KeyUsage
040 extends DERBitString
041 {
042 public static final int digitalSignature = (1 << 7);
043 public static final int nonRepudiation = (1 << 6);
044 public static final int keyEncipherment = (1 << 5);
045 public static final int dataEncipherment = (1 << 4);
046 public static final int keyAgreement = (1 << 3);
047 public static final int keyCertSign = (1 << 2);
048 public static final int cRLSign = (1 << 1);
049 public static final int encipherOnly = (1 << 0);
050 public static final int decipherOnly = (1 << 15);
051
052 /**
053 * Basic constructor.
054 *
055 * @param usage - the bitwise OR of the Key Usage flags giving the
056 * allowed uses for the key.
057 * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment)
058 */
059 public KeyUsage(
060 int usage)
061 {
062 super(getBytes(usage), getPadBits(usage));
063 }
064
065 public KeyUsage(
066 DERBitString usage)
067 {
068 super(usage.getBytes(), usage.getPadBits());
069 }
070
071 public String toString()
072 {
073 if (data.length == 1)
074 {
075 return "KeyUsage: 0x" + Integer.toHexString(data[0] & 0xff);
076 }
077 return "KeyUsage: 0x" + Integer.toHexString((data[1] & 0xff) << 8 | (data[0] & 0xff));
078 }
079 }