1/* 2 * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package org.ietf.jgss; 27 28/** 29 * This is a utility class used within the per-message GSSContext 30 * methods to convey per-message properties.<p> 31 * 32 * When used with the GSSContext interface's wrap and getMIC methods, an 33 * instance of this class is used to indicate the desired 34 * Quality-of-Protection (QOP) and to request if confidentiality services 35 * are to be applied to caller supplied data (wrap only). To request 36 * default QOP, the value of 0 should be used for QOP.<p> 37 * 38 * When used with the unwrap and verifyMIC methods of the GSSContext 39 * interface, an instance of this class will be used to indicate the 40 * applied QOP and confidentiality services over the supplied message. 41 * In the case of verifyMIC, the confidentiality state will always be 42 * <code>false</code>. Upon return from these methods, this object will also 43 * contain any supplementary status values applicable to the processed 44 * token. The supplementary status values can indicate old tokens, out 45 * of sequence tokens, gap tokens or duplicate tokens. 46 * 47 * @see GSSContext#wrap 48 * @see GSSContext#unwrap 49 * @see GSSContext#getMIC 50 * @see GSSContext#verifyMIC 51 * 52 * @author Mayank Upadhyay 53 * @since 1.4 54 */ 55public class MessageProp { 56 57 private boolean privacyState; 58 private int qop; 59 private boolean dupToken; 60 private boolean oldToken; 61 private boolean unseqToken; 62 private boolean gapToken; 63 private int minorStatus; 64 private String minorString; 65 66 /** 67 * Constructor which sets the desired privacy state. The QOP value used 68 * is 0. 69 * 70 * @param privState the privacy (i.e. confidentiality) state 71 */ 72 public MessageProp(boolean privState) { 73 this(0, privState); 74 } 75 76 /** 77 * Constructor which sets the values for the qop and privacy state. 78 * 79 * @param qop the QOP value 80 * @param privState the privacy (i.e. confidentiality) state 81 */ 82 public MessageProp(int qop, boolean privState) { 83 this.qop = qop; 84 this.privacyState = privState; 85 resetStatusValues(); 86 } 87 88 /** 89 * Retrieves the QOP value. 90 * 91 * @return an int representing the QOP value 92 * @see #setQOP 93 */ 94 public int getQOP() { 95 return qop; 96 } 97 98 /** 99 * Retrieves the privacy state. 100 * 101 * @return true if the privacy (i.e., confidentiality) state is true, 102 * false otherwise. 103 * @see #setPrivacy 104 */ 105 public boolean getPrivacy() { 106 107 return (privacyState); 108 } 109 110 /** 111 * Sets the QOP value. 112 * 113 * @param qop the int value to set the QOP to 114 * @see #getQOP 115 */ 116 public void setQOP(int qop) { 117 this.qop = qop; 118 } 119 120 121 /** 122 * Sets the privacy state. 123 * 124 * @param privState true is the privacy (i.e., confidentiality) state 125 * is true, false otherwise. 126 * @see #getPrivacy 127 */ 128 public void setPrivacy(boolean privState) { 129 130 this.privacyState = privState; 131 } 132 133 134 /** 135 * Tests if this is a duplicate of an earlier token. 136 * 137 * @return true if this is a duplicate, false otherwise. 138 */ 139 public boolean isDuplicateToken() { 140 return dupToken; 141 } 142 143 /** 144 * Tests if this token's validity period has expired, i.e., the token 145 * is too old to be checked for duplication. 146 * 147 * @return true if the token's validity period has expired, false 148 * otherwise. 149 */ 150 public boolean isOldToken() { 151 return oldToken; 152 } 153 154 /** 155 * Tests if a later token had already been processed. 156 * 157 * @return true if a later token had already been processed, false otherwise. 158 */ 159 public boolean isUnseqToken() { 160 return unseqToken; 161 } 162 163 /** 164 * Tests if an expected token was not received, i.e., one or more 165 * predecessor tokens have not yet been successfully processed. 166 * 167 * @return true if an expected per-message token was not received, 168 * false otherwise. 169 */ 170 public boolean isGapToken() { 171 return gapToken; 172 } 173 174 /** 175 * Retrieves the minor status code that the underlying mechanism might 176 * have set for this per-message operation. 177 * 178 * @return the int minor status 179 */ 180 public int getMinorStatus(){ 181 return minorStatus; 182 } 183 184 /** 185 * Retrieves a string explaining the minor status code. 186 * 187 * @return a String corresponding to the minor status 188 * code. <code>null</code> will be returned when no minor status code 189 * has been set. 190 */ 191 public String getMinorString(){ 192 return minorString; 193 } 194 195 /** 196 * This method sets the state for the supplementary information flags 197 * and the minor status in MessageProp. It is not used by the 198 * application but by the GSS implementation to return this information 199 * to the caller of a per-message context method. 200 * 201 * @param duplicate true if the token was a duplicate of an earlier 202 * token, false otherwise 203 * @param old true if the token's validity period has expired, false 204 * otherwise 205 * @param unseq true if a later token has already been processed, false 206 * otherwise 207 * @param gap true if one or more predecessor tokens have not yet been 208 * successfully processed, false otherwise 209 * @param minorStatus the int minor status code for the per-message 210 * operation 211 * @param minorString the textual representation of the minorStatus value 212 */ 213 public void setSupplementaryStates(boolean duplicate, 214 boolean old, boolean unseq, boolean gap, 215 int minorStatus, String minorString) { 216 this.dupToken = duplicate; 217 this.oldToken = old; 218 this.unseqToken = unseq; 219 this.gapToken = gap; 220 this.minorStatus = minorStatus; 221 this.minorString = minorString; 222 } 223 224 /** 225 * Resets the supplementary status values to false. 226 */ 227 private void resetStatusValues() { 228 dupToken = false; 229 oldToken = false; 230 unseqToken = false; 231 gapToken = false; 232 minorStatus = 0; 233 minorString = null; 234 } 235} 236