package crypto
import (
"crypto/aes"
"crypto/hmac"
"crypto/sha256"
"hash"
"github.com/jcmturner/gokrb5/v8/crypto/common"
"github.com/jcmturner/gokrb5/v8/crypto/rfc8009"
"github.com/jcmturner/gokrb5/v8/iana/chksumtype"
"github.com/jcmturner/gokrb5/v8/iana/etypeID"
)
type Aes128CtsHmacSha256128 struct {
}
func (e Aes128CtsHmacSha256128 ) GetETypeID () int32 {
return etypeID .AES128_CTS_HMAC_SHA256_128
}
func (e Aes128CtsHmacSha256128 ) GetHashID () int32 {
return chksumtype .HMAC_SHA256_128_AES128
}
func (e Aes128CtsHmacSha256128 ) GetKeyByteSize () int {
return 128 / 8
}
func (e Aes128CtsHmacSha256128 ) GetKeySeedBitLength () int {
return e .GetKeyByteSize () * 8
}
func (e Aes128CtsHmacSha256128 ) GetHashFunc () func () hash .Hash {
return sha256 .New
}
func (e Aes128CtsHmacSha256128 ) GetMessageBlockByteSize () int {
return 1
}
func (e Aes128CtsHmacSha256128 ) GetDefaultStringToKeyParams () string {
return "00008000"
}
func (e Aes128CtsHmacSha256128 ) GetConfounderByteSize () int {
return aes .BlockSize
}
func (e Aes128CtsHmacSha256128 ) GetHMACBitLength () int {
return 128
}
func (e Aes128CtsHmacSha256128 ) GetCypherBlockBitLength () int {
return aes .BlockSize * 8
}
func (e Aes128CtsHmacSha256128 ) StringToKey (secret string , salt string , s2kparams string ) ([]byte , error ) {
saltp := rfc8009 .GetSaltP (salt , "aes128-cts-hmac-sha256-128" )
return rfc8009 .StringToKey (secret , saltp , s2kparams , e )
}
func (e Aes128CtsHmacSha256128 ) RandomToKey (b []byte ) []byte {
return rfc8009 .RandomToKey (b )
}
func (e Aes128CtsHmacSha256128 ) EncryptData (key , data []byte ) ([]byte , []byte , error ) {
return rfc8009 .EncryptData (key , data , e )
}
func (e Aes128CtsHmacSha256128 ) EncryptMessage (key , message []byte , usage uint32 ) ([]byte , []byte , error ) {
return rfc8009 .EncryptMessage (key , message , usage , e )
}
func (e Aes128CtsHmacSha256128 ) DecryptData (key , data []byte ) ([]byte , error ) {
return rfc8009 .DecryptData (key , data , e )
}
func (e Aes128CtsHmacSha256128 ) DecryptMessage (key , ciphertext []byte , usage uint32 ) ([]byte , error ) {
return rfc8009 .DecryptMessage (key , ciphertext , usage , e )
}
func (e Aes128CtsHmacSha256128 ) DeriveKey (protocolKey , usage []byte ) ([]byte , error ) {
return rfc8009 .DeriveKey (protocolKey , usage , e ), nil
}
func (e Aes128CtsHmacSha256128 ) DeriveRandom (protocolKey , usage []byte ) ([]byte , error ) {
return rfc8009 .DeriveRandom (protocolKey , usage , e )
}
func (e Aes128CtsHmacSha256128 ) VerifyIntegrity (protocolKey , ct , pt []byte , usage uint32 ) bool {
return rfc8009 .VerifyIntegrity (protocolKey , ct , usage , e )
}
func (e Aes128CtsHmacSha256128 ) GetChecksumHash (protocolKey , data []byte , usage uint32 ) ([]byte , error ) {
return common .GetHash (data , protocolKey , common .GetUsageKc (usage ), e )
}
func (e Aes128CtsHmacSha256128 ) VerifyChecksum (protocolKey , data , chksum []byte , usage uint32 ) bool {
c , err := e .GetChecksumHash (protocolKey , data , usage )
if err != nil {
return false
}
return hmac .Equal (chksum , c )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .