mirror of
https://github.com/emmansun/gmsm.git
synced 2025-04-22 02:06:18 +08:00
69 lines
3.3 KiB
Go
69 lines
3.3 KiB
Go
package cipher
|
|
|
|
import (
|
|
"crypto/cipher"
|
|
|
|
"github.com/emmansun/gmsm/internal/byteorder"
|
|
"github.com/emmansun/gmsm/internal/cipher/xts"
|
|
)
|
|
|
|
// NewXTSEncrypter creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes).
|
|
func NewXTSEncrypter(cipherFunc CipherCreator, key, tweakKey, tweak []byte) (cipher.BlockMode, error) {
|
|
return xts.NewXTSEncrypter(cipherFunc, key, tweakKey, tweak, false)
|
|
}
|
|
|
|
// NewXTSEncrypterWithSector creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) with sector number.
|
|
func NewXTSEncrypterWithSector(cipherFunc CipherCreator, key, tweakKey []byte, sectorNum uint64) (cipher.BlockMode, error) {
|
|
tweak := make([]byte, blockSize)
|
|
byteorder.LEPutUint64(tweak[:8], sectorNum)
|
|
return NewXTSEncrypter(cipherFunc, key, tweakKey, tweak)
|
|
}
|
|
|
|
// NewGBXTSEncrypter creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes).
|
|
// It follows GB/T 17964-2021.
|
|
func NewGBXTSEncrypter(cipherFunc CipherCreator, key, tweakKey, tweak []byte) (cipher.BlockMode, error) {
|
|
return xts.NewXTSEncrypter(cipherFunc, key, tweakKey, tweak, true)
|
|
}
|
|
|
|
// NewGBXTSEncrypterWithSector creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) with sector number.
|
|
// It follows GB/T 17964-2021.
|
|
func NewGBXTSEncrypterWithSector(cipherFunc CipherCreator, key, tweakKey []byte, sectorNum uint64) (cipher.BlockMode, error) {
|
|
tweak := make([]byte, blockSize)
|
|
byteorder.LEPutUint64(tweak[:8], sectorNum)
|
|
return NewGBXTSEncrypter(cipherFunc, key, tweakKey, tweak)
|
|
}
|
|
|
|
// NewXTSDecrypter creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) for decryption.
|
|
func NewXTSDecrypter(cipherFunc CipherCreator, key, tweakKey, tweak []byte) (cipher.BlockMode, error) {
|
|
return xts.NewXTSDecrypter(cipherFunc, key, tweakKey, tweak, false)
|
|
}
|
|
|
|
// NewXTSDecrypterWithSector creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) with sector number for decryption.
|
|
func NewXTSDecrypterWithSector(cipherFunc CipherCreator, key, tweakKey []byte, sectorNum uint64) (cipher.BlockMode, error) {
|
|
tweak := make([]byte, blockSize)
|
|
byteorder.LEPutUint64(tweak[:8], sectorNum)
|
|
return NewXTSDecrypter(cipherFunc, key, tweakKey, tweak)
|
|
}
|
|
|
|
// NewGBXTSDecrypter creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) for decryption.
|
|
// It follows GB/T 17964-2021.
|
|
func NewGBXTSDecrypter(cipherFunc CipherCreator, key, tweakKey, tweak []byte) (cipher.BlockMode, error) {
|
|
return xts.NewXTSDecrypter(cipherFunc, key, tweakKey, tweak, true)
|
|
}
|
|
|
|
// NewGBXTSDecrypterWithSector creates a Cipher given a function for creating the underlying
|
|
// block cipher (which must have a block size of 16 bytes) with sector number for decryption.
|
|
// It follows GB/T 17964-2021.
|
|
func NewGBXTSDecrypterWithSector(cipherFunc CipherCreator, key, tweakKey []byte, sectorNum uint64) (cipher.BlockMode, error) {
|
|
tweak := make([]byte, blockSize)
|
|
byteorder.LEPutUint64(tweak[:8], sectorNum)
|
|
return NewGBXTSDecrypter(cipherFunc, key, tweakKey, tweak)
|
|
}
|