 Good day, folks. We'll get started in about a minute. Okay. Welcome everybody. Let's see. Share. Copy the wrong thing. There we go. Okay, there's the link for today's meeting. Welcome. This is the. Let me make sure I'm not muted here. Yep. This is the areas did come be to working group. March 20th. I should remind you of the hyper ledger anti trust policy, as well as the hyper ledger code of conduct. So far on the agenda, we have the IAW. April 2023. We'll definitely talk about that. We might get to a IP three, but we'll see. We'll see what we can do. It's kind of the big focus. Although we're open. If there's other things, especially timely things that we need to cover. Anything that we want to add today. Okay. No worries. Yep. Thank you for adding yourselves to attendees. If you'd like. You know, welcome to do that. Is there anyone new who'd like to introduce themselves as well. Today. Okay. Thank you. Thank you. Thanks. From roots ID. And yeah, we host this meeting weekly on Mondays. And we're about a month out from. The April IIW conference in Mountain View, California. And we're hoping that there'll be some. A decent interopathon. Oh, and just showing in general of the conv two. And especially it would be nice to see it. I know quite a bit of effort in. On the occupy side and the AFJ side within areas. So that's exciting. And we'll see what comes out of that. For the meeting. Any quick updates for things that happened. For the Aries working group. Or. Yeah. Occupy or AFJ or anything else that people know of. Hopefully I can find a way that I'll, I can get everyone engaged today. I'm a good host. Then I will, if anyone has been talking. I haven't heard anything from anybody. So you're on mute. But yeah, let's see. Okay. Is this left over or so Thomas. Yeah, hi. Hey. I'm not hearing you from my headphones. Give me one second. Okay. Now I think you're in my headphones. Yeah. Yeah. Yeah. Okay. Okay. Maybe I sound better too or worse. I'm not sure. You sound great. Thank you. All right. So we, we are, are you ready to talk? Did come stuff today. Yeah. If you, if you like, of course. You can't see me. Can you. I cannot see you. You know, it looks just a black screen. Yeah. I don't know how to fix this. Okay. No worries. Let's maybe do a little bigger introduction for IW as well. I guess before you get started. So Thomas and, oh, there you are. Hey. Yeah. And let's see several we have. Let's see. We made a list somewhere. Um, should be. Hello. Hey, Roto, how are you? Very good. Good. I'm trying to remember where I posted my list. Sorry folks. It's Monday. I'll get on my game here. But basically, yeah, we have a list of potential participants for IW for an inter-opathon for did come V2. So we want to possibly do a video recording of any type of. Did come V2 inter-op type things between our agents. Or services or, or whatever it is that you have that, that's did come V2 related mediators and things like that. But a bunch of us will be at IW or, or we can kind of carry the message. And, and, and demonstrations to IW for, for those who won't be there. So we're hoping over the next month to rally those efforts. As best as possible. So that did come V2. Let's say at the last IW did come V2 was more of a, you know, tiny. There was a lot of discussion, but, but in terms of demonstration. We did some things. There was an attempt at some inter-opathon, but it was, you know, had had varying levels of success, but most of it was fairly introductory. We're hoping to show kind of a wider ecosystem at this IW. So that's, that's the intention. Hopefully that's exciting for everybody. And yeah, we'd like to hear from anybody in terms of updates on their. Progress. Certainly RootsID. We're doing right now a nice integration with the Ramo agent. Alex is, is working on a bunch of that. And then obviously we want to show inter-op with groups or, or agents like what Thomas is building and going to talk about today. I think Rodolfo just did a small, well, two, actually two significant integration or inter-ops with Blocktrust. Bjorn Sandlin. Correct. Yeah. Yeah. Yeah. You want to talk about that? Bjorn, so I think. Oh, oh, good. He's the best. He's here. Yes. Good. Okay. Bjorn, you want to talk about that just a little bit? What should I talk about? It's muted. Are you muted, Lanz? Sorry. You have a mediator, correct? Bjorn. Yeah. I do have a mediator. Great. It's essentially more or less the same as yours. A few. A few. A few less features. Like I don't have the action menu and the question answer protocol. But the rest is implemented in, and it's all in.net. Great. That's excellent. And is that going to be just a live mediator that anyone can connect to? Okay. Great. Let's, let's post. I was still hoping my, my mind would. Let me check my hack MD here. And see what I have. Yeah. And Bjorn not only have a mediator. He has also a browser wallet. So we call that way. Yeah. It's a, it's a. Yeah. It's a browser wallet. So we call that way Bjorn is. Yeah. It's a browser wallet, which is capable of. Did come. Yeah. So was that though? I saw that. And this is great. And we tested with roots wallet. So we are able to send message. Well, at least to the mediator I tested. And send message to the mediator. The. Block trust mediator. I'll receive it back in another. Roots wallet on another mediator. So I think it's mostly all working. Need to take some details. I see a problem with the. So both are you, we are using stick by libraries. Yeah. Yeah. So, so the problem could be potentially also in my. Port. So I took the sick par JVM library. And ported it over. Through two dot net. And since. This wasn't so straightforward. Since a lot of my libraries were missing, like I haven't. I'm using a different crypto library bouncy castle. And I don't have. So the, the Jason library stuff. So I also had to rewrite this. And so there are many components where potentially there could be. Problems, but all the tests from the JVM. I ported them also over to dot net and they are all passing. So I think there might be problems, but. Most likely not so obvious. So, so then our, our goal over this next month. And, you know, as soon as possible, obviously is to. Essentially have interactions occur between. You know, our agents and Bjorns. So that he can, you know. Well, we can discover incompatibilities. That might be mean fixes on, on our side or, or Bjorn side. Or both. And so, yeah, this is really exciting. And, and, and this all goes with the movement that's happening in Diff as well, where, you know, Diff did come group basically we want to show as many live agents live did come things as possible. Just so that the ecosystem can, you know, really bootstrap here, I guess. And so yeah, exciting. Good. And can you give me any links, Bjorn, or the link to the mediator in the chat. Oh, good. Oh, yes. Thank you. Also, post the guitar primary. I'm doing a, I'm doing excellent job today of, of hosting. He posted the link in the chat and I didn't catch it. All right. Very good. So that's for your mediators. I think. Okay, good. I saw also. Yeah, Thomas. Yeah, Thomas, go ahead and then Alexandra. I think also I saw your hand at some point. Like, go ahead, Thomas and then would. Yeah, I was wondering if you're going to do all these kinds of interop tests and sending messages for from back. Do you think it's possible to, to record these activities in a way that they can be reused. I think we don't have a test harness, right. But, but I think it's, it would be useful to, to like, repeat what we've done against one agent with another. See what I mean, I so. So when you're saying recording though you're saying as like a script. Yeah, rerun multiple times. Yeah. Yeah, I, yeah, very basic stuff maybe, you know, so so so the effort doesn't get lost really. Yeah, yeah, I love that. We don't have it automated yet, but, you know, maybe just, maybe just, you know, record the messages or record the, the activities. Yeah. So thoughts on that because, yeah, essentially, I think we would all love it if this activity that we're about to go through results in a test harness. We've heard from Fabio as well in diff and, you know, many people have mentioned this. I think that this is the good first step, which is just, okay, let's have let's do some interactions. I think that the test harness that we define would be like, we want it to be as minimal as possible as agile as possible. So, you know, hey, let's try some things first. But I love the idea of recording these as some scripts that we could reference if a test harness effort were to to happen. But thoughts from. If you don't, if you don't record the actual messages, then I think it's already useful if you record what you're testing. Right. So, so Ruto says we send a message to the mediator and got it back. You know, what type of message, you know, what what was the, what was the intention of this exercise and and it could be, you know, it could be in plain text. But so that we don't forget that we've we try to we try to test this and and then I can look at it and try to test this as well against another agent. And then from that we we get more complex and more, you know, descriptive and so on and so on. And eventually, this will be automated, of course, but not just yet. So maybe from my experience building the mediator and the agent. I used the mediator from roots wallet, and they have a very nice Jupiter notebook describing basic example of Alison Bob, which send a message to each other. And what I did, I run through this example and then at some point I put in my mediator and my client. And so that was my process to confirm that at least should work. I mean, it's not perfect. It's not really a script, but at least some code that you see how the message structure. That's great. Well, Roto, can you post the Jupiter notebook link. For that. Yeah, that'd be great. And then. Yeah, so more thoughts on how do we record those interactions so that we can learn from them. So, you know, Bjorn did, did his interactions. I mean, the Jupiter notebook obviously is a great way to, I guess, script the interaction. Yeah, more thoughts on actually recording what messages were passed what errors we get. Does each agent should each agent kind of have a page that they build or Jupiter notebook themselves that they build. I'm open to thoughts here. Darn, I thought I thought I was also open to the answer was obvious I just didn't have it. I don't want to throw a damper on it. Hello everyone for a miss last week. But I personally am almost ashamed to admit that I don't know anything at all about Python, the most popular programming language in the world. And I'm hoping that we can do something that doesn't require me to come up to speed. Yeah, no, that's fair for sure. I don't think that Jupiter's only Python but yeah, certainly just interacting. Yeah, you know, without a Jupiter notebooks also totally fine. You know, more than anything we'll say base level is just participation for sure. And Python is popular because it's so simple. Yeah, you can read as it like as a set of code. So even if you don't want to run it executed, you can read it and understand. Yeah, that's a really good point. Yeah, Bruce, have you ever looked at a Jupiter notebook for instance. I don't believe that I have so I think as a link shared I will, I will look at it. The developer reading a Jupiter notebook usually is it's almost equivalent to just reading an article about something because it's it, you know, it supports markdown, but then it also shows you the code cells that you're running and usually you have some some markdown associated with the cell telling you what's going on. And yeah, so, you know, with our minds being, you know, the computer scientists or programmers that we are then, you know, it just is feels fairly natural so. Thank you, I will give you a test of that. Yes, that's great. All right, any other thoughts or also, I said, Alexandra. I want to make sure we caught your thoughts. Let's see you said in the chat as definite answer and DC will be interested in participating in the demo great. I'm not directly involved with that but I know we're getting something organized awesome confirmed by Sam current and our mobile team. Fantastic. Alexandra will you be at IAW. No, I'm sorry, I'm more of a just like I attend these meetings because they're doing other things and then I report back to stuff I'm not very knowledgeable about. Okay, fair enough. Well, yeah. That's very good. Thank you for the info. Neither I nor the nor Phil students will be attending in April. I'm sure Phil will be there. I hope to be there in the fall meeting. Okay, so at the very least also would be amazing if we could have some video interactions. I know that's, you know, it's something right and and it would be nice to carry, you know, Bruce and Phil and the students into IW, you know, they everybody obviously people know you. It would just be nice to carry that that occurrence if you know if we do have some form of interop and interaction prior to IW would be great to just have a quick video, you know, saying, you know, here's the students, it's BYU, right? Yes. Yeah, here's the students of BYU from PICO Labs or, you know, however, and, you know, they're doing did come be to as well. That would be quite interesting. The reason the students aren't attending is that IAW falls on their last day of classes. They're one day to study and the first day of examinations. So they wouldn't they won't be able to do anything during that during the time. Totally fair. Okay, cool. And the one other thing that I wanted to say is, you know, we can do some of those interactions here. As we, you know, grow so so Roto and Bjorn, for instance, did did it offline, but I still think that everybody can learn and possibly, you know, the recording, obviously we get a recording from this meeting. So, I think, and just as us as a community here, you know, we can grow a lot over the next month by just doing some interactions live so, you know, nobody's on the spot for today. Let's say that the all the meetings following this, I think we have three maybe after this until IAW. Let's say that those meetings are we're going to just dedicate it to interacting. And then, you know, asking questions talking about, you know, why we're getting errors, how do we document this stuff, how are we ever going to, you know, put it into a test harness, you know, like a minimal test harness that's that's easy for all of us to use. And just, you know, really capitalize on this next three weeks. Any other thoughts on that? So I will take it as an as an assignment then to, to get the students code running on my machine so that I can represent them. This meeting occurs too early in the morning for students here for some reason. Right. I wonder if we can, if they if they would be interested in attending the Diff did come. So, so this meeting was nice to create because the Diff did come meetings are usually too late for like European attendees. So, I wonder if getting them to come to the Diff did come meeting, you know, I understand students that might be tough. They're busy. Anyways, Yeah, go ahead. I think it would be a good idea to organize somehow. And I know it's hard to coordinate when you don't have the actual parties in the conversation but if we could coordinate one or two interrupt sessions out of band with respect to this meeting. That's where I think that Jupiter notebooks will become very useful because then that's kind of giving you a script that you can follow along with and, you know, we could, you know, create a variety of Jupiter notebooks depending on the type of service that we're interacting with just to, you know, you know, okay, if the only thing that you can do is is a basic message, you know, fine, right, but if we do something a little, a little more advanced like, you know, discover features or something like that. Anyways, or we could just write it down right it doesn't have to be some kind of formal Jupiter notebooks so Yeah, I appreciate Thomas's suggestion that that we do this in a scientific way and that we have laboratory notebooks of so that we're recording what our experiments were and what the outcomes were very valuable. Yeah. Okay. Any other thoughts on that stuff before I think Tom's going to show us a bunch of new stuff that he's done. Okay. All right. Well, we'll get Thomas go for it. I've seen a ton of activity coming coming from you, which is a very exciting. Yeah. Okay, so let's set the stage. We meet a bunch of people. Malati, who is a mother of a young child, and she's married to Ryash, and they have a baby son, Anand, and Malati wants to travel to the US. And so she takes her digital passport to the airport and she has the birth certificate for her son. And at the airport, she needs to prove that she is actually the mother of that child. She needs to prove that she is married to the father of the child. And finally, the father has to give permission for the mother to leave the country for a certain amount of time and to a certain destination. And this is a use case, which has been described in the W3C document, which I posted in the chat, which is this one. Right. If you like to read along, so this is this is the use case. Okay, so let's do this now. I share the screen. Okay, yeah, I'll stop sharing. Okay. Can you see? Not yet. Okay, so it asked me to leave the meeting. Maybe I have to do this. I had to change some system permissions. So maybe share. So how about this? Yes, better now. Yeah, better now. Okay, so this is the whole screen. And, but we will focus on, on this thing here. Let me see if I can, how do I do this? I share maybe. Maybe I share. And now just this screen here. So how about this? You should see a command line interface, right? So, okay, yeah, we've seen this before. It did come. So it comes up with the latest release from today. And last time we saw this, we created a bunch of, of wallets. And we created dits and then we, we used out of band communication and so on and so on. And today we'll be focusing on, on the verifiable credentials present. So we will issue credentials, we will present them, we will verify them and we will use the open policy agent to verify these. And we just post that as well, because that may be interesting as well. Okay, so, so let's do this. And because we've, we've seen much of it already, I fast forward. And so what you see here is, well, the first new feature is that you can run the CLI with an initial script. So it supports scripting. So if you do a bunch of things, you don't have to repeat them all again. So for now I, I run the script travel with, with minor demo one. So this created a number of wallets. So we have a government, we have a hospital, we have an airport, we have the mother, the father, and we have the child we don't have yet. So let's create the child. So we go wallet create. And the child's name is. Anand. Okay, so what we also have, so we can, we can look at the list of wallets that we have here, what's also new. We had these fuzzy select us. Yeah, so we could select wallets by name by ID and so on and so on. And now we can also select them by index if we want to. So we can, we can say wallet show. And we say I want to want to see the wallet of the child and I want to do this verbosely and that is right. So, do we have dits already. Anand does not have a dit. Do we have, do we have dits for, for wallet, wallet. Malati. Yes, we do. Right. So dits are associated with the wallet you see on the right hand side you see the context that we're currently operating on. So the child does not have a dit yet. So we created it for the child. It is the child is the context wallet you see on the bottom left. So we create it did if, if we don't say anything here, it will create a dit key. But because this is the demo that builds on top of the previous one we do something more fancy. I have to do this right now. I'm not sure. So I, I create a did peer and I could also say this wants to be num I'll go to. Right. Okay, so this didn't work. I'm sorry. So let's just create the key. Okay, let's just create the did key. Okay, now we have dits and we have wallets for all of them. And now let's look at the first. Let's look at the first. Let's issue a credential. Right. So we look at commands. And there we see, here's the verify credential thing we can issue we can present we can verify. We can look at the policies for verification we have templates and and so on. So first thing we need to familiarize ourselves with what types of credentials we can actually issue. Let's go. Verifiable credential template lists. Okay, so these are the templates that we can actually use for for creating verifiable credentials. The CLI does not work with schema just yet. So the process is to start with with a template. Let's look at the passport. Yeah, template show three. So this is here we see the subject of is a very basic passport. So we need a we need to do it we need a given name and a family name and we need a citizenship. And the values that you see here, they are examples. Right. So, so when you look at the template, it gives you an idea of what the content should be. Yeah, you can also look at the template in a verbose manner. And then you see the entire verifiable credentials. So this is the format from from the W3C specification. Right. So we have a type of context. We have an issue an issue in state and expiration date and credential schema. Yeah. So the credential schema is is currently baked into this thing right so I could equally have pointed to to GitHub to look at the schema but the path that I that I went for this is I use the template and then I used some online tool to create the Jason schema for such a template right. Okay, so now we can start issuing our first credential. We say verifiable credential issue code completion. And we need a template. So, in this case, we want to use, we want to create a verifiable credential for passport. And we need to say, what is the issue and what is the subject. And so for this, if I type help here. Yeah, it tells me that the issue, it needs to, it needs to be a date and the holder needs to be a date and the subject as well and because I can't remember, you know, all these dits that I created up here. If you look carefully, what's also new is if we created it, then it is put into a session variable. Right. So we can use these session variables instead of the actual dates to to reference them. Yeah. And if we want to know what variables are available, then here it is. Right. So, because I run the initial script, the initial script created the wallets, and for each wallet it created a, it did in this case it did key for every wallet. And now I can use these aliases for, for these, these dates to actually issue the verifiable credentials. So I try this again. I do issue template passport. Not sure if this needs to be case sensitive just in case. So passports are usually issued by the government. So I say government is this one here government. I want to use the government did. Yeah, I could also have pasted the actual date of course. Yeah, but in this case it's easier to interest reads more nicely. Right. And then I say subject right so I want to issue a password of the government to see sure. Malachi is the subject. She's also the holder so I don't need to specify the holder explicitly. There's a case where the credential subject is not the same as as the holder so for example for the baby. Right. So the baby doesn't have a digital wallet. Malachi is the holder the baby is the is the subject. So I do this and it worked kind of right so it didn't actually work because what it did is it tried to issue a credential for type passport. But as I said earlier, the passport templates only contains example data right so it won't allow you. It won't allow you to issue a credential without the actual data you want to pass in of course right so and and these error messages they come from the schema. Yeah, so this is defined in the schema. The schema requires a given name a family name and a citizenship. Right. So, so stuff is missing. Yeah, so actually the data thing is missing. Right. So but I won't do this. I won't type this here and so it would be a bunch of skates, Jason, what is also supported is, I can paste this in as a multi line command. Right. So I could have typed this in, you know, dash dash data and then use this Jason, but you know, usually I would have this somewhere. You know stored, because these credential subjects can get very complex and big so it's it's not, you know, very convenient if I, if I always have to type it into CLI so I could have dereferenced the file URL etc etc right. So, in this case, the credential is issued, and it's also assigned to a context variable in this case, the context variable is derived from what I actually did and it says holder dot type dot verifiable credential. Right. So if I, if I look at the list again. Right. So I have now two more variables. I have sorted by, you know, in an alphanumeric order. And I can now look at, excuse me, I can now look at that credential so I can say a variable show. Well, no, we do something else. We switch to my lattice wallet. Right. So now, now we are working with my lattice wallet. And, and in my lattice wallet, I can say verifiable credential list. Okay, there it is. Yeah, so by issuing a credential, this version of the software does not actually send the credential across the wire to that other wallet. But for this demo, we work with, you know, all wallets are multi-tenant in this system. And if we issue a credential to a holder, the holder wallet automatically receives that credential. And the actual sending across the wire is something that that builds on top of this and comes later. So let's look at, at this thing. So we have the verifiable credential. We can show it. We can references just by index and we can save up mostly. No, it's not needed. Here we go. So, so this is the, the credential we just issued. And so on and so on and so on. Right. So here we have it's signed, you know, it's signed by by the government and Malati holds this. And I would repeat, I would repeat this step. Now also for the birth certificate, and I would repeat it for the marriage certificate, and I would also repeat it for the travel permission from the father to the mother. But I don't think I want to, you know, waste your time doing this. And I would suggest we, we fast forward again. And in this case, we issue all the wallets. And then we do this again and run another script, which are also prepared. And this one here. And there you go. Right. So it now issued. It issued passports for Malati. Let me show you this here. Point you to, to the scripts that are actually run. So if you want to look at those scripts, they're there. And I should now have, I should now have, there you go, I should now have all these verifiable credentials issued. So Malati holds the birth certificate. I can also, the JSON of the actual verifiable credential is also stored in a, in a session variable so I can dereference it like this. Then there's the marriage certificate. So the marriage certificate says, let's look at this real quick. So let's switch the wallet again to, to Malati. And let's look at the verifiable credentials that she actually holds. So here we see she holds the pass, her path, passport, birth certificate, marriage certificate and, and a travel permission. And perhaps let's, let's look at this real quick. So we, let's show the verifiable credential number one. So this is the, this is the where do I see that? Oh yeah. So this is the birth certificate. So the type of the verifiable credentials birth certificate and the subject. The subject is, it's rather complex, right? The subject is of course the baby, the baby is a person. These types are taken from schema.org, right? So all the attribute names, they are like very common or pseudo standard properties in schema that, that are used in the context, in this case of a natural person, right? So birth, birthplace is, is pseudo standard property name for a birthplace, right? And the type is a hospital that's also, you know, already defined it has an address. And here we have an array of parents, right? So in this case two parents, and we see that Malati and Hamal, Malati and Rajesh are the parents for Anand. They were born 29th of March, 2022. Exactly 105 years later than my granddad. So let's look at these again. Marriage certificate is, perhaps the travel permission is, is interesting. So we show three. And, and here the travel permission is trivial, right? So it says, it says the subject ID is that of the child and the guardian is the idea of the mother and the father gives permission for the mother to take the child to Canada in this, in this case, right? So now we, now that we have those verifiable credentials, we need to present it to the airport. So Malati takes all these, these credentials for them. She takes along her passport, her birth certificate, her marriage certificate and the travel permissions, right? And the way to do this is, we say, like this, yeah, we say verifiable credential present, the holder is Malati, the verifier is the airport, I use a Y because V is already taken for both, right? So it's Y looks similar to V. So it's, it's Y for verifier. And then I want to present the passport from Malati. And I do this verbosely. And there you go. So this is the, this is the presentation that has just been created, right? So this is a W3C verifiable credential of type verifiable. Presentation. And there we see an array of verifiable credentials. And this is the passport credential that is, you know, that we've seen before the passport credential for Malati. And here's the proof, cryptograph, cryptographic proof for, for this credential in JSON LD. And we do this for, we do this for the birth certificate and the marriage certificate and the travel certificate. And so let's, let's do these real quick. Paste those in here, not verbosely. Yeah, so it just happens and Malati. And in this case, yeah, the airport now holds, holds these, so presenting a verifiable credential to the airport makes the airport the owner of, of these credentials. So in this case we could switch to the airport and have a look. There you go, right? So, so the airport actually holds these four verifiable presentations that now need to be verified. And now we come to the last, so the final bit, and this is perhaps the most interesting bit. How, how the, how the airport actually verifies those, right? So let's do a very simple type of verification. So again, we use, we use, you see, it's getting bigger, right? Lots of data now in here. So we have the verifiable credentials and we have the verifiable presentations, right, in, in here. And airport is, is because it starts with an A, you know, it's all the airport stuff comes first. And the airport now does the first verification for, and in this case, I reference the JSON of, of the verifiable presentation directly from those system variables, right? I could, again, you know, this could be pointing to URL where, where the presentation comes from it could be pointing indexed to, to the airport's wallet. It could, it could be file path. In this case, it de-references those variables here, right? So, and what we need to do as well is verification of a credential or a presentation requires a number of policies that we want to apply, right? So there's no verification without a policy doesn't make sense, right? It will always pass, right? So I think it will always pass. It might also always fail if a, if a policy is missing. I've never tried this, but let's give it a policy. So we want at least, right? We want to at least have this compliant with the schema policy, right? So we do not want to accept a verifiable credential or presentation that does not pass this policy, right? Okay. So in this case, the airport examines the verifiable presentation in this case and checks that the credential contained in the presentation actually complies to the JSON schema that the credential references. Right? And, and here we see a list of policies that we applied to the verifiable presentation. And in this case, the list is very small. It's just one policy. It's the JSON schema policy and that passed. And therefore the overall outcome of verification is also true. So in this case, the airport knows that Malati actually presented passport and the passport data is being verified and the passport has been issued by the government. This has happened so far. But this is not enough for, for the airport. The airport also wants to verify that the signature. So the presentation is actually, has actually been signed by the entity that holds the presentation. So in this case, we, we verify the JSON schema and we verify the signature. Right. So it, this is the most basic type of verification. We always want to verify the schema. We also always want to verify the signature. I think, and this is what the airport now does. Right. So now it's getting more interesting. The airport verifies the second type of the second type of presentation. The signature policy. Right. Okay. But now we do something else. We say, we want this. And it's not do this schema and signature again, but let's do something more fancy. Let's apply a dynamic policy. A dynamic policy is not just the name of the policy because as the name suggests, it's dynamic and a policy generally a policy can have arguments. So in this case, our dynamic policy has a number of arguments, namely what this policy should actually verify input data. So it wants to verify the, what are we verifying? We're verifying the marriage certificate and the marriage certificate has, has two, you know, two players, two, two spouses. And there's the first one and the second one. And we want to verify that the first one is the ID of Malati and the second one is the ID of Riesh. So this is already quite complex. So it goes into, it goes into the verifiable credential. It's, and what we're giving here is, oh yeah, what you, what we see here is dollar curly brackets and then the reference to a system variable. This expands to the actual dits, right, of Malati and Riesh. And then we say, and then we say, we want to pass in, we want to pass in the open policy agent rego file, which I think I should show you as well. So let's do this real quick. Why do I have them? I have them. So I have them here. So these, these are the rego files. Oh, perhaps I can just paste it in here. So in this case, the rego file looks like this. And we have about two minutes just so you know, Thomas. Yeah, I'm, I'm done almost. Yeah, it's great. Yeah, so, so this is, so, so this is, this is the, if you look at, at the open policy rego language, it's very, very powerful. And I by no means an expert in this. So it generally allows you to separate policy from, from data. So you can use the rego language to, to match your policy with the structured, any structured data. And the outcome is usually a boolean. This verifies or this doesn't verify. Right. So in this case, we switch to the other thing here. So when we shoot this one, it fails. And this is likely. Let's try this again. Maybe I did a typo. Oh, oh, this is no good. This is no good. I don't know why, why this, why this is now failing. This is, this is a typo in one of my copies of, of what I actually did. So here, what I did here last. So this is probably also something. So what I did here last is I executed the CLI with the whole script. Right. So this is the complete demo of creating the wallets, creating the dates, issuing all the verifiable credentials, presenting all the verifiable credentials. And finally, verifying those credentials with dynamic policies. Right. So if I run the whole lot, this whole demo, what we've done so far, then you will see at the end. Hopefully, you will see at the end that the airport actually did verify. If you verify the passport with the schema and the signature, it did verify the marriage certificate with the dynamic policy and the dynamic policy. Here you see the marriage certificate it uses Malatis did and various did. And the, this is the regular that we actually applied to the in this case. And then next step is it verified the birth certificate the regular is different. So this regular verifies that the child is actually on the child. The child has two parents, and one of the parents is the did of Malati and the other did is that of Riesh. So this is a valid verification of a birth certificate, so that Malati proves that she is actually the mother of that child. And finally, the airport verifies the travel permission from Riesh. So that means that the travel permission references references and an agent doesn't change and I can't remember it references a minor and a guardian so it verifies that the idea of the minor is actually the did of of the child and the idea of the guardian is actually the did of the mother. Right. And ultimately, I have put all those verifiable credentials into a single presentation. Yes, as you know, a verifiable presentation can reference multiple verifiable credentials and the rego to so I would, the airport would only have to verify one single presentation and the rego would be quite a bit more complex, but it could. In fact, do this in one step, right, but but this is something I am. I haven't, you know, I haven't completed yet for this demo. But yeah, so that's it. Yeah. Fantastic. Absolutely fantastic. Hopefully this is inspirational for everybody that, you know, I don't know if by April, IW that will be able to do some interactions similar to this I mean obviously we want to start trying. But, you know, maybe six months or well seven months from now. So, you know, we would all be participating in basically showing an ecosystem like this over did come v2 at IW or maybe sooner. Anyways, certainly in these meetings we can do that. Thomas, amazing work. Quick question for me, I know we're out of time but between these wallets is did come happening for for these presentations and issuances and everything. No, it's not. It's not all the wallets. So, so the the CLI has multi tenant wallets. And as I said earlier, you know, when you issue when you issue a verifiable credential, and you need to give it to holder and the holder wallet already, you know, already receives that verifiable credential automatically and silently. Right. Yeah, I just didn't know if you were actually behind the scenes also using did come in order to, you know, simulate those interactions. I will, you know, I will certainly and and what should what could happen from this is, is that we now hook this up to roots wallet, right, so we can actually send those. Yeah, we send those very fiber credential to roots and then it should be possible in roots to look at them and roots would then I think would create the presentations for it, right. So, so that then we simulate that Malati actually goes to the airport with her roots wallet. Yeah, she presents it and then and then roots wallet would send those presentations to Nessus again, which would be the airport endpoint back and airport and we verify this at the airport. And if we want to do the super fancy then it would only be like one presentation of the required credentials and we have a more complex ego expression. So what can do this in one shot right and we would have a very impressive long list of yada yada yada yada verified verified verified, you're good to go. And then Melati enters the plane with the baby, you know, on her lap at all is good. Fantastic. Okay, let's pick up where we're leaving off here and obviously, yeah, please bring your agent services and mediators that are did come enabled and let's just keep trying to stitch. These kind of situations together. Great meeting. Awesome job, Thomas. Thank you so much. We'll see you all next week. Yeah. Thank you, Thomas. Thanks. Welcome. Thanks.