31 lines
1.2 KiB
Plaintext
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;
|