Perl6 RSA encryption
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib/Crypt cleanup, readme Aug 9, 2016
t tests Sep 30, 2016
.travis.yml travis Aug 9, 2016
LICENSE artistic license Sep 30, 2016
META6.json Use SPDX identifier in license field of META6.json Apr 27, 2017 readme Sep 30, 2016


Build Status


Pure Perl 6 implementation of RSA public key encryption.

my $crypt =;
my ($public,$private) = $crypt.generate-keys;

my $message = 123456789;
my $encrypted = $crypt.encrypt($message);
my $decrypted = $crypt.decrypt($encrypted);

my $message = 123456789;
my $signature = $crypt.generate-signature($message);
die unless $crypt.verify-signature($message,$signature);


This is a very simplistic implementation of the RSA algorithm for public key encryption.

By default, it relies on Perl 6 built-ins for randomness, but the constructor takes two optional arguments: random-prime-generator(UInt $digits) and random-range-picker(Range $range) that can be used instead. Any arguments to generate-keys (such as the number of digits or number of bits) will be passed on to random-prime-generator.


use Crypt::Random;
use Crypt::Random::Extra;

my $crypt =
    random-prime-generator => sub {
    random-range-picker => sub ($range) {
        my $size = log($range, 10).Int;
        my $rand = crypt_random_uniform($range.max,$size);
        return $range[$rand];