public SecondIssuanceMessageComposite getSecondMessage(string[] attributesParam, IssuerParametersComposite ipc, int numberOfTokensParam, FirstIssuanceMessageComposite firstMessage, string sessionID) { /* * token issuance - generate second message */ cOut.write("Issuing U-Prove tokens - generate second message, prover side"); VerifySessionId(sessionID); try { string tokenInformationParam = null; string proverInformationParam = null; // specify the attribute values agreed to by the Issuer and Prover int numberOfAttributes = attributesParam.Length; byte[][] attributes = new byte[numberOfAttributes][]; for (int i = 0; i < numberOfAttributes; i++) { attributes[i] = encoding.GetBytes(attributesParam[i]); } // specify the special field values byte[] tokenInformation = (tokenInformationParam == null) ? new byte[] { } : encoding.GetBytes(tokenInformationParam); byte[] proverInformation = (proverInformationParam == null) ? new byte[] { } : encoding.GetBytes(proverInformationParam); // specify the number of tokens to issue int numberOfTokens = numberOfTokensParam; IssuerParameters ip = ConvertUtils.convertIssuerParametersComposite(ipc, sessionDB[sessionID]); // Convert serializable FirstIssuanceMessageComposite members to FirstIssuanceMessage FirstIssuanceMessage fi = ConvertUtils.convertFirstIssuanceMessageComposite(firstMessage, ip); // setup the prover and generate the second issuance message Prover prover = new Prover(ip, numberOfTokens, attributes, tokenInformation, proverInformation, sessionDB[sessionID].deviceManager.GetDevice()); // Store the prover in proversDictionary using the sessionKey as key sessionDB[sessionID].prover = prover; SecondIssuanceMessage sm = prover.GenerateSecondMessage(fi); // Convert SecondIssuanceMessage members to serializable SecondIssuanceMessageComposite SecondIssuanceMessageComposite smc = ConvertUtils.convertSecondIssuanceMessage(sm); // Add the sessionKey to SecondIssuanceMessageComposite smc.SessionKey = sessionID; return smc; } catch (Exception e) { cOut.write(e.ToString()); DebugUtils.DebugPrint(e.StackTrace.ToString()); } return null; }
public void completeUProveProtocolTest() { byte[] attributeEncoding = new byte[] { 0x0, 0x1 }; IssuerSetupParameters isp = this.getIssuerSetupParameters(attributeEncoding, "foobar"); // generate the serializable IssuerKeyAndParameters IssuerKeyAndParameters ikap = null; Assert.DoesNotThrow(delegate { ikap = isp.Generate(true); }); Assert.DoesNotThrow(delegate { ikap.IssuerParameters.Verify(); }); byte[] issuerPrivateKey = new byte[] { 187, 133, 215, 21, 39, 178, 240, 67, 170, 4, 148, 139, 213, 36, 164, 114, 146, 228, 243, 140, 61, 76, 174, 136, 137, 65, 238, 59, 7, 198, 34, 129 }; int numberOfTokens = 10; string[] attributesString = new string[] { "foo", "bar" }; int numberOfAttributes = attributesString.Length; byte[][] attributes = new byte[numberOfAttributes][]; for (int i = 0; i < numberOfAttributes; i++) { attributes[i] = encoding.GetBytes(attributesString[i]); } BigInteger bi = new BigInteger(1, issuerPrivateKey); IssuerKeyAndParameters ikapFristMessage = new IssuerKeyAndParameters(bi, ikap.IssuerParameters); GroupElement hdG = ikap.IssuerParameters.Gq.CreateGroupElement(defines.hd); Issuer issuer = new Issuer(ikapFristMessage, numberOfTokens, attributes, null, hdG); FirstIssuanceMessage fi = issuer.GenerateFirstMessage(); byte[] attributes2nd = (byte[])attributes.Clone(); byte[] tokenInformation = new byte[] { }; byte[] proverInformation = new byte[] { }; Prover prover = new Prover(ip, numberOfTokens, attributes, tokenInformation, proverInformation, sessionDB[sessionID].deviceManager.GetDevice()); /* * issue steps. creds. * setupIssuerParams. * * setIssuerPrivateKey. {byte[32]} : * * getFirstMessage - [0] "42595520544300663591556673075677003532579993719172074290116620403700505383419" string * * getSecondMessage - with outputfrom getFristMessage. * * getThirdMessage - with output from getSecondMessage. * * generateTokens - with output from getThirdMessage * * proveToken - commitedIndices 0x00000001 , * messageParms "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<abc:Message xmlns:abc=\"http://abc4trust.eu/wp2/abcschemav1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://abc4trust.eu/wp2/abcschemav1.0 ../../../../../../../../../abc4trust-xml/src/main/resources/xsd/schema.xsd\">\n<abc:Nonce>r9MQ57udpiWRwA==</abc:Nonce>\n</abc:Message>\n" * Token, * - tokenPrivateKeyParam {byte[0x00000020]} byte[] [0x00000000] 0x37 byte [0x00000001] 0xaa byte [0x00000002] 0xb6 byte [0x00000003] 0xa9 byte [0x00000004] 0xd5 byte [0x00000005] 0x56 byte [0x00000006] 0xd8 byte [0x00000007] 0x21 byte [0x00000008] 0x77 byte [0x00000009] 0xe1 byte [0x0000000a] 0x7b byte [0x0000000b] 0x5a byte [0x0000000c] 0xf3 byte [0x0000000d] 0xad byte [0x0000000e] 0xf7 byte [0x0000000f] 0x83 byte [0x00000010] 0x3c byte [0x00000011] 0x2d byte [0x00000012] 0xcf byte [0x00000013] 0xdd byte [0x00000014] 0x8a byte [0x00000015] 0xbf byte [0x00000016] 0x62 byte [0x00000017] 0xae byte [0x00000018] 0xeb byte [0x00000019] 0x44 byte [0x0000001a] 0x59 byte [0x0000001b] 0x6f byte [0x0000001c] 0x1b byte [0x0000001d] 0x09 byte [0x0000001e] 0x6d byte [0x0000001f] 0xf0 byte * * verifyTokenProof - proff from proveToken, otherwise same values. * * * * */ }
private GenerateTokensInfo HandleGenerateTokens(Prover prover, ThirdIssuanceMessage thirdIssuanceMessage) { GenerateTokensInfo gInfo = new GenerateTokensInfo(); gInfo.Tokens = prover.GenerateTokens(thirdIssuanceMessage, true); return gInfo; }
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 void TestProver() { byte[][] A = new byte[][] { }; byte[] TI = null; byte[] PI = null; IssuerSetupParameters isp = new IssuerSetupParameters(); isp.UidP = new byte[] { 0 }; isp.E = new byte[] { 0 }; IssuerKeyAndParameters ikap = isp.Generate(); IssuerProtocolParameters ipp = new IssuerProtocolParameters(ikap); ipp.Attributes = A; ipp.NumberOfTokens = 1; ipp.TokenInformation = TI; Issuer issuer = ipp.CreateIssuer(); FirstIssuanceMessage msg1 = null; SecondIssuanceMessage msg2 = null; ThirdIssuanceMessage msg3 = null; msg1 = issuer.GenerateFirstMessage(); try { new Prover(null, 1, A, TI, PI, null); Assert.Fail(); } catch (ArgumentNullException) { } try { new Prover(ikap.IssuerParameters, -1, A, TI, PI, null); Assert.Fail(); } catch (ArgumentException) { } try { new Prover(ikap.IssuerParameters, 0, A, TI, PI, null); Assert.Fail(); } catch (ArgumentException) { } Prover prover = new Prover(ikap.IssuerParameters, 1, A, TI, PI, null); try { prover.GenerateTokens(msg3); Assert.Fail(); } catch (InvalidOperationException) { } msg2 = prover.GenerateSecondMessage(msg1); try { msg2 = prover.GenerateSecondMessage(msg1); Assert.Fail(); } catch (InvalidOperationException) { } msg3 = issuer.GenerateThirdMessage(msg2); prover.GenerateTokens(msg3); try { prover.GenerateTokens(msg3); Assert.Fail(); } catch (InvalidOperationException) { } }
public void TestProverStateExport() { IssuerKeyAndParameters ikap; IssuerProtocolParameters ipp; ProverProtocolParameters ppp; StaticTestHelpers.GenerateTestIssuanceParameters("test issuer params", "test spec", 3, true, 6, out ikap, out ipp, out ppp); // generate test issuer parameters Issuer issuer = ipp.CreateIssuer(); IssuerParameters ip = ikap.IssuerParameters; Prover prover = ppp.CreateProver(); FirstIssuanceMessage msg1 = null; SecondIssuanceMessage msg2 = null; ThirdIssuanceMessage msg3 = null; msg1 = issuer.GenerateFirstMessage(); msg2 = prover.GenerateSecondMessage(msg1); PostSecondMessageState state = prover.ExportPostSecondMessageState(); string serializedState = ip.Serialize(state); // complete the issuance with a new prover instance msg3 = issuer.GenerateThirdMessage(msg2); Prover prover2 = new Prover(ip, ip.Deserialize<PostSecondMessageState>(serializedState)); prover2.GenerateTokens(msg3); // make sure the original prover is unusable try { prover.GenerateTokens(msg3); Assert.Fail(); } catch (Exception) { // expected } }
internal ProverInstanceData(Prover issuer) { this.LastAccessed = DateTime.Now; _prover = issuer; }