Ejemplo n.º 1
0
        public SecondIssuanceMessageInfo SecondMessage(SecondIssuanceMessageSpec spec)
        {
            if (spec.IssuerParameter == null)
            {
                ApiArgumentFault fault = new ApiArgumentFault();
                fault.Details       = "Issuer with unique ID was found";
                fault.Argument      = "IssuerSetupParametersSpec.ID";
                fault.ArgumentValue = spec.IssuerParameter.Serialize();
                throw new FaultException <ApiArgumentFault>(fault);
            }
            ProverProtocolParameters pProtoParam = new ProverProtocolParameters(spec.IssuerParameter);

            pProtoParam.NumberOfTokens = spec.NumberOfTokens;
            if (!String.IsNullOrWhiteSpace(spec.TokenInfomation))
            {
                pProtoParam.TokenInformation = ExtensionMethods.ToByteArray(spec.TokenInfomation);
            }

            if (!String.IsNullOrWhiteSpace(spec.Gamma))
            {
                pProtoParam.Gamma = ExtensionMethods.ToGroupElement(spec.Gamma, spec.IssuerParameter);
            }

            if (!String.IsNullOrWhiteSpace(spec.DevicePublicKey))
            {
                pProtoParam.DevicePublicKey = ExtensionMethods.ToGroupElement(spec.DevicePublicKey, spec.IssuerParameter);
            }

            if (!String.IsNullOrWhiteSpace(spec.ProverInfomation))
            {
                pProtoParam.ProverInformation = ExtensionMethods.ToByteArray(spec.ProverInfomation);
            }

            if (spec.RandomData != null)
            {
                pProtoParam.ProverRandomData = spec.RandomData;
            }
            if (spec.BatchSecurityLevel > 0)
            {
                pProtoParam.BatchValidationSecurityLevel = spec.BatchSecurityLevel;
            }
            pProtoParam.Validate();
            Prover prover = pProtoParam.CreateProver();

            SecondIssuanceMessage  secondMessage          = prover.GenerateSecondMessage(spec.FirstMessage);
            PostSecondMessageState postSecondMessageState = prover.ExportPostSecondMessageState();

            SecondIssuanceMessageInfo simInfo = new SecondIssuanceMessageInfo();

            simInfo.PostSecondMessageState = postSecondMessageState;
            simInfo.SecondMessage          = secondMessage;

            Guid issuerInstance = Guid.NewGuid();

            simInfo.ProverInstanceID = issuerInstance;
            proverInstanceDB.TryAdd(issuerInstance, new ProverInstanceData(prover));

            return(simInfo);
        }
    public SecondIssuanceMessageInfo SecondMessage(SecondIssuanceMessageSpec spec)
    {
      if (spec.IssuerParameter == null)
      {
        ApiArgumentFault fault = new ApiArgumentFault();
        fault.Details = "Issuer with unique ID was found";
        fault.Argument = "IssuerSetupParametersSpec.ID";
        fault.ArgumentValue = spec.IssuerParameter.Serialize();
        throw new FaultException<ApiArgumentFault>(fault);
      }
      ProverProtocolParameters pProtoParam = new ProverProtocolParameters(spec.IssuerParameter);
      pProtoParam.NumberOfTokens = spec.NumberOfTokens;
      if (!String.IsNullOrWhiteSpace(spec.TokenInfomation))
      {
        pProtoParam.TokenInformation = ExtensionMethods.ToByteArray(spec.TokenInfomation);
      }

      if (!String.IsNullOrWhiteSpace(spec.Gamma))
      {

        pProtoParam.Gamma = ExtensionMethods.ToGroupElement(spec.Gamma, spec.IssuerParameter);
      }

      if (!String.IsNullOrWhiteSpace(spec.DevicePublicKey))
      {
        pProtoParam.DevicePublicKey = ExtensionMethods.ToGroupElement(spec.DevicePublicKey, spec.IssuerParameter);
      }

      if (!String.IsNullOrWhiteSpace(spec.ProverInfomation))
      {
        pProtoParam.ProverInformation = ExtensionMethods.ToByteArray(spec.ProverInfomation);
      }

      if (spec.RandomData != null)
      {
        pProtoParam.ProverRandomData = spec.RandomData;
      }
      if (spec.BatchSecurityLevel > 0)
      {
        pProtoParam.BatchValidationSecurityLevel = spec.BatchSecurityLevel;
      }
      pProtoParam.Validate();
      Prover prover = pProtoParam.CreateProver();

      SecondIssuanceMessage secondMessage = prover.GenerateSecondMessage(spec.FirstMessage);
      PostSecondMessageState postSecondMessageState = prover.ExportPostSecondMessageState();

      SecondIssuanceMessageInfo simInfo = new SecondIssuanceMessageInfo();
      simInfo.PostSecondMessageState = postSecondMessageState;
      simInfo.SecondMessage = secondMessage;

      Guid issuerInstance = Guid.NewGuid();
      simInfo.ProverInstanceID = issuerInstance;
      proverInstanceDB.TryAdd(issuerInstance, new ProverInstanceData(prover));

      return simInfo;
    }
        public IssuerKeyAndParameters CreateIssuerSetupParameters(IssuerSetupParametersSpec spec)
        {
            IssuerSetupParameters isp = new IssuerSetupParameters();

            isp.GroupConstruction = spec.GroupConstruction ?? GroupType.Subgroup;
            isp.UidP = ExtensionMethods.ToByteArray(spec.IssuerID);
            isp.E    = spec.AttributeEncoding != null ? spec.AttributeEncoding : IssuerSetupParameters.GetDefaultEValues(spec.NumberOfAttributes);
            isp.UseRecommendedParameterSet = spec.UseRecommendedParameterSet ?? true;

            if (issuerStore.HasValue(spec.IssuerID) && spec.StoreOnServer)
            {
                ApiArgumentFault fault = new ApiArgumentFault();
                fault.Details       = "Issuer with unique ID was found";
                fault.Argument      = "IssuerSetupParametersSpec.ID";
                fault.ArgumentValue = spec.ParameterSetName;
                throw new FaultException <ApiArgumentFault>(fault);
            }

            // look up ParameterSet.
            if (isp.UseRecommendedParameterSet)
            {
                isp.ParameterSet = IssuerSetupParameters.GetDefaultParameterSet(isp.GroupConstruction);
                // XXX add a check here to see if the name of the default parameterset is that same as
                // specified in spec.ParameterSetName and that match with the sha method specified.
            }
            else
            {
                ParameterSet pSet;
                if (ParameterSet.TryGetNamedParameterSet(spec.ParameterSetName, out pSet))
                {
                    isp.ParameterSet = pSet;
                }
                else
                {
                    ApiArgumentFault fault = new ApiArgumentFault();
                    fault.Details       = "Member value vas not found";
                    fault.Argument      = "IssuerSetupParametersSpec.ParameterSetName";
                    fault.ArgumentValue = spec.ParameterSetName;
                    throw new FaultException <ApiArgumentFault>(fault);
                }
            }

            // specification field unused in ABC4Trust
            isp.S = null;

            IssuerKeyAndParameters issuerKeyParam = isp.Generate(true);

            if (spec.StoreOnServer)
            {
                issuerStore.AddValue(spec.IssuerID, issuerKeyParam);
            }
            return(issuerKeyParam);
        }
 public void DeleteIssuerSetupParameter(string id)
 {
     if (!issuerStore.HasValue(id))
     {
         ApiArgumentFault fault = new ApiArgumentFault();
         fault.Details       = "Issuer with unique ID was found";
         fault.Argument      = "ID";
         fault.ArgumentValue = id;
         throw new FaultException <ApiArgumentFault>(fault);
     }
     issuerStore.RemoveValue(id);
 }
    public IssuerKeyAndParameters CreateIssuerSetupParameters(IssuerSetupParametersSpec spec)
    {
      IssuerSetupParameters isp = new IssuerSetupParameters();
      isp.GroupConstruction = spec.GroupConstruction ?? GroupType.Subgroup;
      isp.UidP = ExtensionMethods.ToByteArray(spec.IssuerID);
      isp.E = spec.AttributeEncoding != null ? spec.AttributeEncoding : IssuerSetupParameters.GetDefaultEValues(spec.NumberOfAttributes);
      isp.UseRecommendedParameterSet = spec.UseRecommendedParameterSet ?? true;

      if (issuerStore.HasValue(spec.IssuerID) && spec.StoreOnServer)
      {
        ApiArgumentFault fault = new ApiArgumentFault();
        fault.Details = "Issuer with unique ID was found";
        fault.Argument = "IssuerSetupParametersSpec.ID";
        fault.ArgumentValue = spec.ParameterSetName;
        throw new FaultException<ApiArgumentFault>(fault);
      }

      // look up ParameterSet.
      if (isp.UseRecommendedParameterSet)
      {
        isp.ParameterSet = IssuerSetupParameters.GetDefaultParameterSet(isp.GroupConstruction);
        // XXX add a check here to see if the name of the default parameterset is that same as
        // specified in spec.ParameterSetName and that match with the sha method specified.
      }
      else
      {
        ParameterSet pSet;
        if (ParameterSet.TryGetNamedParameterSet(spec.ParameterSetName, out pSet))
        {
          isp.ParameterSet = pSet;
        }
        else
        {
          ApiArgumentFault fault = new ApiArgumentFault();
          fault.Details = "Member value vas not found";
          fault.Argument = "IssuerSetupParametersSpec.ParameterSetName";
          fault.ArgumentValue = spec.ParameterSetName;
          throw new FaultException<ApiArgumentFault>(fault);
        }
      }

      // specification field unused in ABC4Trust
      isp.S = null;

      IssuerKeyAndParameters issuerKeyParam = isp.Generate(true);
      if (spec.StoreOnServer) { 
        issuerStore.AddValue(spec.IssuerID, issuerKeyParam);
      }
      return issuerKeyParam;
    }
        public FirstIssuanceMessageInfo FirstMessage(FirstIssuanceMessageSpec spec)
        {
            if (!issuerStore.HasValue(spec.IssuerID))
            {
                ApiArgumentFault fault = new ApiArgumentFault();
                fault.Details       = "Issuer with unique ID was found";
                fault.Argument      = "FirstIssuanceMessageSpec.IssuerID";
                fault.ArgumentValue = spec.IssuerID;
                throw new FaultException <ApiArgumentFault>(fault);
            }
            IssuerKeyAndParameters ikp = issuerStore.GetValue(spec.IssuerID);

            IssuerProtocolParameters ipp = new IssuerProtocolParameters(ikp);

            ipp.NumberOfTokens = spec.NumberOfTokens;
            ipp.Attributes     = ConvertToByteArray(spec.Attributes);
            if (!String.IsNullOrWhiteSpace(spec.TokenInfomation))
            {
                ipp.TokenInformation = ExtensionMethods.ToByteArray(spec.TokenInfomation);
            }

            if (!String.IsNullOrWhiteSpace(spec.Gamma))
            {
                ipp.Gamma = ExtensionMethods.ToGroupElement(spec.Gamma, ikp.IssuerParameters);
            }

            if (!String.IsNullOrWhiteSpace(spec.DevicePublicKey))
            {
                ipp.DevicePublicKey = ExtensionMethods.ToGroupElement(spec.DevicePublicKey, ikp.IssuerParameters);
            }

            ipp.Validate();
            Issuer issuer = ipp.CreateIssuer();
            FirstIssuanceMessage     firstMessage = issuer.GenerateFirstMessage();
            FirstIssuanceMessageInfo ret          = new FirstIssuanceMessageInfo();

            ret.FirstMessage = firstMessage;
            Guid issuerInstance = Guid.NewGuid();

            ret.IssuerInstanceID  = issuerInstance;
            ret.FirstMessageState = issuer.ExportPostFirstMessageState();
            issuerInstanceDB.TryAdd(issuerInstance, new IssuerInstanceData(issuer));
            return(ret);
        }
        public IssuerParameterInfo GetIssuerSetupParameter(string id)
        {
            IssuerParameterInfo infoItem = new IssuerParameterInfo();

            if (!issuerStore.HasValue(id))
            {
                ApiArgumentFault fault = new ApiArgumentFault();
                fault.Details       = "Issuer with unique ID was found";
                fault.Argument      = "ID";
                fault.ArgumentValue = id;
                throw new FaultException <ApiArgumentFault>(fault);
            }

            IssuerKeyAndParameters issuerParam = issuerStore.GetValue(id);

            infoItem.ParameterSetName   = id;
            infoItem.IssuerParameterSet = issuerParam.IssuerParameters;

            return(infoItem);
        }
