1 /* 2 * The contents of this file are subject to the terms of the Common Development and 3 * Distribution License (the License). You may not use this file except in compliance with the 4 * License. 5 * 6 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 7 * specific language governing permission and limitations under the License. 8 * 9 * When distributing Covered Software, include this CDDL Header Notice in each file and include 10 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 11 * Header, with the fields enclosed by brackets [] replaced by your own identifying 12 * information: "Portions copyright [year] [name of copyright owner]". 13 * 14 * Copyright 2013-2015 ForgeRock AS. 15 */ 16 17 package org.forgerock.json.jose.jws; 18 19 /** 20 * An Enum for the JWS Header parameter names. 21 * <p> 22 * As described in the JWS specification, the reserved JWS header parameters are listed, 23 * <ul> 24 * <li>"jku"</li> 25 * <li>"jwk"</li> 26 * <li>"x5u"</li> 27 * <li>"x5t"</li> 28 * <li>"x5c"</li> 29 * <li>"kid"</li> 30 * <li>"cty"</li> 31 * <li>"crit"</li> 32 * </ul> 33 * Any other header parameter name is deemed as a "custom" header parameter. 34 * 35 * @since 2.0.0 36 */ 37 public enum JwsHeaderKey { 38 39 /** 40 * JWK Set URL header parameter. 41 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.2"> 42 * JWS Specification JWK Set URL Header Parameter</a> 43 */ 44 JKU, 45 /** 46 * JSON Web Key header parameter. 47 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.3"> 48 * JWS Specification JWK Web Key Header Parameter</a> 49 */ 50 JWK, 51 /** 52 * X.509 URL header parameter. 53 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.4"> 54 * JWS Specification X.509 URL Header Parameter</a> 55 */ 56 X5U, 57 /** 58 * X.509 Certificate Thumbprint header parameter. 59 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.5"> 60 * JWS Specification X.509 Certificate Thumbprint Header Parameter</a> 61 **/ 62 X5T, //Base64url 63 /** 64 * X.509 Certificate Chain header parameter. 65 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.6"> 66 * JWS Specification X.509 Certificate Chain Header Parameter</a> 67 */ 68 X5C, //List<Base64> 69 /** 70 * Key ID header parameter. 71 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.7"> 72 * JWS Specification Key ID Header Parameter</a> 73 */ 74 KID, 75 /** 76 * Content Type header parameter. 77 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.8"> 78 * JWS Specification Content Type Header Parameter</a> 79 */ 80 CTY, 81 /** 82 * Critical header parameter. 83 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.1.10"> 84 * JWS Specification Critical Header Parameter</a> 85 */ 86 CRIT, 87 /** 88 * Generic header key for a custom header parameter. 89 * @see <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11#section-4.3"> 90 * Private Header Parameter Names</a> 91 */ 92 CUSTOM; 93 94 /** 95 * Returns a lowercase String of the JwsHeaderKey constant. 96 * 97 * @return Lowercase String representation of the constant. 98 * @see #toString() 99 */ 100 public String value() { 101 return toString(); 102 } 103 104 /** 105 * Gets the JwsHeaderKey constant that matches the given String. 106 * <p> 107 * If the given String does not match any of the constants, then CUSTOM is returned. 108 * 109 * @param headerKey The String representation of a JwsHeaderKey. 110 * @return The matching JwsHeaderKey. 111 */ 112 public static JwsHeaderKey getHeaderKey(String headerKey) { 113 try { 114 return JwsHeaderKey.valueOf(headerKey); 115 } catch (IllegalArgumentException e) { 116 return CUSTOM; 117 } 118 } 119 120 /** 121 * Turns the JwsHeaderKey constant into a lowercase String. 122 * 123 * @return {@inheritDoc} 124 */ 125 @Override 126 public String toString() { 127 return super.toString().toLowerCase(); 128 } 129 }