/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.rs.security.jose.jws; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.cxf.rs.security.jose.common.JoseConstants; import org.apache.cxf.rs.security.jose.common.JoseHeaders; import org.apache.cxf.rs.security.jose.common.JoseType; import org.apache.cxf.rs.security.jose.jwa.SignatureAlgorithm; public class JwsHeaders extends JoseHeaders { private static final long serialVersionUID = 3422779299093961672L; public JwsHeaders() { } public JwsHeaders(JoseType type) { super(type); } public JwsHeaders(JwsHeaders headers) { super(headers.asMap()); } public JwsHeaders(Map<String, Object> values) { super(values); } public JwsHeaders(String kid) { this(Collections.singletonMap(JoseConstants.HEADER_KEY_ID, (Object)kid)); } public JwsHeaders(SignatureAlgorithm sigAlgo) { init(sigAlgo); } public JwsHeaders(Properties sigProps) { init(getSignatureAlgorithm(sigProps)); } public JwsHeaders(JoseType type, SignatureAlgorithm sigAlgo) { super(type); init(sigAlgo); } private void init(SignatureAlgorithm sigAlgo) { setSignatureAlgorithm(sigAlgo); } public final void setSignatureAlgorithm(SignatureAlgorithm algo) { super.setAlgorithm(algo.getJwaName()); } public SignatureAlgorithm getSignatureAlgorithm() { String algo = super.getAlgorithm(); return algo == null ? null : SignatureAlgorithm.getAlgorithm(algo); } public void setPayloadEncodingStatus(Boolean status) { super.setProperty(JoseConstants.JWS_HEADER_B64_STATUS_HEADER, status); if (!status) { List<String> critical = this.getCritical(); if (critical == null) { critical = new LinkedList<String>(); setCritical(critical); } else if (critical.contains(JoseConstants.JWS_HEADER_B64_STATUS_HEADER)) { return; } critical.add(JoseConstants.JWS_HEADER_B64_STATUS_HEADER); } } public Boolean getPayloadEncodingStatus() { return super.getBooleanProperty(JoseConstants.JWS_HEADER_B64_STATUS_HEADER); } private static SignatureAlgorithm getSignatureAlgorithm(Properties sigProps) { return JwsUtils.getSignatureAlgorithm(sigProps, null); } }