Ejemplo n.º 8
0
        public GenerateTokensInfo GenerateTokens(GenerateTokensSpec spec)
        {
            // first we will try to lookup the cache value of the prover object.
            Prover prover = null;

            if (spec.ProverInstanceID != null)
            {
                ProverInstanceData proverInstance;
                bool ok = proverInstanceDB.TryGetValue(spec.ProverInstanceID, out proverInstance);
                if (ok)
                {
                    prover = proverInstance.Prover;
                }
                else
                {
                    //XXX add log about Prover not found in cache.
                }
            }

            if (prover != null)
            {
                return(HandleGenerateTokens(prover, spec.ThirdMessage));
            }

            if (spec.SecondMessageState != null && spec.IssuerParameter != null)
            {
                prover = new Prover(spec.IssuerParameter, spec.SecondMessageState);
                proverInstanceDB.TryAdd(spec.ProverInstanceID, new ProverInstanceData(prover));
                return(HandleGenerateTokens(prover, spec.ThirdMessage));
            }

            ApiArgumentFault fault = new ApiArgumentFault();

            fault.Details       = "Prover with unique ID was found or SecondMessageState and IssuerParameter not provided.";
            fault.Argument      = "GenerateTokensSpec.ProverInstanceID/GenerateTokensSpec.SecondMessageState/GenerateTokensSpec.IssuerParameter";
            fault.ArgumentValue = spec.ProverInstanceID.ToString();
            throw new FaultException <ApiArgumentFault>(fault);
        }
        public ThirdIssuanceMessageInfo ThirdMessage(ThirdIssuanceMessageSpec spec)
        {
            // first we will try to lookup the cache value of the issuer object.
            Issuer issuer = null;

            if (spec.IssuerInstanceID != null)
            {
                IssuerInstanceData issuerInstance;
                bool ok = issuerInstanceDB.TryGetValue(spec.IssuerInstanceID, out issuerInstance);
                if (ok)
                {
                    issuer = issuerInstance.Issuer;
                }
                else
                {
                    //XXX add log about Issuer not found in cache.
                }
            }

            if (issuer != null)
            {
                return(HandleThirdMessageInfo(issuer, spec.SecondMessage));
            }

            if (spec.FistMessageState != null && spec.IssuerKeyAndParameter != null)
            {
                issuer = new Issuer(spec.IssuerKeyAndParameter, spec.FistMessageState);
                issuerInstanceDB.TryAdd(spec.IssuerInstanceID, new IssuerInstanceData(issuer));
                return(HandleThirdMessageInfo(issuer, spec.SecondMessage));
            }

            ApiArgumentFault fault = new ApiArgumentFault();

            fault.Details       = "Issuer with unique ID was found or FirstMessageState and IssuerKeyAndParameter not provided.";
            fault.Argument      = "ThirdIssuanceMessageSpec.IssuerInstanceID/ThirdIssuanceMessageSpec.FirstMessageState/ThirdIssuanceMessageSpec.IssuerKeyAndParameter";
            fault.ArgumentValue = spec.IssuerInstanceID.ToString();
            throw new FaultException <ApiArgumentFault>(fault);
        }
    public GenerateTokensInfo GenerateTokens(GenerateTokensSpec spec)
    {
      // first we will try to lookup the cache value of the prover object.
      Prover prover = null;
      if (spec.ProverInstanceID != null)
      {
        ProverInstanceData proverInstance;
        bool ok = proverInstanceDB.TryGetValue(spec.ProverInstanceID, out proverInstance);
        if (ok)
        {
          prover = proverInstance.Prover;
        }
        else
        {
          //XXX add log about Prover not found in cache.
        }
      }

      if (prover != null)
      {
        return HandleGenerateTokens(prover, spec.ThirdMessage);
      }

      if (spec.SecondMessageState != null && spec.IssuerParameter != null)
      {
        prover = new Prover(spec.IssuerParameter, spec.SecondMessageState);
        proverInstanceDB.TryAdd(spec.ProverInstanceID, new ProverInstanceData(prover));
        return HandleGenerateTokens(prover, spec.ThirdMessage);

      }

      ApiArgumentFault fault = new ApiArgumentFault();
      fault.Details = "Prover with unique ID was found or SecondMessageState and IssuerParameter not provided.";
      fault.Argument = "GenerateTokensSpec.ProverInstanceID/GenerateTokensSpec.SecondMessageState/GenerateTokensSpec.IssuerParameter";
      fault.ArgumentValue = spec.ProverInstanceID.ToString();
      throw new FaultException<ApiArgumentFault>(fault);

    }
    public ThirdIssuanceMessageInfo ThirdMessage(ThirdIssuanceMessageSpec spec)
    {
      // first we will try to lookup the cache value of the issuer object.
      Issuer issuer = null;
      if (spec.IssuerInstanceID != null)
      {
        IssuerInstanceData issuerInstance;
        bool ok = issuerInstanceDB.TryGetValue(spec.IssuerInstanceID, out issuerInstance);
        if (ok)
        {
          issuer = issuerInstance.Issuer;
        }
        else
        {
          //XXX add log about Issuer not found in cache.
        }
      }

      if (issuer != null)
      {
        return HandleThirdMessageInfo(issuer, spec.SecondMessage);
      }

      if (spec.FistMessageState != null && spec.IssuerKeyAndParameter != null)
      {
        issuer = new Issuer(spec.IssuerKeyAndParameter, spec.FistMessageState);
        issuerInstanceDB.TryAdd(spec.IssuerInstanceID, new IssuerInstanceData(issuer));
        return HandleThirdMessageInfo(issuer, spec.SecondMessage);

      }

      ApiArgumentFault fault = new ApiArgumentFault();
      fault.Details = "Issuer with unique ID was found or FirstMessageState and IssuerKeyAndParameter not provided.";
      fault.Argument = "ThirdIssuanceMessageSpec.IssuerInstanceID/ThirdIssuanceMessageSpec.FirstMessageState/ThirdIssuanceMessageSpec.IssuerKeyAndParameter";
      fault.ArgumentValue = spec.IssuerInstanceID.ToString();
      throw new FaultException<ApiArgumentFault>(fault);

    }
    public FirstIssuanceMessageInfo FirstMessage(FirstIssuanceMessageSpec spec)
    {
      if (!issuerStore.HasValue(spec.IssuerID))
      {
        ApiArgumentFault fault = new ApiArgumentFault();
        fault.Details = "Issuer with unique ID was found";
        fault.Argument = "FirstIssuanceMessageSpec.IssuerID";
        fault.ArgumentValue = spec.IssuerID;
        throw new FaultException<ApiArgumentFault>(fault);
      }
      IssuerKeyAndParameters ikp = issuerStore.GetValue(spec.IssuerID);

      IssuerProtocolParameters ipp = new IssuerProtocolParameters(ikp);
      ipp.NumberOfTokens = spec.NumberOfTokens;
      ipp.Attributes = ConvertToByteArray(spec.Attributes);
      if (!String.IsNullOrWhiteSpace(spec.TokenInfomation))
      {
        ipp.TokenInformation = ExtensionMethods.ToByteArray(spec.TokenInfomation);
      }
      
      if (!String.IsNullOrWhiteSpace(spec.Gamma))
      {

        ipp.Gamma = ExtensionMethods.ToGroupElement(spec.Gamma, ikp.IssuerParameters);
      }

      if (!String.IsNullOrWhiteSpace(spec.DevicePublicKey))
      {
        ipp.DevicePublicKey = ExtensionMethods.ToGroupElement(spec.DevicePublicKey, ikp.IssuerParameters);
      }

      ipp.Validate();
      Issuer issuer = ipp.CreateIssuer();
      FirstIssuanceMessage firstMessage = issuer.GenerateFirstMessage();
      FirstIssuanceMessageInfo ret = new FirstIssuanceMessageInfo();
      ret.FirstMessage = firstMessage;
      Guid issuerInstance = Guid.NewGuid();
      ret.IssuerInstanceID = issuerInstance;
      ret.FirstMessageState = issuer.ExportPostFirstMessageState();
      issuerInstanceDB.TryAdd(issuerInstance, new IssuerInstanceData(issuer));
      return ret;
    }
 public void DeleteIssuerSetupParameter(string id)
 {
   if (!issuerStore.HasValue(id))
   {
     ApiArgumentFault fault = new ApiArgumentFault();
     fault.Details = "Issuer with unique ID was found";
     fault.Argument = "ID";
     fault.ArgumentValue = id;
     throw new FaultException<ApiArgumentFault>(fault);
   }
   issuerStore.RemoveValue(id);
 }
    public IssuerParameterInfo GetIssuerSetupParameter(string id)
    {
      IssuerParameterInfo infoItem = new IssuerParameterInfo();

      if (!issuerStore.HasValue(id))
      {
        ApiArgumentFault fault = new ApiArgumentFault();
        fault.Details = "Issuer with unique ID was found";
        fault.Argument = "ID";
        fault.ArgumentValue = id;
        throw new FaultException<ApiArgumentFault>(fault);
      }

      IssuerKeyAndParameters issuerParam = issuerStore.GetValue(id);
      infoItem.ParameterSetName = id;
      infoItem.IssuerParameterSet = issuerParam.IssuerParameters;

      return infoItem;
    }