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 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) { } }