Repository: cxf Updated Branches: refs/heads/master 0985e79ab -> 45eb8f254
[CXF-6641] Making sure EcdhAesWrapKeyEncryptionAlgorithm can get ContentAlgorithm property configurable when loaded by JWE writers Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/45eb8f25 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/45eb8f25 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/45eb8f25 Branch: refs/heads/master Commit: 45eb8f254447bb6b8df83ec0d2c4ea889abf6259 Parents: 0985e79 Author: Sergey Beryozkin <[email protected]> Authored: Wed Oct 28 12:01:07 2015 +0000 Committer: Sergey Beryozkin <[email protected]> Committed: Wed Oct 28 12:01:07 2015 +0000 ---------------------------------------------------------------------- .../cxf/rs/security/jose/jwe/JweUtils.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/45eb8f25/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwe/JweUtils.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwe/JweUtils.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwe/JweUtils.java index e936359..211c076 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwe/JweUtils.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwe/JweUtils.java @@ -137,9 +137,15 @@ public final class JweUtils { keyEncryptionProvider = getSecretKeyEncryptionAlgorithm(JwkUtils.toSecretKey(jwk), keyAlgo); } else { + ContentAlgorithm ctAlgo = null; + Message m = PhaseInterceptorChain.getCurrentMessage(); + if (m != null) { + ctAlgo = getContentAlgo((String)m.get(JoseConstants.RSSEC_ENCRYPTION_CONTENT_ALGORITHM)); + } keyEncryptionProvider = new EcdhAesWrapKeyEncryptionAlgorithm(JwkUtils.toECPublicKey(jwk), jwk.getStringProperty(JsonWebKey.EC_CURVE), - keyAlgo); + keyAlgo, + ctAlgo == null ? ContentAlgorithm.A128GCM : ctAlgo); } return keyEncryptionProvider; } @@ -147,7 +153,15 @@ public final class JweUtils { if (key instanceof RSAPublicKey) { return new RSAKeyEncryptionAlgorithm((RSAPublicKey)key, algo); } else if (key instanceof ECPublicKey) { - return new EcdhAesWrapKeyEncryptionAlgorithm((ECPublicKey)key, algo); + ContentAlgorithm ctAlgo = null; + Message m = PhaseInterceptorChain.getCurrentMessage(); + if (m != null) { + ctAlgo = getContentAlgo((String)m.get(JoseConstants.RSSEC_ENCRYPTION_CONTENT_ALGORITHM)); + } + return new EcdhAesWrapKeyEncryptionAlgorithm((ECPublicKey)key, + JsonWebKey.EC_CURVE_P256, + algo, + ctAlgo == null ? ContentAlgorithm.A128GCM : ctAlgo); } return null; @@ -291,6 +305,7 @@ public final class JweUtils { String keyEncryptionAlgo = getKeyEncryptionAlgo(m, props, null, null); KeyAlgorithm keyAlgo = KeyAlgorithm.getAlgorithm(keyEncryptionAlgo); String contentEncryptionAlgo = getContentEncryptionAlgo(m, props, null); + m.put(JoseConstants.RSSEC_ENCRYPTION_CONTENT_ALGORITHM, contentEncryptionAlgo); ContentEncryptionProvider ctEncryptionProvider = null; if (JoseConstants.HEADER_JSON_WEB_KEY.equals(props.get(JoseConstants.RSSEC_KEY_STORE_TYPE))) { JsonWebKey jwk = JwkUtils.loadJsonWebKey(m, props, KeyOperation.ENCRYPT);
