onairos
Version:
The Onairos Library is a collection of functions that enable Applications to connect and communicate data with Onairos Identities via User Authorization. Integration for developers is seamless, simple and effective for all applications. LLM SDK capabiliti
58 lines (53 loc) • 1.86 kB
JSX
// Function to convert PEM encoded public key to a format usable by the Web Crypto API
function pemToBuffer(pem) {
// Remove the first and last lines (headers), and all line breaks
const base64String = pem
.replace(/-----BEGIN PUBLIC KEY-----/, '')
.replace(/-----END PUBLIC KEY-----/, '')
.replace(/\s/g, ''); // remove all whitespace, not just line breaks
const binaryString = window.atob(base64String);
const bytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
// Function to encrypt data using RSA
export async function rsaEncrypt(publicKeyPem, data) {
try {
const publicKeyBuffer = pemToBuffer(publicKeyPem);
const importedKey = await window.crypto.subtle.importKey(
'spki',
publicKeyBuffer,
{
name: 'RSA-OAEP',
hash: {name: 'SHA-256'}
},
true,
['encrypt']
);
const encrypted = await window.crypto.subtle.encrypt(
{ name: 'RSA-OAEP' },
importedKey,
new TextEncoder().encode(data)
);
return bufferToBase64(encrypted);
} catch (error) {
console.error("rsaEncrypt error:", error);
return null;
}
}
// Function to convert ArrayBuffer to Base64
function bufferToBase64(buffer) {
try{
let binary = '';
const bytes = new Uint8Array(buffer);
const len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}catch(e){
console.error("Eror in buffertoBase64 : ", e)
}
}