You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel/Utils/Encryption.pm

65 lines
1.7 KiB

package NGCP::Panel::Utils::Encryption;
use Sipwise::Base;
use Crypt::OpenSSL::RSA;
use MIME::Base64;
my $rsa_public_key_file = '/etc/ngcp-panel/rsa_public_key.pem';
my $rsa_private_key_file = '/etc/ngcp-panel/rsa_private_key.pem';
my $rsa_encrytper;
my $rsa_decrytper;
sub _check_encrypted {
my $c = shift;
my $encrypted = $c->req->param('encrypted');
if (length($encrypted)
and ('rsa' eq lc($encrypted)
or '1' eq $encrypted
or 'true' eq lc($encrypted))) {
return 1;
}
return 0;
}
sub encrypt_rsa {
my ($c,$plaintext) = @_;
return unless defined $plaintext;
if (_check_encrypted($c)) {
unless ($rsa_encrytper) {
$rsa_encrytper = Crypt::PK::RSA->new();
$rsa_encrytper->import_key($rsa_public_key_file);
die('public key file contains a private key') if $rsa_encrytper->is_private();
}
my $ciphertext = $rsa_encrytper->encrypt($plaintext);
$ciphertext = encode_base64($ciphertext, '');
return $ciphertext;
}
return $plaintext;
}
sub decrypt_rsa {
my ($c,$ciphertext) = @_;
return unless defined $ciphertext;
if (_check_encrypted($c)) {
unless ($rsa_decrytper) {
$rsa_decrytper = Crypt::PK::RSA->new();
$rsa_decrytper->import_key($rsa_private_key_file);
die('private key file contains a public key') unless $rsa_decrytper->is_private();
}
$ciphertext = decode_base64($ciphertext);
my $plaintext = $rsa_decrytper->decrypt($ciphertext);
#$c->log->debug("decrypted: $plaintext");
return $plaintext;
}
return $ciphertext;
}
1;