Main step of GOST 28147-89: Difference between revisions

Content added Content deleted
(Added Wren)
(→‎{{header|Wren}}: Now uses 'fmt' module.)
Line 1,120: Line 1,120:


=={{header|Wren}}==
=={{header|Wren}}==
{{libheader|fmt}}
{{trans|Go}}
{{trans|Go}}
<lang ecmascript>class GOST {
<lang ecmascript>import "/fmt" for Fmt

class GOST {
// assumes 's' is an 8 x 16 integer array
// assumes 's' is an 8 x 16 integer array
construct new(s) {
construct new(s) {
Line 1,160: Line 1,163:
b[3] = (u >> 24) & 0xff
b[3] = (u >> 24) & 0xff
}
}
}

var hexDigits = "0123456789abcdef"

var toHexByte = Fn.new { |x|
x = x & 0xff
if (x == 0) return "00"
var hex = ""
while (x > 0) {
hex = hex + "%(hexDigits[x%16])"
x = (x/16).floor
}
if (hex.count == 2) return hex[1..0]
return "0" + hex
}
}


Line 1,191: Line 1,180:
var g = GOST.new(cbrf)
var g = GOST.new(cbrf)
g.mainStep(input, key)
g.mainStep(input, key)
for (b in g.enc) System.write("[%(toHexByte.call(b))]")
for (b in g.enc) System.write("[%(Fmt.xz(2, b))]")
System.print()</lang>
System.print()</lang>