txt: ## dist_cpan-BDUGGAN-Crypt-RSA.md
  # Crypt::RSA
  
  [![Build Status](https://travis-ci.org/bduggan/p6-Crypt-RSA.svg?branch=master)](https://travis-ci.org/bduggan/p6-Crypt-RSA)
  
  ## SYNOPSIS
  
  Pure Perl 6 implementation of RSA public key encryption.
  
  ```
  
  my $crypt = Crypt::RSA.new;
  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);
  
  
  ```
  
  ## DESCRIPTION
  
  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`.
  
  ## EXAMPLES
  
  ```
  use Crypt::Random;
  use Crypt::Random::Extra;
  
  my $crypt = Crypt::RSA.new(
      random-prime-generator => sub {
          crypt_random_prime()
      },
      random-range-picker => sub ($range) {
          my $size = log($range, 10).Int;
          my $rand = crypt_random_uniform($range.max,$size);
          return $range[$rand];
      }
  );
  
  ```
  
  ## References
  
  * <https://people.csail.mit.edu/rivest/Rsapaper.pdf>
  * <https://www.promptworks.com/blog/public-keys-in-perl-6>
  