anchor.diff:      function GetCompactToken: TJOSEBytes; override;
       procedure SetCompactToken(const Value: TJOSEBytes); override;
     public
  +    class function CheckCompactToken(const Value: TJOSEBytes): Boolean; static;
  +  public
       constructor Create(AToken: TJWT); override;
   
       procedure SetKey(const AKey: TBytes); overload;
  
positive.code: var
    LRes: TStringDynArray;
  begin
    LRes := SplitString(Value, PART_SEPARATOR);
    if Length(LRes) = COMPACT_PARTS then
    begin
  
negative.code:   JOSE.Hashing.HMAC,
    JOSE.Core.JWA.Factory;
  
  class function TJWS.CheckCompactToken(const Value: TJOSEBytes): Boolean;
  var
    LRes: TStringDynArray;
    LIndex: Integer;
  begin
    Result := True;
  
    if Value.IsEmpty then
      Exit(False);
  
    LRes := SplitString(Value, PART_SEPARATOR);
    if not (Length(LRes) = COMPACT_PARTS) then
      Exit(False);
  
    for LIndex := 0 to Length(LRes) - 1 do
    begin
      if LRes[LIndex].IsEmpty then
        Exit(False);
    end;
  end;
  
  constructor TJWS.Create(AToken: TJWT);
  var
    LIndex: Integer;
  