$ 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;