Main step of GOST 28147-89: Difference between revisions
Content added Content deleted
(Added Kotlin) |
(→{{header|REXX}}: used a more readable DO index variable, changed comments and whitespace, used a template for output.) |
||
Line 679: | Line 679: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
{{trans|BBC BASIC}} |
{{trans|BBC BASIC}} |
||
<lang rexx>/*REXX |
<lang rexx>/*REXX program implements main step GOST 28147-89 based on a Feistel network. */ |
||
numeric digits 12 /* ┌── a list of 4─bit S─box values used by */ |
numeric digits 12 /* ┌── a list of 4─bit S─box values used by */ |
||
/* ↓ the Central Bank of Russian Federation.*/ |
/* ↓ the Central Bank of Russian Federation.*/ |
||
@.0 = 4 10 9 2 13 8 0 14 6 11 1 12 7 15 5 3 |
|||
@.1 = 14 11 4 12 6 13 15 10 2 3 8 1 0 7 5 9 |
|||
@.2 = 5 8 1 13 10 3 4 2 14 15 12 7 6 0 9 11 |
|||
@.3 = 7 13 10 1 0 8 9 15 14 4 6 12 11 2 5 3 |
|||
@.4 = 6 12 7 1 5 15 13 8 4 10 9 14 0 3 11 2 |
|||
@.5 = 4 11 10 0 7 2 1 13 3 6 8 5 9 12 15 14 |
|||
@.6 = 13 11 4 1 3 15 5 9 0 10 14 7 6 8 2 12 |
|||
@.7 = 1 15 13 0 5 7 10 4 9 2 3 14 6 11 8 12 |
|||
/* [ |
/* [↓] build the sub-keys array from above. */ |
||
do r=0 for 8; do c=0 for 16; !.r.c |
do r=0 for 8; do c=0 for 16; !.r.c=word(@.r, c + 1); end; end |
||
z=0 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
do j=0 for 4; jj=j + j; jjp=jj + 1 /*calculate the array'a "subscripts". */ |
|||
⚫ | |||
⚫ | |||
k=#.1+key; p=2**32 |
|||
cm=$ // 16; cd=$ % 16 /*perform modulus and integer division.*/ |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
k = c2d( bitxor( bitor( d2c(z * 2**11, 4), d2c(z % 2**21, 4) ), d2c(#2, 4) ) ) |
|||
say center(d2x(k) ' ' d2x(#1), 79) /*stick a fork in it, we're all done. */</lang> |
|||
{{out|output|:}} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
k = c2d( bitxor( bitor( d2c(z* 2**11, 4), d2c(z% 2**21, 4)), d2c(#.2, 4))) |
|||
say center(d2x(k) d2x(#.1), 79) /*display the (centered) result.*/ |
|||
⚫ | |||
'''output''' |
|||
<pre> |
<pre> |
||
7CF881F 43B0421 |
|||
</pre> |
</pre> |
||