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}
|