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}