Пример #1
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) { }
        }
        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);
        }