RosettaCodeData/Task/RSA-code/Seed7/rsa-code.seed7

31 lines
1.2 KiB
Plaintext

$ include "seed7_05.s7i";
include "bigint.s7i";
include "bytedata.s7i";
const proc: main is func
local
const string: plainText is "Rosetta Code";
# Use a key big enough to hold 16 bytes of plain text in a single block.
const bigInteger: modulus is 9516311845790656153499716760847001433441357_;
const bigInteger: encode is 65537_;
const bigInteger: decode is 5617843187844953170308463622230283376298685_;
var bigInteger: plainTextNumber is 0_;
var bigInteger: encodedNumber is 0_;
var bigInteger: decodedNumber is 0_;
var string: decodedText is "";
begin
writeln("Plain text: " <& plainText);
plainTextNumber := bytes2BigInt(plainText, UNSIGNED, BE);
if plainTextNumber >= modulus then
writeln("Plain text message too long");
else
writeln("Plain text as a number: " <& plainTextNumber);
encodedNumber := modPow(plainTextNumber, encode, modulus);
writeln("Encoded: " <& encodedNumber);
decodedNumber := modPow(encodedNumber, decode, modulus);
writeln("Decoded: " <& decodedNumber);
decodedText := bytes(decodedNumber, UNSIGNED, BE);
writeln("Decoded number as text: " <& decodedText);
end if;
end func;