code: /**
   * 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.ws.security.policy;
  
  import javax.xml.namespace.QName;
  
  public abstract class SPConstants {
      
      public static final String P_NS = "http://www.w3.org/ns/ws-policy";
  
      public static final String P_PREFIX = "wsp";
  
      public static final QName POLICY = new QName(P_NS, "Policy", P_PREFIX);
      
      
      public enum Version {
          SP_V11,
          SP_V12
      };
  
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      
      public static final String LAYOUT = "Layout";
  
      public enum Layout {
          Lax,
          Strict,
          LaxTimestampFirst,
          LaxTimestampLast
      };
  
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
  
      
      public enum ProtectionOrder {
          EncryptBeforeSigning,
          SignBeforeEncrypting
      };
      /**
       * Protection Order : EncryptBeforeSigning
       */
      public static final String ENCRYPT_BEFORE_SIGNING = "EncryptBeforeSigning";
      /**
       * Protection Order : SignBeforeEncrypting
       */
      public static final String SIGN_BEFORE_ENCRYPTING = "SignBeforeEncrypting";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String ENCRYPT_SIGNATURE = "EncryptSignature";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String PROTECT_TOKENS = "ProtectTokens";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
  
      public static final String ONLY_SIGN_ENTIRE_HEADERS_AND_BODY = "OnlySignEntireHeadersAndBody";
       
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String INCLUDE_TIMESTAMP = "IncludeTimestamp";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String SIGNED_PARTS = "SignedParts";
      
      public static final String ENCRYPTED_PARTS = "EncryptedParts";
      
      public static final String SIGNED_ELEMENTS = "SignedElements";
      
      public static final String ENCRYPTED_ELEMENTS = "EncryptedElements";
      
      public static final String REQUIRED_ELEMENTS = "RequiredElements";
      
      public static final String CONTENT_ENCRYPTED_ELEMENTS = "ContentEncryptedElements";
      
      public static final String REQUIRED_PARTS = "RequiredParts";
      
      public static final String XPATH_VERSION = "XPathVersion";
      
      public static final String XPATH_EXPR = "XPath";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      // X509 Token types 
      
      public static final String X509_TOKEN = "X509Token";
  
      public static final String WSS_X509_V1_TOKEN10 = "WssX509V1Token10";
  
      public static final String WSS_X509_V3_TOKEN10 = "WssX509V3Token10";
  
      public static final String WSS_X509_PKCS7_TOKEN10 = "WssX509Pkcs7Token10";
  
      public static final String WSS_X509_PKI_PATH_V1_TOKEN10 = "WssX509PkiPathV1Token10";
  
      public static final String WSS_X509_V1_TOKEN11 = "WssX509V1Token11";
  
      public static final String WSS_X509_V3_TOKEN11 = "WssX509V3Token11";
  
      public static final String WSS_X509_PKCS7_TOKEN11 = "WssX509Pkcs7Token11";
  
      public static final String WSS_X509_PKI_PATH_V1_TOKEN11 = "WssX509PkiPathV1Token11";
      
      public static final String USERNAME_TOKEN = "UsernameToken";
      
      public static final String SAML_TOKEN = "SamlToken";
      
      public static final String KERBEROS_TOKEN = "KerberosToken";
      
      public static final String SPNEGO_CONTEXT_TOKEN = "SpnegoContextToken";
  
      public static final String KEYVALUE_TOKEN = "KeyValueToken";
      
      public static final String USERNAME_TOKEN10 = "WssUsernameToken10";
      
      public static final String USERNAME_TOKEN11 = "WssUsernameToken11";
      
      public static final String SAML_11_TOKEN_10 = "WssSamlV11Token10";
      
      public static final String SAML_11_TOKEN_11 = "WssSamlV11Token11";
      
      public static final String SAML_20_TOKEN_11 = "WssSamlV20Token11";
      
      public static final String KERBEROS_V5_AP_REQ_TOKEN_11 = "WssKerberosV5ApReqToken11";
      
      public static final String KERBEROS_GSS_V5_AP_REQ_TOKEN_11 = "WssGssKerberosV5ApReqToken11";
      
      public static final String TRANSPORT_TOKEN = "TransportToken";
      
      public static final String HTTPS_TOKEN = "HttpsToken";
      
      public static final QName REQUIRE_CLIENT_CERTIFICATE = new QName("RequireClientCertificate");
      
      public static final QName HTTP_BASIC_AUTHENTICATION = new QName("HttpBasicAuthentication");
      
      public static final QName HTTP_DIGEST_AUTHENTICATION = new QName("HttpDigestAuthentication");
      
      public static final String SECURITY_CONTEXT_TOKEN = "SecurityContextToken";
      
      public static final String SECURE_CONVERSATION_TOKEN = "SecureConversationToken";
      
      public static final String ISSUED_TOKEN = "IssuedToken";
      
  
      public static final String SIGNATURE_TOKEN = "SignatureToken";
      
      public static final String ENCRYPTION_TOKEN = "EncryptionToken";
      
      public static final String PROTECTION_TOKEN = "ProtectionToken";
      
      public static final String INITIATOR_TOKEN = "InitiatorToken";
      
      public static final String INITIATOR_SIGNATURE_TOKEN = "InitiatorSignatureToken";
      
      public static final String INITIATOR_ENCRYPTION_TOKEN = "InitiatorEncryptionToken";
      
      public static final String RECIPIENT_TOKEN = "RecipientToken";
      
      public static final String RECIPIENT_SIGNATURE_TOKEN = "RecipientSignatureToken";
      
      public static final String RECIPIENT_ENCRYPTION_TOKEN = "RecipientEncryptionToken";
      
      public static final String SUPPORTING_TOKENS = "SupportingTokens";
      
      public static final String SIGNED_SUPPORTING_TOKENS = "SignedSupportingTokens";
      
      public static final String ENDORSING_SUPPORTING_TOKENS = "EndorsingSupportingTokens";
      
      public static final String SIGNED_ENDORSING_SUPPORTING_TOKENS = "SignedEndorsingSupportingTokens";
      
      public static final String ENCRYPTED_SUPPORTING_TOKENS = "EncryptedSupportingTokens";
      
      public static final String SIGNED_ENCRYPTED_SUPPORTING_TOKENS = "SignedEncryptedSupportingTokens";
      
      public static final String ENDORSING_ENCRYPTED_SUPPORTING_TOKENS = "EndorsingEncryptedSupportingTokens";
      
      public static final String SIGNED_ENDORSING_ENCRYPTED_SUPPORTING_TOKENS 
          = "SignedEndorsingEncryptedSupportingTokens";   
      
      
      public enum SupportTokenType {
          SUPPORTING_TOKEN_SUPPORTING,
          SUPPORTING_TOKEN_ENDORSING,
          SUPPORTING_TOKEN_SIGNED,
          SUPPORTING_TOKEN_SIGNED_ENDORSING,
          SUPPORTING_TOKEN_SIGNED_ENCRYPTED,
          SUPPORTING_TOKEN_ENCRYPTED,
          SUPPORTING_TOKEN_ENDORSING_ENCRYPTED,
          SUPPORTING_TOKEN_SIGNED_ENDORSING_ENCRYPTED
      }
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
  
      
      public static final String ALGO_SUITE = "AlgorithmSuite";
      
      
      // /
      // /Algorithm Suites
      // /
      public static final String ALGO_SUITE_BASIC256 = "Basic256";
  
      public static final String ALGO_SUITE_BASIC192 = "Basic192";
  
      public static final String ALGO_SUITE_BASIC128 = "Basic128";
  
      public static final String ALGO_SUITE_TRIPLE_DES = "TripleDes";
  
      public static final String ALGO_SUITE_BASIC256_RSA15 = "Basic256Rsa15";
  
      public static final String ALGO_SUITE_BASIC192_RSA15 = "Basic192Rsa15";
  
      public static final String ALGO_SUITE_BASIC128_RSA15 = "Basic128Rsa15";
  
      public static final String ALGO_SUITE_TRIPLE_DES_RSA15 = "TripleDesRsa15";
  
      public static final String ALGO_SUITE_BASIC256_SHA256 = "Basic256Sha256";
  
      public static final String ALGO_SUITE_BASIC192_SHA256 = "Basic192Sha256";
  
      public static final String ALGO_SUITE_BASIC128_SHA256 = "Basic128Sha256";
  
      public static final String ALGO_SUITE_TRIPLE_DES_SHA256 = "TripleDesSha256";
  
      public static final String ALGO_SUITE_BASIC256_SHA256_RSA15 = "Basic256Sha256Rsa15";
  
      public static final String ALGO_SUITE_BASIC192_SHA256_RSA15 = "Basic192Sha256Rsa15";
  
      public static final String ALGO_SUITE_BASIC128_SHA256_RSA15 = "Basic128Sha256Rsa15";
  
      public static final String ALGO_SUITE_TRIPLE_DES_SHA256_RSA15 = "TripleDesSha256Rsa15";
  
      // /
      // /Algorithms
      // /
      public static final String HMAC_SHA1 = "http://www.w3.org/2000/09/xmldsig#hmac-sha1";
  
      public static final String RSA_SHA1 = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
  
      public static final String SHA1 = "http://www.w3.org/2000/09/xmldsig#sha1";
  
      public static final String SHA256 = "http://www.w3.org/2001/04/xmlenc#sha256";
  
      public static final String SHA512 = "http://www.w3.org/2001/04/xmlenc#sha512";
  
      public static final String AES128 = "http://www.w3.org/2001/04/xmlenc#aes128-cbc";
  
      public static final String AES192 = "http://www.w3.org/2001/04/xmlenc#aes192-cbc";
  
      public static final String AES256 = "http://www.w3.org/2001/04/xmlenc#aes256-cbc";
  
      public static final String TRIPLE_DES = "http://www.w3.org/2001/04/xmlenc#tripledes-cbc";
  
      public static final String KW_AES128 = "http://www.w3.org/2001/04/xmlenc#kw-aes128";
  
      public static final String KW_AES192 = "http://www.w3.org/2001/04/xmlenc#kw-aes192";
  
      public static final String KW_AES256 = "http://www.w3.org/2001/04/xmlenc#kw-aes256";
  
      public static final String KW_TRIPLE_DES = "http://www.w3.org/2001/04/xmlenc#kw-tripledes";
  
      public static final String KW_RSA_OAEP = "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p";
  
      public static final String KW_RSA15 = "http://www.w3.org/2001/04/xmlenc#rsa-1_5";
  
      public static final String P_SHA1 = "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1";
  
      public static final String P_SHA1_L128 = "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1";
  
      public static final String P_SHA1_L192 = "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1";
  
      public static final String P_SHA1_L256 = "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1";
  
      public static final String XPATH = "http://www.w3.org/TR/1999/REC-xpath-19991116";
  
      public static final String XPATH20 = "http://www.w3.org/2002/06/xmldsig-filter2";
  
      public static final String C14N = "http://www.w3.org/2001/10/xml-c14n#";
  
      public static final String EX_C14N = "http://www.w3.org/2001/10/xml-exc-c14n#";
  
      public static final String SNT = "http://www.w3.org/TR/soap12-n11n";
  
      public static final String STRT10 
          = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform";
  
      // /////////////////////////////////////////////////////////////////////////////////////////////
  
      public static final String INCLUSIVE_C14N = "InclusiveC14N";
  
      public static final String SOAP_NORMALIZATION_10 = "SoapNormalization10";
  
      public static final String STR_TRANSFORM_10 = "STRTransform10";
  
      public static final String XPATH10 = "XPath10";
  
      public static final String XPATH_FILTER20 = "XPathFilter20";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String ATTR_INCLUDE_TOKEN = "IncludeToken";
      public static final String INCLUDE_TOKEN_NEVER_SUFFIX = "/IncludeToken/Never";
      public static final String INCLUDE_TOKEN_ONCE_SUFFIX = "/IncludeToken/Once";
      public static final String INCLUDE_TOKEN_ALWAYS_TO_RECIPIENT_SUFFIX = "/IncludeToken/AlwaysToRecipient";
      public static final String INCLUDE_TOKEN_ALWAYS_TO_INITIATOR_SUFFIX = "/IncludeToken/AlwaysToInitiator";
      public static final String INCLUDE_TOKEN_ALWAYS_SUFFIX = "/IncludeToken/Always";
      
      
      public enum IncludeTokenType {
          INCLUDE_TOKEN_NEVER,
          INCLUDE_TOKEN_ONCE,
          INCLUDE_TOKEN_ALWAYS_TO_RECIPIENT,
          INCLUDE_TOKEN_ALWAYS_TO_INITIATOR,
          INCLUDE_TOKEN_ALWAYS
      };
      
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String TRANSPORT_BINDING = "TransportBinding";
      public static final String ASYMMETRIC_BINDING = "AsymmetricBinding";
      public static final String SYMMETRIC_BINDING = "SymmetricBinding";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String REQUIRE_KEY_IDENTIFIER_REFERENCE = "RequireKeyIdentifierReference";
      public static final String REQUIRE_ISSUER_SERIAL_REFERENCE = "RequireIssuerSerialReference";
      public static final String REQUIRE_EMBEDDED_TOKEN_REFERENCE = "RequireEmbeddedTokenReference";
      public static final String REQUIRE_THUMBPRINT_REFERENCE = "RequireThumbprintReference";
      public static final String REQUIRE_SIGNATURE_CONFIRMATION = "RequireSignatureConfirmation";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String MUST_SUPPORT_REF_KEY_IDENTIFIER = "MustSupportRefKeyIdentifier";
      
      public static final String MUST_SUPPORT_REF_ISSUER_SERIAL = "MustSupportRefIssuerSerial";
      
      public static final String MUST_SUPPORT_REF_EXTERNAL_URI = "MustSupportRefExternalURI";
      
      public static final String MUST_SUPPORT_REF_EMBEDDED_TOKEN = "MustSupportRefEmbeddedToken";
      
      public static final String MUST_SUPPORT_REF_THUMBPRINT = "MustSupportRefThumbprint";
      
      public static final String MUST_SUPPORT_REF_ENCRYPTED_KEY = "MustSupportRefEncryptedKey";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String WSS10 = "Wss10";
      
      public static final String WSS11 = "Wss11";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String TRUST_10 = "Trust10";
      
      public static final String TRUST_13 = "Trust13";
      
      public static final String MUST_SUPPORT_CLIENT_CHALLENGE = "MustSupportClientChanllenge";
      
      public static final String MUST_SUPPORT_SERVER_CHALLENGE = "MustSupportServerChanllenge";
      
      public static final String REQUIRE_CLIENT_ENTROPY = "RequireClientEntropy";
      
      public static final String REQUIRE_SERVER_ENTROPY = "RequireServerEntropy";
      
      public static final String MUST_SUPPORT_ISSUED_TOKENS = "MustSupportIssuedTokens";
      
         
      public static final String REQUIRE_REQUEST_SECURITY_TOKEN_COLLECTION 
          = "RequireRequestSecurityTokenCollection";
      
      public static final String REQUIRE_APPLIES_TO = "RequireAppliesTo";
      
      public static final String ISSUER = "Issuer";
      
      public static final String ISSUER_NAME = "IssuerName";
      
      public static final String REQUIRE_DERIVED_KEYS = "RequireDerivedKeys";
      
      public static final String REQUIRE_IMPLIED_DERIVED_KEYS = "RequireImpliedDerivedKeys";
      
      public static final String REQUIRE_EXPLICIT_DERIVED_KEYS = "RequireExplicitDerivedKeys";
      
      public static final String REQUIRE_EXTERNAL_URI_REFERENCE = "RequireExternalUriReference";
      
      public static final String REQUIRE_EXTERNAL_REFERENCE = "RequireExternalReference";
      
      public static final String REQUIRE_INTERNAL_REFERENCE = "RequireInternalReference";
      
      public static final String REQUEST_SECURITY_TOKEN_TEMPLATE = "RequestSecurityTokenTemplate";
      
      public static final String SC10_SECURITY_CONTEXT_TOKEN = "SC10SecurityContextToken";
      
      public static final String SC13_SECURITY_CONTEXT_TOKEN = "SC13SecurityContextToken";
      
      public static final String BOOTSTRAP_POLICY = "BootstrapPolicy";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String HEADER = "Header";
      
      public static final String BODY = "Body";
      
      public static final String ATTACHMENTS = "Attachments";
      
      public static final String NAME = "Name";
      
      public static final String NAMESPACE = "Namespace";
      
      ////////////////////////////////////////////////////////////////////////////////////////////////
      
      public static final String NO_PASSWORD = "NoPassword";
      
      public static final String HASH_PASSWORD = "HashPassword";
      
      
      
      public abstract Version getVersion();
      
      public abstract String getNamespace();
      public abstract QName getWSS10();
      public abstract QName getWSS11();
      public abstract QName getAlgorithmSuite();
      public abstract QName getAsymmetricBinding();
      public abstract QName getEncryptionToken();
      public abstract QName getHttpsToken();
      public abstract QName getInitiatorToken();
      public abstract QName getInitiatorSignatureToken();
      public abstract QName getInitiatorEncryptionToken();
      public abstract QName getIssuedToken();
      public abstract QName getIncludeToken();
      public abstract QName getLayout();
      public abstract QName getProtectionToken();
      public abstract QName getRecipientToken();
      public abstract QName getRecipientSignatureToken();
      public abstract QName getRecipientEncryptionToken();
      public abstract QName getRequiredElements();
      public abstract QName getSecureConversationToken();
      public abstract QName getSecurityContextToken();
      public abstract QName getSignatureToken();
      public abstract QName getSignedElements();
      public abstract QName getEncryptedElements();
      public abstract QName getSignedParts();
      public abstract QName getEncryptedParts();
      public abstract QName getIncludeTimestamp();
      
      public abstract QName getSymmetricBinding();
      public abstract QName getTransportBinding();
      public abstract QName getTransportToken();
      public abstract QName getUserNameToken();
      public abstract QName getSamlToken();
      public abstract QName getKerberosToken();
      public abstract QName getSpnegoContextToken();
      public abstract QName getX509Token();
      
      public abstract QName getSupportingTokens();
      public abstract QName getSignedSupportingTokens();
      public abstract QName getEndorsingSupportingTokens();
      public abstract QName getSignedEndorsingSupportingTokens();
  
  
      //For X509 tokens
      public abstract QName getRequiredDerivedKeys();
      
      
      public abstract IncludeTokenType getInclusionFromAttributeValue(String value);
      public abstract String getAttributeValueFromInclusion(IncludeTokenType value);
  
  }
  