Skip to content

Commit 5a75380

Browse files
committed
fix: fix
1 parent 606ebd7 commit 5a75380

18 files changed

+161
-89
lines changed

oid4vc-core/Cargo.toml

+6
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,9 @@ serde_urlencoded = "0.7.1"
2222
derive_more = "0.99.16"
2323
identity_credential.workspace = true
2424
futures = "0.3"
25+
26+
[dev-dependencies]
27+
ed25519-dalek = "1.0.1"
28+
rand = "0.7"
29+
lazy_static = "1.4.0"
30+
derivative = "2.2.0"

oid4vc-core/src/jwt.rs

+25-30
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ where
7575
Ok(base64_url::encode(serde_json::to_vec(value)?.as_slice()))
7676
}
7777

78-
// #[cfg(test)]
79-
// mod tests {
80-
// use super::*;
81-
// use crate::{
82-
// test_utils::{MockSubject, MockVerifier},
83-
// IdToken, Verify,
84-
// };
85-
// use serde_json::json;
78+
#[cfg(test)]
79+
mod tests {
80+
use super::*;
81+
use crate::{
82+
test_utils::{MockVerifier, TestSubject},
83+
Verify,
84+
};
85+
use serde_json::{json, Value};
8686

8787
#[tokio::test]
8888
async fn test_encode() {
@@ -97,26 +97,21 @@ where
9797
let subject = TestSubject::new("did:test:123".to_string(), "key_id".to_string()).unwrap();
9898
let encoded = encode(Arc::new(subject), claims).unwrap();
9999

100-
// });
101-
// let subject = MockSubject::new("did:mock:123".to_string(), "key_id".to_string()).unwrap();
102-
// let encoded = encode(Arc::new(subject), claims).await.unwrap();
100+
let verifier = MockVerifier::new();
101+
let (kid, algorithm) = extract_header(&encoded).unwrap();
102+
let public_key = verifier.public_key(&kid).await.unwrap();
103+
let decoded: Value = decode(&encoded, public_key, algorithm).unwrap();
103104

104-
// let verifier = MockVerifier::new();
105-
// let (kid, algorithm) = extract_header(&encoded).unwrap();
106-
// let public_key = verifier.public_key(&kid).await.unwrap();
107-
// let decoded: IdToken = decode(&encoded, public_key, algorithm).unwrap();
108-
109-
// assert_eq!(
110-
// decoded,
111-
// IdToken::builder()
112-
// .iss("did:example:123".to_string())
113-
// .sub("did:example:123".to_string())
114-
// .aud("did:example:456".to_string())
115-
// .exp(9223372036854775807i64)
116-
// .iat(1593436422)
117-
// .nonce("nonce".to_string())
118-
// .build()
119-
// .unwrap()
120-
// )
121-
// }
122-
// }
105+
assert_eq!(
106+
decoded,
107+
json!({
108+
"iss": "did:example:123",
109+
"sub": "did:example:123",
110+
"aud": "did:example:456",
111+
"exp": 9223372036854775807i64,
112+
"iat": 1593436422,
113+
"nonce": "nonce",
114+
})
115+
)
116+
}
117+
}

oid4vc-core/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ pub use rfc7519_claims::RFC7519Claims;
1717
use serde::Serialize;
1818
pub use subject_syntax_type::{DidMethod, SubjectSyntaxType};
1919

20+
#[cfg(test)]
21+
mod test_utils;
22+
2023
#[macro_export]
2124
macro_rules! builder_fn {
2225
($name:ident, $ty:ty) => {

oid4vc-core/src/test_utils.rs

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
use crate::{Sign, Subject, Verify};
2+
use anyhow::Result;
3+
use async_trait::async_trait;
4+
use derivative::{self, Derivative};
5+
use ed25519_dalek::{Keypair, Signature, Signer};
6+
use lazy_static::lazy_static;
7+
use rand::rngs::OsRng;
8+
9+
// Keypair for mocking purposes.
10+
lazy_static! {
11+
pub static ref TEST_KEYPAIR: Keypair = Keypair::generate(&mut OsRng);
12+
}
13+
14+
#[derive(Derivative)]
15+
#[derivative(Default)]
16+
pub struct TestSubject {
17+
#[derivative(Default(value = "did_url::DID::parse(\"did:test:123\").unwrap()"))]
18+
pub did: did_url::DID,
19+
pub key_id: String,
20+
}
21+
22+
impl TestSubject {
23+
pub fn new(did: String, key_id: String) -> Result<Self> {
24+
Ok(TestSubject {
25+
did: did_url::DID::parse(did)?,
26+
key_id,
27+
})
28+
}
29+
}
30+
31+
impl Sign for TestSubject {
32+
fn key_id(&self) -> Option<String> {
33+
Some(self.key_id.clone())
34+
}
35+
36+
fn sign(&self, message: &str) -> Result<Vec<u8>> {
37+
let signature: Signature = TEST_KEYPAIR.sign(message.as_bytes());
38+
Ok(signature.to_bytes().to_vec())
39+
}
40+
}
41+
42+
#[async_trait]
43+
impl Verify for TestSubject {
44+
async fn public_key(&self, _kid: &str) -> Result<Vec<u8>> {
45+
Ok(TEST_KEYPAIR.public.to_bytes().to_vec())
46+
}
47+
}
48+
49+
impl Subject for TestSubject {
50+
fn identifier(&self) -> Result<String> {
51+
Ok(self.did.to_string())
52+
}
53+
}
54+
55+
pub struct MockVerifier;
56+
57+
impl MockVerifier {
58+
pub fn new() -> Self {
59+
MockVerifier {}
60+
}
61+
}
62+
63+
#[async_trait]
64+
impl Verify for MockVerifier {
65+
async fn public_key(&self, _kid: &str) -> Result<Vec<u8>> {
66+
Ok(TEST_KEYPAIR.public.to_bytes().to_vec())
67+
}
68+
}

oid4vp/tests/examples/credentials/jwt_vc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@
2424
}
2525
}
2626
}
27-
}
27+
}

