OAuth & SSH Keygen
This commit is contained in:
84
pkcs1To8.js
Normal file
84
pkcs1To8.js
Normal file
@@ -0,0 +1,84 @@
|
||||
/* eslint no-bitwise: 0 */
|
||||
|
||||
function wrap(text, len) {
|
||||
const length = len || 72;
|
||||
let result = "";
|
||||
for (let i = 0; i < text.length; i += length) {
|
||||
result += text.slice(i, i + length);
|
||||
result += "\n";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function pemPrivateKey(key) {
|
||||
return `-----BEGIN PRIVATE KEY-----\n${wrap(key, 64)}-----END PRIVATE KEY-----`;
|
||||
}
|
||||
|
||||
function stripPemFormatting(str) {
|
||||
return str
|
||||
.replace(/^-----BEGIN (?:RSA )?(?:PRIVATE|PUBLIC) KEY-----$/m, "")
|
||||
.replace(/^-----END (?:RSA )?(?:PRIVATE|PUBLIC) KEY-----$/m, "")
|
||||
.replace(/[\n\r]/g, "");
|
||||
}
|
||||
function arrayToPem(a) {
|
||||
return window.btoa(a.map(c => String.fromCharCode(c)).join(""));
|
||||
}
|
||||
|
||||
function stringToArray(s) {
|
||||
return s.split("").map(c => c.charCodeAt());
|
||||
}
|
||||
|
||||
function pemToArray(pem) {
|
||||
return stringToArray(window.atob(pem));
|
||||
}
|
||||
|
||||
const prefix = [
|
||||
0x30,
|
||||
0x82,
|
||||
0x04,
|
||||
0xbc,
|
||||
0x02,
|
||||
0x01,
|
||||
0x00,
|
||||
0x30,
|
||||
0x0d,
|
||||
0x06,
|
||||
0x09,
|
||||
0x2a,
|
||||
0x86,
|
||||
0x48,
|
||||
0x86,
|
||||
0xf7,
|
||||
0x0d,
|
||||
0x01,
|
||||
0x01,
|
||||
0x01,
|
||||
0x05,
|
||||
0x00,
|
||||
0x04,
|
||||
0x82,
|
||||
0x04,
|
||||
0xa6,
|
||||
];
|
||||
|
||||
function pkcs1To8(privateKeyPkcs1Pem) {
|
||||
const pem = stripPemFormatting(privateKeyPkcs1Pem);
|
||||
const privateKeyPkcs1Array = pemToArray(pem);
|
||||
const prefixPkcs8 = prefix.concat(privateKeyPkcs1Array);
|
||||
const privateKeyPkcs8Pem = arrayToPem(prefixPkcs8);
|
||||
const pkcs8Pem = pemPrivateKey(privateKeyPkcs8Pem);
|
||||
return pkcs8Pem;
|
||||
}
|
||||
|
||||
// crypto.subtle.importKey(
|
||||
// "spki",
|
||||
// keyTextBuffer,
|
||||
// {
|
||||
// name: "RSASSA-PKCS1-v1_5",
|
||||
// hash: { name: "SHA-256" },
|
||||
// },
|
||||
// true,
|
||||
// ["verify"]
|
||||
// );
|
||||
|
||||
module.exports = { pkcs1To8 };
|
||||
Reference in New Issue
Block a user