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 }