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-2015 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 */
031public class JweHeaderBuilder extends JwtSecureHeaderBuilder<EncryptedJwtBuilder, JweHeaderBuilder> {
032
033    /**
034     * Constructs a new JweHeaderBuilder, parented by the given JwtBuilder.
035     *
036     * @param jwtBuilder The JwtBuilder instance that this JweHeaderBuilder is a child of.
037     */
038    public JweHeaderBuilder(EncryptedJwtBuilder jwtBuilder) {
039        super(jwtBuilder);
040    }
041
042    /**
043     * Sets the Encryption Method header parameter for this JWE.
044     * <p>
045     * @see org.forgerock.json.jose.jwe.JweHeader#setEncryptionMethod(org.forgerock.json.jose.jwe.EncryptionMethod)
046     *
047     * @param enc The Encryption Method.
048     * @return This JweHeaderBuilder.
049     */
050    public JweHeaderBuilder enc(EncryptionMethod enc) {
051        header("enc", enc.toString());
052        return this;
053    }
054
055    /**
056     * Sets the Ephemeral Public Key header parameter for this JWE.
057     * <p>
058     * @see org.forgerock.json.jose.jwe.JweHeader#setEphemeralPublicKey(org.forgerock.json.jose.jwk.JWK)
059     *
060     * @param epk The Ephemeral Public Key.
061     * @return This JweHeaderBuilder.
062     */
063    public JweHeaderBuilder epk(String epk) {
064        header("epk", epk);
065        return this;
066    }
067
068    /**
069     * Sets the Compression Algorithm header parameter for this JWE.
070     * <p>
071     * @see org.forgerock.json.jose.jwe.JweHeader#setCompressionAlgorithm(
072     * org.forgerock.json.jose.jwe.CompressionAlgorithm)
073     *
074     * @param zip The Compression Algorithm.
075     * @return This JweHeaderBuilder.
076     */
077    public JweHeaderBuilder zip(CompressionAlgorithm zip) {
078        header("zip", zip.toString());
079        return this;
080    }
081
082    /**
083     * Sets the Agreement PartyUInfo header parameter for this JWE.
084     * <p>
085     * @see org.forgerock.json.jose.jwe.JweHeader#setAgreementPartyUInfo(String)
086     *
087     * @param apu The Agreement PartyUInfo.
088     * @return This JweHeaderBuilder.
089     */
090    public JweHeaderBuilder apu(String apu) {
091        header("apu", apu);
092        return this;
093    }
094
095    /**
096     * Creates a JweHeader instance from the header parameters set in this builder.
097     *
098     * @return A JweHeader instance.
099     */
100    @Override
101    protected JwtHeader build() {
102        return new JweHeader(getHeaders());
103    }
104}