⚠️ Deprecated API Notice
This API is deprecated and will be removed in a future release.
import * as jose from 'jose'
const algorithm = 'ES256'
const keyPem = `-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgiyvo0X+VQ0yIrOaN
nlrnUclopnvuuMfoc8HHly3505OhRANCAAQWUcdZ8uTSAsFuwtNy4KtsKqgeqYxg
l6kwL5D4N3pEGYGIDjV69Sw0zAt43480WqJv7HCL0mQnyqFmSrxj8jMa
-----END PRIVATE KEY-----`
const privateKey = await jose.importPKCS8(keyPem, algorithm)
const verifyingKeyJWKS = {
jku: 'jwks_endpoint',
kid: 'jwks_kid',
};
const payload = 'user_data or dvr object';
const userDataJWS = await new jose.SignJWT({ 'data': payload })
.setProtectedHeader({
alg: algorithm,
jku: verifyingKeyJWKS.jku,
kid: verifyingKeyJWKS.kid,
})
.sign(privateKey);
console.log(userDataJWS);
const userData = {
"data": {
"bcaDocID": "DOC897923CP",
"bcaDocName": "BCA Customer Profile",
"customerID": "BCA123756108",
"personalInfo": {
"firstName": "Dewi",
"lastName": "Putri",
"dateOfBirth": "1980-01-01",
"driverLicenseNumber": "DL123456789"
},
"financialInfo": {
"averageMonthlyBalance": 200000000,
"creditRatings": {
"pefindo": 720,
"creditKarma": 725,
"equiInfo": 730
},
"accounts": {
"checking": {
"accountNumber": "CHK1234567",
"balance": 50000000
},
"savings": {
"accountNumber": "SAV1234567",
"balance": 150000000
}
}
},
"loanHistory": [
{
"loanType": "auto",
"loanAmount": 200000000,
"loanStatus": "closed"
}
],
"contactInfo": {
"email": "dewi.putri@yahoo.com",
"phone": "+62-855-123-4567"
},
"flags": {
"isOverdraftProtected": true,
"isVIP": false,
"fraudAlerts": false
}
}
}
eyJ0eXAiOiJKV1QiLCJqa3UiOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20venVsYW1kYXQvenVsYW1kYXQuZ2l0aHViLmlvL3NhbXBsZS1rZXkvemtwLWtleS9pc3N1ZXIta2V5Lmpzb24iLCJraWQiOiJrLTEiLCJhbGciOiJFUzI1NiJ9.eyJkYXRhIjp7ImJjYURvY0lEIjoiRE9DODk3OTIzQ1AiLCJiY2FEb2NOYW1lIjoiQkNBIEN1c3RvbWVyIFByb2ZpbGUiLCJjdXN0b21lcklEIjoiQkNBMTIzNzU2MTA4IiwicGVyc29uYWxJbmZvIjp7ImZpcnN0TmFtZSI6IkRld2kiLCJsYXN0TmFtZSI6IlB1dHJpIiwiZGF0ZU9mQmlydGgiOiIxOTgwLTAxLTAxIiwiZHJpdmVyTGljZW5zZU51bWJlciI6IkRMMTIzNDU2Nzg5In0sImZpbmFuY2lhbEluZm8iOnsiYXZlcmFnZU1vbnRobHlCYWxhbmNlIjoyMDAwMDAwMDAsImNyZWRpdFJhdGluZ3MiOnsicGVmaW5kbyI6NzIwLCJjcmVkaXRLYXJtYSI6NzI1LCJlcXVpSW5mbyI6NzMwfSwiYWNjb3VudHMiOnsiY2hlY2tpbmciOnsiYWNjb3VudE51bWJlciI6IkNISzEyMzQ1NjciLCJiYWxhbmNlIjo1MDAwMDAwMH0sInNhdmluZ3MiOnsiYWNjb3VudE51bWJlciI6IlNBVjEyMzQ1NjciLCJiYWxhbmNlIjoxNTAwMDAwMDB9fX0sImxvYW5IaXN0b3J5IjpbeyJsb2FuVHlwZSI6ImF1dG8iLCJsb2FuQW1vdW50IjoyMDAwMDAwMDAsImxvYW5TdGF0dXMiOiJjbG9zZWQifV0sImNvbnRhY3RJbmZvIjp7ImVtYWlsIjoiZGV3aS5wdXRyaUB5YWhvby5jb20iLCJwaG9uZSI6Iis2Mi04NTUtMTIzLTQ1NjcifSwiZmxhZ3MiOnsiaXNPdmVyZHJhZnRQcm90ZWN0ZWQiOnRydWUsImlzVklQIjpmYWxzZSwiZnJhdWRBbGVydHMiOmZhbHNlfX19.63naWQ6I3Yg4WFzuiUneYQ85leg5scPDK_CMzQUuAYk2PjlNaJ8Hujp7uk0ml8qf9lSUI2YOgL0iwu8AL_D6hg
const dvr = {
"data": {
"dvr_title": "My DVR",
"dvr_id": "15fd4304-cec0-46c4-85b7-f9d8d5daee1a",
"query_engine_ver": "0.1.0",
"query_method_ver": "a788c686bf77b9ceafcf81b5f39625fbfa9f7a7a2658a8b8a134b6839cd92cf5",
"query": "{\"and\":[{\"==\":[\"bcaDocID\",\"DOC897923CP\"]},{\"~==\":[\"personalInfo.firstName\",\"Dewi\"]},{\"~==\":[\"personalInfo.lastName\",\"Putri\"]},{\"~==\":[\"personalInfo.driverLicenseNumber\",\"DL123456789\"]},{\">=\":[\"financialInfo.creditRatings.pefindo\",650]},{\">=\":[\"financialInfo.accounts.savings.balance\",30000000]}]}",
"user_data_url": "https://xyz.com",
"user_data_verifying_key": {
"KeysetEndpoint": {
"jku": "https://raw.githubusercontent.com/zulamdat/zulamdat.github.io/sample-key/zkp-key/issuer-key.json",
"kid": "k-1"
}
},
"dvr_verifiying_key": {
"PublicKey": {
"x": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp6WJlwAtld/U4hDmmuuMdZCVtMeU",
"y": "IT3xkDdUwLOvsVVA+iiSwfaX4HqKlRPDGG+F6WGjnxys9T5GtNe3nvewOA=="
}
}
}
}
eyJ0eXAiOiJKV1QiLCJqa3UiOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20venVsYW1kYXQvenVsYW1kYXQuZ2l0aHViLmlvL3NhbXBsZS1rZXkvemtwLWtleS92ZXJpZmllci1rZXkuanNvbiIsImtpZCI6ImstMSIsImFsZyI6IkVTMjU2In0.eyJkYXRhIjp7ImR2cl90aXRsZSI6Ik15IERWUiIsImR2cl9pZCI6IjE1ZmQ0MzA0LWNlYzAtNDZjNC04NWI3LWY5ZDhkNWRhZWUxYSIsInF1ZXJ5X2VuZ2luZV92ZXIiOiIwLjEuMCIsInF1ZXJ5X21ldGhvZF92ZXIiOiJhNzg4YzY4NmJmNzdiOWNlYWZjZjgxYjVmMzk2MjVmYmZhOWY3YTdhMjY1OGE4YjhhMTM0YjY4MzljZDkyY2Y1IiwicXVlcnkiOiJ7XCJhbmRcIjpbe1wiPT1cIjpbXCJiY2FEb2NJRFwiLFwiRE9DODk3OTIzQ1BcIl19LHtcIn49PVwiOltcInBlcnNvbmFsSW5mby5maXJzdE5hbWVcIixcIkRld2lcIl19LHtcIn49PVwiOltcInBlcnNvbmFsSW5mby5sYXN0TmFtZVwiLFwiUHV0cmlcIl19LHtcIn49PVwiOltcInBlcnNvbmFsSW5mby5kcml2ZXJMaWNlbnNlTnVtYmVyXCIsXCJETDEyMzQ1Njc4OVwiXX0se1wiPj1cIjpbXCJmaW5hbmNpYWxJbmZvLmNyZWRpdFJhdGluZ3MucGVmaW5kb1wiLDY1MF19LHtcIj49XCI6W1wiZmluYW5jaWFsSW5mby5hY2NvdW50cy5zYXZpbmdzLmJhbGFuY2VcIiwzMDAwMDAwMF19XX0iLCJ1c2VyX2RhdGFfdXJsIjoiaHR0cHM6Ly94eXouY29tIiwidXNlcl9kYXRhX3ZlcmlmeWluZ19rZXkiOnsiS2V5c2V0RW5kcG9pbnQiOnsiamt1IjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3p1bGFtZGF0L3p1bGFtZGF0LmdpdGh1Yi5pby9zYW1wbGUta2V5L3prcC1rZXkvaXNzdWVyLWtleS5qc29uIiwia2lkIjoiay0xIn19LCJkdnJfdmVyaWZpeWluZ19rZXkiOnsiUHVibGljS2V5Ijp7IngiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVwNldKbHdBdGxkL1U0aERtbXV1TWRaQ1Z0TWVVIiwieSI6IklUM3hrRGRVd0xPdnNWVkEraWlTd2ZhWDRIcUtsUlBER0crRjZXR2pueHlzOVQ1R3ROZTNudmV3T0E9PSJ9fX19.0Qwtfxef01KLmK4ms99C4CrPR51Mxrp5Q5l6A3HxwNsG44MdwR5xBNlA8_SONvdsVlYW-uYcvBCxNJg2k-6sEA