001/* 002 * The contents of this file are subject to the terms of the Common Development and 003 * Distribution License (the License). You may not use this file except in compliance with the 004 * License. 005 * 006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 007 * specific language governing permission and limitations under the License. 008 * 009 * When distributing Covered Software, include this CDDL Header Notice in each file and include 010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 011 * Header, with the fields enclosed by brackets [] replaced by your own identifying 012 * information: "Portions copyright [year] [name of copyright owner]". 013 * 014 * Copyright 2013-2016 ForgeRock AS. 015 */ 016 017package org.forgerock.json.jose.builders; 018 019import org.forgerock.json.jose.jwe.CompressionAlgorithm; 020import org.forgerock.json.jose.jwe.EncryptionMethod; 021import org.forgerock.json.jose.jwe.JweHeader; 022import org.forgerock.json.jose.jwt.JwtHeader; 023 024/** 025 * An implementation of a JWE Header builder that provides a fluent builder pattern to create JWE headers. 026 * <p> 027 * See {@link JweHeader} for information on the JweHeader object that this builder creates. 028 * 029 * @since 2.0.0 030 * @param <B> the concrete JWT builder type that headers are being built for. 031 */ 032public class JweHeaderBuilder<B extends EncryptedJwtBuilder> extends JwtSecureHeaderBuilder<B, JweHeaderBuilder<B>> { 033 034 /** 035 * Constructs a new JweHeaderBuilder, parented by the given JwtBuilder. 036 * 037 * @param jwtBuilder The JwtBuilder instance that this JweHeaderBuilder is a child of. 038 */ 039 public JweHeaderBuilder(B jwtBuilder) { 040 super(jwtBuilder); 041 } 042 043 /** 044 * Sets the Encryption Method header parameter for this JWE. 045 * <p> 046 * @see org.forgerock.json.jose.jwe.JweHeader#setEncryptionMethod(org.forgerock.json.jose.jwe.EncryptionMethod) 047 * 048 * @param enc The Encryption Method. 049 * @return This JweHeaderBuilder. 050 */ 051 public JweHeaderBuilder<B> enc(EncryptionMethod enc) { 052 header("enc", enc.toString()); 053 return this; 054 } 055 056 /** 057 * Sets the Ephemeral Public Key header parameter for this JWE. 058 * <p> 059 * @see org.forgerock.json.jose.jwe.JweHeader#setEphemeralPublicKey(org.forgerock.json.jose.jwk.JWK) 060 * 061 * @param epk The Ephemeral Public Key. 062 * @return This JweHeaderBuilder. 063 */ 064 public JweHeaderBuilder<B> epk(String epk) { 065 header("epk", epk); 066 return this; 067 } 068 069 // Overridden purely to preserve type compatibility with older version 070 @Override 071 public JweHeaderBuilder<B> zip(CompressionAlgorithm zip) { 072 return super.zip(zip); 073 } 074 075 /** 076 * Sets the Agreement PartyUInfo header parameter for this JWE. 077 * <p> 078 * @see org.forgerock.json.jose.jwe.JweHeader#setAgreementPartyUInfo(String) 079 * 080 * @param apu The Agreement PartyUInfo. 081 * @return This JweHeaderBuilder. 082 */ 083 public JweHeaderBuilder<B> apu(String apu) { 084 header("apu", apu); 085 return this; 086 } 087 088 /** 089 * Creates a JweHeader instance from the header parameters set in this builder. 090 * 091 * @return A JweHeader instance. 092 */ 093 @Override 094 protected JwtHeader build() { 095 return new JweHeader(getHeaders()); 096 } 097}