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-2016 ForgeRock AS. 15 */ 16 17 package org.forgerock.json.jose.builders; 18 19 import org.forgerock.json.jose.jwe.CompressionAlgorithm; 20 import org.forgerock.json.jose.jwe.EncryptionMethod; 21 import org.forgerock.json.jose.jwe.JweHeader; 22 import org.forgerock.json.jose.jwt.JwtHeader; 23 24 /** 25 * An implementation of a JWE Header builder that provides a fluent builder pattern to create JWE headers. 26 * <p> 27 * See {@link JweHeader} for information on the JweHeader object that this builder creates. 28 * 29 * @since 2.0.0 30 * @param <B> the concrete JWT builder type that headers are being built for. 31 */ 32 public class JweHeaderBuilder<B extends EncryptedJwtBuilder> extends JwtSecureHeaderBuilder<B, JweHeaderBuilder<B>> { 33 34 /** 35 * Constructs a new JweHeaderBuilder, parented by the given JwtBuilder. 36 * 37 * @param jwtBuilder The JwtBuilder instance that this JweHeaderBuilder is a child of. 38 */ 39 public JweHeaderBuilder(B jwtBuilder) { 40 super(jwtBuilder); 41 } 42 43 /** 44 * Sets the Encryption Method header parameter for this JWE. 45 * <p> 46 * @see org.forgerock.json.jose.jwe.JweHeader#setEncryptionMethod(org.forgerock.json.jose.jwe.EncryptionMethod) 47 * 48 * @param enc The Encryption Method. 49 * @return This JweHeaderBuilder. 50 */ 51 public JweHeaderBuilder<B> enc(EncryptionMethod enc) { 52 header("enc", enc.toString()); 53 return this; 54 } 55 56 /** 57 * Sets the Ephemeral Public Key header parameter for this JWE. 58 * <p> 59 * @see org.forgerock.json.jose.jwe.JweHeader#setEphemeralPublicKey(org.forgerock.json.jose.jwk.JWK) 60 * 61 * @param epk The Ephemeral Public Key. 62 * @return This JweHeaderBuilder. 63 */ 64 public JweHeaderBuilder<B> epk(String epk) { 65 header("epk", epk); 66 return this; 67 } 68 69 // Overridden purely to preserve type compatibility with older version 70 @Override 71 public JweHeaderBuilder<B> zip(CompressionAlgorithm zip) { 72 return super.zip(zip); 73 } 74 75 /** 76 * Sets the Agreement PartyUInfo header parameter for this JWE. 77 * <p> 78 * @see org.forgerock.json.jose.jwe.JweHeader#setAgreementPartyUInfo(String) 79 * 80 * @param apu The Agreement PartyUInfo. 81 * @return This JweHeaderBuilder. 82 */ 83 public JweHeaderBuilder<B> apu(String apu) { 84 header("apu", apu); 85 return this; 86 } 87 88 /** 89 * Creates a JweHeader instance from the header parameters set in this builder. 90 * 91 * @return A JweHeader instance. 92 */ 93 @Override 94 protected JwtHeader build() { 95 return new JweHeader(getHeaders()); 96 } 97 }