-
-
Save lekevicius/13c21b72e1d9c1bdf03234c7d9bcfd84 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Reikia base45 iš npm | |
const decode = require('base45').decode | |
const { subtle } = require('crypto').webcrypto | |
// Mano paso informacija kaip pavyzdys. Čia galima įrašyti savo. | |
const pass = '135$MPFW.CWE43F471ASB8IE4$F4O-DWF7+S99N9*+A6%O8C9.MA3Q59KCWE41A6FA73Q5*/EWE4/96PF6FL6XW6RF6U47X96YF4ZQEWE4/96OF64:6F46RF6U47X960G4WE4WF49G4IE0%*5/:E*Q6L24ZH6PI7GM62SC 0LRGEDHA5IED:J+3E5LMC7O:VB841L+3ZL0BG0Y6UZGLP9HTYP-$BL4T:.GWINR1EOAL7E0TVISUMYW3*GCCV5**K**0C5I2HBTZE M5YB7M22CO7QJF:+PCXGBUAG*K616-7EWICW58TI5YAVH+EDO9Y8KBVVBDGT%IM4U139J-PB.C6I4$/NMG6VVOB-INUMHLD5$9B$5:JS $AQJT9NPF3EHT0P:J2QRB.PL$7F2SRGG0.0*9VUY2-7G4Q65T9AEKN.9XHSG:8/3H LV0DQPAM7PVT1GBOQSUBR+M$Y82TGWB0O$FR54F*T2P3YYNJQ1QW9+XJ/.NHE3P5DWB2NDR0QFOXVZJPA5B' | |
// Kokio ilgio duomenų paketas? 135. | |
const len = parseInt(pass.substr(0, pass.indexOf("$"))) | |
// Pačio duomenų paketo ištraukimas | |
const encodedPayload = pass.substr(pass.indexOf("$") + 1, len) | |
const ob = { | |
// Iškoduojam per base45 ir JSON | |
payload: JSON.parse(decode(encodedPayload)), | |
// Neiškoduotas variantas parašo tikrinimui | |
payloadInBase45: encodedPayload, | |
// Pats parašas: viskas, kas likę QR kode. Išsikoduoja į Buffer. | |
signature: decode(pass.substr(pass.indexOf("$") + 1 + len)) | |
} | |
// Viešoji rakto dalis. Ištraukta iš Tikrinimo puslapio kodo. | |
const parsedKey = Uint8Array.from(atob('MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8LnAER0q8iyuIG6yGNBE/8/hoDgrg0oq/ko0vLsmJWMzop31VTbT5uZe0oivYTFaa/g1DXHhWYzS3ld85d8BzCT46ySMI2WkDKEwGLLZg6Fe+bKzd+Zr6hg5+Oss+CNt9d3O4EdXgsDF2UcZeZd1o/waKyVAaXN9hhBimPqz00tMyGknSy1lhl5Moom6+DKqRg2eNb1bYoFTEiDXEcfuq8xxYEYNSAjdcl/DRJ7pPnM+FlAC4uPXnVYNzAXmCQD4l8zY7SccZvxfc0NAOBVuTBn2pA/yD/GsOli1a6Gi38dGCo7syjyvm/tT/anSHiIC4DClthvDlKGNB4VDcjPvXwIDAQAB'), (e => e.charCodeAt(0))); | |
// Patikrinim! | |
function verify(payloadInBase45, signature, key) { | |
return async function (payloadInBase45, signature, key) { | |
console.log(payloadInBase45, signature, key) | |
return subtle.verify({ | |
name: "RSASSA-PKCS1-v1_5" | |
}, key, signature, function (payload) { | |
const len = new ArrayBuffer(payload.length) | |
, buffer = new Uint8Array(len); | |
for (let t = 0, r = payload.length; t < r; t++) | |
buffer[t] = payload.charCodeAt(t); | |
return len | |
}(payloadInBase45)) | |
}(payloadInBase45, signature, key) | |
} | |
subtle.importKey("spki", parsedKey, { | |
name: "RSASSA-PKCS1-v1_5", | |
hash: { | |
name: "SHA-256" | |
} | |
}, !1, ["verify"]) | |
.then((importedKey => verify(ob.payloadInBase45, ob.signature, importedKey))) | |
.then((isValid => (console.log({ | |
isValid: isValid, | |
payload: ob.payload | |
})))) | |
.catch((e => Promise.reject(e))) | |
// Turėtumėte gauti mano duomenis ir faktą, jog parašas sutampa. | |
// Puslapis taip pat patikrina datas, tą kodo dalį išėmiau. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment