コード例 #1
0
    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;
    }
コード例 #2
0
        public void TestIssuer()
        {
            byte[][] A = new byte[][] {};
            byte[] TI = null;
            IssuerSetupParameters isp = new IssuerSetupParameters();
            isp.UidP = new byte[] { 0 };
            isp.E = new byte[] { 0 };
            IssuerKeyAndParameters ikap = isp.Generate();
            IssuerProtocolParameters ipp;

            try { ipp = new IssuerProtocolParameters(null); Assert.Fail(); } catch (ArgumentNullException) { }
            try 
            {
                ipp = new IssuerProtocolParameters(ikap);
                ipp.Attributes = A;
                ipp.NumberOfTokens = -1;
                ipp.TokenInformation = TI;
                ipp.Validate();
                Assert.Fail();
            } catch (ArgumentException) { }
            try
            {
                ipp = new IssuerProtocolParameters(ikap);
                ipp.Attributes = A;
                ipp.NumberOfTokens = 0;
                ipp.TokenInformation = TI;
                ipp.Validate();
                Assert.Fail(); 
            } catch (ArgumentException) { }
            ipp = new IssuerProtocolParameters(ikap);
            ipp.Attributes = A;
            ipp.NumberOfTokens = 1;
            ipp.TokenInformation = TI;
            ipp.Validate();
            Issuer issuer = ipp.CreateIssuer();

            FirstIssuanceMessage msg1 = null;
            SecondIssuanceMessage msg2 = null;
            ThirdIssuanceMessage msg3 = null;
            
            try { msg3 = issuer.GenerateThirdMessage(msg2); Assert.Fail(); } catch (InvalidOperationException) { }
            msg1 = issuer.GenerateFirstMessage();
            try { msg1 = issuer.GenerateFirstMessage(); Assert.Fail(); } catch (InvalidOperationException) { }
            msg2 = new ProverProtocolParameters(ikap.IssuerParameters).CreateProver().GenerateSecondMessage(msg1);
            msg3 = issuer.GenerateThirdMessage(msg2);
            try { msg3 = issuer.GenerateThirdMessage(msg2); Assert.Fail(); } catch (InvalidOperationException) { }
        }