Spaces:
Runtime error
Runtime error
| class Security{ | |
| keypair; | |
| privateKey; | |
| publicKey; | |
| fingerprint; | |
| ready = false; | |
| async start(){ | |
| let keypair = await window.crypto.subtle.generateKey( | |
| { | |
| name: "RSA-PSS", | |
| modulusLength: 1024, | |
| publicExponent: new Uint8Array([0x01, 0x00, 0x01]), | |
| hash: {name: "SHA-256"}, | |
| }, | |
| false, | |
| ["sign"] | |
| ) | |
| this.keypair = keypair | |
| this.privateKey = keypair.privateKey | |
| this.publicKey = keypair.publicKey | |
| let exportKey_ba = await window.crypto.subtle.exportKey( | |
| "spki", | |
| keypair.publicKey | |
| ) | |
| let exportKey_u8 = new Uint8Array(exportKey_ba); | |
| this.publicKey = "-----BEGIN PUBLIC KEY-----\n"+btoa(String.fromCharCode(...exportKey_u8))+"\n-----END PUBLIC KEY-----" | |
| this.fingerprint = await this.generateFingerprint() | |
| this.ready = true | |
| return true | |
| } | |
| async sign(data){ | |
| let encoder = new TextEncoder() | |
| let sign_ba = await window.crypto.subtle.sign( | |
| { | |
| name: "RSA-PSS", | |
| saltLength: 32, | |
| }, | |
| this.keypair.privateKey, | |
| encoder.encode(data) | |
| ) | |
| let sign_u8 = new Uint8Array(sign_ba); | |
| return btoa(String.fromCharCode(...sign_u8)) | |
| } | |
| async generateFingerprint(){ | |
| const fpPromise = await import('/static/js/fingerprintv4.js').then(FingerprintJS => FingerprintJS.load()) | |
| const fp = await fpPromise.get() | |
| return fp.visitorId | |
| } | |
| } |