X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=gost3413%2Fpadding.go;fp=gost3413%2Fpadding.go;h=f0941418527e643df24ce2e6ae47ddec878f79e3;hb=c07494bbd559b9d00f391e28cfd070e18afe9900;hp=0000000000000000000000000000000000000000;hpb=107600dede989f0cc479b5a72c5f97e174307154;p=gogost.git diff --git a/gost3413/padding.go b/gost3413/padding.go new file mode 100644 index 0000000..f094141 --- /dev/null +++ b/gost3413/padding.go @@ -0,0 +1,48 @@ +// GoGOST -- Pure Go GOST cryptographic functions library +// Copyright (C) 2015-2019 Sergey Matveev +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// GOST R 34.13-2015 padding methods. +package gost3413 + +func PadSize(dataSize, blockSize int) int { + if dataSize < blockSize { + return blockSize - dataSize + } + if dataSize%blockSize == 0 { + return 0 + } + return blockSize - dataSize%blockSize +} + +func Pad1(data []byte, blockSize int) []byte { + padSize := PadSize(len(data), blockSize) + if padSize == 0 { + return data + } + return append(data, make([]byte, padSize)...) +} + +func Pad2(data []byte, blockSize int) []byte { + pad := make([]byte, 1+PadSize(len(data)+1, blockSize)) + pad[0] = byte(0x80) + return append(data, pad...) +} + +func Pad3(data []byte, blockSize int) []byte { + if PadSize(len(data), blockSize) == 0 { + return data + } + return Pad2(data, blockSize) +}