mastofeed-iframe-embed/lib/apCryptoShit.js

70 lines
2.3 KiB
JavaScript
Raw Normal View History

2024-10-13 16:50:46 +02:00
const crypto = require('crypto')
// public methods
function getPublicKey(){
_precheck()
return _pubKey
}
function getPrivateKey(){
_precheck()
return _privKey
}
function getDomainName(){
_precheck();
return _domainName;
}
function getKeyId(){
_precheck();
return _keyId;
}
function sign(str){
_precheck()
2024-10-13 18:38:08 +02:00
var signerObject = crypto.createSign("RSA-SHA256");// needs to be "RSASSA-PKCS1-v1_5 with SHA-256" I'm assuming this is RSA_PKCS1_PADDING...???
2024-10-13 16:50:46 +02:00
signerObject.update(str);
2024-10-13 18:38:08 +02:00
return signerObject.sign({key:_privKey,padding:crypto.constants.RSA_PKCS1_PADDING}, "base64");
2024-10-13 16:50:46 +02:00
}
function verify(str,signature){
_precheck();
var verifierObject = crypto.createVerify("RSA-SHA256");
verifierObject.update(str);
2024-10-13 18:38:08 +02:00
return verifierObject.verify({key:_pubKey, padding:crypto.constants.RSA_PKCS1_PADDING}, signature, "base64");
2024-10-13 16:50:46 +02:00
}
// private
let _precheckOk=false;
let _privKey=""
let _pubKey="";
let _keyId=""
let _domainName=""
function _precheck(){
if (_precheckOk){return;}
if (!process.env.AP_PRIVATE_KEY_BASE64 || !process.env.AP_PUBLIC_KEY_BASE64){
console.error("you dumb shit, set AP_PRIVATE_KEY_BASE64 / AP_PUBLIC_KEY_BASE64 ")
process.exit(1)
}
_pubKey=atob(process.env.AP_PUBLIC_KEY_BASE64);
_privKey=atob(process.env.AP_PRIVATE_KEY_BASE64);
// actually check it lol
var signerObject = crypto.createSign("RSA-SHA256");
signerObject.update("hello world");
let signature = signerObject.sign({key:_privKey, padding:crypto.constants.RSA_PKCS1_PSS_PADDING}, "base64");
var verifierObject = crypto.createVerify("RSA-SHA256");
verifierObject.update("hello world");
var verified = verifierObject.verify({key:_pubKey, padding:crypto.constants.RSA_PKCS1_PSS_PADDING}, signature, "base64");
if (!verified){
console.error("idk what the fuck you did but the private and public keys dont fucking uhh work???")
console.error('probably fix your AP_PRIVATE_KEY_BASE64 and AP_PUBLIC_KEY_BASE64')
process.exit(1)
}
_domainName = process.env.DOMAIN_NAME || "mastofeed.com"
_keyId=`https://${_domainName}/actor#main-key`
_precheckOk=true;
}
module.exports={sign,verify,getPublicKey,getPrivateKey,getDomainName,getKeyId}