<!--
  ~  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.
  -->

<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
  <wsp:All>
	<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
	  <wsp:Policy>
		<sp:TransportToken>
		  <wsp:Policy>
			<sp:HttpsToken RequireClientCertificate="false"/>
		  </wsp:Policy>
		</sp:TransportToken>
		<sp:AlgorithmSuite>
		  <wsp:Policy>
			<sp:Basic256/>
		  </wsp:Policy>
		</sp:AlgorithmSuite>
		<sp:Layout>
		  <wsp:Policy>
			<sp:Lax/>
		  </wsp:Policy>
		</sp:Layout>
		<sp:IncludeTimestamp/>
	  </wsp:Policy>
	</sp:TransportBinding>
	<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
		<wsp:Policy>
			<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
	  </wsp:Policy>
	</sp:SignedSupportingTokens>
	
	<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
		<ramp:user>alice</ramp:user>
		<ramp:encryptionUser>bob</ramp:encryptionUser>
		<ramp:passwordCallbackClass>samples.userguide.PWCallback</ramp:passwordCallbackClass>
		
		<ramp:signatureCrypto>
			<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
				<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
				<ramp:property name="org.apache.ws.security.crypto.merlin.file">../../repository/conf/sample/resources/security/store.jks</ramp:property>
				<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
			</ramp:crypto>
		</ramp:signatureCrypto>
		<ramp:encryptionCypto>
			<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
				<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
				<ramp:property name="org.apache.ws.security.crypto.merlin.file">../../repository/conf/sample/resources/security/store.jks</ramp:property>
				<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
			</ramp:crypto>
		</ramp:encryptionCypto>
	</ramp:RampartConfig>
  </wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