oid4vp/tests/examples/request/pd_ac_vc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525
}
2626
}
2727
]
28-
}
28+
}
+38-38
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
11
{
2-
"id": "example_vc_ac_sd",
3-
"input_descriptors": [
4-
{
5-
"id": "id_credential",
6-
"format": {
7-
"ac_vc": {
8-
"proof_type": [
9-
"CLSignature2019"
10-
]
11-
}
12-
},
13-
"constraints": {
14-
"limit_disclosure": "required",
15-
"fields": [
16-
{
17-
"path": [
18-
"$.schema_id"
19-
],
20-
"filter": {
21-
"type": "string",
22-
"const": "did:indy:idu:test:3QowxFtwciWceMFr7WbwnM:2:BasicScheme:0\\.1"
23-
}
24-
},
25-
{
26-
"path": [
27-
"$.values.first_name"
28-
]
29-
},
30-
{
31-
"path": [
32-
"$.values.last_name"
33-
]
34-
}
35-
]
36-
}
37-
}
38-
]
39-
}
2+
"id": "example_vc_ac_sd",
3+
"input_descriptors": [
4+
{
5+
"id": "id_credential",
6+
"format": {
7+
"ac_vc": {
8+
"proof_type": [
9+
"CLSignature2019"
10+
]
11+
}
12+
},
13+
"constraints": {
14+
"limit_disclosure": "required",
15+
"fields": [
16+
{
17+
"path": [
18+
"$.schema_id"
19+
],
20+
"filter": {
21+
"type": "string",
22+
"const": "did:indy:idu:test:3QowxFtwciWceMFr7WbwnM:2:BasicScheme:0\\.1"
23+
}
24+
},
25+
{
26+
"path": [
27+
"$.values.first_name"
28+
]
29+
},
30+
{
31+
"path": [
32+
"$.values.last_name"
33+
]
34+
}
35+
]
36+
}
37+
}
38+
]
39+
}

oid4vp/tests/examples/request/pd_jwt_vc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@
2727
}
2828
}
2929
]
30-
}
30+
}

oid4vp/tests/examples/request/pd_ldp_vc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@
2727
}
2828
}
2929
]
30-
}
30+
}

oid4vp/tests/examples/request/pd_mdl_iso_cbor.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,4 @@
5454
}
5555
}
5656
]
57-
}
57+
}

oid4vp/tests/examples/request/vp_token_type_and_claims.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@
4141
}
4242
}
4343
]
44-
}
44+
}

oid4vp/tests/examples/request/vp_token_type_only.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525
}
2626
}
2727
]
28-
}
28+
}

oid4vp/tests/examples/response/presentation_submission.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
}
1313
}
1414
]
15-
}
15+
}

oid4vp/tests/examples/response/presentation_submission_multiple_vps.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@
2121
}
2222
}
2323
]
24-
}
24+
}

oid4vp/tests/examples/response/ps_ac_vc_sd.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
}
1313
}
1414
]
15-
}
15+
}

oid4vp/tests/examples/response/ps_jwt_vc.json

+9-9
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"definition_id": "example_jwt_vc",
33
"id": "example_jwt_vc_presentation_submission",
44
"descriptor_map": [
5-
{
6-
"id": "id_credential",
7-
"path": "$",
8-
"format": "jwt_vp_json",
9-
"path_nested": {
10-
"path": "$.vp.verifiableCredential[0]",
11-
"format": "jwt_vc_json"
5+
{
6+
"id": "id_credential",
7+
"path": "$",
8+
"format": "jwt_vp_json",
9+
"path_nested": {
10+
"path": "$.vp.verifiableCredential[0]",
11+
"format": "jwt_vc_json"
12+
}
1213
}
13-
}
1414
]
15-
}
15+
}

oid4vp/tests/examples/response/ps_ldp_vc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
}
1313
}
1414
]
15-
}
15+
}

oid4vp/tests/examples/response/ps_mdl_iso_cbor.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
"path": "$"
99
}
1010
]
11-
}
11+
}

0 commit comments

Comments
 (0)