package com.l7tech.security.token;

import java.security.SignatureException;
import java.security.cert.X509Certificate;
import java.util.Calendar;

public interface SamlSecurityToken extends X509SigningSecurityToken {
   SamlSecurityToken.ConfirmationMethod HOLDER_OF_KEY = new SamlSecurityToken.ConfirmationMethod("Holder-of-key");
   SamlSecurityToken.ConfirmationMethod SENDER_VOUCHES = new SamlSecurityToken.ConfirmationMethod("Sender-vouches");
   SamlSecurityToken.ConfirmationMethod BEARER_TOKEN = new SamlSecurityToken.ConfirmationMethod("Bearer token");
   int VERSION_1_1 = 1;
   int VERSION_2_0 = 2;

   int getVersionId();

   X509Certificate getSubjectCertificate();

   X509Certificate getIssuerCertificate();

   boolean isHolderOfKey();

   boolean isSenderVouches();

   boolean isBearerToken();

   SamlSecurityToken.ConfirmationMethod getConfirmationMethod();

   String getAssertionId();

   String getUniqueId();

   boolean hasEmbeddedIssuerSignature();

   boolean hasSubjectConfirmationEncryptedKey();

   void verifyEmbeddedIssuerSignature() throws SignatureException;

   String getNameIdentifierFormat();

   String getNameQualifier();

   String getNameIdentifierValue();

   String getAuthenticationMethod();

   boolean isOneTimeUse();

   Calendar getIssueInstant();

   Calendar getStarts();

   Calendar getExpires();

   boolean isExpiringSoon(int var1);

   final class ConfirmationMethod {
      private final String a;

      private ConfirmationMethod(String var1) {
         this.a = var1;
      }

      @Override
      public String toString() {
         return this.a;
      }
   }
}
